Issue Details (XML | Word | Printable)

Key: SMXCOMP-570
Type: New Feature New Feature
Status: Open Open
Priority: Major Major
Assignee: Unassigned
Reporter: Trevor Pounds
Votes: 0
Watchers: 0
Operations

If you were logged in you would be able to see more operations.
ServiceMix Components

Allow exceptions to be handled as JBI faults

Created: 15/Jun/09 01:50 PM   Updated: 15/Jun/09 02:45 PM
Component/s: servicemix-common
Affects Version/s: None
Fix Version/s: None

Time Tracking:
Not Specified

File Attachments:
  Size
File Licensed for inclusion in ASF works SMXCOMP-125.diff 2009-06-15 02:45 PM Trevor Pounds 7 kB
Issue Links:
Related
 
Supercedes
 

Patch Info: Patch Available


 Description  « Hide
When an exception is thrown in a provider endpoint impl it is handled as a JBI error in most cases. Howeverm in some cases (i.e. SAXParseException) it may be useful to translate these exceptions into a JBI fault message which can then be handled by the exchange if needed. I've provided a simple patch to the base ProviderEndpoint class to provide setting exceptiosn that will be handled as JBI faults.

The following are a few examples of how the xbean.xml can be configured to handle exceptions:

<saxon:xslt
   service="example:myService"
   endpoint="myXSLT"
   resource="classpath:myDocument.xsl"
   handleExceptionsAsFault="java.lang.Exception"/>


<eip:message-filter
   service="example:myService"
   endpoint="myEIP"
   handleExceptionsAsFault="java.lang.Exception">
   <eip:target>
      <eip:exchange-target service="canonical:mte-pipeline" endpoint=""/>
   </eip:target>
   <eip:filter>
      <eip:xpath-predicate xpath="not(/FOO or /BAR)" namespaceContext="#nsContext"/>
   </eip:filter>
</eip:message-filter>


 All   Comments   Work Log   Change History   Subversion Commits   FishEye   Crucible      Sort Order: Ascending order - Click to sort in descending order
Trevor Pounds added a comment - 15/Jun/09 01:50 PM
attaching patch against ServiceMix 3.3.1.8-fuse release

Trevor Pounds added a comment - 15/Jun/09 02:06 PM
attaching more complete patch with exception handling in eip endpoint

Trevor Pounds added a comment - 15/Jun/09 02:11 PM
I would also like to note that this patch provides generic functionality for all provider endpoints so long as they do not override the process() method on the ProviderEndpoint base class. The classes that do this should be add an additional try/catch block that handles the exception using the super classes handleException() method as it is done for the EIP endpoint in the attached patch. It may be beneficial to refactor the ProviderEndpoint interface to not allow classes to override this method and instead provide hooks to handle different MEPs from within the base class.