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

14,950

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>
Share:
14,950
MoienGK
Author by

MoienGK

Humble Java Programmer

Updated on June 15, 2022

Comments

  • MoienGK
    MoienGK almost 2 years

    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>
    
  • afelisatti
    afelisatti about 9 years
    The issue is why you get that 400 but that should help you see what's really going on.
  • MoienGK
    MoienGK about 9 years
    actually that is helping. the server is responding this message 'A potentially dangerous Request.Path value was detected from the client