(今天进一步更新:来自DataMapper处理器的异常不会触发CathcExcpetionStratey。来自其他组件的异常会被捕获。这听起来像是DataMapper的错误!我们正在使用3.5.x骡子有人遇到过这个吗?)
我有一个简单的用例"从文件夹中读取xml文件,使用dataMapper将其转换为另一种格式...一旦完成,将此文件移动到已处理文件夹"。这非常有效。但后来我将CatchExceptionStrategy添加到"用datamapper(或其他)捕获所有错误,并在本节中,将错误的xml文件移动到errors文件夹。 我的问题是没有调用CatchExceptionStrategy。控制台显示错误发生....但不调用CatchExceptionStragey。这是流程......
<flow name="FLOW_xml" doc:name="FLOW_xml" doc:description="this using XML in and customer format output">
<file:inbound-endpoint path="D:\inpath" pollingFrequency="5000" responseTimeout="10000" doc:name="XML Folder Source" />
<object-to-string-transformer doc:name="Object to String "/>
<data-mapper:transform config-ref="DataMapper_XmlToInternal" stream="true" pipeSize="5000" doc:name="DataMapper_XmlToInternal">
<data-mapper:input-arguments>
<data-mapper:input-argument key="SourceType">XML</data-mapper:input-argument>
<data-mapper:input-argument key="SourceFileName">#[message.inboundProperties['originalFilename']]</data-mapper:input-argument>
</data-mapper:input-arguments>
</data-mapper:transform>
<file:outbound-endpoint path="D:\outpath" outputPattern="#[message.inboundProperties['originalFilename']+'.json']" responseTimeout="10000" doc:name="FilePathToInternal"/>
<response>
<logger message="++++END OF PROCESS REACHED++++" level="ERROR" doc:name="Logger"/>
</response>
<catch-exception-strategy doc:name="Catch Exception Strategy">
<set-payload value="Error has occurred....." doc:name="Set Payload"/>
<logger level="ERROR" doc:name="Logger" message="Exception caught... #[message.payload]"/>
</catch-exception-strategy>
</flow>
看起来应该很简单。相同的方法适用于HTTP inboud / outbound示例....出错时它会进入CES部分并执行客户输出。
有人能说出我的做法是否有问题吗?
答案 0 :(得分:0)
如果启用了流媒体模式,则transfirmation是懒惰的并且不会引发异常。这是一个已知的限制。
请尝试不使用流媒体模式。