与Spring集成使用HttpOutboundGateway时发生HTTP 415错误
问题描述:
我构建了一个简单的Spring集成应用程序,它从目录中读取CSV文件,将它们转换为XML文档并通过REST XML Web服务将它们发送到系统。与Spring集成使用HttpOutboundGateway时发生HTTP 415错误
集成信息流看起来是这样的:
<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
是在它建立与一个StringBuilder一个XML字符串映射项的简单循环。然后将这个XML字符串用XSLT转换为目标系统预期的格式。
流程的工作原理与我期待的非常相似。它发送一个POST请求到目标系统的有效载荷,但它返回一个HTTP 415回应:
Caused by: org.springframework.web.client.HttpClientErrorException: 415 Cannot consume content type
好像我做一个简单的愚蠢的错误与我的流量,但我相信新的Spring集成和自己找不到它。
请帮
答
弹簧消息内容类型邮件头是contentType
,不Content-Type
。
请参阅MessageHeaders.CONTENT_TYPE
- 它被映射到Http Content-Type
标题。
您可以通过规划环境地政司使用常量:
<header name="#{T(org.springframework.messaging.MessageHeaders).CONTENT_TYPE}"
value="text/xml" />
或只使用name="contentType"
+0
谢谢你,工作。而且,@meistermeier也是对的。所以当我应用“contentType”名称和“application/xml”值时 - 所有的工作!谢谢 – artemb
目标系统所期望的'应用程序/ xml'取代'文/ xml'并非常严格的这一点。 Info:'application/xml'也是有效的,并且定义了对人类来说不可读(模糊的定义)的媒体类型。 – meistermeier
嗨@meistermeier。你是对的,应用程序确实期望'application/xml',但这不是唯一的问题。你和Gary的建议相结合帮助了我! – artemb