CMIS

cancel
Showing results for 
Search instead for 
Did you mean: 
pablo_zapico
Member II

CMIS

Buenas me gustaria saber si habeis tenido ya alguna experiencia con CMIS…

Estoy mirando para utilizar LifeRay con Alfresco o Joomla con Alfresco, usando CMIS, pero en LifeRay he leido que hasta la version 5.3 de momento nada.
3 Replies
cesarista
Customer

Re: CMIS

Hola Pablo:

Yo hace tiempo hice la integración de Joomla 1.5 con Alfresco Labs 3 y escribí un pequeño artículo en:

http://www.zylk.net/web/guest/web-2-0/blog/-/blogs/alfresco-cmis-con-joomla

La integración es muy sencilla a través de un componente de Joomla para Alfresco, que para un perfil dado (admin/admin u el usuario que quieras) te permite navegar por la estructura de espacios de Alfresco, visualizar metadatos y hacer previsualizaciones estilo Alfresco Share.

Por otro lado, si quieres hacer una integración a medida con Joomla, puedes hacerte un componente o modulo de Joomla que tire de la API PHP que hay para Alfresco, o tirar de Webscripts o REST desde Joomla. En la wiki de Alfresco, hay unos tutoriales muy sencillos para hacer consultas, altas y modificaciones de documentos via PHP API.

http://wiki.alfresco.com/wiki/PHP_SDK

Te dejo otro artículo reciente para Liferay:

http://www.zylk.net/web/guest/web-2-0/blog/-/blogs/integrando-alfresco-en-liferay-a-traves-de-cmis

Espero que te sirva.

Un saludo.

–C.
lrodrig9
Member II

Re: CMIS

Hola a todos.

Yo tengo hecho una pequeña prueba con Apache Abdera. La idea final es hacerme un cliente de manera que pueda integrarme con Alfresco desde otra aplicación. Esta aplicación gestiona los datos de unas entidades y éstas llevan a su vez  asociados ciertos documentos.

import java.io.IOException;
import java.io.InputStream;
import java.net.URL;
import java.net.URLConnection;
import org.apache.abdera.Abdera;
import org.apache.abdera.model.Document;
import org.apache.abdera.model.Element;
import org.apache.abdera.model.Entry;
import org.apache.abdera.model.ExtensibleElement;
import org.apache.abdera.model.Feed;
import org.apache.abdera.parser.ParseException;
import org.apache.abdera.parser.Parser;
import org.apache.abdera.protocol.client.AbderaClient;
import org.apache.abdera.protocol.client.ClientResponse;
import org.apache.abdera.protocol.client.RequestOptions;

import com.sun.org.apache.xerces.internal.impl.dv.util.Base64;

public class ClienteAbderaCMIS {

   /**
    * @param args
    * @throws IOException
    * @throws ParseException
    */
   
    public static String NS_CMIS_RESTATOM = "http://docs.oasis-open.org/ns/cmis/restatom/200908/";
    public static String NS_CMIS_CORE = "http://docs.oasis-open.org/ns/cmis/core/200908/";
    public static String CMISRA = "cmisra";
    public static String CMIS = "cmis";
   
   public static void main(String[] args) throws ParseException, IOException {
      
      //Obtenemos un parser
      Abdera abdera = new Abdera();
      Parser parser = abdera.getParser();
      
      //URL de la carpeta (espacio) al que nos conectaremos
      URL url = new URL("http://localhost:8080/alfresco/s/cmis/p/User%20Homes/Cecilia%20Albo/children");
      //Usuario y password con permisos sobre la carpeta
      String credenciales = "admin" + ":" + "admin";
      //Abrimos la conexión
      URLConnection uconn = url.openConnection();
      //Metemos las credenciales (usuario + password) en la cabecera de la petición (cuidado con el espacio en blanco)
      uconn.setRequestProperty("Authorization", "Basic" + " " + Base64.encode(credenciales.getBytes()));
      //Obtenemos la respuesta del servidor
      InputStream content = uconn.getInputStream();
      //Parseamos la respuesta
      Document<Feed> doc = parser.parse(content);
      //Obtenemos el elemento raíz (nombre de la carpeta)
      Feed feed = doc.getRoot();
      System.out.println(feed.getTitle());
      //Obtenemos los elementos hijos del elemento raíz
      for(Entry entry : feed.getEntries()){
         System.out.println("\t" + entry.getTitle());
      }
      
      //Instanciamos una nueva entrada (contenido)
      Entry entry = abdera.newEntry();
      entry.setTitle("TestAbderaFolder");
      entry.setSummary("Test Abdera Folder");
      /*
       *Creamos el documento
       *
       *
       *<?xml version="1.0" encoding="utf-8"?>
            <entry
                  xmlns="http://www.w3.org/2005/Atom"
                  xmlns:cmisra="http://docs.oasis-open.org/ns/cmis/restatom/200908/"
                  xmlns:cmis="http://docs.oasis-open.org/ns/cmis/core/200908/">
                  
                     <title>Someco</title>
                        <cmisra:object>
                           <cmis:properties>
                              <cmis:propertyId propertyDefinitionId="cmis:objectTypeId">
                                 <cmis:value>cmis:folder</cmis:value>
                              </cmis:propertyId>
                           </cmis:properties>
                        </cmisra:object>
            </entry>
       */
      ExtensibleElement objElement = entry.addExtension(NS_CMIS_RESTATOM, "object", CMISRA);
      ExtensibleElement propsElement = objElement.addExtension(NS_CMIS_CORE, "properties", CMIS);
      ExtensibleElement stringElement = propsElement.addExtension(NS_CMIS_CORE, "propertyId", CMIS);
      stringElement.setAttributeValue("propertyDefinitionId","cmis:objectTypeId");
      Element valueElement = stringElement.addExtension(NS_CMIS_CORE, "value", CMIS);
      valueElement.setText("cmis:folder");
      //Intanciamos un cliente Abdera
      AbderaClient client = new AbderaClient();
      RequestOptions options = new RequestOptions();
      options.setHeader("Authorization", "Basic" + " " + Base64.encode(credenciales.getBytes()));
      ClientResponse response = null;
      response = client.post("http://localhost:8080/alfresco/s/cmis/p/User%20Homes/Cecilia%20Albo/Documentos%20Personales/children", entry, options);
   }

}

