Question

I can not catch a basic org.mule exception triggered by a Poller component, Mule is still using the default mechanism (tried both Global or Local)

In case the below exception is thrown I would like to print something personal in the Log it self just for testing purpose, further enhancements will occur once this is working properly.

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)

This is my 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>

It is simply not doing anything.... Any hints ?

Was it helpful?

Solution

I think this is a case of a System Exception, where no message is created that could be caught by the exception handling components (see Mule docs for System vs Messaging exceptions). You could try either writing a custom message receiver overriding the processFile method (see this post for inspiration), or check the existence of duplicate files manually and use a separate file:outbound-endpoint for writing the file.

OTHER TIPS

I have found a workaround. Insert a processor chain element before file connector and put a dummy set-payload. In this way you will always create a message and then it ll not use DefaultExceptionStrategy for handling the errors.

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top