cxfとcamelを使用して構成されたRESTfulWebサービスがあります。私の設定xmlは:
<jaxrs:server id="restContainer" address="/" staticSubresourceResolution="true"> <jaxrs:serviceBeans>
<ref bean="FooBar" />
</jaxrs:serviceBeans>
<jaxrs:providers>
<bean class="org.apache.cxf.jaxrs.provider.JSONProvider">
<property name="dropRootElement" value="true" />
<property name="supportUnwrapped" value="true" />
</jaxrs:providers>
<camelcxf:rsServer id="rsServer" address="/" serviceClass="com.camel.example.FooBar" /> <camel:camelContext id="camelContext-1">
<camel:route>
<camel:from uri="cxfrs:bean:rsServer" />
<camel:to uri="http://localhost:8080/Google/rest/search" />
</camel:route>
</camel:camelContext>
これで、サービスとして公開され、次のようなFooBarクラスができました。
@Service("Demo") @Path("/foo/bar") public class FooBar{
@POST @Produces(MediaType.APPLICATION_JSON) @Consumes(MediaType.APPLICATION_JSON) public PoiDetailsResponse poiGetDetails(
PoiDetailsRequest json)
{
System.out.println(json.getUname());
System.out.println(json.getDeviceid());
//do some validation and some business logic
//return accordingly;
}
私の懸念は、サーバーにアクセスすると、camelContextがすぐに引き継ぎ、クラスに存在するメソッドがまったく変更されないことです。実際、ルートの「to」部分からの応答はすべてクライアントに返送されます。 1つの方法は、すべてのビジネスロジックに複数のプロセッサを追加することです。しかし、私は本当に最初にメソッドを実行してからルートを開始したいのですが..どうすればこれを行うことができますか?また、サーバーが間違っていても(PoiDetailsRequestの変数のデータ型が間違っていることを意味します)、応答パラメーター(PoiDetailsResponseの一部ではない)を取得しても、サーバーにアクセスできます。これはもちろん良いことではありません。何かを提案します。