1

的开源应用程序下载Alfresco文件夹的文件(通过CMIS)。
算法很简单:

  1. 使用Folder.getChildren()列出文件夹的内容
  2. 使用Document.getContentStream()下载每个

它工作正常,除了包含文件工作副本的文件夹,在这种情况下,Alfresco 说:

org.apache.chemistry.opencmis.commons.exceptions.CmisInvalidArgumentException: Stream id is invalid: workspace://SpacesStore/8b9a58ba-652f-4a18-8d26-aba06df98d25;pwc
    at org.alfresco.opencmis.CMISConnector.getContentStream(CMISConnector.java:1199)
    at org.alfresco.opencmis.AlfrescoCmisServiceImpl.getContentStream(AlfrescoCmisServiceImpl.java:1795)
    at sun.reflect.GeneratedMethodAccessor700.invoke(Unknown Source)

可能的;pwc意思是“私有工作副本”,这是 CMIS 协议中的一个特例。当 Alfresco Share 用户单击文档上的“脱机编辑”(也称为签出/签入)时,会创建工作副本。

我的算法有缺陷吗?还是可能是 Alfresco/OpenCMIS 中的错误?

4

1 回答 1

1

我不确定细节,因为您没有在此处粘贴触发异常的代码,并且您没有提及您正在使用的化学版本。无论如何,如果我在CMIS 工作台v0.8.0中运行以下 groovy 代码,它会成功打印所有文件内容:

def obj = session.getObjectByPath("/cc");
def children = obj.getChildren();
for (doc in children) {
  def s = doc.getContentStream();
  def i = s.getStream();
  println(i.text);
}

上面使用的cc文件夹是我在Alfresco CMIS 实例中创建的文件夹,我在其中放置了一个文件并签出以创建 PWC。我认为您的代码存在一些问题,因为上面的代码使用了相同的 API。

于 2013-03-13T15:48:08.550 回答