Recherche
Nuxeo propose(ra) une interface CMIS a partir de la version 5.3.1
En attendant la disponibilité de cette version une pré-version Une version de démo est disponible via http://cmis.demo.nuxeo.org/nuxeo/![]()
Le gros avantage de CMIS est que c'est un standard et devrait permettre le développement de nombreuses solution interopérables.
A ce jour il existe peu d'implémentation JAVA de CMIS. Nuxeo est fortement impliqué dans le projet apache Chemistry qui proposent des implémentations client et serveur.
| Remarque |
|---|
Chemistry est maintenant un projet Apache qui contient différentes implémentations (java, pythin, etc). L'implémentation java est Open CMIS. Elle diffère de l'implémentation originelle de nuxeo. Mais nuxeo a rejoint l'initiative Open CMIS (Cf. http://blogs.nuxeo.com/fguillaume/2010/04/apache-chemistry-meeting-wrap-up.html). Le code donné ici correspond à l'implémentation originelle de Chemistry par nuxeo. Elle n'a donc pas vocation à évoluer. Cf. TODO pour un exmple avec Open CMIS |
Une version snapshot de Chemistry est disponible sur le repository maven de ESUP. Si vous utilisez le pom.xml ci-dessous vous n'avez rien d'autre à faire.
Pour construire ce le projet Chemistry à partir des sources et mettre les jar dans votre dépôt maven local il faut faire :
| Bloc de code | ||||
|---|---|---|---|---|
| ||||
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>fr.univrennes1.testCMIS</groupId>
<artifactId>testCMIS</artifactId>
<packaging>jar</packaging>
<version>1.0-SNAPSHOT</version>
<name>testCMIS</name>
<url>http://maven.apache.org</url>
<repositories>
<repository>
<id>esup-snapshots</id>
<url>https://mvn.esup-portail.org/content/repositories/snapshots</url>
<snapshots>
<enabled>true</enabled>
</snapshots>
<releases>
<enabled>false</enabled>
</releases>
</repository>
<repository>
<id>esup</id>
<url>https://mvn.esup-portail.org/content/repositories/releases</url>
<snapshots>
<enabled>false</enabled>
</snapshots>
<releases>
<enabled>true</enabled>
</releases>
</repository>
</repositories>
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>3.8.1</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.apache.chemistry</groupId>
<artifactId>chemistry-atompub-client</artifactId>
<version>0.5-SNAPSHOT</version>
</dependency>
</dependencies>
</project>
|
| Bloc de code | ||||
|---|---|---|---|---|
| ||||
package fr.univrennes1.testCMIS; import java.io.FileInputStream; import java.io.IOException; import java.io.Serializable; import java.util.HashMap; import java.util.Map; import org.apache.chemistry.CMISObject; import org.apache.chemistry.Connection; import org.apache.chemistry.ContentStream; import org.apache.chemistry.Document; import org.apache.chemistry.Folder; import org.apache.chemistry.NameConstraintViolationException; import org.apache.chemistry.Repository; import org.apache.chemistry.RepositoryInfo; import org.apache.chemistry.UpdateConflictException; import org.apache.chemistry.atompub.client.APPRepositoryService; import org.apache.chemistry.impl.simple.SimpleContentStream; public class Cmis { public static void main( String[] args ) throws NameConstraintViolationException, UpdateConflictException, IOException { //************* diverses initialisations ************* String url = "http://cmis.demo.nuxeo.org/nuxeo/site/cmis/repository"; String username = "Administrator"; String password = "Administrator"; String path = "/default-domain/workspaces/demo-workspace/testrb"; String DOSSIER1 = "dossier1"; String FICHIER1 = "fichier1"; //repository service Map<String, Serializable> params = new HashMap<String, Serializable>(); params.put(Repository.PARAM_USERNAME, username); params.put(Repository.PARAM_PASSWORD, password); APPRepositoryService appRepositoryService = new APPRepositoryService(url, params); //repository Repository repository = appRepositoryService.getDefaultRepository(); RepositoryInfo info = repository.getInfo(); System.out.println("Description : " + info.getDescription()); System.out.println(info.getVendorName() + ", " + info.getProductName() + ", " + info.getProductVersion()); //connexion Connection connection = repository.getConnection(params); //racine de travail Folder root = connection.getFolder(path); System.out.println("folder = " + root.getName() + ", date création =" + root.getCreationDate()); //************* Suppression de Dossier1 ************* Folder dossier1 = connection.getFolder(path + "/" + DOSSIER1); if (dossier1 != null) { for (CMISObject object : dossier1.getChildren()) { object.delete(); } dossier1.delete(); System.out.println("Dossier supprimé"); } //************* création du dossier "Dossier1" ************* Folder newFolder = root.newFolder("cmis:folder"); newFolder.setName(DOSSIER1); newFolder.save(); System.out.println("Dossier créé"); //************* création du fichier "Fichier1" ************* Document newDocument = newFolder.newDocument("cmis:document"); newDocument.setName(FICHIER1); newDocument.save(); System.out.println("Fichier créé"); //************* upload du contenu ************* String fic = "metro.pdf"; FileInputStream in = new FileInputStream("/A_GARDER_UN_PEU/nuxeo-dev/workspace/testCMIS/src/main/resources/" + fic); ContentStream stream = new SimpleContentStream(in, "application/pdf", fic); newDocument.setContentStream(stream); newDocument.save(); System.out.println("Fichier chargé"); connection.close(); } } |
Fonctionne bien, chemistry masque bien la complexité de CMIS, le code est clair. Vivement que nuxeo 5.3.1 sorte !