无效的UTF-8启动字节0x8b(在字符#2,字节#-1)Mule ESB的问题

时间:2016-02-07 00:52:58

标签: utf-8 mule mule-studio mule-component

我创建了Mule ESB项目,该项目使用Web服务使用者调用第三方Web服务。

使用属性

传递自定义安全标头信息

使用转换xslt将输入消息从源转换为目标。

输出没有变化。在输出中只添加了DOM到XML节点

任何人都可以就此问题向我提供解决方案吗?

我在调用服务时遇到以下异常。

  

异常堆栈是:

     
      
  1. 无效的UTF-8起始字节0x8b(字符#2,字节#-1)(java.io.CharConversionException)com.ctc.wstx.io.UTF8Reader:303(null)

    < / LI>   
  2. 无效的UTF-8起始字节0x8b(字符#2,字节#-1)(com.ctc.wstx.exc.WstxIOException)com.ctc.wstx.stax.WstxInputFactory:550(null)< / p>

  3.   
  4. 无法解析流。 (java.lang.RuntimeException)org.apache.cxf.staxutils.StaxUtils:1262(null)
  5.   
  6. 无效的UTF-8起始字节0x8b(在字符#2,字节#-1)。
  7.   

2 个答案:

答案 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 相同的内容字段。