【问题标题】:issue with Invalid UTF-8 start byte 0x8b (at char #2, byte #-1) Mule ESBInvalid UTF-8 start byte 0x8b (at char #2, byte #-1) Mule ESB 的问题
【发布时间】:2016-02-07 00:52:57
【问题描述】:

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

使用属性传递自定义安全标头信息

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

输出没有转换。输出中仅添加 DOM 到 XML 节点

任何人都可以为我提供这个问题的解决方案吗?

调用服务时出现以下异常。

异常堆栈是:

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

  2. 无效的 UTF-8 起始字节 0x8b(在 char #2,字节 #-1) (com.ctc.wstx.exc.WstxIOException) com.ctc.wstx.stax.WstxInputFactory:550 (null)

  3. 无法解析流。 (java.lang.RuntimeException) org.apache.cxf.staxutils.StaxUtils:1262 (null)

  4. 无效的 UTF-8 起始字节 0x8b(在字符 #2,字节 #-1)。

【问题讨论】:

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


    【解决方案1】:

    如果您请求的第三方 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>...
    

    在这种情况下,您需要使用某种拦截器来解码响应。

    【讨论】:

      【解决方案2】:

      要解决这个问题,您需要截取响应消息并对其进行解码,因为它是以 gzip 编码格式或其他压缩方式传入的。

      使用 CXF,可以通过扩展 AbstractPhaseInterceptor 类并覆盖 handleMessage 方法来创建自定义拦截器。

      然后你获取消息内容,解码并替换它在与 InputStream 相同的内容字段中。

      【讨论】:

        猜你喜欢
        • 2020-05-08
        • 1970-01-01
        • 2022-09-26
        • 2021-11-24
        • 2021-01-05
        • 1970-01-01
        • 1970-01-01
        • 2020-12-26
        • 1970-01-01
        相关资源
        最近更新 更多