将HttpOutboundGateway与Spring Integration一起使用时出现HTTP 415错误

时间:2017-02-09 21:48:38

标签: spring spring-integration

我正在构建一个简单的Spring集成应用程序,它从目录中读取CSV文件,将它们转换为XML文档,并通过REST XML Web服务将它们发送到系统。

整合流程如下所示:

<int-file:inbound-channel-adapter channel="filesChannel" ... />

<int:channel id="filesChannel" />
<int:publish-subscribe-channel id="resultChannel" />

<int:chain input-channel="filesChannel" output-channel="resultChannel">
    <!-- Parse the CSV into individual messages of Map<String,String> type -->
    <int:transformer ref="csvToMapsTransformer" method="transform" />
    <int:splitter />

    <!-- Transform the map into a simple XML -->
    <int:transformer ref="mapToXmlTransformer" method="transform" />

    <!-- Use XSLT template to transform the simple XML into the API format -->
    <int-xml:xslt-transformer xsl-resource="order-api-transform.xslt" />

    <int:header-enricher>
        <int:header name="Content-Type" value="text/xml" />
    </int:header-enricher>

    <!-- Post the XML to the target system -->
    <int-http:outbound-gateway 
        http-method="POST" 
        url="http://example.com/method"
        expected-response-type="javax.xml.transform.Source" 
         />
</int:chain>

mapToXmlTransformer是Map条目的简单循环,它使用StringBuilder构建XML字符串。然后,使用XSLT将此XML字符串转换为目标系统所期望的格式。

流程的工作原理与我期待的一样。它将POST请求中的有效负载发送到目标系统,但它返回HTTP 415响应:

Caused by: org.springframework.web.client.HttpClientErrorException: 415 Cannot consume content type

我的流程似乎正在做一个简单的愚蠢错误,但我是Spring Integration的新手并且自己找不到它。

请帮忙

1 个答案:

答案 0 :(得分:1)

春季讯息内容类型邮件标题为contentType,而非Content-Type

请参阅MessageHeaders.CONTENT_TYPE - 它已映射到Http Content-Type标题。

您可以通过SpEL使用常量:

<header name="#{T(org.springframework.messaging.MessageHeaders).CONTENT_TYPE}" 
        value="text/xml" />

或只使用name="contentType"