HTTP-сообщение из ActiveMQ с использованием Camel - PullRequest
4 голосов
/ 04 декабря 2010

Мы используем верблюжьи маршруты для отправки значений из очереди в конечную точку http.

Я успешно настроил маршрут, используя верблюжий компонент http , но не могучтобы получить тело сообщения jms для отправки.

Например, мой маршрут настроен так:

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

, что приводит к POST, но тело сообщения не отображаетсяв моей строке POST (как print_r'd из $ _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
)

Обратите внимание, что REQUEST_METHOD имеет значение POST, но argv не содержит тела сообщения.

Короче говоря, мне нужноперенести тело сообщения из маршрута «из» в маршрут «к», чтобы его можно было отправить как POST, но у меня что-то не получается.

Заранее спасибо.

1 Ответ

8 голосов
/ 04 декабря 2010

Я нашел ответ. Чтобы исправить, мне пришлось добавить узел типа контента в заголовок и установить тело для пары имя / значение, как показано ниже:

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