Java, API веб-служб Alfresco и именованные значения Unicode

StackOverflow https://stackoverflow.com/questions/190542

Вопрос

Я использую Java для доступа к серверу контента Alfresco через API веб-сервиса для импорта в него некоторого контента.Содержимое должно иметь некоторые свойства NamedValue, установленные в строку UTF-8 (кириллица).Я продолжаю получать исключение парсера Sax:

org.xml.sax.SAXParseException: An invalid XML character (Unicode: 0x1b) was found in the element content of the document.

Код выглядит примерно так:

NamedValue[] namedValueProperties = new NamedValue[2];

namedValueProperties[0] = Utils.createNamedValue(Constants.PROP_NAME, name );
namedValueProperties[1] = Utils.createNamedValue("{my.custom.model}myProperty", cyrillicString);

CMLCreate create = new CMLCreate("1", parentReference, null, null, null, documentType, namedValueProperties);
CML cml = new CML();
cml.setCreate(new CMLCreate[]{create});
UpdateResult[] results = null;

try {
   results = WebServiceFactory.getRepositoryService().update(cml);
} catch (...)
    Here comes the "org.xml.sax.SAXParseException"
} 

кто-нибудь знает, как решить эту проблему?

Это было полезно?

Решение

Проблема заключалась в том, что использованная мной библиотека alfresco-web-service-client.jar была из дистрибутива 2.9B (я работаю с сервером контента сообщества 2.9B) и библиотек зависимостей bcprov-jdk15-136.jar и xmlsec-1.4. 0.jar не были адекватными (остались старые от 2.1 dist). Я должен был использовать bcprov-jdk15-137.jar и xmlsec-1.4.1.jar, которые развернуты вместе с дистрибутивом 2.9B.

Другие советы

Самый простой способ обойти это, я думаю, избежать экранирования cyrillicString, например, с помощью escapeXml из Jakarta Commons или путем преобразования всей строки в объекты XML, если этого недостаточно. Но в долгосрочной перспективе Alfresco должен быть исправлен, так что открытие билета также может быть хорошим выбором.

Немного сложно сказать, является ли это ошибкой Alfresco, не видя данных, которые вы пытаетесь сохранить.Какую версию Alfresco вы используете?Я нашел эту ошибку в системе отслеживания ошибок Alfresco.В частности, это касается сообщества 2.1, и, похоже, есть проблемы с кодировкой, отличной от UTF-8, поэтому это может быть связано, а может и не быть связано с вашей проблемой.

Чтобы отладить эту проблему, вы можете написать небольшой тест с использованием встроенного API Alfresco Java (серверный), попытавшись сохранить те же данные, и посмотреть, получаете ли вы по-прежнему ошибку (вероятно, это не будет SAXParseException, если вы делать).Если вы не получили сообщение об ошибке, вы знаете, что, вероятно, есть ошибка в API веб-сервиса Alfresco (который, к сожалению, не так хорошо поддерживается, как их встроенные API Java или REST), и вы можете добавить комментарий к отчет об ошибке, о котором я упоминал ранее, или создайте свой собственный.Если вы по-прежнему получаете ошибку во встроенном API, проблема может быть либо в вашем коде, либо в их коде.

Надеюсь, это было хоть немного полезно!

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top