CMIS通过CMIS从Alfresco下载私人工作副本时的例外情况

CMIS通过CMIS从Alfresco下载私人工作副本时的例外情况,alfresco,cmis,opencmis,Alfresco,Cmis,Opencmis,My下载文件夹的文件(通过)。 算法非常简单: 列出文件夹的内容,包括 下载每个 它可以正常工作,但包含文件副本的文件夹除外,在这种情况下,Alfresco会说: org.apache.chemistry.opencmis.commons.exceptions.CmisInvalidArgumentException: Stream id is invalid: workspace://SpacesStore/8b9a58ba-652f-4a18-8d26-aba06df98d25;pwc

My下载文件夹的文件(通过)。
算法非常简单:

  • 列出文件夹的内容,包括
  • 下载每个
  • 它可以正常工作,但包含文件副本的文件夹除外,在这种情况下,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)
    
    ;普华永道
    可能意味着“私人工作副本”,这是CMIS协议中的一个特例。当Alfresco Share用户在文档(也称为签出/签入)上单击“脱机编辑”时,将创建工作副本


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

    我不确定细节,因为您没有在这里粘贴触发异常的代码,也没有提到您正在使用的化学版本。无论如何,如果我在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
    文件夹是我在其中创建的,我在其中放置了一个文件并将其签出以创建一个PWC。我假设您的代码存在一些问题,因为上面的代码使用的是非常相同的API。

    我不确定详细信息,因为您没有将触发异常的代码粘贴到这里,也没有提到您正在使用的化学版本。无论如何,如果我在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
    文件夹是我在其中创建的,我在其中放置了一个文件并将其签出以创建一个PWC。我认为您的代码存在一些问题,因为上面的代码使用的是非常相同的API。

    您能不能不过滤工作副本,而只通过主节点进行工作?@Gagravarr:我想过这样做,但我需要下载所有内容,因为我相信这些文件可能也需要。这也是出于好奇:客户端库允许下载的事实似乎意味着下载这类文件也应该有效。你能不能不过滤工作副本,只通过主节点进行工作?@Gagravarr:我考虑过这样做,但我需要下载所有东西,因为我相信这些文件可能也需要。这也是出于好奇:客户端库允许下载的事实似乎意味着下载此类文件也应该有效。+1感谢您的调查!我的代码实际上是公开的,但我将尝试将其缩短为一个可快速获取的代码段。希望这样做能帮助我找到代码中的bug。+1感谢您的调查!我的代码实际上是公开的,但我将尝试将其缩短为一个可快速获取的代码段。希望这样做能帮助我发现代码中的错误。