gpt4 book ai didi

java.lang.NoClassDefFoundError : org/apache/chemistry/opencmis/client/api/SessionFactory 错误

转载 作者:塔克拉玛干 更新时间:2023-11-03 03:01:38 26 4
gpt4 key购买 nike

我使用 Alfresco Community 4.0。

我使用 cmis 在 Alfresco 中更新文档。

我已经在 Alfresco 中注册了一个文档,这是在保存方法后检索到的文档 ID:b08e8bce-1b88-489e-a357-1e6385f180a1

现在我想用其他内容来改变这个文件的内容。我使用了这个方法:

   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");
}
}
}



}

我使用这段代码调用这个方法:

  File file = new File("C:/test.pdf");
saveVersioning(file, "test.pdf", "admin","admin","b08e8bce-1b88-489e-a357-1e6385f180a1");

我在我的 java 项目中使用了这个 jar :

enter image description here

所有的 jar 都被添加到类路径中,但是当我测试我的应用程序时我得到这个错误:

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

我的 Alfresco Community 4 服务器包含这个 jar:

enter image description here

更新:

我发现使用 Alfresco Community 4.0.0
我应该使用 chemistry-opencmis-client 0.6.0alfresco-opencmis-extension-0.2.jar

另外,我应该在我的代码中使用这个 URL:http://localhost:9080/alfresco/cmisatom

我尝试使用此代码与 cmis 进行 session ,但没有成功:

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();

正如我所说,我用过这个 jar :

enter image description here

我从 chemistry-opencmis-client-impl-0.6.0-with-dependencies.tar.gz 下载了所有库,我还下载了这个 jar alfresco-opencmis-extension-0.2.jar

当我测试时我有同样的错误。

我在我的代码中添加了这一行:

parameter.put(SessionParameter.OBJECT_FACTORY_CLASS, "org.alfresco.cmis.client.impl.AlfrescoObjectFactoryImpl");

我认为问题与缺少 jar 版本有关,与我的 java 代码无关但我尝试更改此行但没有成功:

parameter.put(SessionParameter.ATOMPUB_URL, "http://localhost:9080/alfresco/cmisatom");

与:

parameter.put(SessionParameter.ATOMPUB_URL, "http://localhost:9080/alfresco/service/cmis");

最佳答案

我不确定这是否是正确的答案,但希望您能找到错误和一些提示。

  1. 首先下载latest CMIS Workbench或者下载0.6.0 version
  2. 使用工作台连接到您的 Alfresco 以检查是否一切正常,例如创建/读取/更新/删除
  3. 大量阅读有关 CMIS here 和许多其他内容的信息..
  4. 当您阅读本文时,您会希望自己使用的是比 4.0 更高版本的 Alfresco。如果您需要一个稳定的 CMIS 环境,那么您应该升级到 4.2.f 或更高版本。
  5. 放弃当前的 Java 项目并从下载页面下载 0.6.0 以及最新的依赖项
  6. 达到可以“真正”读取和保存文件的程度。
  7. 在您当前的设置中,不可能在 Alfresco 上保存文件并且不会收到 NoClassDefFoundError 并且在更新时收到错误。要么你总是在构建时遇到错误,要么你遇到另一个错误。
  8. 将 sessionFactory 和创建 session 代码移动到通用的 init() 或 setupConnection() 方法中,这样您就没有重复的代码,从而有更多出错的机会

关于java.lang.NoClassDefFoundError : org/apache/chemistry/opencmis/client/api/SessionFactory 错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34840086/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com