使用骆驼的webservices链

时间:2016-01-28 10:34:44

标签: java web-services apache-camel

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

问题是我无论如何都无法修改这些web服务是如何工作的,输入参数必须在url中发送(它在请求体内不起作用)

所以基本上,我想用input = body调用一个web服务(这是工作)。然后我想调用第二个webservice,第一个返回input = body。

这是我的骆驼配置:

<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服务中使用toD传递输入参数时,我得到一个无效字符(可能是因为数据包含新行)

  • 当我使用上一个配置中的setHeader时,第二个服务的输入是从初始数据(而不是第一个Web服务返回的数据)设置的

我该如何解决?

2 个答案:

答案 0 :(得分:1)

要使用来自webservice调用的返回值替换初始路径正文,请确保在调用Web服务之前清空路径正文

for file in $FILES_TO_REVERT; do
  git lfs untrack "$file";
  git rm --cached "$file";
  git add --force "$file";
done

git commit -m "..."

答案 1 :(得分:0)

这对我有很大帮助,有同样的问题=&gt; org.apache.camel.InvalidPayloadException - 没有可用的类型:java.io.InputStream但有值:....

它期望一个String但在Body中没有Pojo。其他解决方案是=&gt;

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

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