You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@camel.apache.org by da...@apache.org on 2015/12/15 18:32:12 UTC
[1/2] camel git commit: CAMEL-9212: Enable dynamic values in the
headerName / propertyName.
Repository: camel
Updated Branches:
refs/heads/master 823402193 -> 5d77c1162
CAMEL-9212: Enable dynamic values in the headerName / propertyName.
Project: http://git-wip-us.apache.org/repos/asf/camel/repo
Commit: http://git-wip-us.apache.org/repos/asf/camel/commit/140be42e
Tree: http://git-wip-us.apache.org/repos/asf/camel/tree/140be42e
Diff: http://git-wip-us.apache.org/repos/asf/camel/diff/140be42e
Branch: refs/heads/master
Commit: 140be42e8ebee44403eac81b1881eab17cbb6b5f
Parents: 8234021
Author: Sami Nurminen <sn...@gmail.com>
Authored: Sat Nov 28 13:52:04 2015 +0200
Committer: Claus Ibsen <da...@apache.org>
Committed: Tue Dec 15 17:30:18 2015 +0100
----------------------------------------------------------------------
.../apache/camel/builder/ExpressionBuilder.java | 13 ++++++
.../apache/camel/model/SetHeaderDefinition.java | 16 ++++---
.../camel/model/SetPropertyDefinition.java | 4 +-
.../camel/processor/SetHeaderProcessor.java | 16 +++++--
.../camel/processor/SetPropertyProcessor.java | 17 +++++--
.../SpringSetHeaderNameDynamicTest.java | 46 +++++++++++++++++++
.../SpringSetPropertyNameDynamicTest.java | 48 ++++++++++++++++++++
.../spring/processor/setHeaderNameDynamic.xml | 36 +++++++++++++++
.../spring/processor/setPropertyNameDynamic.xml | 36 +++++++++++++++
9 files changed, 214 insertions(+), 18 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/camel/blob/140be42e/camel-core/src/main/java/org/apache/camel/builder/ExpressionBuilder.java
----------------------------------------------------------------------
diff --git a/camel-core/src/main/java/org/apache/camel/builder/ExpressionBuilder.java b/camel-core/src/main/java/org/apache/camel/builder/ExpressionBuilder.java
index 8563a14..eef4976 100644
--- a/camel-core/src/main/java/org/apache/camel/builder/ExpressionBuilder.java
+++ b/camel-core/src/main/java/org/apache/camel/builder/ExpressionBuilder.java
@@ -57,6 +57,8 @@ import org.apache.camel.util.GroupIterator;
import org.apache.camel.util.IOHelper;
import org.apache.camel.util.ObjectHelper;
import org.apache.camel.util.OgnlHelper;
+import org.apache.camel.util.StringHelper;
+
/**
* A helper class for working with <a href="http://camel.apache.org/expression.html">expressions</a>.
@@ -1876,6 +1878,17 @@ public final class ExpressionBuilder {
};
}
+ /**
+ * Returns Simple expression or fallbacks to Constant expression
+ * if expression str is not Simple expression.
+ */
+ public static Expression parseSimpleOrFallbackToConstantExpression(String str, CamelContext camelContext) {
+ if (StringHelper.hasStartToken(str, "simple")) {
+ return camelContext.resolveLanguage("simple").createExpression(str);
+ }
+ return constantExpression(str);
+ }
+
public static Expression propertiesComponentExpression(final String key, final String locations) {
return new ExpressionAdapter() {
public Object evaluate(Exchange exchange) {
http://git-wip-us.apache.org/repos/asf/camel/blob/140be42e/camel-core/src/main/java/org/apache/camel/model/SetHeaderDefinition.java
----------------------------------------------------------------------
diff --git a/camel-core/src/main/java/org/apache/camel/model/SetHeaderDefinition.java b/camel-core/src/main/java/org/apache/camel/model/SetHeaderDefinition.java
index 6d1f794e..2d51f3a 100644
--- a/camel-core/src/main/java/org/apache/camel/model/SetHeaderDefinition.java
+++ b/camel-core/src/main/java/org/apache/camel/model/SetHeaderDefinition.java
@@ -39,7 +39,7 @@ import org.apache.camel.util.ObjectHelper;
public class SetHeaderDefinition extends NoOutputExpressionNode {
@XmlAttribute(required = true)
private String headerName;
-
+
public SetHeaderDefinition() {
}
@@ -50,14 +50,14 @@ public class SetHeaderDefinition extends NoOutputExpressionNode {
public SetHeaderDefinition(String headerName, Expression expression) {
super(expression);
- setHeaderName(headerName);
+ setHeaderName(headerName);
}
public SetHeaderDefinition(String headerName, String value) {
super(ExpressionBuilder.constantExpression(value));
- setHeaderName(headerName);
- }
-
+ setHeaderName(headerName);
+ }
+
@Override
public String toString() {
return "SetHeader[" + getHeaderName() + ", " + getExpression() + "]";
@@ -72,7 +72,9 @@ public class SetHeaderDefinition extends NoOutputExpressionNode {
public Processor createProcessor(RouteContext routeContext) throws Exception {
ObjectHelper.notNull(headerName, "headerName");
Expression expr = getExpression().createExpression(routeContext);
- return new SetHeaderProcessor(getHeaderName(), expr);
+ Expression nameExpr = ExpressionBuilder.parseSimpleOrFallbackToConstantExpression(getHeaderName(),
+ routeContext.getCamelContext());
+ return new SetHeaderProcessor(nameExpr, expr);
}
/**
@@ -94,5 +96,5 @@ public class SetHeaderDefinition extends NoOutputExpressionNode {
public String getHeaderName() {
return headerName;
}
-
+
}
http://git-wip-us.apache.org/repos/asf/camel/blob/140be42e/camel-core/src/main/java/org/apache/camel/model/SetPropertyDefinition.java
----------------------------------------------------------------------
diff --git a/camel-core/src/main/java/org/apache/camel/model/SetPropertyDefinition.java b/camel-core/src/main/java/org/apache/camel/model/SetPropertyDefinition.java
index a0c1376..a4e1f5d 100644
--- a/camel-core/src/main/java/org/apache/camel/model/SetPropertyDefinition.java
+++ b/camel-core/src/main/java/org/apache/camel/model/SetPropertyDefinition.java
@@ -72,7 +72,9 @@ public class SetPropertyDefinition extends NoOutputExpressionNode {
public Processor createProcessor(RouteContext routeContext) throws Exception {
ObjectHelper.notNull(getPropertyName(), "propertyName", this);
Expression expr = getExpression().createExpression(routeContext);
- return new SetPropertyProcessor(getPropertyName(), expr);
+ Expression nameExpr = ExpressionBuilder.parseSimpleOrFallbackToConstantExpression(getPropertyName(),
+ routeContext.getCamelContext());
+ return new SetPropertyProcessor(nameExpr, expr);
}
/**
http://git-wip-us.apache.org/repos/asf/camel/blob/140be42e/camel-core/src/main/java/org/apache/camel/processor/SetHeaderProcessor.java
----------------------------------------------------------------------
diff --git a/camel-core/src/main/java/org/apache/camel/processor/SetHeaderProcessor.java b/camel-core/src/main/java/org/apache/camel/processor/SetHeaderProcessor.java
index 7604af8..74a6733 100644
--- a/camel-core/src/main/java/org/apache/camel/processor/SetHeaderProcessor.java
+++ b/camel-core/src/main/java/org/apache/camel/processor/SetHeaderProcessor.java
@@ -18,6 +18,8 @@ package org.apache.camel.processor;
import org.apache.camel.AsyncCallback;
import org.apache.camel.AsyncProcessor;
+import org.apache.camel.CamelContext;
+import org.apache.camel.CamelContextAware;
import org.apache.camel.Exchange;
import org.apache.camel.Expression;
import org.apache.camel.Message;
@@ -31,10 +33,10 @@ import org.apache.camel.util.AsyncProcessorHelper;
*/
public class SetHeaderProcessor extends ServiceSupport implements AsyncProcessor, Traceable, IdAware {
private String id;
- private final String headerName;
+ private final Expression headerName;
private final Expression expression;
- public SetHeaderProcessor(String headerName, Expression expression) {
+ public SetHeaderProcessor(Expression headerName, Expression expression) {
this.headerName = headerName;
this.expression = expression;
}
@@ -57,7 +59,7 @@ public class SetHeaderProcessor extends ServiceSupport implements AsyncProcessor
boolean out = exchange.hasOut();
Message old = out ? exchange.getOut() : exchange.getIn();
- old.setHeader(headerName, newHeader);
+ old.setHeader(resolveHeaderNameByExchange(exchange), newHeader);
} catch (Throwable e) {
exchange.setException(e);
@@ -67,6 +69,10 @@ public class SetHeaderProcessor extends ServiceSupport implements AsyncProcessor
return true;
}
+ private String resolveHeaderNameByExchange(Exchange exchange) {
+ return this.headerName.evaluate(exchange, String.class);
+ }
+
@Override
public String toString() {
return "SetHeader(" + headerName + ", " + expression + ")";
@@ -85,7 +91,7 @@ public class SetHeaderProcessor extends ServiceSupport implements AsyncProcessor
}
public String getHeaderName() {
- return headerName;
+ return headerName.toString();
}
public Expression getExpression() {
@@ -94,7 +100,7 @@ public class SetHeaderProcessor extends ServiceSupport implements AsyncProcessor
@Override
protected void doStart() throws Exception {
- // noop
+ //noop
}
@Override
http://git-wip-us.apache.org/repos/asf/camel/blob/140be42e/camel-core/src/main/java/org/apache/camel/processor/SetPropertyProcessor.java
----------------------------------------------------------------------
diff --git a/camel-core/src/main/java/org/apache/camel/processor/SetPropertyProcessor.java b/camel-core/src/main/java/org/apache/camel/processor/SetPropertyProcessor.java
index 70d1a60..59fc478 100644
--- a/camel-core/src/main/java/org/apache/camel/processor/SetPropertyProcessor.java
+++ b/camel-core/src/main/java/org/apache/camel/processor/SetPropertyProcessor.java
@@ -18,6 +18,8 @@ package org.apache.camel.processor;
import org.apache.camel.AsyncCallback;
import org.apache.camel.AsyncProcessor;
+import org.apache.camel.CamelContext;
+import org.apache.camel.CamelContextAware;
import org.apache.camel.Exchange;
import org.apache.camel.Expression;
import org.apache.camel.Traceable;
@@ -30,10 +32,10 @@ import org.apache.camel.util.AsyncProcessorHelper;
*/
public class SetPropertyProcessor extends ServiceSupport implements AsyncProcessor, Traceable, IdAware {
private String id;
- private final String propertyName;
+ private final Expression propertyName;
private final Expression expression;
- public SetPropertyProcessor(String propertyName, Expression expression) {
+ public SetPropertyProcessor(Expression propertyName, Expression expression) {
this.propertyName = propertyName;
this.expression = expression;
}
@@ -53,7 +55,7 @@ public class SetPropertyProcessor extends ServiceSupport implements AsyncProcess
return true;
}
- exchange.setProperty(propertyName, newProperty);
+ exchange.setProperty(resolvePropertyNameByExchange(exchange), newProperty);
} catch (Throwable e) {
exchange.setException(e);
}
@@ -62,6 +64,10 @@ public class SetPropertyProcessor extends ServiceSupport implements AsyncProcess
return true;
}
+ private String resolvePropertyNameByExchange(Exchange exchange) {
+ return this.propertyName.evaluate(exchange, String.class);
+ }
+
@Override
public String toString() {
return "SetProperty(" + propertyName + ", " + expression + ")";
@@ -80,16 +86,17 @@ public class SetPropertyProcessor extends ServiceSupport implements AsyncProcess
}
public String getPropertyName() {
- return propertyName;
+ return propertyName.toString();
}
public Expression getExpression() {
return expression;
}
+
@Override
protected void doStart() throws Exception {
- // noop
+ //noop
}
@Override
http://git-wip-us.apache.org/repos/asf/camel/blob/140be42e/components/camel-spring/src/test/java/org/apache/camel/spring/processor/SpringSetHeaderNameDynamicTest.java
----------------------------------------------------------------------
diff --git a/components/camel-spring/src/test/java/org/apache/camel/spring/processor/SpringSetHeaderNameDynamicTest.java b/components/camel-spring/src/test/java/org/apache/camel/spring/processor/SpringSetHeaderNameDynamicTest.java
new file mode 100644
index 0000000..8fd38eb
--- /dev/null
+++ b/components/camel-spring/src/test/java/org/apache/camel/spring/processor/SpringSetHeaderNameDynamicTest.java
@@ -0,0 +1,46 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.camel.spring.processor;
+
+import org.apache.camel.CamelContext;
+import org.apache.camel.ContextTestSupport;
+import org.apache.camel.Exchange;
+import org.apache.camel.component.mock.MockEndpoint;
+
+import static org.apache.camel.spring.processor.SpringTestHelper.createSpringCamelContext;
+
+public class SpringSetHeaderNameDynamicTest extends ContextTestSupport {
+
+
+ public void testSetHeaderNameWithExpression() throws Exception {
+ MockEndpoint resultEndpoint = getMockEndpoint("mock:end");
+ resultEndpoint.expectedMessageCount(1);
+
+ sendBody("direct:start", "Hello");
+
+ resultEndpoint.assertIsSatisfied();
+
+ Exchange exchange = resultEndpoint.getExchanges().get(0);
+
+ assertEquals(Boolean.TRUE, exchange.getIn().getHeader(SpringSetPropertyNameDynamicTest.TestConstans
+ .EXCHANGE_PROP_TX_FAILED, Boolean.class));
+ }
+
+ protected CamelContext createCamelContext() throws Exception {
+ return createSpringCamelContext(this, "org/apache/camel/spring/processor/setHeaderNameDynamic.xml");
+ }
+}
http://git-wip-us.apache.org/repos/asf/camel/blob/140be42e/components/camel-spring/src/test/java/org/apache/camel/spring/processor/SpringSetPropertyNameDynamicTest.java
----------------------------------------------------------------------
diff --git a/components/camel-spring/src/test/java/org/apache/camel/spring/processor/SpringSetPropertyNameDynamicTest.java b/components/camel-spring/src/test/java/org/apache/camel/spring/processor/SpringSetPropertyNameDynamicTest.java
new file mode 100644
index 0000000..39997b3
--- /dev/null
+++ b/components/camel-spring/src/test/java/org/apache/camel/spring/processor/SpringSetPropertyNameDynamicTest.java
@@ -0,0 +1,48 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.camel.spring.processor;
+
+import org.apache.camel.CamelContext;
+import org.apache.camel.ContextTestSupport;
+import org.apache.camel.Exchange;
+import org.apache.camel.component.mock.MockEndpoint;
+
+import static org.apache.camel.spring.processor.SpringTestHelper.createSpringCamelContext;
+
+public class SpringSetPropertyNameDynamicTest extends ContextTestSupport {
+
+ public static class TestConstans {
+ public static final String EXCHANGE_PROP_TX_FAILED = "ExchangePropTxFailed";
+ }
+
+ public void testSetPropertyNameWithExpression() throws Exception {
+ MockEndpoint resultEndpoint = getMockEndpoint("mock:end");
+ resultEndpoint.expectedMessageCount(1);
+
+ sendBody("direct:start", "Hello");
+
+ resultEndpoint.assertIsSatisfied();
+
+ Exchange exchange = resultEndpoint.getExchanges().get(0);
+
+ assertEquals(Boolean.TRUE, exchange.getProperty(TestConstans.EXCHANGE_PROP_TX_FAILED, Boolean.class));
+ }
+
+ protected CamelContext createCamelContext() throws Exception {
+ return createSpringCamelContext(this, "org/apache/camel/spring/processor/setPropertyNameDynamic.xml");
+ }
+}
http://git-wip-us.apache.org/repos/asf/camel/blob/140be42e/components/camel-spring/src/test/resources/org/apache/camel/spring/processor/setHeaderNameDynamic.xml
----------------------------------------------------------------------
diff --git a/components/camel-spring/src/test/resources/org/apache/camel/spring/processor/setHeaderNameDynamic.xml b/components/camel-spring/src/test/resources/org/apache/camel/spring/processor/setHeaderNameDynamic.xml
new file mode 100644
index 0000000..9db7025
--- /dev/null
+++ b/components/camel-spring/src/test/resources/org/apache/camel/spring/processor/setHeaderNameDynamic.xml
@@ -0,0 +1,36 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ Licensed to the Apache Software Foundation (ASF) under one or more
+ contributor license agreements. See the NOTICE file distributed with
+ this work for additional information regarding copyright ownership.
+ The ASF licenses this file to You under the Apache License, Version 2.0
+ (the "License"); you may not use this file except in compliance with
+ the License. You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+-->
+<beans xmlns="http://www.springframework.org/schema/beans"
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xsi:schemaLocation="
+ http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
+ http://camel.apache.org/schema/spring http://camel.apache.org/schema/spring/camel-spring.xsd
+ ">
+
+ <!-- START SNIPPET: example -->
+ <camelContext xmlns="http://camel.apache.org/schema/spring">
+ <route>
+ <from uri="direct:start"/>
+ <setHeader headerName="$simple{type:org.apache.camel.spring.processor.SpringSetPropertyNameDynamicTest$TestConstans.EXCHANGE_PROP_TX_FAILED}">
+ <simple>${type:java.lang.Boolean.TRUE}</simple>
+ </setHeader>
+ <to uri="mock:end"/>
+ </route>
+ </camelContext>
+ <!-- END SNIPPET: example -->
+</beans>
http://git-wip-us.apache.org/repos/asf/camel/blob/140be42e/components/camel-spring/src/test/resources/org/apache/camel/spring/processor/setPropertyNameDynamic.xml
----------------------------------------------------------------------
diff --git a/components/camel-spring/src/test/resources/org/apache/camel/spring/processor/setPropertyNameDynamic.xml b/components/camel-spring/src/test/resources/org/apache/camel/spring/processor/setPropertyNameDynamic.xml
new file mode 100644
index 0000000..dd35529
--- /dev/null
+++ b/components/camel-spring/src/test/resources/org/apache/camel/spring/processor/setPropertyNameDynamic.xml
@@ -0,0 +1,36 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ Licensed to the Apache Software Foundation (ASF) under one or more
+ contributor license agreements. See the NOTICE file distributed with
+ this work for additional information regarding copyright ownership.
+ The ASF licenses this file to You under the Apache License, Version 2.0
+ (the "License"); you may not use this file except in compliance with
+ the License. You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+-->
+<beans xmlns="http://www.springframework.org/schema/beans"
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xsi:schemaLocation="
+ http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
+ http://camel.apache.org/schema/spring http://camel.apache.org/schema/spring/camel-spring.xsd
+ ">
+
+ <!-- START SNIPPET: example -->
+ <camelContext xmlns="http://camel.apache.org/schema/spring">
+ <route>
+ <from uri="direct:start"/>
+ <setProperty propertyName="$simple{type:org.apache.camel.spring.processor.SpringSetPropertyNameDynamicTest$TestConstans.EXCHANGE_PROP_TX_FAILED}">
+ <simple>${type:java.lang.Boolean.TRUE}</simple>
+ </setProperty>
+ <to uri="mock:end"/>
+ </route>
+ </camelContext>
+ <!-- END SNIPPET: example -->
+</beans>
[2/2] camel git commit: Polished. Fixes #701
Posted by da...@apache.org.
Polished. Fixes #701
Project: http://git-wip-us.apache.org/repos/asf/camel/repo
Commit: http://git-wip-us.apache.org/repos/asf/camel/commit/5d77c116
Tree: http://git-wip-us.apache.org/repos/asf/camel/tree/5d77c116
Diff: http://git-wip-us.apache.org/repos/asf/camel/diff/5d77c116
Branch: refs/heads/master
Commit: 5d77c1162c56f6db05e8f3244d907a8cbe35f366
Parents: 140be42
Author: Claus Ibsen <da...@apache.org>
Authored: Tue Dec 15 17:48:57 2015 +0100
Committer: Claus Ibsen <da...@apache.org>
Committed: Tue Dec 15 17:48:57 2015 +0100
----------------------------------------------------------------------
.../org/apache/camel/builder/ExpressionBuilder.java | 3 +--
.../org/apache/camel/model/SetHeaderDefinition.java | 6 ++++--
.../apache/camel/model/SetPropertyDefinition.java | 8 +++++---
.../apache/camel/processor/SetHeaderProcessor.java | 12 +++++-------
.../apache/camel/processor/SetPropertyProcessor.java | 15 ++++++---------
.../apache/camel/builder/ExpressionBuilderTest.java | 6 ++++++
6 files changed, 27 insertions(+), 23 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/camel/blob/5d77c116/camel-core/src/main/java/org/apache/camel/builder/ExpressionBuilder.java
----------------------------------------------------------------------
diff --git a/camel-core/src/main/java/org/apache/camel/builder/ExpressionBuilder.java b/camel-core/src/main/java/org/apache/camel/builder/ExpressionBuilder.java
index eef4976..790ca36 100644
--- a/camel-core/src/main/java/org/apache/camel/builder/ExpressionBuilder.java
+++ b/camel-core/src/main/java/org/apache/camel/builder/ExpressionBuilder.java
@@ -1879,8 +1879,7 @@ public final class ExpressionBuilder {
}
/**
- * Returns Simple expression or fallbacks to Constant expression
- * if expression str is not Simple expression.
+ * Returns Simple expression or fallback to Constant expression if expression str is not Simple expression.
*/
public static Expression parseSimpleOrFallbackToConstantExpression(String str, CamelContext camelContext) {
if (StringHelper.hasStartToken(str, "simple")) {
http://git-wip-us.apache.org/repos/asf/camel/blob/5d77c116/camel-core/src/main/java/org/apache/camel/model/SetHeaderDefinition.java
----------------------------------------------------------------------
diff --git a/camel-core/src/main/java/org/apache/camel/model/SetHeaderDefinition.java b/camel-core/src/main/java/org/apache/camel/model/SetHeaderDefinition.java
index 2d51f3a..19b8a73 100644
--- a/camel-core/src/main/java/org/apache/camel/model/SetHeaderDefinition.java
+++ b/camel-core/src/main/java/org/apache/camel/model/SetHeaderDefinition.java
@@ -72,8 +72,7 @@ public class SetHeaderDefinition extends NoOutputExpressionNode {
public Processor createProcessor(RouteContext routeContext) throws Exception {
ObjectHelper.notNull(headerName, "headerName");
Expression expr = getExpression().createExpression(routeContext);
- Expression nameExpr = ExpressionBuilder.parseSimpleOrFallbackToConstantExpression(getHeaderName(),
- routeContext.getCamelContext());
+ Expression nameExpr = ExpressionBuilder.parseSimpleOrFallbackToConstantExpression(getHeaderName(), routeContext.getCamelContext());
return new SetHeaderProcessor(nameExpr, expr);
}
@@ -88,6 +87,9 @@ public class SetHeaderDefinition extends NoOutputExpressionNode {
/**
* Name of message header to set a new value
+ * <p/>
+ * The <tt>simple</tt> language can be used to define a dynamic evaluated header name to be used.
+ * Otherwise a constant name will be used.
*/
public void setHeaderName(String headerName) {
this.headerName = headerName;
http://git-wip-us.apache.org/repos/asf/camel/blob/5d77c116/camel-core/src/main/java/org/apache/camel/model/SetPropertyDefinition.java
----------------------------------------------------------------------
diff --git a/camel-core/src/main/java/org/apache/camel/model/SetPropertyDefinition.java b/camel-core/src/main/java/org/apache/camel/model/SetPropertyDefinition.java
index a4e1f5d..fdb0946 100644
--- a/camel-core/src/main/java/org/apache/camel/model/SetPropertyDefinition.java
+++ b/camel-core/src/main/java/org/apache/camel/model/SetPropertyDefinition.java
@@ -72,8 +72,7 @@ public class SetPropertyDefinition extends NoOutputExpressionNode {
public Processor createProcessor(RouteContext routeContext) throws Exception {
ObjectHelper.notNull(getPropertyName(), "propertyName", this);
Expression expr = getExpression().createExpression(routeContext);
- Expression nameExpr = ExpressionBuilder.parseSimpleOrFallbackToConstantExpression(getPropertyName(),
- routeContext.getCamelContext());
+ Expression nameExpr = ExpressionBuilder.parseSimpleOrFallbackToConstantExpression(getPropertyName(), routeContext.getCamelContext());
return new SetPropertyProcessor(nameExpr, expr);
}
@@ -87,7 +86,10 @@ public class SetPropertyDefinition extends NoOutputExpressionNode {
}
/**
- * Name of exchange property to set a new value
+ * Name of exchange property to set a new value.
+ * <p/>
+ * The <tt>simple</tt> language can be used to define a dynamic evaluated exchange property name to be used.
+ * Otherwise a constant name will be used.
*/
public void setPropertyName(String propertyName) {
this.propertyName = propertyName;
http://git-wip-us.apache.org/repos/asf/camel/blob/5d77c116/camel-core/src/main/java/org/apache/camel/processor/SetHeaderProcessor.java
----------------------------------------------------------------------
diff --git a/camel-core/src/main/java/org/apache/camel/processor/SetHeaderProcessor.java b/camel-core/src/main/java/org/apache/camel/processor/SetHeaderProcessor.java
index 74a6733..8153453 100644
--- a/camel-core/src/main/java/org/apache/camel/processor/SetHeaderProcessor.java
+++ b/camel-core/src/main/java/org/apache/camel/processor/SetHeaderProcessor.java
@@ -18,8 +18,6 @@ package org.apache.camel.processor;
import org.apache.camel.AsyncCallback;
import org.apache.camel.AsyncProcessor;
-import org.apache.camel.CamelContext;
-import org.apache.camel.CamelContextAware;
import org.apache.camel.Exchange;
import org.apache.camel.Expression;
import org.apache.camel.Message;
@@ -27,6 +25,7 @@ import org.apache.camel.Traceable;
import org.apache.camel.spi.IdAware;
import org.apache.camel.support.ServiceSupport;
import org.apache.camel.util.AsyncProcessorHelper;
+import org.apache.camel.util.ObjectHelper;
/**
* A processor which sets the header on the IN or OUT message with an {@link org.apache.camel.Expression}
@@ -39,6 +38,8 @@ public class SetHeaderProcessor extends ServiceSupport implements AsyncProcessor
public SetHeaderProcessor(Expression headerName, Expression expression) {
this.headerName = headerName;
this.expression = expression;
+ ObjectHelper.notNull(headerName, "headerName");
+ ObjectHelper.notNull(expression, "expression");
}
public void process(Exchange exchange) throws Exception {
@@ -59,7 +60,8 @@ public class SetHeaderProcessor extends ServiceSupport implements AsyncProcessor
boolean out = exchange.hasOut();
Message old = out ? exchange.getOut() : exchange.getIn();
- old.setHeader(resolveHeaderNameByExchange(exchange), newHeader);
+ String key = headerName.evaluate(exchange, String.class);
+ old.setHeader(key, newHeader);
} catch (Throwable e) {
exchange.setException(e);
@@ -69,10 +71,6 @@ public class SetHeaderProcessor extends ServiceSupport implements AsyncProcessor
return true;
}
- private String resolveHeaderNameByExchange(Exchange exchange) {
- return this.headerName.evaluate(exchange, String.class);
- }
-
@Override
public String toString() {
return "SetHeader(" + headerName + ", " + expression + ")";
http://git-wip-us.apache.org/repos/asf/camel/blob/5d77c116/camel-core/src/main/java/org/apache/camel/processor/SetPropertyProcessor.java
----------------------------------------------------------------------
diff --git a/camel-core/src/main/java/org/apache/camel/processor/SetPropertyProcessor.java b/camel-core/src/main/java/org/apache/camel/processor/SetPropertyProcessor.java
index 59fc478..d310743 100644
--- a/camel-core/src/main/java/org/apache/camel/processor/SetPropertyProcessor.java
+++ b/camel-core/src/main/java/org/apache/camel/processor/SetPropertyProcessor.java
@@ -18,14 +18,13 @@ package org.apache.camel.processor;
import org.apache.camel.AsyncCallback;
import org.apache.camel.AsyncProcessor;
-import org.apache.camel.CamelContext;
-import org.apache.camel.CamelContextAware;
import org.apache.camel.Exchange;
import org.apache.camel.Expression;
import org.apache.camel.Traceable;
import org.apache.camel.spi.IdAware;
import org.apache.camel.support.ServiceSupport;
import org.apache.camel.util.AsyncProcessorHelper;
+import org.apache.camel.util.ObjectHelper;
/**
* A processor which sets the property on the exchange with an {@link org.apache.camel.Expression}
@@ -38,6 +37,8 @@ public class SetPropertyProcessor extends ServiceSupport implements AsyncProcess
public SetPropertyProcessor(Expression propertyName, Expression expression) {
this.propertyName = propertyName;
this.expression = expression;
+ ObjectHelper.notNull(propertyName, "propertyName");
+ ObjectHelper.notNull(expression, "expression");
}
public void process(Exchange exchange) throws Exception {
@@ -55,7 +56,8 @@ public class SetPropertyProcessor extends ServiceSupport implements AsyncProcess
return true;
}
- exchange.setProperty(resolvePropertyNameByExchange(exchange), newProperty);
+ String key = propertyName.evaluate(exchange, String.class);
+ exchange.setProperty(key, newProperty);
} catch (Throwable e) {
exchange.setException(e);
}
@@ -64,10 +66,6 @@ public class SetPropertyProcessor extends ServiceSupport implements AsyncProcess
return true;
}
- private String resolvePropertyNameByExchange(Exchange exchange) {
- return this.propertyName.evaluate(exchange, String.class);
- }
-
@Override
public String toString() {
return "SetProperty(" + propertyName + ", " + expression + ")";
@@ -93,10 +91,9 @@ public class SetPropertyProcessor extends ServiceSupport implements AsyncProcess
return expression;
}
-
@Override
protected void doStart() throws Exception {
- //noop
+ // noop
}
@Override
http://git-wip-us.apache.org/repos/asf/camel/blob/5d77c116/camel-core/src/test/java/org/apache/camel/builder/ExpressionBuilderTest.java
----------------------------------------------------------------------
diff --git a/camel-core/src/test/java/org/apache/camel/builder/ExpressionBuilderTest.java b/camel-core/src/test/java/org/apache/camel/builder/ExpressionBuilderTest.java
index da957ae..ac4a16e 100644
--- a/camel-core/src/test/java/org/apache/camel/builder/ExpressionBuilderTest.java
+++ b/camel-core/src/test/java/org/apache/camel/builder/ExpressionBuilderTest.java
@@ -104,6 +104,12 @@ public class ExpressionBuilderTest extends TestSupport {
assertEquals("Get a wrong properties size", properties.size(), 1);
}
+ public void testParseSimpleOrFallbackToConstantExpression() throws Exception {
+ assertEquals("world", parseSimpleOrFallbackToConstantExpression("world", camelContext).evaluate(exchange, String.class));
+ assertEquals("Hello there!", parseSimpleOrFallbackToConstantExpression("${body}", camelContext).evaluate(exchange, String.class));
+ assertEquals("Hello there!", parseSimpleOrFallbackToConstantExpression("$simple{body}", camelContext).evaluate(exchange, String.class));
+ }
+
@Override
protected void setUp() throws Exception {
super.setUp();