Exception handling Mule始终使用默认的异常处理程序
我无法捕获轮询器组件触发的基本org.mule异常,mule仍在使用默认机制(尝试全局或本地) 如果抛出下面的异常,我想在日志中打印一些个人信息,这只是出于测试目的,一旦工作正常,就会有进一步的增强Exception handling Mule始终使用默认的异常处理程序,exception-handling,mule,mule-studio,Exception Handling,Mule,Mule Studio,我无法捕获轮询器组件触发的基本org.mule异常,mule仍在使用默认机制(尝试全局或本地) 如果抛出下面的异常,我想在日志中打印一些个人信息,这只是出于测试目的,一旦工作正常,就会有进一步的增强 Message : Failed to move file "C:\Users\Administrator\Desktop\shared_folder\12131551.XML" to "C:\Users\Administrator\Desktop\archive\bac
Message : Failed to move file "C:\Users\Administrator\Desktop\shared_folder\12131551.XML" to "C:\Users\Administrator\Desktop\archive\backup\12131551.XML.backup". The file might already exist.
Code : MULE_ERROR-3
Exception stack is:
1. Failed to move file "C:\Users\Administrator\Desktop\shared_folder\12131551.XML" to "C:\Users\Administrator\Desktop\archive\backup\12131551.XML.backup". The file might already exist. (org.mule.api.DefaultMuleException)
org.mule.transport.file.FileMessageReceiver:553 (http://www.mulesoft.org/docs/site/current3/apidocs/org/mule/api/DefaultMuleException.html)
Root Exception stack trace:
org.mule.api.DefaultMuleException: Failed to move file "C:\Users\Administrator\Desktop\shared_folder\12131551.XML" to "C:\Users\Administrator\Desktop\archive\backup\12131551.XML.backup". The file might already exist.
at org.mule.transport.file.FileMessageReceiver.moveAndDelete(FileMessageReceiver.java:553)
at org.mule.transport.file.FileMessageReceiver.access$400(FileMessageReceiver.java:62)
at org.mule.transport.file.FileMessageReceiver$2.process(FileMessageReceiver.java:414)
+ 3 more (set debug level logging or '-Dmule.verbose.exceptions=true' for everything)
这是我的PoC
<file:connector name="XML_poller" autoDelete="false" streaming="false" validateConnections="true" pollingFrequency="5000" doc:name="File"/>
<file:connector name="output" doc:name="File" autoDelete="false" streaming="false" validateConnections="true"/>
<flow name="exceptionStrategyExample" doc:name="exceptionStrategyExample">
<file:inbound-endpoint connector-ref="XML_poller" path="C:\Users\Administrator\Desktop\shared_folder" moveToDirectory="C:\Users\Administrator\Desktop\archive\backup"
moveToPattern="#[header:originalFilename].backup" doc:name="Poller" responseTimeout="10000">
<file:filename-wildcard-filter pattern="*.xml" caseSensitive="false"/>
</file:inbound-endpoint>
<http:outbound-endpoint exchange-pattern="request-response" host="localhost" port="8081" method="POST" doc:name="HTTP"/>
<choice-exception-strategy>
<rollback-exception-strategy
when="exception.causedBy(java.lang.IllegalStateException)"
maxRedeliveryAttempts="3">
<logger message="Retrying shipping cost calc." level="WARN" />
<on-redelivery-attempts-exceeded>
<logger message="Too many retries shipping cost calc."
level="WARN" />
<set-payload value="Error: #[exception.summaryMessage]"/>
</on-redelivery-attempts-exceeded>
</rollback-exception-strategy>
<catch-exception-strategy doc:name="Catch Exception Strategy" when="exception.causedBy(org.mule.*)">
<logger message="************TEST***************" level="INFO" doc:name="Logger"/>
</catch-exception-strategy>
</choice-exception-strategy>
</flow>
它只是什么都不做。。。。有什么提示吗?我认为这是一个系统异常的情况,没有创建任何异常处理组件可能捕获的消息(请参阅系统与消息异常)。您可以尝试编写一个自定义消息接收器来覆盖processFile方法(请参阅以获取灵感),或者手动检查是否存在重复文件,并使用一个单独的文件:出站端点来编写文件。我找到了一个解决方法。在文件连接器之前插入处理器链元素,并放置一个虚拟的
设置有效负载
。通过这种方式,您将始终创建一条消息,然后它将不会使用DefaultExceptionStrategy
来处理错误。在日志中,我发现Mule仍在调用org.Mule.exception.defaultsystemexceptionstrategy。那么如何覆盖SystemExceptionStrategy?您应该能够使用setExceptionListener,您可以实现一个MuleContextAware Springbean来访问MuleContext。不过,我自己从来没有尝试过,所以请参阅相关类的文档/源代码以了解更多信息。