2

我正在使用 Java 访问 Alfresco 内容服务器,通过它的 Web 服务 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"
} 

有谁知道如何解决这个问题?

4

3 回答 3

2

问题是alfresco-web-service-client.jar我使用的库来自 2.9B 发行版(我正在访问 2.9B 社区内容服务器)和依赖库bcprov-jdk15-136.jar并且xmlsec-1.4.0.jar不够用(从 2.1 版本开始仍然是旧的)。我应该已经使用了bcprov-jdk15-137.jarxmlsec-1.4.1.jar它们与 2.9B 分发版一起部署。

于 2008-10-13T09:18:36.700 回答
0

解决它的最简单方法是我认为转义 cyrillicString,例如使用Jakarta Commons 的escapeXml,或者如果还不够,则将整个字符串转换为 XML 实体。但从长远来看,Alfresco 应该是固定的,所以开票可能也是一个不错的选择。

于 2008-10-12T23:37:54.797 回答
0

如果没有看到您要保留的数据,很难判断这是否是 Alfresco 的错误。您使用的是哪个版本的 Alfresco?我在 Alfresco 的问题跟踪系统中发现了这个错误。具体来说,这是 2.1 社区,它似乎表明除了 UTF-8 之外的编码存在问题,因此它可能与您的问题有关,也可能与您的问题无关。

调试此问题可以做的一件事是使用 Alfresco 的嵌入式 Java(服务器端)API 编写一个小测试,尝试保留相同的数据,并查看是否仍然出现错误(如果您可能不会是 SAXParseException做)。如果您没有收到错误,您就知道 Alfresco 的 Web 服务 API 中可能存在错误(不幸的是,它的支持不如嵌入式 Java 或 REST API 好),您可能想添加评论我之前提到的错误报告,或者提交你自己的。如果嵌入式 API 仍然出现错误,那么问题仍然可能是您的代码或他们的代码。

希望这至少有点帮助!

于 2008-10-13T04:13:53.727 回答