1
2
3
4
5
6
7 package org.mule.expression.transformers;
8
9 import org.mule.api.MuleMessage;
10 import org.mule.api.expression.ExpressionRuntimeException;
11 import org.mule.api.expression.RequiredValueException;
12 import org.mule.api.transformer.TransformerException;
13 import org.mule.config.i18n.CoreMessages;
14 import org.mule.transport.NullPayload;
15
16 import java.util.Iterator;
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37 public class ExpressionTransformer extends AbstractExpressionTransformer
38 {
39 private boolean returnSourceIfNull = false;
40
41 @Override
42 public Object transformMessage(MuleMessage message, String outputEncoding) throws TransformerException
43 {
44 Object results[] = new Object[arguments.size()];
45 int i = 0;
46 for (Iterator<ExpressionArgument> iterator = arguments.iterator(); iterator.hasNext(); i++)
47 {
48 ExpressionArgument argument = iterator.next();
49 try
50 {
51 results[i] = argument.evaluate(message);
52 }
53 catch (RequiredValueException e)
54 {
55 if(!argument.isOptional())
56 {
57 throw e;
58 }
59 logger.warn(e.getMessage());
60 }
61 catch (ExpressionRuntimeException e)
62 {
63 throw new TransformerException(this, e);
64 }
65
66 if (!argument.isOptional() && results[i] == null)
67 {
68 throw new TransformerException(CoreMessages.expressionEvaluatorReturnedNull(
69 argument.getExpressionConfig().getEvaluator(), argument.getExpressionConfig().getExpression()), this);
70
71 }
72
73 }
74 if (isReturnSourceIfNull() && checkIfAllAreNull(results))
75 {
76 return message;
77 }
78
79 if (results.length == 1)
80 {
81 return results[0];
82 }
83 else
84 {
85 return results;
86 }
87 }
88
89 private boolean checkIfAllAreNull(Object[] objects)
90 {
91 for (int i = 0; i < objects.length; i++)
92 {
93 if (objects[i] != null && !(objects[i] instanceof NullPayload))
94 {
95 return false;
96 }
97 }
98 return true;
99 }
100
101 public boolean isReturnSourceIfNull()
102 {
103 return returnSourceIfNull;
104 }
105
106 public void setReturnSourceIfNull(boolean returnSourceIfNull)
107 {
108 this.returnSourceIfNull = returnSourceIfNull;
109 }
110 }