CmisInvalidArgumentException при загрузке частной рабочей копии из Alfresco через CMIS

Мое приложение с открытым исходным кодом загружает файлы 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?


person Nicolas Raoul    schedule 13.03.2013    source источник
comment
Можете ли вы не просто отфильтровать рабочие копии и выполнять свою работу только через мастер-узел?   -  person Gagravarr    schedule 13.03.2013
comment
@Gagravarr: Я думал об этом, но мне нужно все скачать, потому что эти файлы тоже могут понадобиться, я думаю. Это также любопытно: тот факт, что загрузка разрешена клиентской библиотекой, похоже, подразумевает, что загрузка таких файлов тоже должна работать.   -  person Nicolas Raoul    schedule 13.03.2013


Ответы (1)


Я не уверен в деталях, так как вы не вставляете сюда код, вызывающий исключение, и не указываете, какую версию химии вы используете. В любом случае, если я запущу следующий отличный код в рабочей среде CMIS v0.8.0 успешно печатает все содержимое файлов:

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.

person skuro    schedule 13.03.2013
comment
+1 Спасибо за расследование! Мой код на самом деле общедоступен, но я постараюсь сократить его до легко понятного фрагмента. Надеюсь, это поможет мне найти ошибку в моем коде. - person Nicolas Raoul; 14.03.2013