View Javadoc

1   /*
2    * $Id: DefaultExceptionStrategy.java 11468 2008-03-21 17:54:46Z rossmason $
3    * --------------------------------------------------------------------------------------
4    * Copyright (c) MuleSource, Inc.  All rights reserved.  http://www.mulesource.com
5    *
6    * The software in this package is published under the terms of the CPAL v1.0
7    * license, a copy of which has been included with this distribution in the
8    * LICENSE.txt file.
9    */
10  
11  package org.mule;
12  
13  import org.mule.api.MuleMessage;
14  import org.mule.api.endpoint.ImmutableEndpoint;
15  import org.mule.message.DefaultExceptionPayload;
16  import org.mule.transport.NullPayload;
17  import org.mule.util.ObjectUtils;
18  
19  /**
20   * <code>DefaultExceptionStrategy</code> provides a default exception handling
21   * strategy.
22   */
23  
24  public class DefaultExceptionStrategy extends AbstractExceptionListener
25  {
26  
27      public void handleMessagingException(MuleMessage message, Throwable t)
28      {
29          defaultHandler(t);
30          routeException(messageFromContextIfAvailable(message), null, t);
31      }
32  
33      public void handleRoutingException(MuleMessage message, ImmutableEndpoint endpoint, Throwable t)
34      {
35          defaultHandler(t);
36          routeException(messageFromContextIfAvailable(message), endpoint, t);
37      }
38  
39      public void handleLifecycleException(Object component, Throwable t)
40      {
41          // Do nothing special here. Overriding implmentations may want alter the
42          // behaviour
43          handleStandardException(t);
44          logger.error("The object that failed was: \n" + ObjectUtils.toString(component, "null"));
45      }
46  
47      public void handleStandardException(Throwable t)
48      {
49          handleTransaction(t);
50          // Attempt to send the exception details to an endpoint if one is set
51          if (RequestContext.getEventContext() != null)
52          {
53              handleMessagingException(RequestContext.getEventContext().getMessage(), t);
54          }
55          else
56          {
57              logger.info("There is no current event available, routing Null message with the exception");
58              handleMessagingException(new DefaultMuleMessage(NullPayload.getInstance()), t);
59          }
60      }
61  
62      protected void defaultHandler(Throwable t)
63      {
64          if (RequestContext.getEvent() != null)
65          {
66              RequestContext.setExceptionPayload(new DefaultExceptionPayload(t));
67          }
68      }
69  
70      protected MuleMessage messageFromContextIfAvailable(MuleMessage message)
71      {
72          if (null != RequestContext.getEvent())
73          {
74              return RequestContext.getEvent().getMessage();
75          }
76          else
77          {
78              return message;
79          }
80      }
81  
82  }