Получение исключения среды выполнения 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.

Другие вопросы по тегам