2015-02-25 19 views
7

jestem już przekształcania do tablicy bajtów, ale ciągle ten błąd:Jak rozwiązać Ładunek wiadomość jest typu: BufferInputStream Wyjątek w muł

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

a to mój przepływu:

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

Odpowiedz

7

Wygląda na to, że otrzymujesz kod statusu 400 z żądania HTTP, który powoduje wyjątek przed nawet dotarciem do transformatora. Spróbuj dodać sukces-status-code-walidator, który obejmuje wszystkich przypadkach (można wybrać, które z nich do rozważenia później):

<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

Problem polega na tym, że dostajesz 400, ale to powinno pomóc ci zobaczyć, co się naprawdę dzieje. – afelisatti

+0

tak naprawdę to pomaga. serwer odpowiada na ten komunikat "Potencjalnie niebezpieczna wartość Request.Path została wykryta przez klienta – MoienGK

0

ja też mam ten błąd podczas wysyłania aktualizacji statusu za pomocą twitter adapter mulesoft, choć po pewnym procesie googlingowym &, stwierdziłem, że błąd nie jest związany z adapterem, to jest z ciągiem danych przekazywanym do adaptera.

W SetPayload spróbować to wyrażenie w polu Wartość: # [ 'RT @' + message.payload [0] .user.screenName + ':' + message.payload [0] .text]

i w adapterze twitter spróbować tych wartości:

Operation: Aktualizacja stanu Status: # [ładowność]

Jeśli nadal masz problem, mogą istnieć pewne znaki specjalne w „message.payload [0] .text ", który jest ostatnim tweetem screenName, spróbuj umieścić program rejestrujący bez adaptera stanu aktualizacji i sprawdź, czy możesz go poprawnie zarejestrować.

-1

Dzięki Madajee. Miałem ten sam problem, a twoja odpowiedź pomogła mi go rozwiązać. Ponadto, do tego dochodzą problemy z dostępem do Twittera, które należy analizować w powiązaniu, aby upewnić się, że masz działające rozwiązanie. Szczególnie w przypadku zmiany uprawnienia do DT (Direct Tweet) i regeneracji klucza dostępu i ponownego wprowadzenia go w konfiguracji konektora Twitter.

Powiązane problemy