Reputation: 4654
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>
Upvotes: 7
Views: 15322
Reputation: 19
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.
Upvotes: -1
Reputation: 13
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.
Upvotes: 0
Reputation: 2835
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>
Upvotes: 7