我创建了Mule ESB项目,该项目使用Web服务使用者调用第三方Web服务。
使用属性
传递自定义安全标头信息使用转换xslt将输入消息从源转换为目标。
输出没有变化。在输出中只添加了DOM到XML节点
任何人都可以就此问题向我提供解决方案吗?
我在调用服务时遇到以下异常。
异常堆栈是:
无效的UTF-8起始字节0x8b(字符#2,字节#-1)(java.io.CharConversionException)com.ctc.wstx.io.UTF8Reader:303(null)
< / LI>无效的UTF-8起始字节0x8b(字符#2,字节#-1)(com.ctc.wstx.exc.WstxIOException)com.ctc.wstx.stax.WstxInputFactory:550(null)< / p>
- 无法解析流。 (java.lang.RuntimeException)org.apache.cxf.staxutils.StaxUtils:1262(null)
- 无效的UTF-8起始字节0x8b(在字符#2,字节#-1)。
醇>
答案 0 :(得分:3)
如果您请求的第三方Web服务提供gzip编码的响应,则可能会发生此问题,即
HTTP/1.1 200 OK
Content-Type: text/xml;charset="utf-8"
Content-Encoding: gzip
Content-Length: 324
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
<soap:Body>...
在这种情况下,您需要使用某种解码响应的拦截器。
答案 1 :(得分:0)
要解决此问题,您需要拦截响应消息并对其进行解码,因为它以 gzip 编码格式或其他压缩方式传入。
使用CXF,可以通过扩展 AbstractPhaseInterceptor 类并覆盖 handleMessage 方法来创建自定义拦截器。
然后您将获得消息内容,将其解码并替换为与 InputStream 相同的内容字段。