2012-02-02 2 views
1

HTTP 프록시로 CAMEL을 사용하려고하는데 XML 본문이있는 수신 HTTP 메시지에서 매개 변수를 추출하고 싶습니다. 이 매개 변수는 다른 엔드 포인트 (다른 ​​서버)를 향한 HTTP POST 메시지의 헤더에 추가하려고합니다.Apache Camel : 들어오는 HTTP 메시지 (XML 본문 포함)에서 매개 변수를 추출하는 방법

예 : XML 본문에 "subscriptionId"라는 매개 변수가 있습니다. 이 필드의 값 "subscriptionId"는 나가는 HTTP POST 메시지의 uri에서 사용됩니다.

그래서, subscriptionId = 1234567 경우, I는 HTTP POST 메시지 URI가되고 싶어 같은 :

POST/웹 애플리케이션/createnewsubscription subscriptionId = 내 낙타를 만드는 봄 DSL을 사용하고 1234567

? 노선.

누구나 어떻게 할 수 있습니까?

감사합니다,

+0

아마도 이전 질문에 대한 대답을 받아 들여야합니다. 이것은 더 많은 사람들이이 질문에 대답하도록 동기를 부여합니다. – maximdim

+0

안녕하세요 maximdim, 나는 이전 질문에 대한 답변 ("감사합니다."등)에 답장을 보냈습니다. 주제를 닫기 위해 더 많은 것을해야합니까? – opstalj

+0

제공된 답변에 만족한다면 '수락 됨'으로 표시해야합니다. 질문 왼쪽의 체크 표시를 참조하십시오. – maximdim

답변

2

은 당신이 페이로드로 XML을 첫 번째 URL에 게시 할 가정.

먼저 XML 태그에 값을 가져 오려면 XPath 구성 요소를 사용하고 프록시 요청에 매개 변수를 전달하려면 setBody를 사용해야합니다 (POST에서 GET으로 전환 할 수 있음).

이런 식으로 뭔가 작동합니다 :

<route> 
    <from uri="jetty:http://127.0.0.1:8080/myapp"/> 
    <setHeader headerName="subscriptionId"> 
    <xpath resultType="java.lang.String">//subscriptionId/text()</xpath> 
    </setHeader> 
    <!-- if you need to convert from POST to GET 
    <setHeader headerName="CamelHttpMethod"> 
    <constant>GET</constant> 
    </setHeader> 
    --> 
    <setBody> 
    <simple>subscriptionId=${in.headers.subscriptionId}</simple> 
</setBody> 
    <to uri="jetty:http://127.0.0.1:8090/myapp?bridgeEndpoint=true&amp;throwExceptionOnFailure=false"/> 
</route> 

당신은 wget을 말할 명령 줄에서 테스트 할 수 있어야한다 :

$ cat 1.txt 
<a> 
<subscriptionId>123</subscriptionId> 
</a> 

$ wget --post-file=1.txt --header="Content-Type:text/xml" http://127.0.0.1:8080/myapp 
당신은 다음과 같은 반응을 테스트하는 두 번째 경로를 사용할 수

:

<route> 
    <from uri="jetty:http://127.0.0.1:8090/myapp"/> 
    <to uri="log:mylog?level=INFO"/> 
    <setBody> 
    <simple>OK: ${in.headers.CamelHttpMethod}: ${in.headers.subscriptionId}</simple> 
    </setBody>  
</route> 

camelContext를 '추적'으로 설정하면 처리의 모든 단계에서 무슨 일이 벌어지고 있는지에 대한 로그 :

<camel:camelContext id="camel" trace="true" xmlns="http://camel.apache.org/schema/spring"> 
+0

완벽! 정확히 내가 무엇을 찾고 있었는지. 나는 그것을 시험해 보았고 그것이 어떻게 진행되었는지 알려줄 것입니다. 다시 한 번 감사드립니다. – opstalj

+0

나는 매력처럼 일했다 :). – opstalj

+0

다행 :) – maximdim