用于Apache Camel的REST EndPoint

时间:2015-06-25 09:27:15

标签: java rest apache-camel

我正在尝试使用Apache Camel创建en REST端点。我已经有一个REST服务,它返回JSON内容,我希望这个端点能够获得它。我的问题是,当我的Camel路线建成时,我不知道发生了什么。目前,它没有做任何事情。这是我的代码:

restConfiguration().component("servlet")
.bindingMode(RestBindingMode.json)
.dataFormatProperty("prettyPrint", "true").host("localhost")
.port(9080);    

rest("/ContextServices/rest/contextServices/document")
.consumes("application/json").produces("application/json")
.get("/testContext/557064c8f7f71f29cea0e657").outTypeList(String.class)
.to("bean:processor?method=affiche")
.to(dest.getRouteTo());

我正在端口9080上的本地Tomcat上运行我的REST服务,我的完整网址是

  

/ ContextServices /休息/ contextServices /文件/ {收集} / {ID}。

我试过阅读文档,但有两种语法,两种都不起作用:

from("rest:get:hello:/french/{me}").transform().simple("Bonjour ${header.me}");

rest("/say")
    .get("/hello").to("direct:hello")
    .get("/bye").consumes("application/json").to("direct:bye")
    .post("/bye").to("mock:update");

第一个是Java DSL,第二个是REST DSL,有什么区别?

非常感谢!

1 个答案:

答案 0 :(得分:1)

首先,REST组件本身不是REST实现。 它只是声明用于描述REST端点的语言。 您应该使用REST的实际实现,例如Restlet(参见完整列表here

我可能错了,但AFAIR,REST端点仅适用于您希望侦听来自其他应用程序的REST请求的情况。 您需要的是向REST端点发出请求并对其进行处理。 问题是:您何时想触发请求? 是某些事件,还是您想要定期检查外部REST服务? 对于后一种情况,我使用以下模式:

<route>
  <from uri="timer:polling-rest?period=60000"/>
  <setHeader headerName="CamelHttpMethod">
    <constant>GET</constant>
  </setHeader>
  <recipientList>
    <simple>http://${properties:service.url}/api/outbound-messages/all</simple>
  </recipientList>
  <unmarshal ref="message-format"/>

  <!-- do something with the message, transform it, log,
       send to another services, etc -->

  <setHeader headerName="CamelHttpMethod">
    <constant>DELETE</constant>
  </setHeader>
  <recipientList>
    <simple>http://${properties:service.url}/api/outbound-messages/by-id/${header.id}</simple>
  </recipientList>
</route>

很抱歉使用http组件代替REST的示例。 我只是从我的工作项目中复制粘贴它,它使用纯http。 我想,通过Restlet或CXF组件重写这个。