Java,Alfresco Web服务API和Unicode NamedValues
-
07-07-2019 - |
题
我正在使用Java通过它的Web服务API访问Alfresco内容服务器,以便将一些内容导入其中。内容应该有一些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社区内容服务器),依赖库libc bvprov-jdk15-136.jar和xmlsec-1.4。 0.jar不够(从2.1 dist开始老了)。我应该使用与2.9B分发一起部署的bcprov-jdk15-137.jar和xmlsec-1.4.1.jar。
其他提示
解决它的最简单方法是我想逃避cyrillicString,例如使用 escapeXml ,或者如果它还不够,则将整个字符串转换为XML实体。但从长远来看,Alfresco应该是固定的,所以打开一张票可能也是一个不错的选择。
有点难以判断这是否是Alfresco的错误,而没有看到你试图坚持的数据。您使用的是哪个版本的Alfresco?我在Alfresco的问题跟踪系统中发现了这个错误。具体来说,这是2.1社区,似乎表明UTF-8以外的编码存在问题,所以它可能与你的问题有关,也可能没有。
调试此问题可以做的一件事是使用Alfresco的嵌入式Java(服务器端)API编写一个小测试,尝试保留相同的数据,并查看是否仍然出现错误(可能不会SAXParseException如果你这样做)。如果您没有收到错误,您就知道Alfresco的Web服务API中可能存在一个错误(遗憾的是,它的嵌入式Java或REST API支持得不是很好),您可能希望添加注释我之前提到的错误报告,或者提交自己的错误报告。如果您仍然遇到嵌入式API的错误,那么它仍然可能是您的代码或他们的问题。
希望至少有一点帮助!