0

我的应用程序可以使用两个 Web 服务之一,我们称它们为 WS A 和 WS B。两者都包含相同的接口。

我想对 HTTP 标头和请求通道执行一些逻辑。WS B 应该只在某些请求通道上使用。为了决定使用哪个通道,我创建了一个 Java 类,它将请求通道作为字符串参数。

<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 表达式。

来源: http: //forum.springsource.org/showthread.php?113446-Usage-of-expressions-in-http-namespace-element-url

<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 中的表达式似乎不是评估。

这一切让我相信我采取了错误的方法。任何帮助将不胜感激。

4

2 回答 2

0

如果您有两个单独的 Web 服务端点,并且有一种方法可以确定每条消息使用哪个端点,那么 Spring Integration路由器将更适合引导您的消息。这具有额外的优势,您可以在发送之前对特定于端点的消息进行进一步处理。

配置路由器的方法有很多种,包括编写完全自定义的方法,因此我建议通读整个部分以了解最适合您的方法。

基于消息类型的快速示例:

<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" 
     ... />
于 2013-08-13T16:26:49.537 回答
0

要引用 Spring Bean,您应该使用@. 所以取而代之的expression="evalClass.getDestinationForChannel(teststring)"expression="@evalClass.getDestinationForChannel(teststring)".

于 2013-12-04T13:12:15.557 回答