繁体   English   中英

配置CXF Web服务客户端以读取XML 1.1响应

[英]Configuring CXF web service client to read XML 1.1 responses

我正在使用CXF生成到.NET Web服务客户端的接口。 但是,有时当我使用客户端时,会出现错误:

WARNING: Interceptor for {http://xxxxxx.com}ChangeRequestWebService#{http://xxxxxx.com/ChangeRequestWebService}GetChangeRequestById has thrown exception, unwinding now
[com.ctc.wstx.exc.WstxLazyException] com.ctc.wstx.exc.WstxParsingException: Illegal character entity: expansion character (code 0x1b
 at [row,col {unknown-source}]: [76,44]

从其他许多在线资源来看,这显然是因为Web服务正在XML 1.1中编码其响应,而我的CXF客户端正在读取期望XML 1.0的响应,而特殊字符0x1b在XML 1.0中是非法的。 现在,我不想争论当WSDL明显为1.0时,.NET服务是否在响应中使用XML 1.1(因为这是规范)。 我只希望能够阅读它们发送的内容而不会出错。

查看CXF客户端中的依赖关系,他们使用WoodStox 4.1.1(从其站点)清楚地支持XML 1.1。 我想知道的是,有什么方法可以配置我的CXF客户端(通过在wsdl2java时或运行时绑定)在接收响应时使用XML 1.1解析器? 我只能找到有人说他们不应该使用1.1,或者让服务器端过滤这些字符。 请注意,我无法过滤客户端字符,因为我必须将数据发送回服务器,并且验证将失败。

作为替代方案,我认为.NET服务可以某种方式说明他们在响应中使用XML 1.1,但是我不控制该服务,因此为他们找出问题然后再麻烦一些。建议他们修复它。 另外,他们发送的数据在数据库中,因此Web服务中只有XML 1.1字符不是Web服务的错。

看来答案是...无法预先配置CXF以默认期望XML 1.1。

本质上,如果XML传入时没有版本标签:

<?xml version="1.1">

那不是XML 1.1。 这就是这里的问题。 如果xml标头存在并指定XML 1.1,则CXF中的解析器会将其解析为XML 1.1。 .NET Web服务(默认情况下)不发送任何 XML标头标记,因此CXF中的解析器将其(正确)解析为XML 1.0。

也就是说,可能有一种方法可以在CXF解析输入流之前捕获输入流,并“插入”一个指定1.1的XML版本头,这将为我“解决”问题。 如果我找到使它起作用的方法,我将其发布。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM