我正在构建一个简单的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的新手并且自己找不到它。
请帮忙
答案 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"