Apache Camel:控制路由启动

时间:2012-04-23 14:13:53

标签: java rest cxf apache-camel

我有一个使用cxf和camel配置的restful webservice。我的配置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”部分路由的响应是什么回送到客户端..现在一种方式是我为每个业务逻辑添加多个处理器。但我真的想先让我的方法执行然后开始路线..我怎么能这样做?此外,我可以使用我想要的任何参数来打我的服务器,即使它们是错误的(意味着错误的PoiDetailsRequest变量的数据类型)并获得任何响应参数(不属于PoiDetailsResponse),这当然不是一件好事..请提出一些建议......

1 个答案:

答案 0 :(得分:0)

如果要公开RS服务并使用服务bean,则不需要使用Camel cxfrs组件。你可以使用普通的CXF RS。

Camel cxfrs组件用于何时让RS服务直接路由到Camel路由。

如果您希望首先执行方法,则可以通过使用ProducerTemplate从方法调用Camel,使用直接端点向Camel路由发送消息。