我有一个使用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),这当然不是一件好事..请提出一些建议......
答案 0 :(得分:0)
如果要公开RS服务并使用服务bean,则不需要使用Camel cxfrs组件。你可以使用普通的CXF RS。
Camel cxfrs组件用于何时让RS服务直接路由到Camel路由。
如果您希望首先执行方法,则可以通过使用ProducerTemplate从方法调用Camel,使用直接端点向Camel路由发送消息。