2010-12-04 3 views
4

대기열에서 http 끝점으로 값을 게시하기 위해 낙타 경로를 사용하고 있습니다.Camel을 사용하는 ActiveMQ에서의 HTTP 게시

낙타의 http component을 사용하여 성공적으로 경로를 설정했지만 게시 할 jms 메시지의 본문을 가져올 수 없습니다.

는 예를 들어, 내 경로는 다음과 같이 설정 :

게시물을 초래하지만, ($ _SERVER에서 print_r'd로) 메시지 본문 내 POST 문자열에 표시되지 않습니다
<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> 

:

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 
) 

알림 REQUEST_METHOD는 POST이지만 argv에는 메시지 본문이 포함되어 있지 않습니다.

간단히 말해서 메시지 본문을 '보낸 사람'경로에서 '받는 사람'경로로 전송해야하므로 POST로 전송 될 수 있지만 어떻게 든 실패합니다.

미리 감사드립니다.

답변

8

답변을 찾았습니다. 수정하려면 헤더에 내용 유형 노드를 추가하고 본문을 이름/값 쌍으로 설정해야합니다 (예 :

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

) 그리고 당신의 발견을 게시 해 주셔서 감사합니다. –

+0

생명의 은인! 고마워요! –