2012-02-02 8 views
1

HTTPプロキシとしてCAMELを使用しようとしていますが、XMLボディで受信HTTPメッセージからパラメータを抽出したいとします。このパラメータは、別のエンドポイント(別のサーバー)に向けてHTTP POSTメッセージのヘッダーに追加したいものです。Apache Camel:受信HTTPメッセージ(XML本文付き)からパラメータを抽出する方法

例:XML本体には「subscriptionId」というパラメータが含まれています。このフィールド "subscriptionId"の値は、発信HTTP POSTメッセージのuriで使用されます。

ので、subscriptionId = 1234567場合、私は、HTTPのPOSTメッセージ内のURIになりたいような:

POST/webappの/ createnewsubscription subscriptionId =私はキャメルを作成するために、春のDSLを使用しています1234567

?ルート。

誰でもこの方法をお考えですか?

おかげで、

+0

あなたはおそらく前の質問に対する回答を受け入れるべきです。これにより、より多くの人々がこれに答えるようになります。 – maximdim

+0

こんにちはmaximdim、私は私の以前の質問( "ありがとう、たくさん!"など)で得た返信に返信しました。トピックを閉じるためにもっと何かをする必要がありますか? – opstalj

+0

答えに満足している場合は、「Accepted」とマークする必要があります。質問の左側にあるチェックマークを参照してください。 – maximdim

答えて

2

は、私はあなたがペイロードとしてXMLで最初のURLに投稿したいと推定します。

まずXMLタグの値を取得するためにXPathコンポーネントを使用し、プロキシされたリクエストにパラメータを渡すようにsetBodyを設定する必要があります(オプションでPOSTからGETに切り替えることもできます)。

この動作するはずのような何か:

$ 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 

あなたがこのような応答をテストするために、第2の経路を使用することができます:あなたはwgetのと言って、コマンドラインからそれをテストすることができるはず

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

<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を 'trace'に設定すると、処理のすべてのステップで何が起こっているかのログ:

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

完璧!まさに私が探していたもの。私はそれを試して、それがどのように行ったかを知らせます。もう一度ありがとう。 – opstalj

+0

私は魅力的に働いた:)。 – opstalj

+0

うれしいです:) – maximdim

関連する問題