01: /*
02: * $Id: DefaultExceptionStrategy.java 10489 2008-01-23 17:53:38Z dfeist $
03: * --------------------------------------------------------------------------------------
04: * Copyright (c) MuleSource, Inc. All rights reserved. http://www.mulesource.com
05: *
06: * The software in this package is published under the terms of the CPAL v1.0
07: * license, a copy of which has been included with this distribution in the
08: * LICENSE.txt file.
09: */
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: public void handleMessagingException(MuleMessage message,
27: Throwable t) {
28: defaultHandler(t);
29: routeException(messageFromContextIfAvailable(message), null, t);
30: }
31:
32: public void handleRoutingException(MuleMessage message,
33: ImmutableEndpoint endpoint, Throwable t) {
34: defaultHandler(t);
35: routeException(messageFromContextIfAvailable(message),
36: endpoint, t);
37: }
38:
39: public void handleLifecycleException(Object component, Throwable t) {
40: // Do nothing special here. Overriding implmentations may want alter the
41: // behaviour
42: handleStandardException(t);
43: logger.error("The object that failed was: \n"
44: + ObjectUtils.toString(component, "null"));
45: }
46:
47: public void handleStandardException(Throwable t) {
48: markTransactionForRollback();
49: // Attempt to send the exception details to an endpoint if one is set
50: if (RequestContext.getEventContext() != null) {
51: handleMessagingException(RequestContext.getEventContext()
52: .getMessage(), t);
53: } else {
54: logger
55: .info("There is no current event available, routing Null message with the exception");
56: handleMessagingException(new DefaultMuleMessage(NullPayload
57: .getInstance()), t);
58: }
59: }
60:
61: protected void defaultHandler(Throwable t) {
62: if (RequestContext.getEvent() != null) {
63: RequestContext
64: .setExceptionPayload(new DefaultExceptionPayload(t));
65: }
66: }
67:
68: protected MuleMessage messageFromContextIfAvailable(
69: MuleMessage message) {
70: if (null != RequestContext.getEvent()) {
71: return RequestContext.getEvent().getMessage();
72: } else {
73: return message;
74: }
75: }
76:
77: }
|