我的应用程序可以使用两个Web服务之一,让我们称之为WS A和WS B.两者都包含相同的接口。
我想在HTTP标头和请求通道上执行一些逻辑。 WS B应仅用于某些请求通道。为了决定使用哪个通道,我创建了一个Java类,它将请求通道作为String参数。
<http:outbound-gateway request-channel="XXXXX"
url-expression="'${EL EXP}'" http-method="GET"
extract-request-payload="true" expected-response-type="java.lang.String"
charset="UTF-8" reply-timeout="3000" reply-channel="XXXXX">
</http:outbound-gateway>
然后我读到在初始化上下文时评估url-expression。
<int-http:outbound-gateway request-channel="requestChannel"
url="dummy"
http-method="GET" extract-request-payload="true" expected-response-type="java.lang.String"
charset="UTF-8" reply-timeout="3000" reply-channel="sysLoggerRequestChannel">
<int-http:uri-variable name="teststring" expression="test"/>
<int-http:uri-variable name="url" expression="evalClass.getDestinationForChannel(teststring)"/>
</int-http:outbound-gateway>
这种方法的问题是int-http:uri-variable中的表达式似乎不是评估。
所有这些让我相信我采取了错误的做法。任何帮助都将非常感激。
答案 0 :(得分:0)
如果您有两个单独的Web服务端点以及确定每个消息使用哪个端点的方法,那么Spring Integration router将更适合于指导您的消息。这样做的另一个好处是,您可以在发送之前对特定于端点的消息进行进一步处理。
配置路由器的方法有很多种,包括编写一个完全自定义的路由器,所以我建议仔细阅读整个部分,看看什么最适合你。
基于消息类型的简单示例:
<int:payload-type-router input-channel="requests">
<int:mapping type="my.business.WebServiceARequest" channel="wsA" />
<int:mapping type="my.business.WebServiceBRequest" channel="wsB" />
</int:payload-type-router>
<int-http:outbound-gateway request-channel="wsA" url="http://wsA.com/whatever"
... />
<int-http:outbound-gateway request-channel="wsB" url="http://wsB.com/foo"
... />
答案 1 :(得分:0)
要引用Spring Bean,您应该使用@
。因此,expression="evalClass.getDestinationForChannel(teststring)"
代替expression="@evalClass.getDestinationForChannel(teststring)"
,而不是{{1}}。