2015-02-25 6 views
7

ich bereits auf Byte-Array bin Umwandlung, aber ich diesen Fehler ständig erhalten:Wie Nachricht Nutzlast zu lösen ist vom Typ: BufferInputStream Ausnahme in Mule

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

und dies ist mein 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> 

Antwort

7

Es scheint, dass Sie einen 400-Status-Code von der HTTP-Anfrage erhalten, der eine Ausnahme vor dem Erreichen des Transformers verursacht. Versuchen Sie, eine erfolgs Status-Code-Validator, die alle Fälle abdeckt (können Sie auswählen, welche später betrachten):

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

Das Problem ist, warum Sie diese 400 bekommen, aber das sollte Ihnen helfen zu sehen, was wirklich vor sich geht. – afelisatti

+0

eigentlich hilft das. Der Server antwortet auf diese Nachricht. Ein potenziell gefährlicher Request.Path-Wert wurde vom Client erkannt – MoienGK

0

ich auch diesen Fehler bekam, wenn ein Status-Update mit twitter MuleSoft Adapter veröffentlichen, obwohl nach einigen googeln & Versuch, ich habe herausgefunden, dass Fehler nicht mit dem Adapter ist, ist es mit der Payload-String an den Adapter übergeben.

Im SetPayload versuchen, diesen Ausdruck in dem Wertefeld: # [ 'RT @' + message.payload [0] .user.screenName + ':' + message.payload [0] .text]

und in dem twitter-Adapter versuchen, diese Werte:

Betrieb: Update Status Status: # [Nutzlast]

Wenn noch eine Fehlermeldung angezeigt, kann es einige Sonderzeichen in der „message.payload [0] .text "ist der letzte Tweet des screenName, entweder versuchen Sie, einen Logger ohne den Update-Status-Adapter zu installieren, und prüfen Sie, ob Sie ihn korrekt protokollieren können.

-1

Danke Madajee. Ich hatte das gleiche Problem und Ihre Antwort hat mir geholfen, es zu lösen. Darüber hinaus gibt es Probleme mit dem Twitter-Zugriff, die zusammen untersucht werden müssen, um sicherzustellen, dass Sie über eine funktionierende Lösung verfügen. Vor allem um die Berechtigung zu DT (Direct Tweet) zu ändern und den Access Key neu zu generieren und in der Twitter Connector Config neu einzugeben.

Verwandte Themen