1

我有一个 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 之后再次将其移回,但这不可能......


编辑:

  • 就像克劳斯易卜生提到的丰富不支持动态uris。在示例中修复了这个问题!
4

3 回答 3

1

既不丰富也不 pollEnrich 支持其端点的动态 uri。您可以使用支持动态 uri 的收件人列表以及聚合策略,而不是使用丰富。

于 2013-11-12T16:39:00.557 回答
0

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

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

也许考虑改用restlet……我认为这更容易。

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

于 2013-11-12T14:48:55.690 回答
0

如果它是“充满列表”的资源,听起来您想要拆分列表并获取每个资源

于 2013-11-12T16:34:22.100 回答