1
2
3
4
5
6
7
8
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
21
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
42
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
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 }