我正在使用CXF生成到.NET Web服务客户端的接口。但是,有时,当我使用的客户端,我得到一个错误:配置CXF Web服务客户端以读取XML 1.1响应
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中是非法的。现在,我不想争论.NET服务应该是否在其响应中使用XML 1.1,当时WSDL明显是1.0(因为这是规范)。我只是想能够阅读他们发送的内容而不会出错。
查看CXF客户端中的依赖关系,他们使用WoodStox 4.1.1(来自其站点)明确支持XML 1.1。 我想知道的是,有什么方法可以配置我的CXF客户端(通过在wsdl2java时间或运行时绑定)来在接收响应时使用XML 1.1解析器?我能找到的所有人都说他们不应该使用1.1,或者让服务器端过滤这些字符。请注意,我无法过滤客户端的字符,因为我必须将数据发送回服务器,并且验证将失败。
作为替代方案,我想.NET服务可能会以某种方式说明他们在响应中使用XML 1.1,但我不控制该服务,因此找出问题会更麻烦为他们,然后建议他们修复它。另外,他们发送的数据是在数据库中的,所以它不是Web服务的错误,它只有XML 1.1的字符。