当前位置: 首页 > 知识库问答 >
问题:

Apache Camel的RESTendpoint

窦凯定
2023-03-14

我正在尝试使用Apache Camel创建en RESTendpoint。我已经有了一个返回JSON内容的REST服务,我希望这个endpoint能得到它。我的问题是,我不知道构建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服务,我的完整URL是

/ContextServices/rest/ContextServices/document/{collection}/{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个答案

张淳
2023-03-14

首先,REST组件本身不是REST实现。它只是声明了描述RESTendpoint的语言。您应该使用REST的实际实现,比如Restlet(请参阅此处的完整列表)

我可能错了,但实际上,RESTendpoint只适用于您想要侦听来自其他应用程序的REST请求的情况。您需要的是向RESTendpoint发出请求并对其进行处理。问题是:您希望何时触发请求?这是某个事件,还是您希望定期检查外部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组件之类的东西重写它。

 类似资料:
  • 我正在尝试向异步路由发送消息,但它不起作用。我刚刚在github上创建了一个项目来模拟这个问题

  • 我有一个restendpoint示例。org,返回表单的json响应 我的路线是这样的 我读过关于轮询消费者的内容,但找不到如何继续轮询endpoint的示例,直到它返回“success”响应。 是否应该使用轮询消费者?如果是这样的话,可以举一个与我的案例相关的例子。用于轮询restendpoint的任何其他资源都非常有用。

  • 我正在使用apache camel cxf开发一个Web服务(肥皂),我遇到了这个错误。 Java . lang . illegalargumentexception:Part { http://blue print . camel . ngt . TN/}返回的类型应为[ltn . ngt . camel . blue print . WB _ subscriptions;,而不是org . A

  • 我试图在聚合器完成后获得一个回复,但是我得到一个异常,我没有指定任何聚合器子项,但是当我指定一个。to()endpoint我没有收到聚合结果。。。这可能吗? 控制器: 聚合器:

  • 我想测试以下骆驼路线。我在网上找到的所有例子都有以文件开头的路由,在我的例子中,我有一个Springbean方法,每隔几分钟就会被调用一次,最后消息被转换并移动到jms以及审计目录。 我对这条路线的写测试毫无头绪。目前我在测试用例中所拥有的是

  • 我从基于apache-camel-spark的rest接口获得一个json数组作为输入。开始时,我想通过apache camels路线分割json-array来处理每个元素。我该怎么做? 我的测试输入json: 对于这个问题,我在stackoverflow上找到了一些间接描述的问题: link 1, link 2, link 3。 根据这些示例,我尝试了以下骆驼路线: 当我这样做时,我总是得到以下

  • Apache Camel:2.12.2,activemq:5.7 我们注意到,在下面的路由中,对于前100次交换,节流工作正常。此后,它不是每秒发送100次交换,而是每秒仅发送1次交换。现在,如果我们将timePeriodMillis设置为100,它似乎可以正常工作。注意,我们同时发送500个交换。

  • 我有一个RESTful Webservice,我想在骆驼路上用它来丰富内容。参见类似的代码: 如果我运行这个,我会得到以下错误: < code >没有类型转换器可用于从type: de.my.Class转换为所需的type: java.io.InputStream,值为de.my.Class@620ee765。 在我看来,他试图将 Exchange 的主体发送到 http-Endpoint,尽管我