HTTP Post From ActiveMQ using Camel

淺唱寂寞╮ 提交于 2019-12-19 08:54:50

问题


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] => you@example.com
    [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.


回答1:


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>


来源:https://stackoverflow.com/questions/4353700/http-post-from-activemq-using-camel

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!