使用骆驼的网络服务链

Chain of webservices using camel

我有两个网络服务。基本上一个输入字符串,return 一个 xml 文件。第二个从第一个和 return 中获取 xml 一个 xml 文档。我对第二份文件感兴趣。

要注意的是,无论如何我都无法修改这些网络服务的工作方式,并且输入参数必须在 url 内发送(它在请求正文内不起作用)

基本上,我想调用一个带有 input=body 的 Web 服务(这行得通)。然后我想调用第二个 web 服务 input=body returned by 第一个。

这是我的骆驼配置:

<route>
    <from uri="direct:language-identifier" />
    <toD uri="http://opener.olery.com/language-identifier?input=${body}&amp;bridgeEndpoint=true"/>
</route>

<route>
    <from uri="direct:tokenizer" />
    <setHeader headerName="input"><simple>${in.body}</simple></setHeader>
    <toD uri="http://opener.olery.com/tokenizer?bridgeEndpoint=true"/>
</route>

<route>
    <from uri="servlet:opener-preparse"/>
    <pipeline>
        <to uri="direct:language-identifier"/>
        <to uri="direct:tokenizer"/>
    </pipeline>
</route>

我的问题是:

我该如何解决?

要用 Web 服务调用的 return 值替换初始路由主体,请确保在 调用 Web 服务之前清空路由主体:

<camel:setBody>
    <camel:simple>${bodyAs(null)}</camel:simple>
</camel:setBody>
<toD uri="http://your-web-service"/>

这对我帮助很大,遇到了同样的问题 => org.apache.camel.InvalidPayloadException - 没有可用类型的主体:java.io.InputStream 但具有价值:....

它需要一个字符串,但主体中没有 Pojo。其他解决方案是 =>

        <setBody>
            <simple>${header.myValue}</simple>
        </setBody>

        <!-- aufrug dokmanager -->
        <toD uri="myUrl/cxf/myService/operation?parama1=${body}&amp;param2=someVaue" />