We're using camel routes to post values from a queue to an http endpoint.
I've successfully set up the route using camel's http component, but I'm unable to get the body of the jms message to post.
For example, my route is set up like this:
<route errorHandlerRef="dlc" autoStartup="true" id="route2" xmlns:ns2="http://camel.apache.org/schema/web" xmlns="http://camel.apache.org/schema/spring">
<from uri="activemq:test"/>
<setHeader headerName="CamelHttpMethod">
<constant>POST</constant>
</setHeader>
<to uri="http://localhost/tim/camel/" id="to2"/>
</route>
Which results in a POST, but the message body does not show up in my POST string (as print_r'd from $_SERVER):
Array
(
[instance] => local
[HTTP_JMSDELIVERYMODE] => 1
[HTTP_JMSDESTINATION] => queue://test
[HTTP_JMSEXPIRATION] => 0
[HTTP_JMSTYPE] =>
[HTTP_JMSTIMESTAMP] => 1291468702773
[HTTP_JMSPRIORITY] => 0
[HTTP_JMSCORRELATIONID] =>
[HTTP_JMSMESSAGEID] => ID:new-host-3.home-62248-1291465669089-4:3:1:1:4
[HTTP_JMSREDELIVERED] => false
[HTTP_USER_AGENT] => Jakarta Commons-HttpClient/3.1
[HTTP_HOST] => localhost
[HTTP_COOKIE] => $Version=0; PHPSESSID=32aa692c71e1003f2e540c1b80c3b363; $Path=/
[CONTENT_LENGTH] => 44
[CONTENT_TYPE] => text/html
[PATH] => /usr/bin:/bin:/usr/sbin:/sbin
[SERVER_SIGNATURE] => <address>Apache/2.0.59 (Unix) PHP/5.2.6 DAV/2 mod_ssl/2.0.59 OpenSSL/0.9.7l Server at localhost Port 80</address>
[SERVER_SOFTWARE] => Apache/2.0.59 (Unix) PHP/5.2.6 DAV/2 mod_ssl/2.0.59 OpenSSL/0.9.7l
[SERVER_NAME] => localhost
[SERVER_ADDR] => 127.0.0.1
[SERVER_PORT] => 80
[REMOTE_ADDR] => 127.0.0.1
[DOCUMENT_ROOT] => /wufoo/trunk/
[SERVER_ADMIN] => [email protected]
[SCRIPT_FILENAME] => /wufoo/trunk/tim/camel/index.php
[REMOTE_PORT] => 62877
[GATEWAY_INTERFACE] => CGI/1.1
[SERVER_PROTOCOL] => HTTP/1.1
[REQUEST_METHOD] => POST
[QUERY_STRING] =>
[REQUEST_URI] => /tim/camel/
[SCRIPT_NAME] => /tim/camel/index.php
[PHP_SELF] => /tim/camel/index.php
[REQUEST_TIME] => 1291468702
[argv] => Array
(
)
[argc] => 0
)
Notice REQUEST_METHOD is POST, but argv does not contain a message body.
In short, I need to transfer the message body from the 'from' route to the 'to' route so it may be sent as a POST, but I'm failing somehow.
Thanks in advance.
I found the answer. To fix, I had to add the Content Type node to the header and set the body to a name/value pair, as shown below:
<route errorHandlerRef="dlc" autoStartup="true" inheritErrorHandler="true" id="route2" xmlns:ns2="http://camel.apache.org/schema/web" xmlns="http://camel.apache.org/schema/spring">
<from uri="activemq:test"/>
<setBody inheritErrorHandler="true" id="setBody2">
<simple>name=${body}</simple>
</setBody>
<setHeader headerName="Content-Type" inheritErrorHandler="true" id="setHeader3">
<constant>application/x-www-form-urlencoded;</constant>
</setHeader>
<setHeader headerName="CamelHttpMethod" inheritErrorHandler="true" id="setHeader4">
<constant>POST</constant>
</setHeader>
<to uri="http://localhost/tim/camel/" inheritErrorHandler="true" id="to2"/>
</route>
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With