如何在收到响应后向不同的通道发送请求和响应

时间:2014-07-30 20:34:31

标签: spring-integration

假设我将CustomerRequest对象收到输入通道(通道1)。 现在我必须进行webservice调用,返回bankaccount对象列表。 我必须总结每个帐户的余额并将其设置到CustomerRequest对象上。 现在我需要将CustomerRequest对象发送到另一个通道(通道2)和bankaccount对象列表到另一个通道(通道3)

我不确定在进行网络服务电话后如何继续

非常感谢任何帮助。

<si:chain id="dataChain" input-channel="channel 1"  output-channel="Channel 2" >
<si:header-enricher >
    <si:header name="Content-Type" value="application/json" />
</si:header-enricher>   


<si-http:outbound-gateway id="Gateway1" 
                   url="http://$webservice{host}"                                               
                   http-method="POST" 
                   rest-template="restTemplate"
                   expected-response-type="com.xxx.response.Response1">
</si-http:outbound-gateway>     


</si:chain> 

1 个答案:

答案 0 :(得分:0)

使用Content Enricher<enricher/>)。来自richr的下游流应该调用Web服务并返回总和。

浓缩器看起来像......

<enricher input-channel="channel1" output-channel="channel2"
        request-channel="toWsPlusSummationFlow">
     <property name="balance" expression="payload" />
</enricher>

这假设setBalance()上有一个setter CustomerRequest,而richher flow会将余额作为有效负载返回。

然后将丰富的消息发送到channel2

编辑:

更新有效负载的多个属性;让流返回一个富对象,只需添加更多属性......

<enricher input-channel="channel1" output-channel="channel2"
        request-channel="toWsPlusSummationFlow">
     <property name="balance" expression="payload.calculatedBalance" />
     <property name="accounts" expression="payload.accounts" />
</enricher>

这假设入站有效负载具有setBalance(...)setAccounts(...)方法,并且富集流的结果具有getCalculatedBalance()getAccounts()的有效负载。

名称是解析为setter的表达式,表达式是根据下游流程的回复计算的表达式。

或者,如果您不想要有效负载中的数据,则可以使用<header/>元素在标头中携带数据。