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