How to Solve Message payload is of type: BufferInputStream Exception in Mule

落爺英雄遲暮 提交于 2019-12-04 21:10:38

问题


I am already transforming to byte array but i constantly get this error :

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)
********************************************************************************

and this is my flow :

<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>

回答1:


It seems you are getting a 400 status code from the HTTP request which is causing an exception before even reaching the transformer. Try adding a success-status-code-validator that covers all of the cases (you can choose which ones to consider later):

<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>



回答2:


I also got this error when posting a status update using twitter mulesoft adapter, though after some googling & trial, I figured out that error is not with the adapter, it is with the payload string passed to the adapter.

In the SetPayload try this expression in the value field: #['RT @' + message.payload[0].user.screenName + ':' + message.payload[0].text]

And in the twitter adapter try these values:

Operation: Update status Status: #[payload]

If still you get an error, there may be some special characters in the "message.payload[0].text" which is the last tweet of the screenName, either try putting a logger without the update status adapter and check if you can log it correctly.




回答3:


Thanks Madajee. I had the same issue and your answer helped me to resolve it. Also, to add to this, there are issues with Twitter access that must be looked into in conjunction to ensure that you have a working solution. Especially around changing the permission to DT (Direct Tweet) and regenerating the Access Key and re-entering it in your Twitter connector config.



来源:https://stackoverflow.com/questions/28713759/how-to-solve-message-payload-is-of-type-bufferinputstream-exception-in-mule

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!