View Javadoc

1   /*
2    * $Id: MessageExpressionEvaluator.java 12067 2008-06-16 13:53:26Z dirk.olmes $
3    * --------------------------------------------------------------------------------------
4    * Copyright (c) MuleSource, Inc.  All rights reserved.  http://www.mulesource.com
5    *
6    * The software in this package is published under the terms of the CPAL v1.0
7    * license, a copy of which has been included with this distribution in the
8    * LICENSE.txt file.
9    */
10  
11  package org.mule.util.expression;
12  
13  import org.mule.api.ExceptionPayload;
14  import org.mule.api.MuleMessage;
15  import org.mule.api.transport.MessageAdapter;
16  import org.mule.util.StringUtils;
17  
18  import org.apache.commons.logging.Log;
19  import org.apache.commons.logging.LogFactory;
20  
21  /**
22   * Returns properties on the MuleMessage itself. The supported expressions map directly to methods on the message.
23   * For example:
24   * <ul>
25   * <li>id - returns the value of {@link org.mule.api.MuleMessage#getUniqueId()}</li>
26   * <li>correlationId - returns the value of {@link org.mule.api.MuleMessage#getCorrelationId()}</li>
27   * <li>correlationGroupSize - returns the value of {@link org.mule.api.MuleMessage#getCorrelationGroupSize()}</li>
28   * <li>correlationSequence - returns the value of {@link org.mule.api.MuleMessage#getCorrelationSequence()}</li>
29   * <li>replyTo - returns the value of {@link org.mule.api.MuleMessage#getReplyTo()}</li>
30   * <li>payload - returns the value of {@link org.mule.api.MuleMessage#getPayload()}</li>
31   * <li>encoding - returns the value of {@link org.mule.api.MuleMessage#getEncoding()}</li>
32   * <li>exception - returns the value of {@link org.mule.api.MuleMessage#getExceptionPayload().getException()} or null if there is no exception payload</li>
33   * </ul>
34   * If no expression is set the MuleMessage itself will be returned.
35   * <p/>
36   * If the object passed in is not a MuleMessage, the same object will be returned.
37   *
38   * @see org.mule.util.expression.ExpressionEvaluator
39   * @see org.mule.util.expression.ExpressionEvaluatorManager
40   */
41  public class MessageExpressionEvaluator implements ExpressionEvaluator
42  {
43      public static final String NAME = "message";
44  
45      /**
46       * logger used by this class
47       */
48      protected transient final Log logger = LogFactory.getLog(MessagePayloadExpressionEvaluator.class);
49  
50      public Object evaluate(String expression, Object message)
51      {
52          if (message instanceof MuleMessage)
53          {
54              if (StringUtils.isEmpty(expression))
55              {
56                  return message;
57              }
58              else
59              {
60                  if (expression.equals("id"))
61                  {
62                      return ((MuleMessage) message).getUniqueId();
63                  }
64                  else if (expression.equals("correlationId"))
65                  {
66                      return ((MuleMessage) message).getCorrelationId();
67                  }
68                  else if (expression.equals("correlationSequence"))
69                  {
70                      return new Integer(((MuleMessage) message).getCorrelationSequence());
71                  }
72                  else if (expression.equals("correlationGroupSize"))
73                  {
74                      return new Integer(((MuleMessage) message).getCorrelationGroupSize());
75                  }
76                  else if (expression.equals("replyTo"))
77                  {
78                      return ((MuleMessage) message).getReplyTo();
79                  }
80                  else if (expression.equals("payload"))
81                  {
82                      return ((MuleMessage) message).getPayload();
83                  }
84                  else if (expression.equals("encoding"))
85                  {
86                      return ((MuleMessage) message).getEncoding();
87                  }
88                  else if (expression.equals("exception"))
89                  {
90                      ExceptionPayload ep = ((MuleMessage) message).getExceptionPayload();
91                      if (ep != null)
92                      {
93                          return ep.getException();
94                      }
95                      return null;
96                  }
97                  else
98                  {
99                      throw new IllegalArgumentException(expression);
100                 }
101 
102             }
103         }
104         else
105         {
106             logger.warn("Message is not of type MuleMessage, the expression will return the object without modification");
107             if (message instanceof MessageAdapter)
108             {
109                 return ((MessageAdapter) message).getPayload();
110             }
111         }
112         return message;
113 
114     }
115 
116     /**
117      * {@inheritDoc}
118      */
119     public String getName()
120     {
121         return NAME;
122     }
123 
124     /**
125      * {@inheritDoc}
126      */
127     public void setName(String name)
128     {
129         throw new UnsupportedOperationException("setName");
130     }
131 }