01: /*
02: * Copyright 2002-2007 the original author or authors.
03: *
04: * Licensed under the Apache License, Version 2.0 (the "License");
05: * you may not use this file except in compliance with the License.
06: * You may obtain a copy of the License at
07: *
08: * http://www.apache.org/licenses/LICENSE-2.0
09: *
10: * Unless required by applicable law or agreed to in writing, software
11: * distributed under the License is distributed on an "AS IS" BASIS,
12: * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13: * See the License for the specific language governing permissions and
14: * limitations under the License.
15: */
16:
17: package org.springframework.jms;
18:
19: import javax.jms.JMSException;
20:
21: import org.springframework.core.NestedRuntimeException;
22:
23: /**
24: * Base class for exception thrown by the framework whenever it
25: * encounters a problem related to JMS.
26: *
27: * @author Mark Pollack
28: * @author Juergen Hoeller
29: * @since 1.1
30: */
31: public abstract class JmsException extends NestedRuntimeException {
32:
33: /**
34: * Constructor that takes a message.
35: * @param msg the detail message
36: */
37: public JmsException(String msg) {
38: super (msg);
39: }
40:
41: /**
42: * Constructor that takes a message and a root cause.
43: * @param msg the detail message
44: * @param cause the cause of the exception. This argument is generally
45: * expected to be a proper subclass of {@link javax.jms.JMSException},
46: * but can also be a JNDI NamingException or the like.
47: */
48: public JmsException(String msg, Throwable cause) {
49: super (msg, cause);
50: }
51:
52: /**
53: * Constructor that takes a plain root cause, intended for
54: * subclasses mirroring corresponding <code>javax.jms</code> exceptions.
55: * @param cause the cause of the exception. This argument is generally
56: * expected to be a proper subclass of {@link javax.jms.JMSException}.
57: */
58: public JmsException(Throwable cause) {
59: super (cause != null ? cause.getMessage() : null, cause);
60: }
61:
62: /**
63: * Convenience method to get the vendor specific error code if
64: * the root cause was an instance of JMSException.
65: * @return a string specifying the vendor-specific error code if the
66: * root cause is an instance of JMSException, or <code>null</code>
67: */
68: public String getErrorCode() {
69: if (getCause() instanceof JMSException) {
70: return ((JMSException) getCause()).getErrorCode();
71: }
72: return null;
73: }
74:
75: /**
76: * Return the detail message, including the message from the linked exception
77: * if there is one.
78: * @see javax.jms.JMSException#getLinkedException
79: */
80: public String getMessage() {
81: String message = super .getMessage();
82: Throwable cause = getCause();
83: if (cause instanceof JMSException) {
84: Exception linkedEx = ((JMSException) cause)
85: .getLinkedException();
86: if (linkedEx != null) {
87: message = message + "; nested exception is " + linkedEx;
88: }
89: }
90: return message;
91: }
92:
93: }
|