Java, API веб-службы Alfresco и Unicode NamedValues - PullRequest
2 голосов
/ 10 октября 2008

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

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

Ответы [ 3 ]

2 голосов
/ 13 октября 2008

Проблема заключалась в том, что библиотека 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.

0 голосов
/ 13 октября 2008

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

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

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

0 голосов
/ 13 октября 2008

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

...