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

Web services 配置CXF web服务客户端以读取XML 1.1响应,web-services,client,cxf,xml-1.1,Web Services,Client,Cxf,Xml 1.1,我正在使用CXF生成到.NETWeb服务客户端的接口。但是,有时在使用客户端时,会出现错误: WARNING: Interceptor for {http://xxxxxx.com}ChangeRequestWebService#{http://xxxxxx.com/ChangeRequestWebService}GetChangeRequestById has thrown exception, unwinding now [com.ctc.wstx.exc.WstxLazyException

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

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]
从许多其他在线来源可以明显看出,这是因为webservice在XML 1.1中对其响应进行编码,而我的CXF客户端正在读取该响应,该响应预期为XML 1.0,而特殊字符0x1b在XML 1.0中是非法的。现在,我不想争论.NET服务是否应该在其响应中使用XML1.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字符。

答案似乎是。。。没有办法预先配置CXF,使其默认使用XML 1.1

本质上,如果XML没有版本标记:

<?xml version="1.1">

那么它就不是XML1.1了。这就是问题所在。如果xml头存在并指定了xml 1.1,那么CXF中的解析器将把它解析为xml 1.1。NET web服务(默认情况下)不发送任何XML头标记,因此CXF中的解析器(正确地)将其解析为XML 1.0

也就是说,可能有一种方法可以在输入流被CXF解析之前捕获它,并“插入”指定1.1的XML版本头,这将“修复”我的问题。如果我想办法让它工作,我会把它贴出来