Apache Camel - http Producer不使用GET-Method和丰富模式

时间:2013-11-12 13:46:27

标签: java rest apache-camel

我有一个RESTful Web服务,我想在Camel-Route中使用内容更丰富。 看到类似的代码:

from("direct:in") // Here comes XML
    .to("validator:something.xsd") // validate it
    .unmarshal("something-jaxb") // put it into a POJO
    .setHeader(Exchange.HTTP_URI, simple("http://localhost:12345/restws/${header.foo}")) // Create the dynamic URI with simple
    .setHeader(Exchange.HTTP_METHOD, constant("GET")) // set the HTTP-Method to use
    .enrich("http://dummy", new MyAggregator()) // fetch some Information from a Restful Webservice
    .to("direct:out"); // send the Message to another route

如果我运行此命令,则会收到以下错误:

No type converter available to convert from type: de.my.Class to the required type: java.io.InputStream with value de.my.Class@620ee765.

在我看来,他试图将Exchange的主体发送到http-Endpoint,尽管我将HTTP-Method设置为GET。我已经阅读了文档(https://camel.apache.org/http.html)和使用GET或POST调用,它描述了选择方法的算法首先查看标题(1.使用标题中提供的方法)

我找到了一些解决方法,它描述了如何将主体移动到Exchange属性并在Webservice-Call之后再将其移回,但这不可能......


编辑:

  • 喜欢 Claus Ibsen 提到,rich不支持动态uris。在示例中解决了这个问题!

3 个答案:

答案 0 :(得分:1)

无论是rich还是pollEnrich都不支持动态uris用于他们的终端。您可以使用支持动态uris的收件人列表以及聚合策略,而不是使用rich。

答案 1 :(得分:0)

pojo中有什么?您的GET参数应该是资源标识符和查询参数。这需要一个自定义转换器。

http://fusesource.com/docs/esb/4.2/rest/RESTIntro.html

也许可以考虑使用restlet ......我认为这更容易。

http://camel.apache.org/restlet.html

答案 2 :(得分:0)

如果它是“资源列表”,那么您可能希望拆分列表并对每个资源进行获取