View Javadoc

1   package org.codehaus.xfire;
2   
3   import java.io.PrintStream;
4   import java.io.PrintWriter;
5   
6   /***
7    * Used for internal XFire exceptions when a fault shouldn't be returned to the service invoker.
8    *
9    * @author <a href="mailto:dan@envoisolutions.com">Dan Diephouse</a>
10   * @since Feb 14, 2004
11   */
12  public class XFireRuntimeException
13          extends RuntimeException
14  {
15      private Throwable cause;
16      private String message;
17      
18      /***
19       * Constructs a new xfire runtime exception with the specified detail message.
20       *
21       * @param message the detail message.
22       */
23      public XFireRuntimeException(String message)
24      {
25          super(message);
26          this.message = message;
27      }
28  
29      /***
30       * Constructs a new xfire runtime exception with the specified detail message and cause.
31       *
32       * @param message the detail message.
33       * @param cause   the cause.
34       */
35      public XFireRuntimeException(String message, Throwable cause)
36      {
37          super(message);
38          this.message = message;
39          this.cause = cause;
40      }
41  
42  
43      /***
44       * Returns the cause of this throwable or <code>null</code> if the  cause is nonexistent or unknown.
45       *
46       * @return the nested cause.
47       */
48      public Throwable getCause()
49      {
50          return (this.cause == this ? null : this.cause);
51      }
52  
53      /***
54       * Return the detail message, including the message from the {@link #getCause() nested exception} if there is one.
55       *
56       * @return the detail message.
57       */
58      public String getMessage()
59      {
60          if (this.cause == null || this.cause == this)
61          {
62              return message;
63          }
64          else
65          {
66              return message + ". Nested exception is " + this.cause.getClass().getName() +
67                      ": " + this.cause.getMessage();
68          }
69      }
70  
71      public String getActualMessage()
72      {
73          return message;
74      }
75      
76      /***
77       * Prints this throwable and its backtrace to the specified print stream.
78       *
79       * @param s <code>PrintStream</code> to use for output
80       */
81      public void printStackTrace(PrintStream s)
82      {
83          if (this.cause == null || this.cause == this)
84          {
85              super.printStackTrace(s);
86          }
87          else
88          {
89              s.println(this);
90              this.cause.printStackTrace(s);
91          }
92      }
93  
94      /***
95       * Prints this throwable and its backtrace to the specified print writer.
96       *
97       * @param w <code>PrintWriter</code> to use for output
98       */
99      public void printStackTrace(PrintWriter w)
100     {
101         if (this.cause == null || this.cause == this)
102         {
103             super.printStackTrace(w);
104         }
105         else
106         {
107             w.println(this);
108             this.cause.printStackTrace(w);
109         }
110     }
111 
112     public void prepend(String message)
113     {
114         if(this.message != null)
115         {
116             this.message = message + ": " + this.message;
117         }
118         else
119         {
120             this.message = message;
121         }
122     }
123     
124     public void setMessage(String s)
125     {
126         message = s;
127     }
128 }