1

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の一部ではない)を取得しても、サーバーにアクセスできます。これはもちろん良いことではありません。何かを提案します。

4

1 に答える 1

0

RSサービスを公開してサービスBeanを使用する場合は、Camelcxfrsコンポーネントを使用する必要はありません。これには、プレーンなCXFRSを使用できます。

Camel cxfrsコンポーネントは、RSサービスルートをCamelルートに直接接続する場合に使用します。

メソッドを最初に実行する場合は、メソッドからProducerTemplateを使用してCamelを呼び出し、直接エンドポイントを使用してCamelルートにメッセージを送信できます。

于 2012-04-23T17:10:40.633 に答える