Получение исключения среды выполнения CMIS при получении документа в Alfresco
Я пытаюсь получить поток содержимого документа, представленного в Alfresco. Чтобы добиться того же, я сначала создал сеанс cmis следующим образом (я использую CMIS 1.1)
SessionFactory factory = SessionFactoryImpl.newInstance();
Map<String, String> parameter = new HashMap<String, String>();
parameter.put(SessionParameter.ATOMPUB_URL, getAtomPublicURL(getRequestFactory()));
parameter.put(SessionParameter.BINDING_TYPE, BindingType.ATOMPUB.value());
parameter.put(SessionParameter.AUTH_HTTP_BASIC, "true");
parameter.put(SessionParameter.USER, mUserName);
parameter.put(SessionParameter.PASSWORD, mPassword);
List<Repository> repositories = factory.getRepositories(parameter);
cmisSession = repositories.get(0).createSession();
После создания сеанса я попробовал два разных способа доступа к документу.
Способ 1:(с учетом nodeRef документа в Alfresco)
String objectId = "f273be7c-9b70-44cf-880f-5945a7857b5d";
CmisObject cmisObject = cmisSession.getObject(objectId);
Способ 2:(учитывая путь к документу)
String objectPath = "/Sites/testSite/documentLibrary/testFolder1/testFolder2/testDocument.pdf";
CmisObject cmisObject = cmisSession.getObjectByPath(objectPath);
Примечание: testSite - это имя сайта, на котором присутствует мой документ.
К сожалению оба метода выдают мне исключение времени выполнения CMIS
(org.apache.chemistry.opencmis.commons.exceptions.CmisRuntimeException: внутренняя ошибка сервера).
ОБНОВЛЕНИЕ: Эй, Джефф, я сделал вызов API REST для добавления тегов после создания документа. Несмотря на то, что теги добавлены, я чувствую, что это создает некоторую блокировку документа. Вот почему я не смог получить объект Document от Alfresco(при попытке получить объект документа выдает внутреннюю ошибку сервера, как я уже упоминал в вопросе). Когда я удалил логику добавления тегов, я могу без проблем извлечь объект Document из Alfresco. Ниже приведен мой метод добавления тегов в документ,
public void setTags(String documentId,ArrayList<String> Tags) throws Exception {
final String methodName = "setTags";
try{
GenericUrl containersUrl = new GenericUrl(getAlfrescoAPIUrl() +
getHomeNetwork() +
mNODES_URL +
documentId +
"/tags");
mLog.debug(containersUrl);
String tagName = "";
String appendTags = "";
for(int index=0;index<Tags.size();index++){
tagName = (String) Tags.get(index);
appendTags = appendTags+"{\"tag\": \""+tagName+"\"}";
if(index < Tags.size()-1){
appendTags = appendTags+",";
}
}
String finalTags = "["+appendTags+"]";
HttpContent body = new ByteArrayContent("application/json", finalTags.getBytes());
HttpRequest request = getRequestFactory().buildPostRequest(containersUrl, body);
try{
request.execute();
}
catch(IOException ioException){
mLog.error("Exception in :: "+mClassName+":: "+methodName+":: "+ioException.getMessage());
throw ioException;
}
}
catch(Exception exception){
mLog.error("Exception in :: "+mClassName+":: "+methodName+":: "+exception.getMessage());
throw exception;
}
}
1 ответ
Похоже, вы используете пользовательский метод для получения URL AtomPub. Можете ли вы вывести это, чтобы убедиться, что это выглядит следующим образом: http://alfresco.local:8080/alfresco/api/-default-/public/cmis/versions/1.1/atom
Кроме того, вы можете сбросить значение cmisSession.getRepositoryInfo(). GetProductName() и cmisSession.getRepositoryInfo(). GetProductVersion() только для того, чтобы убедиться, что все работает нормально. Мои шоу:
Alfresco Community
5.2.0 (re21f2be5-b22)
Предполагая, что оба эти этапа отладки сработали, оба ваших метода работают так, как показано на моей машине.
Небольшой недостаток заключается в том, что значение, установленное для objectId, не является идентификатором объекта CMIS, но является частью ссылки узла Alfresco (полный nodeRef включает в себя "workspace://SpacesStore/"). Alfresco будет обрабатывать то, что вы передаете, предполагая, что этот узел действительно существует.
Проверьте журнал на свежем воздухе, чтобы увидеть, что говорит исключение. Журнал находится в /opt/alfresco/tomcat/logs/catalina.out.