int-http:outbound-gateway即使一切都很完美也会出现404错误

时间:2016-02-11 14:08:12

标签: spring spring-integration

我面临一个奇怪的问题。我已将int-http:outbound-gateway配置如下:

<int:channel id="PQGetMemberMainScreen-Amisys-Channel" />
    <int:chain input-channel="PQGetMemberMainScreen-Amisys-Channel" output-channel="PQGetMemberMainScreen-ExternalSystem-Response" >


        <int-xml:xslt-transformer xsl-resource="${stylesheet.amisys.soaXml.PQGetMemberMainScreen}"  /> 

        <int:service-activator  ref="httpOutboundGatewayHandler" method="buildHttpOutboundGatewayRequest" />

        <int-http:outbound-gateway  url-expression="headers.restResourceUrl"
                                    http-method-expression="headers.httpMethod"
                                    expected-response-type="java.lang.String" >
        </int-http:outbound-gateway>

    </int:chain>    

我无法使用上述出站网关点击休息服务,因为它给出了404错误。

HTTP request execution failed for URI [http://dstXX:30114/amisys-soa/rest/clientd/groups/KISHG2/history?v=1&eao=02112016]

......



Caused by: org.springframework.web.client.HttpClientErrorException: 404 Not Found
    at org.springframework.web.client.DefaultResponseErrorHandler.handleError(DefaultResponseErrorHandler.java:88)
    at org.springframework.web.client.RestTemplate.handleResponseError(RestTemplate.java:532)
    at org.springframework.web.client.RestTemplate.doExecute(RestTemplate.java:488)
    at org.springframework.web.client.RestTemplate.execute(RestTemplate.java:460)
    at org.springframework.web.client.RestTemplate.exchange(RestTemplate.java:409)
    at org.springframework.integration.http.outbound.HttpRequestExecutingMessageHandler.handleRequestMessage(HttpRequestExecutingMessageHandler.java:372)
    ... 138 more

奇怪的是,相同的URL工作正常,并在使用REST客户端命中服务时获得响应。我已经验证了标题和方法类型,发现它们应该是一样的。

有关如何进一步处理的任何建议吗?

1 个答案:

答案 0 :(得分:1)

  

奇怪的是,相同的URL工作正常,并在使用REST客户端命中服务时获得响应。我已经验证了标题和方法类型,发现它们应该是一样的。

您真的应该比较来自此<int-http:outbound-gateway>和该REST客户端的完整请求。

因为我们404 Not Found看起来你在SI情况下遗漏了一些标题或请求参数。或者有一些额外的标头使您的REST服务拒绝该请求。

为此,您可以使用nay网络跟踪工具。例如。我在Windows上使用TCP Trace。