在我的入站网关中使用邮件转换器发生转换错误时,我遇到了一种奇怪的行为。下面的示例中的想法是接收XML有效负载(或序列化的Java),将它们转换为java对象并使用相同的媒体类型进行响应。
鉴于此配置:
<bean id="converterXml" class="org.springframework.http.converter.xml.Jaxb2RootElementHttpMessageConverter" />
<bean id="converterSerialized" class="org.springframework.integration.http.converter.SerializingHttpMessageConverter" />
<util:list id="converters">
<ref bean="converterXml" />
<ref bean="converterSerialized" />
</util:list>
<int-http:inbound-gateway id="inboundIntegrationGateway"
view-name="/integration"
message-converters="converters" error-channel="errorChannel"
request-payload-type="MyXmlPojo"
supported-methods="POST" request-channel="inboundIntegration"
path="/services/integration"
reply-timeout="50000">
</int-http:inbound-gateway>
如果提交了无效的XML有效负载(例如,没有结束标记),则JAXB XML转换器中引发的异常HttpMessageNotReadableException
不会在errorChannel中转发(我在其中定义了一个服务激活器来处理异常)。请注意,此处理程序在有效负载转换后效果良好。
<int:service-activator input-channel="errorChannel" ref="exceptionHandlerService"
method="handleException" requires-reply="true" />
我在这里缺少什么?为什么我的错误处理程序没有处理HttpMessageNotReadableException
?欢迎任何帮助!
答案 0 :(得分:2)
为什么我的错误处理程序不处理HttpMessageNotReadableException?
Message
仅在我们已将Message
发送到下游流程时生效,但如果您的传入HTTP请求无法转换为error-channel
,则仍然有效没有要发送给convertExceptions = true
。
是的,使用HttpMessageConverter
,我们不能按原样返回异常,并让一些SerializingHttpMessageConverter
将其转换为合理的HTTP响应。通常情况cherrypy.config.update({'server.socket_host': '127.0.0.1',
'server.socket_port': 9023
})
在场。
为什么这个异常没有包含在MessageHandlingException中并发送到我的错误处理程序?
仅仅是因为我们尚未接通消息。有了您的问题,我们仍然处于标准的Spring MVC环境中,在请求转换期间,Spring Integration仍然无能为力。
您应该考虑Spring MVC的一些解决方案:http://docs.spring.io/spring/docs/current/spring-framework-reference/html/mvc.html#mvc-exceptionhandlers
答案 1 :(得分:0)
将convert-exceptions="true"
添加到int-http:inbound-gateway
可以解决异常流问题。这post对我有用。