Java, API веб-службы Alfresco и Unicode NamedValues

Я использую 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"
} 

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

Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
2
0
3 446
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 3

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

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

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

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

Ответ принят как подходящий

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

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