Ich arbeite mit Alfresco Community 4.0.java.lang.NoClassDefFoundError: org/apache/chemie/opencmis/client/api/SessionFactory
Ich habe cmis verwendet, um ein Dokument in Alfresco zu aktualisieren.
Ich habe mich registriert bereits ein Dokument in Alfresco und das ist das Dokument-ID, die nach dem Speichern Methode abgerufen wird: b08e8bce-1b88-489e-a357-1e6385f180a1
Jetzt habe ich den Inhalt dieses ändern möchten Datei nach anderem Inhalt. Ich habe diese Methode:
public void saveVersioning(File file, String filename, String userName, String pwd, String docId)
throws Exception {
SessionFactory factory = SessionFactoryImpl.newInstance();
Map<String, String> parameters = new HashMap<String, String>();
// User credentials.
parameters.put(SessionParameter.USER,userName);
parameters.put(SessionParameter.PASSWORD, pwd);
// Connection settings.
parameters.put(SessionParameter.BINDING_TYPE, BindingType.ATOMPUB.value());
parameters.put(SessionParameter.ATOMPUB_URL, "http://localhost:9080/alfresco/service/cmis"); // URL to your CMIS server.
// Create session.
// Alfresco only provides one repository.
Repository repository = factory.getRepositories(parameters).get(0);
Session session = repository.createSession();
System.out.println("Connected to repository:" + session.getRepositoryInfo().getName());
System.out.println("Repository id:"+session.getRepositoryInfo().getId());
// Get the contents of the file
Document doc = (Document) session.getObject(docId);
ContentStream contentStream = doc.getContentStream(); // returns null if the document has no content
if (contentStream != null) {
String mimetype = "text/plain; charset=UTF-8";
String content = "";
if (contentStream != null) {
filename = contentStream.getFileName();
mimetype = contentStream.getMimeType();
content = getContentAsString(contentStream);
System.out.println("file name "+filename);
System.out.println("minetype "+mimetype);
System.out.println("content "+content);
}
String updatedContents = content + "\nLine added in new version";
byte[] buf = updatedContents.getBytes("UTF-8");
ByteArrayInputStream input = new ByteArrayInputStream(buf);
contentStream = session.getObjectFactory().createContentStream(
filename, buf.length, mimetype, input);
System.out.println("Document version history");
{
List<Document> versions = doc.getAllVersions();
for (Document version : versions) {
System.out.println("\tname: " + version.getName());
System.out.println("\tversion label: " + version.getVersionLabel());
System.out.println("\tversion series id: " + version.getVersionSeriesId());
System.out.println("\tchecked out by: "
+ version.getVersionSeriesCheckedOutBy());
System.out.println("\tchecked out id: "
+ version.getVersionSeriesCheckedOutId());
System.out.println("\tmajor version: " + version.isMajorVersion());
System.out.println("\tlatest version: " + version.isLatestVersion());
System.out.println("\tlatest major version: " + version.isLatestMajorVersion());
System.out.println("\tcheckin comment: " + version.getCheckinComment());
System.out.println("\tcontent length: " + version.getContentStreamLength()
+ "\n");
}
}
}
}
Ich nenne diese Methode, um diesen Code verwenden:
File file = new File("C:/test.pdf");
saveVersioning(file, "test.pdf", "admin","admin","b08e8bce-1b88-489e-a357-1e6385f180a1");
ich dieses Glas in meinem Java-Projekt verwendet:
Alle Gläser hinzugefügt werden zum Klassenpfad, aber wenn ich meine Anwendung teste, erhalte ich diesen Fehler:
Caused by: java.lang.NoClassDefFoundError: org/apache/chemistry/opencmis/client/api/SessionFactory
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:606)
at org.springframework.aop.support.AopUtils.invokeJoinpointUsingReflection(AopUtils.java:307)
at org.springframework.aop.framework.ReflectiveMethodInvocation.invokeJoinpoint(ReflectiveMethodInvocation.java:183)
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:150)
at org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:107)
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:172)
at org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:202)
at com.sun.proxy.$Proxy24.sendTransfer(Unknown Source)
at
... 111 more
Caused by: java.lang.ClassNotFoundException: org.apache.chemistry.opencmis.client.api.SessionFactory
at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1387)
at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1233)
... 124 more
Mein Alfresco Community 4-Server enthält dieses Glas:
AKTUALISIERT:
Ich fand, dass mit Alfresco Community 4.0.0
sollte ich Chemie-opencmis-Client verwenden 0.6.0 und alfresco-opencmis-extension-0.2.jar
auch soll ich diese URL in meinem Code verwenden: http://localhost:9080/alfresco/cmisatom
ich ohne Erfolg versucht, die Sitzung mit CMIS mit diesem Code zu bekommen justen:
Map<String, String> parameter = new HashMap<String, String>();
// user credentials
parameter.put(SessionParameter.USER, "admin");
parameter.put(SessionParameter.PASSWORD, "admin");
// connection settings
parameter.put(SessionParameter.ATOMPUB_URL, "http://localhost:9080/alfresco/cmisatom");
parameter.put(SessionParameter.BINDING_TYPE, BindingType.ATOMPUB.value());
// create session
SessionFactory factory = SessionFactoryImpl.newInstance();
Session session = factory.getRepositories(parameter).get(0).createSession();
als ich sagte, ich dieses Glas verwendet:
ich heruntergeladen alle lib aus der Chemie-opencmis-client-impl-0.6.0-mit-dependencies.tar.gz und ich heruntergeladen auch dieses Glas im Freien-opencmis-extension-0.2.jar
wenn ich testen, habe ich den gleichen Fehler.
Ich habe diese Zeile in meinem Code:
parameter.put(SessionParameter.OBJECT_FACTORY_CLASS, "org.alfresco.cmis.client.impl.AlfrescoObjectFactoryImpl");
Ich denke, dass das Problem der fehlenden Version von Glas und nicht im Zusammenhang mit meinem Java-Code verwendet ist, aber ich versuche ohne Erfolg, diese Linie zu ändern:
parameter.put(SessionParameter.ATOMPUB_URL, "http://localhost:9080/alfresco/cmisatom");
mit:
parameter.put(SessionParameter.ATOMPUB_URL, "http://localhost:9080/alfresco/service/cmis");
Verwenden Sie Maven! Es wird "weniger komplizieren" Zeug :) XD –