使用骆驼的网络服务链
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}&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>
我的问题是:
当我在第二个webservice中使用toD传递入参时,得到一个无效字符(可能是因为数据包含换行)
当我在之前的配置中使用 setHeader 时,第二个服务的输入是根据初始数据设置的(不是第一个 web 服务 returned 的数据)
我该如何解决?
要用 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}&param2=someVaue" />
我有两个网络服务。基本上一个输入字符串,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}&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>
我的问题是:
当我在第二个webservice中使用toD传递入参时,得到一个无效字符(可能是因为数据包含换行)
当我在之前的配置中使用 setHeader 时,第二个服务的输入是根据初始数据设置的(不是第一个 web 服务 returned 的数据)
我该如何解决?
要用 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}&param2=someVaue" />