我正在使用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的错误,那么它仍然可能是您的代码或他们的问题。

希望至少有一点帮助!

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top