Spring Integration - url-variable在http:outbound-gateway中不起作用

时间:2012-11-09 11:29:02

标签: java spring spring-integration

为了根据邮件标题向动态网址发送http请求...

我正在尝试从Message标头设置url值,如下所示:

 <int-http:outbound-gateway id="httpOutboundGateway" request-channel="fromMyQueue" 
    url="{outboundGatewayUrl}" reply-channel="nullChannel" 
    http-method="POST" expected-response-type="java.lang.String" charset="UTF-8">
<int-http:uri-variable name="outboundGatewayUrl" expression="headers['X-CUSTOM-HTTP-REQUEST-URL']" />

但这不起作用。
显然{outboundGatewayUrl}值根本没有被取代。
如果我将{outboundGatewayUrl}替换为实际网址,则此方法有效。

错误讯息:

Caused by:
org.springframework.integration.MessageHandlingException: HTTP request execution failed for URI [{outboundGatewayUrl}]...

Caused by:<br> java.lang.IllegalArgumentException: URI is not absolute
    at java.net.URI.toURL(URI.java:1080)
    at org.springframework.http.client.SimpleClientHttpRequestFactory.createRequest(SimpleClientHttpRequestFactory.java:109)

我在这里缺少什么?

2 个答案:

答案 0 :(得分:0)

我认为您在$之前错过了{outboundGatewayUrl}符号,因此SEL未对其进行扩展。这也在错误消息中提示。

答案 1 :(得分:0)

它看起来像邮件中不存在标题X-CUSTOM-HTTP-REQUEST-URL。

如果表达式返回null(即标头不存在),您将得到该错误(URI不是绝对的)。

我刚刚进行了一次测试,并且使用正确的标题对我来说效果很好;如果您认为标题是正确的,那么您应该解决问题;例如,首先使用文字表达式......

<int-http:uri-variable name="outboundGatewayUrl" expression="'http://foo/bar'" />

错误信息可能有些误导:

Caused by:
org.springframework.integration.MessageHandlingException: HTTP request execution failed    for URI [{outboundGatewayUrl}]...

因为它暗示网址没有扩展。问题是扩展是在RestTemplate中完成的,并且适配器无法访问它。