0

为了根据消息头向动态 url 发送 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}用实际的 URL 替换它,这将有效。

错误信息:

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)

我在这里想念什么?

4

2 回答 2

0

我认为您在您之前缺少一个$标志{outboundGatewayUrl},因此它没有被 SEL 扩展。错误消息中也建议了这一点。

于 2012-11-09T12:00:28.483 回答
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}]...

因为它暗示 url 没有被扩展。问题是扩展是在 RestTemplate 内部完成的,并且适配器无权访问它。

于 2012-11-09T13:38:05.210 回答