【问题标题】:Apache Camel : Control over route startupApache Camel:控制路由启动
【发布时间】:2012-04-23 14:13:53
【问题描述】:

我有一个使用 cxf 和 camel 配置的安静的 web 服务。我的配置 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 的一部分),这当然不是一件好事..请提出一些建议..

【问题讨论】:

  • 如果您没有快速得到答案,我强烈建议您将指向此问题的链接发布到 Camel 邮件列表。开发人员通常会很快做出反应。 camel.apache.org/mailing-lists.html
  • 是的,克劳斯·易卜生也许会再次帮助你,他是一支单人军队

标签: java rest cxf apache-camel


【解决方案1】:

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

Camel cxfrs 组件用于当你想让 RS 服务路由直接进入 Camel 路由时。

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

【讨论】:

  • 首先,感谢克劳斯,你帮了我很多。其次,出于好奇,POJO 制作在这里会做得更好吗?另外,如果您看到我上面的骆驼上下文配置..我的服务器被击中后我会调用另一个网络服务(比如说谷歌),我需要响应(来自网络服务:谷歌)返回到我的服务器进行处理和验证并发送它进一步向最终用户..所以对此有什么建议吗?
  • Christian Posta 最近写了一篇关于在 Camel 中使用 REST 的博客文章。可能值得一试:christianposta.com/blog/?p=229.
  • 为了讨论 Camel REST 组件之类的改进,Camel 邮件列表比 stackoverflow 更好
  • 好的,现在我已经掌握了骆驼的概念......我正在使用这两种方法(1)通过 cxf 和骆驼公开我的休息服务,然后通过 bean 绑定通过 POJO 发送回响应。 (2)克劳斯在上述答案中建议的方法。
猜你喜欢
  • 1970-01-01
  • 2018-07-01
  • 1970-01-01
  • 2016-09-29
  • 1970-01-01
  • 2019-05-06
  • 1970-01-01
  • 1970-01-01
  • 2020-07-01
相关资源
最近更新 更多