View Javadoc
1   /*
2    * Copyright (c) MuleSoft, Inc.  All rights reserved.  http://www.mulesoft.com
3    * The software in this package is published under the terms of the CPAL v1.0
4    * license, a copy of which has been included with this distribution in the
5    * LICENSE.txt file.
6    */
7   package org.mule.component;
8   
9   import org.mule.api.MessagingException;
10  import org.mule.api.MuleEvent;
11  import org.mule.api.component.Component;
12  import org.mule.config.i18n.CoreMessages;
13  import org.mule.config.i18n.Message;
14  
15  /**
16   * <code>ComponentException</code> should be thrown when some action on a component
17   * fails, such as starting or stopping
18   */
19  // @ThreadSafe
20  public class ComponentException extends MessagingException
21  {
22      /**
23       * Serial version
24       */
25      private static final long serialVersionUID = 56178344205041600L;
26  
27      private final transient Component component;
28  
29      public ComponentException(Message message, MuleEvent muleMessage, Component component)
30      {
31          super(generateMessage(message, component), muleMessage);
32          this.component = component;
33      }
34  
35      public ComponentException(Message message, MuleEvent event, Component component, Throwable cause)
36      {
37          super(generateMessage(message, component), event, cause);
38          this.component = component;
39      }
40  
41      public ComponentException(MuleEvent message, Component component, Throwable cause)
42      {
43          super(generateMessage(null, component), message, cause);
44          this.component = component;
45      }
46  
47      public Component getComponent()
48      {
49          return component;
50      }
51  
52      private static Message generateMessage(Message previousMessage, Component component)
53      {
54          Message returnMessage = CoreMessages.componentCausedErrorIs(component);
55          if (previousMessage != null)
56          {
57              previousMessage.setNextMessage(returnMessage);
58              return previousMessage;
59          }
60          else
61          {
62              return returnMessage;
63          }
64      }
65  }