Como podéis observar es una prueba muy sencilla: obtener los contenidos de un espacio (carpeta), mostrar su título y crear un nuevo espacio (carpeta) hijo…

Lo que me gustaría ahora es crear el mismo cliente pero con las librerías de Apache Chemistry, ¿alguien lo ha intentado?. El problema que me estoy encontrando es que no encuentro las clases ContentManager y APPContentManager, qué por lo que veo son las que me permiten conectarme y tener acceso a los repositorios.

Muchas gracias y un saludo,

Luis
lrodrig9
Member II

Re: CMIS

Hola a todos!

Gracias a Florent Guillaume de Nuxeo conseguí hacerme con las librerías adecuadas. Ahora tengo un pequeño cliente que obtiene información del repositorio (Alfresco), pero en cuanto intento crear una carpeta (espacio) obtengo el siguiente error:

org.apache.chemistry.CMISRuntimeException: Remote server returned error code: 405

Y en el log del servidor (Alfresco-Tomcat-Bundle):

14:51:44,043 User:admin ERROR [web.scripts.AbstractRuntime] Exception from executeScript - redirecting to status template error: 02100006 Script url /cmis/s/workspace:SpacesStore/i/95e0fc58-7a98-41e6-9c83-2a765253a185 does not support the method POST
org.alfresco.web.scripts.WebScriptException: 02100006 Script url /cmis/s/workspace:SpacesStore/i/95e0fc58-7a98-41e6-9c83-2a765253a185 does not support the method POST

Mi código es el siguiente:

package es.uniovi.pfc.chemistry.test;

import java.io.Serializable;
import java.util.Collection;
import java.util.HashMap;
import java.util.Map;

import org.apache.chemistry.Folder;
import org.apache.chemistry.NameConstraintViolationException;
import org.apache.chemistry.Repository;
import org.apache.chemistry.RepositoryInfo;
import org.apache.chemistry.Type;
import org.apache.chemistry.UpdateConflictException;
import org.apache.chemistry.atompub.client.APPConnection;
import org.apache.chemistry.atompub.client.APPRepositoryService;

public class TestChemistry {

   /**
    * @param args
    */

   public static final String PARAM_USERNAME = "username";
   public static final String PARAM_PASSWORD = "password";

   public static void main(String[] args) throws NameConstraintViolationException, UpdateConflictException {

      String username = "admin";
      String password = "admin";

      Map<String, Serializable> params = new HashMap<String, Serializable>();
      params.put(PARAM_USERNAME, username);
      params.put(PARAM_PASSWORD, password);
      Repository repository = new APPRepositoryService("http://localhost:8080/alfresco/s/cmis", params)
            .getDefaultRepository();
      RepositoryInfo repositoryInfo = repository.getInfo();
      System.out.println(repositoryInfo.getName());
      System.out.println(repositoryInfo.getProductName());
      System.out.println(repositoryInfo.getVendorName());
      System.out.println(repositoryInfo.getProductVersion());

      Collection<Type> types = repository.getTypes();
      for (Type type : types) {
         System.out.println("Type id:" + type.getId());
      }
      
      APPConnection connection = (APPConnection) repository.getConnection(params);
      Folder folder = connection.getRootFolder();
      System.out.println("Root folder id: " + folder.getId());
      System.out.println("Root folder nombre" + folder.getName());
   
      Folder childrenFolder = folder.newFolder("cmis:folder");
      childrenFolder.setName("PruebaChemistry");
      childrenFolder.save();
      
   }

}

¿Alguna idea?

Muchas gracias y un saludo,

Luis