2011-10-19 9 views
1

私は、HTTP POSTを受信し、それを複数のサービスインスタンスにPOSTするマルチキャストルートを設定しようとしています。Camelサーブレットコンポーネントからhttpコンポーネントへのルーティング方法は?

ドキュメントを読んでから、camel-example-servlet-tomcatで遊んでいるので、シンプルなはずですが、私は立ち往生しています。このquestionは役に立ちましたが、私はまだ立ち往生しています。ここで

はキャメルサーブレットを設定するための私のweb.xmlです:

<web-app...> 
<!-- location of spring xml files --> 
<context-param> 
<param-name>contextConfigLocation</param-name> 
<param-value>/WEB-INF/applicationContext.xml</param-value> 
</context-param> 
<!-- Camel servlet --> 
<servlet> 
<servlet-name>MulticastServlet</servlet-name> 
<servlet-class>org.apache.camel.component.servlet.CamelHttpTransportServlet</servlet-class> 
<load-on-startup>1</load-on-startup> 
</servlet> 
<!-- Camel servlet mapping --> 
<servlet-mapping> 
<servlet-name>MulticastServlet</servlet-name> 
<url-pattern>/send/*</url-pattern> 
</servlet-mapping> 
<!-- the listener that kick-starts Spring --> 
<listener> 
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class> 
</listener> 
<welcome-file-list> 
<welcome-file>WEB-INF/index.xhtml</welcome-file> 
</welcome-file-list> 
</web-app> 

ここに私のラクダのコンテキストとルートです:

<camelContext trace="true" id="multicastCtx" 
xmlns="http://camel.apache.org/schema/spring"> 
<route id="multicastRoute"> 
<from uri="servlet:///license"/> 
<multicast stopOnException="false"> 
<to uri="http://192.168.22.95:8135/transform-service/send/license"/> 
<to uri="http://10.50.1.58:9080/send/license"/> 
</multicast> 
</route> 
</camelContext> 

サービスはリクエストパラメータのデータを期待しています。私は、httpツール(Firefox用の "Poster"プラグイン)を使って両方のエンドポイントURIに正常に投稿できます。

しかし、このWebアプリケーション(Jettyで実行中)に投稿すると、URI「http://localhost:8080/send/license」に404エラーが表示されます。簡単にするため

:私はこのように見えるようにルートを簡素化しようとした

:桟橋のデバッグログでは、私は、「サービス要求に対する消費者 [POST /送信/ライセンス] DEBUG [CamelHttpTransportServlet.service]」を参照してください。ルートは、私は、マルチキャストコンポーネントを落としたので、このような なります

<route id="myRoute" streamCache="true"> 
<from uri="servlet:///license"/> 
<to uri="http://192.168.22.95:8135/transform-service/send/license"/> 
</route> 

が、私は同じエラーを取得します。 <from uri="servlet:///0.0.0.0:8080/send/license"/>を使用すると、同じエラーが発生します。

私はCamelサーブレットのURIを構成する際に明らかなことがありませんか?

答えて

7

あなたは、あなたがエンドポイントURIにその名前を参照する必要があり、CamelServletとしてサーブレットのデフォルト名を使用しない場合は、

<from uri="servlet:///license"/> 

が、その後

<from uri="servlet:///license?servletName=MulticastServlet"/> 
であるべき