2013-03-13 31 views
1

我的open-source app下载Alfresco文件夹的文件(通过CMIS)。
算法很简单:文件夹的CmisInvalidArgumentException当通过CMIS从Alfresco下载私人工作拷贝时

  1. 列表内容与Folder.getChildren()
  2. 下载每个Document.getContentStream()

它工作正常,除了包含文件的Working Copy文件夹,在这种情况下, 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可能是m eans“私人工作拷贝”,这是CMIS协议中的特例。当Alfresco Share用户在文档上单击“脱机编辑”(也称为签出/签入)时,将创建工作副本。

我的算法是否有缺陷?或者它可能是Alfresco/OpenCMIS中的一个错误?

+0

你不能只是过滤掉工作副本,只能通过主节点完成工作吗? – Gagravarr 2013-03-13 11:10:04

+0

@Gagravarr:我想过这样做,但我需要下载所有内容,因为我相信这些文件可能也需要。这也是由于好奇:下载被客户端库允许的事实似乎意味着下载这些类型的文件也应该起作用。 – 2013-03-13 14:40:08

回答

1

我不确定细节,因为您不会在此粘贴触发异常的代码,也不会提及您正在使用的化学版本。无论如何,如果我的CMIS workbench 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 instance,这里我把一个文件,并检查它创建创建一个PWC。我认为你的代码存在一些问题,因为上面的代码使用了相同的API。

+0

+1感谢您的调查!我的代码实际上是公开的,但我会尽量缩短它成​​为一个快速掌握的片段。希望这样做可以帮助我在代码中找到一个错误。 – 2013-03-14 09:08:26