【问题标题】:How to Solve Message payload is of type: BufferInputStream Exception in Mule如何解决消息有效负载的类型:Mule 中的 BufferInputStream 异常
【发布时间】:2015-04-27 03:16:19
【问题描述】:

我已经在转换为字节数组,但我经常收到这个错误:

ERROR 2015-02-25 11:12:30,517 [[ESR].HTTP_Request_Listener.worker.01] org.mule.exception.DefaultMessagingExceptionStrategy: 
********************************************************************************
Message               : Response code 400 mapped as failure. Message payload is of type: BufferInputStream
Code                  : MULE_ERROR--2
--------------------------------------------------------------------------------
Exception stack is:
1. Response code 400 mapped as failure. Message payload is of type: BufferInputStream (org.mule.module.http.internal.request.ResponseValidatorException)
  org.mule.module.http.internal.request.SuccessStatusCodeValidator:37 (http://www.mulesoft.org/docs/site/current3/apidocs/org/mule/module/http/internal/request/ResponseValidatorException.html)
--------------------------------------------------------------------------------
Root Exception stack trace:
org.mule.module.http.internal.request.ResponseValidatorException: Response code 400 mapped as failure. Message payload is of type: BufferInputStream
    at org.mule.module.http.internal.request.SuccessStatusCodeValidator.validate(SuccessStatusCodeValidator.java:37)
    at org.mule.module.http.internal.request.DefaultHttpRequester.innerProcess(DefaultHttpRequester.java:202)
    at org.mule.module.http.internal.request.DefaultHttpRequester.process(DefaultHttpRequester.java:166)
    + 3 more (set debug level logging or '-Dmule.verbose.exceptions=true' for everything)
********************************************************************************

这是我的流程:

<sub-flow name="requestBeanCreate">
    <object-to-byte-array-transformer />
    <set-payload value="#[app.registry.messageBean.createServiceRequest(message.inboundProperties['http.uri.params']['name'],payload)]"/>
</sub-flow>

<flow name = "RequestsEntryFlow" >
    <http:listener allowedMethods="POST"  parseRequest="false"  config-ref="HTTP_Request_Listener" path="/{name}" doc:name="HTTP Entry Flow" />
    <flow-ref name="requestBeanCreate" />
    <choice doc:name="Choice">
        <when expression="#[app.registry.messageBean.isEMCRequired(payload)]">
            <jms:outbound-endpoint connector-ref="jms-connector" ref="EMCRequiredRequestsQueue" />
        </when>
        <otherwise>             
             <flow-ref name="req" />
        </otherwise>
    </choice>
</flow>

<http:request-config parseResponse="false" name="HTTP_Request_Configuration"   />

<sub-flow name = "req">    
    <set-variable variableName="id" value="#[payload]" doc:name="Variable" />
    <set-variable variableName="destination" value="#[app.registry.routerBean.getDestination(app.registry.messageBean.getReceiverID(payload))]"  doc:name="Variable" />
    <set-payload value="#[app.registry.messageBean.sendRequestToDestination(payload)]" />              
    <processor-chain>
    <http:request  parseResponse="false" config-ref="HTTP_Request_Configuration" host="#[flowVars.destination]" port="80" path="/" method="POST" />
        <object-to-byte-array-transformer />
        <expression-component>
            app.registry.messageBean.sendResponseToSender(flowVars.id);
            app.registry.messageBean.messageProcessedSuccessfully(flowVars.id);
        </expression-component>
    </processor-chain>
</sub-flow>

【问题讨论】:

    标签: java mule transform esb


    【解决方案1】:

    谢谢马达吉。我有同样的问题,你的回答帮助我解决了这个问题。此外,除此之外,还有一些与 Twitter 访问相关的问题,必须同时进行调查,以确保您有一个可行的解决方案。尤其是在将权限更改为 DT(直接推文)并重新生成访问密钥并在 Twitter 连接器配置中重新输入时。

    【讨论】:

      【解决方案2】:

      我在使用 twitter mulesoft 适配器发布状态更新时也遇到了这个错误,但经过一些谷歌搜索和试用后,我发现错误不在于适配器,而在于传递给适配器的有效负载字符串。

      在 SetPayload 的值字段中尝试以下表达式:#['RT @' + message.payload[0].user.screenName + ':' + message.payload[0].text]

      然后在 twitter 适配器中尝试这些值:

      操作:更新状态 状态:#[有效负载]

      如果仍然出现错误,可能是 screenName 的最后一条推文“message.payload[0].text”中有一些特殊字符,或者尝试在没有更新状态适配器的情况下放置记录器并检查是否你可以正确记录它。

      【讨论】:

        【解决方案3】:

        您似乎从 HTTP 请求中获得了 400 状态代码,这甚至在到达转换器之前就导致了异常。尝试添加一个涵盖所有情况的成功状态代码验证器(您可以选择稍后考虑的情况):

        <http:request parseResponse="false" config-ref="HTTP_Request_Configuration" host="#[flowVars.destination]" port="80" path="/" method="POST">
                <http:success-status-code-validator values="0..599"/>
            </http:request>
        

        【讨论】:

        • 问题是为什么你会得到 400,但这应该可以帮助你了解实际情况。
        • 实际上这很有帮助。服务器正在响应此消息“从客户端检测到潜在危险的 Request.Path 值
        猜你喜欢
        • 1970-01-01
        • 2014-03-04
        • 1970-01-01
        • 2015-07-14
        • 1970-01-01
        • 2018-02-27
        • 1970-01-01
        • 1970-01-01
        • 2015-08-19
        相关资源
        最近更新 更多