You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@camel.apache.org by ni...@apache.org on 2014/06/26 08:00:57 UTC
[1/5] git commit: CAMEL-7532 support take the VelocityContext from
message header in VelocityEndpoint
Repository: camel
Updated Branches:
refs/heads/master fea4c6ebf -> cd59dbb88
CAMEL-7532 support take the VelocityContext from message header in VelocityEndpoint
Project: http://git-wip-us.apache.org/repos/asf/camel/repo
Commit: http://git-wip-us.apache.org/repos/asf/camel/commit/676d8cb8
Tree: http://git-wip-us.apache.org/repos/asf/camel/tree/676d8cb8
Diff: http://git-wip-us.apache.org/repos/asf/camel/diff/676d8cb8
Branch: refs/heads/master
Commit: 676d8cb882e51e86f1f014c72b149e004e98af56
Parents: fea4c6e
Author: Willem Jiang <wi...@gmail.com>
Authored: Wed Jun 25 22:38:12 2014 +0800
Committer: Willem Jiang <wi...@gmail.com>
Committed: Thu Jun 26 12:03:11 2014 +0800
----------------------------------------------------------------------
.../component/velocity/VelocityConstants.java | 2 ++
.../component/velocity/VelocityEndpoint.java | 9 ++++---
.../camel/component/velocity/VelocityTest.java | 28 ++++++++++++++++++++
3 files changed, 36 insertions(+), 3 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/camel/blob/676d8cb8/components/camel-velocity/src/main/java/org/apache/camel/component/velocity/VelocityConstants.java
----------------------------------------------------------------------
diff --git a/components/camel-velocity/src/main/java/org/apache/camel/component/velocity/VelocityConstants.java b/components/camel-velocity/src/main/java/org/apache/camel/component/velocity/VelocityConstants.java
index db7db4f..0590cb2 100644
--- a/components/camel-velocity/src/main/java/org/apache/camel/component/velocity/VelocityConstants.java
+++ b/components/camel-velocity/src/main/java/org/apache/camel/component/velocity/VelocityConstants.java
@@ -24,6 +24,8 @@ public final class VelocityConstants {
public static final String VELOCITY_RESOURCE_URI = "CamelVelocityResourceUri";
public static final String VELOCITY_TEMPLATE = "CamelVelocityTemplate";
+
+ public static final String VELOCITY_CONTEXT = "CamelVelocityContext";
private VelocityConstants() {
// Utility class
http://git-wip-us.apache.org/repos/asf/camel/blob/676d8cb8/components/camel-velocity/src/main/java/org/apache/camel/component/velocity/VelocityEndpoint.java
----------------------------------------------------------------------
diff --git a/components/camel-velocity/src/main/java/org/apache/camel/component/velocity/VelocityEndpoint.java b/components/camel-velocity/src/main/java/org/apache/camel/component/velocity/VelocityEndpoint.java
index 8062dae..b5cbca7 100644
--- a/components/camel-velocity/src/main/java/org/apache/camel/component/velocity/VelocityEndpoint.java
+++ b/components/camel-velocity/src/main/java/org/apache/camel/component/velocity/VelocityEndpoint.java
@@ -182,12 +182,15 @@ public class VelocityEndpoint extends ResourceEndpoint {
// getResourceAsInputStream also considers the content cache
StringWriter buffer = new StringWriter();
String logTag = getClass().getName();
- Map<String, Object> variableMap = ExchangeHelper.createVariableMap(exchange);
- Context velocityContext = new VelocityContext(variableMap);
+ Context velocityContext = exchange.getIn().getHeader(VelocityConstants.VELOCITY_CONTEXT, Context.class);
+ if (velocityContext == null) {
+ Map<String, Object> variableMap = ExchangeHelper.createVariableMap(exchange);
+ velocityContext = new VelocityContext(variableMap);
+ }
// let velocity parse and generate the result in buffer
VelocityEngine engine = getVelocityEngine();
- log.debug("Velocity is evaluating using velocity context: {}", variableMap);
+ log.debug("Velocity is evaluating using velocity context: {}", velocityContext);
engine.evaluate(velocityContext, buffer, logTag, reader);
// now lets output the results to the exchange
http://git-wip-us.apache.org/repos/asf/camel/blob/676d8cb8/components/camel-velocity/src/test/java/org/apache/camel/component/velocity/VelocityTest.java
----------------------------------------------------------------------
diff --git a/components/camel-velocity/src/test/java/org/apache/camel/component/velocity/VelocityTest.java b/components/camel-velocity/src/test/java/org/apache/camel/component/velocity/VelocityTest.java
index 94a56f5..fcecacf 100644
--- a/components/camel-velocity/src/test/java/org/apache/camel/component/velocity/VelocityTest.java
+++ b/components/camel-velocity/src/test/java/org/apache/camel/component/velocity/VelocityTest.java
@@ -16,12 +16,17 @@
*/
package org.apache.camel.component.velocity;
+import java.util.HashMap;
+import java.util.Map;
+
import javax.activation.DataHandler;
import org.apache.camel.Exchange;
import org.apache.camel.Processor;
import org.apache.camel.builder.RouteBuilder;
import org.apache.camel.test.junit4.CamelTestSupport;
+import org.apache.camel.util.ExchangeHelper;
+import org.apache.velocity.VelocityContext;
import org.junit.Test;
public class VelocityTest extends CamelTestSupport {
@@ -43,6 +48,29 @@ public class VelocityTest extends CamelTestSupport {
assertEquals("Christian", exchange.getOut().getHeader("name"));
assertSame(dataHandler, exchange.getOut().getAttachment("item"));
}
+
+ @Test
+ public void testVelocityContext() throws Exception {
+ Exchange exchange = template.request("direct:a", new Processor() {
+ @Override
+ public void process(Exchange exchange) throws Exception {
+ exchange.getIn().setBody("");
+ exchange.getIn().setHeader("name", "Christian");
+ Map<String, Object> variableMap = new HashMap<String, Object>();
+ Map<String, Object> headersMap = new HashMap<String, Object>();
+ headersMap.put("name", "Willem");
+ variableMap.put("headers", headersMap);
+ variableMap.put("body", "Monday");
+ variableMap.put("exchange", exchange);
+ VelocityContext velocityContext = new VelocityContext(variableMap);
+ exchange.getIn().setHeader(VelocityConstants.VELOCITY_CONTEXT, velocityContext);
+ exchange.setProperty("item", "7");
+ }
+ });
+
+ assertEquals("Dear Willem. You ordered item 7 on Monday.", exchange.getOut().getBody());
+ assertEquals("Christian", exchange.getOut().getHeader("name"));
+ }
protected RouteBuilder createRouteBuilder() {
return new RouteBuilder() {
Re: [2/5] git commit: CAMEL-7538 FreemarkerEndpoint should
support to set data model from message header
Posted by Willem Jiang <wi...@gmail.com>.
Hi Claus,
Good catch, I will updated the name shortly.
--
Willem Jiang
Red Hat, Inc.
Web: http://www.redhat.com
Blog: http://willemjiang.blogspot.com (English)
http://jnn.iteye.com (Chinese)
Twitter: willemjiang
Weibo: 姜宁willem
On June 26, 2014 at 2:18:59 PM, Claus Ibsen (claus.ibsen@gmail.com) wrote:
> Hi
>
> Maybe a better name for the key is MODEL instead of MODLE.
>
>
> On Thu, Jun 26, 2014 at 8:00 AM, wrote:
> > CAMEL-7538 FreemarkerEndpoint should support to set data model from message header
> >
> >
> > Project: http://git-wip-us.apache.org/repos/asf/camel/repo
> > Commit: http://git-wip-us.apache.org/repos/asf/camel/commit/e0c7ac45
> > Tree: http://git-wip-us.apache.org/repos/asf/camel/tree/e0c7ac45
> > Diff: http://git-wip-us.apache.org/repos/asf/camel/diff/e0c7ac45
> >
> > Branch: refs/heads/master
> > Commit: e0c7ac456ebd19d5d18235dc93821297f46969d9
> > Parents: 157ef3a
> > Author: Willem Jiang
> > Authored: Wed Jun 25 23:15:52 2014 +0800
> > Committer: Willem Jiang
> > Committed: Thu Jun 26 12:03:12 2014 +0800
> >
> > ----------------------------------------------------------------------
> > .../freemarker/FreemarkerConstants.java | 2 ++
> > .../freemarker/FreemarkerEndpoint.java | 16 ++++++-----
> > .../component/freemarker/FreemarkerTest.java | 28 +++++++++++++++++++-
> > 3 files changed, 39 insertions(+), 7 deletions(-)
> > ----------------------------------------------------------------------
> >
> >
> > http://git-wip-us.apache.org/repos/asf/camel/blob/e0c7ac45/components/camel-freemarker/src/main/java/org/apache/camel/component/freemarker/FreemarkerConstants.java
> > ----------------------------------------------------------------------
> > diff --git a/components/camel-freemarker/src/main/java/org/apache/camel/component/freemarker/FreemarkerConstants.java
> b/components/camel-freemarker/src/main/java/org/apache/camel/component/freemarker/FreemarkerConstants.java
> > index a8bf41f..65d41e2 100644
> > --- a/components/camel-freemarker/src/main/java/org/apache/camel/component/freemarker/FreemarkerConstants.java
> > +++ b/components/camel-freemarker/src/main/java/org/apache/camel/component/freemarker/FreemarkerConstants.java
> > @@ -24,6 +24,8 @@ public final class FreemarkerConstants {
> > public static final String FREEMARKER_RESOURCE_URI = "CamelFreemarkerResourceUri";
> >
> > public static final String FREEMARKER_TEMPLATE = "CamelFreemarkerTemplate";
> > +
> > + public static final String FREEMARKER_DATA_MODLE = "CamelFreemarkerDataModle";
> >
> > private FreemarkerConstants() {
> > // Utility class
> >
> > http://git-wip-us.apache.org/repos/asf/camel/blob/e0c7ac45/components/camel-freemarker/src/main/java/org/apache/camel/component/freemarker/FreemarkerEndpoint.java
> > ----------------------------------------------------------------------
> > diff --git a/components/camel-freemarker/src/main/java/org/apache/camel/component/freemarker/FreemarkerEndpoint.java
> b/components/camel-freemarker/src/main/java/org/apache/camel/component/freemarker/FreemarkerEndpoint.java
> > index f2c1849..c865b2e 100644
> > --- a/components/camel-freemarker/src/main/java/org/apache/camel/component/freemarker/FreemarkerEndpoint.java
> > +++ b/components/camel-freemarker/src/main/java/org/apache/camel/component/freemarker/FreemarkerEndpoint.java
> > @@ -16,13 +16,15 @@
> > */
> > package org.apache.camel.component.freemarker;
> >
> > +
> > +
> > import java.io.Reader;
> > import java.io.StringReader;
> > import java.io.StringWriter;
> > -import java.util.Map;
> >
> > import freemarker.template.Configuration;
> > import freemarker.template.Template;
> > +
> > import org.apache.camel.Component;
> > import org.apache.camel.Exchange;
> > import org.apache.camel.ExchangePattern;
> > @@ -118,16 +120,18 @@ public class FreemarkerEndpoint extends ResourceEndpoint
> {
> > // remove the header to avoid it being propagated in the routing
> > exchange.getIn().removeHeader(FreemarkerConstants.FREEMARKER_TEMPLATE);
> > }
> > -
> > - Map variableMap = ExchangeHelper.createVariableMap(exchange);
> > + Object dataModle = exchange.getIn().getHeader(FreemarkerConstants.FREEMARKER_DATA_MODLE,
> Object.class);
> > + if (dataModle == null) {
> > + dataModle = ExchangeHelper.createVariableMap(exchange);
> > + }
> > // let freemarker parse and generate the result in buffer
> > Template template;
> >
> > if (reader != null) {
> > - log.debug("Freemarker is evaluating template read from header {} using context:
> {}", FreemarkerConstants.FREEMARKER_TEMPLATE, variableMap);
> > + log.debug("Freemarker is evaluating template read from header {} using context:
> {}", FreemarkerConstants.FREEMARKER_TEMPLATE, dataModle);
> > template = new Template("temp", reader, new Configuration());
> > } else {
> > - log.debug("Freemarker is evaluating {} using context: {}", path, variableMap);
> > + log.debug("Freemarker is evaluating {} using context: {}", path, dataModle);
> > if (getEncoding() != null) {
> > template = configuration.getTemplate(path, getEncoding());
> > } else {
> > @@ -135,7 +139,7 @@ public class FreemarkerEndpoint extends ResourceEndpoint {
> > }
> > }
> > StringWriter buffer = new StringWriter();
> > - template.process(variableMap, buffer);
> > + template.process(dataModle, buffer);
> > buffer.flush();
> >
> > // now lets output the results to the exchange
> >
> > http://git-wip-us.apache.org/repos/asf/camel/blob/e0c7ac45/components/camel-freemarker/src/test/java/org/apache/camel/component/freemarker/FreemarkerTest.java
> > ----------------------------------------------------------------------
> > diff --git a/components/camel-freemarker/src/test/java/org/apache/camel/component/freemarker/FreemarkerTest.java
> b/components/camel-freemarker/src/test/java/org/apache/camel/component/freemarker/FreemarkerTest.java
> > index 3ebea65..bce8b6b 100644
> > --- a/components/camel-freemarker/src/test/java/org/apache/camel/component/freemarker/FreemarkerTest.java
> > +++ b/components/camel-freemarker/src/test/java/org/apache/camel/component/freemarker/FreemarkerTest.java
> > @@ -16,6 +16,9 @@
> > */
> > package org.apache.camel.component.freemarker;
> >
> > +import java.util.HashMap;
> > +import java.util.Map;
> > +
> > import javax.activation.DataHandler;
> >
> > import org.apache.camel.Exchange;
> > @@ -30,7 +33,7 @@ import org.junit.Test;
> > public class FreemarkerTest extends CamelTestSupport {
> >
> > @Test
> > - public void testVelocityLetter() throws Exception {
> > + public void testFreemarkerLetter() throws Exception {
> > final DataHandler dataHandler = new DataHandler("my attachment", "text/plain");
> > Exchange exchange = template.request("direct:a", new Processor() {
> > @Override
> > @@ -46,7 +49,30 @@ public class FreemarkerTest extends CamelTestSupport {
> > assertEquals("Christian", exchange.getOut().getHeader("name"));
> > assertSame(dataHandler, exchange.getOut().getAttachment("item"));
> > }
> > +
> > +
> > + @Test
> > + public void testFreemarkerDataModel() throws Exception {
> > + Exchange exchange = template.request("direct:a", new Processor() {
> > + @Override
> > + public void process(Exchange exchange) throws Exception {
> > + exchange.getIn().setBody("");
> > + exchange.getIn().setHeader("name", "Christian");
> > + Map variableMap = new HashMap();
> > + Map headersMap = new HashMap();
> > + headersMap.put("name", "Willem");
> > + variableMap.put("headers", headersMap);
> > + variableMap.put("body", "Monday");
> > + variableMap.put("exchange", exchange);
> > + exchange.getIn().setHeader(FreemarkerConstants.FREEMARKER_DATA_MODLE,
> variableMap);
> > + exchange.setProperty("item", "7");
> > + }
> > + });
> >
> > + assertEquals("Dear Willem. You ordered item 7 on Monday.", exchange.getOut().getBody());
> > + assertEquals("Christian", exchange.getOut().getHeader("name"));
> > + }
> > +
> > protected RouteBuilder createRouteBuilder() {
> > return new RouteBuilder() {
> > public void configure() {
> >
>
>
>
> --
> Claus Ibsen
> -----------------
> Red Hat, Inc.
> Email: cibsen@redhat.com
> Twitter: davsclaus
> Blog: http://davsclaus.com
> Author of Camel in Action: http://www.manning.com/ibsen
> hawtio: http://hawt.io/
> fabric8: http://fabric8.io/
>
Re: [2/5] git commit: CAMEL-7538 FreemarkerEndpoint should support to
set data model from message header
Posted by Claus Ibsen <cl...@gmail.com>.
Hi
Maybe a better name for the key is MODEL instead of MODLE.
On Thu, Jun 26, 2014 at 8:00 AM, <ni...@apache.org> wrote:
> CAMEL-7538 FreemarkerEndpoint should support to set data model from message header
>
>
> Project: http://git-wip-us.apache.org/repos/asf/camel/repo
> Commit: http://git-wip-us.apache.org/repos/asf/camel/commit/e0c7ac45
> Tree: http://git-wip-us.apache.org/repos/asf/camel/tree/e0c7ac45
> Diff: http://git-wip-us.apache.org/repos/asf/camel/diff/e0c7ac45
>
> Branch: refs/heads/master
> Commit: e0c7ac456ebd19d5d18235dc93821297f46969d9
> Parents: 157ef3a
> Author: Willem Jiang <wi...@gmail.com>
> Authored: Wed Jun 25 23:15:52 2014 +0800
> Committer: Willem Jiang <wi...@gmail.com>
> Committed: Thu Jun 26 12:03:12 2014 +0800
>
> ----------------------------------------------------------------------
> .../freemarker/FreemarkerConstants.java | 2 ++
> .../freemarker/FreemarkerEndpoint.java | 16 ++++++-----
> .../component/freemarker/FreemarkerTest.java | 28 +++++++++++++++++++-
> 3 files changed, 39 insertions(+), 7 deletions(-)
> ----------------------------------------------------------------------
>
>
> http://git-wip-us.apache.org/repos/asf/camel/blob/e0c7ac45/components/camel-freemarker/src/main/java/org/apache/camel/component/freemarker/FreemarkerConstants.java
> ----------------------------------------------------------------------
> diff --git a/components/camel-freemarker/src/main/java/org/apache/camel/component/freemarker/FreemarkerConstants.java b/components/camel-freemarker/src/main/java/org/apache/camel/component/freemarker/FreemarkerConstants.java
> index a8bf41f..65d41e2 100644
> --- a/components/camel-freemarker/src/main/java/org/apache/camel/component/freemarker/FreemarkerConstants.java
> +++ b/components/camel-freemarker/src/main/java/org/apache/camel/component/freemarker/FreemarkerConstants.java
> @@ -24,6 +24,8 @@ public final class FreemarkerConstants {
> public static final String FREEMARKER_RESOURCE_URI = "CamelFreemarkerResourceUri";
>
> public static final String FREEMARKER_TEMPLATE = "CamelFreemarkerTemplate";
> +
> + public static final String FREEMARKER_DATA_MODLE = "CamelFreemarkerDataModle";
>
> private FreemarkerConstants() {
> // Utility class
>
> http://git-wip-us.apache.org/repos/asf/camel/blob/e0c7ac45/components/camel-freemarker/src/main/java/org/apache/camel/component/freemarker/FreemarkerEndpoint.java
> ----------------------------------------------------------------------
> diff --git a/components/camel-freemarker/src/main/java/org/apache/camel/component/freemarker/FreemarkerEndpoint.java b/components/camel-freemarker/src/main/java/org/apache/camel/component/freemarker/FreemarkerEndpoint.java
> index f2c1849..c865b2e 100644
> --- a/components/camel-freemarker/src/main/java/org/apache/camel/component/freemarker/FreemarkerEndpoint.java
> +++ b/components/camel-freemarker/src/main/java/org/apache/camel/component/freemarker/FreemarkerEndpoint.java
> @@ -16,13 +16,15 @@
> */
> package org.apache.camel.component.freemarker;
>
> +
> +
> import java.io.Reader;
> import java.io.StringReader;
> import java.io.StringWriter;
> -import java.util.Map;
>
> import freemarker.template.Configuration;
> import freemarker.template.Template;
> +
> import org.apache.camel.Component;
> import org.apache.camel.Exchange;
> import org.apache.camel.ExchangePattern;
> @@ -118,16 +120,18 @@ public class FreemarkerEndpoint extends ResourceEndpoint {
> // remove the header to avoid it being propagated in the routing
> exchange.getIn().removeHeader(FreemarkerConstants.FREEMARKER_TEMPLATE);
> }
> -
> - Map<String, Object> variableMap = ExchangeHelper.createVariableMap(exchange);
> + Object dataModle = exchange.getIn().getHeader(FreemarkerConstants.FREEMARKER_DATA_MODLE, Object.class);
> + if (dataModle == null) {
> + dataModle = ExchangeHelper.createVariableMap(exchange);
> + }
> // let freemarker parse and generate the result in buffer
> Template template;
>
> if (reader != null) {
> - log.debug("Freemarker is evaluating template read from header {} using context: {}", FreemarkerConstants.FREEMARKER_TEMPLATE, variableMap);
> + log.debug("Freemarker is evaluating template read from header {} using context: {}", FreemarkerConstants.FREEMARKER_TEMPLATE, dataModle);
> template = new Template("temp", reader, new Configuration());
> } else {
> - log.debug("Freemarker is evaluating {} using context: {}", path, variableMap);
> + log.debug("Freemarker is evaluating {} using context: {}", path, dataModle);
> if (getEncoding() != null) {
> template = configuration.getTemplate(path, getEncoding());
> } else {
> @@ -135,7 +139,7 @@ public class FreemarkerEndpoint extends ResourceEndpoint {
> }
> }
> StringWriter buffer = new StringWriter();
> - template.process(variableMap, buffer);
> + template.process(dataModle, buffer);
> buffer.flush();
>
> // now lets output the results to the exchange
>
> http://git-wip-us.apache.org/repos/asf/camel/blob/e0c7ac45/components/camel-freemarker/src/test/java/org/apache/camel/component/freemarker/FreemarkerTest.java
> ----------------------------------------------------------------------
> diff --git a/components/camel-freemarker/src/test/java/org/apache/camel/component/freemarker/FreemarkerTest.java b/components/camel-freemarker/src/test/java/org/apache/camel/component/freemarker/FreemarkerTest.java
> index 3ebea65..bce8b6b 100644
> --- a/components/camel-freemarker/src/test/java/org/apache/camel/component/freemarker/FreemarkerTest.java
> +++ b/components/camel-freemarker/src/test/java/org/apache/camel/component/freemarker/FreemarkerTest.java
> @@ -16,6 +16,9 @@
> */
> package org.apache.camel.component.freemarker;
>
> +import java.util.HashMap;
> +import java.util.Map;
> +
> import javax.activation.DataHandler;
>
> import org.apache.camel.Exchange;
> @@ -30,7 +33,7 @@ import org.junit.Test;
> public class FreemarkerTest extends CamelTestSupport {
>
> @Test
> - public void testVelocityLetter() throws Exception {
> + public void testFreemarkerLetter() throws Exception {
> final DataHandler dataHandler = new DataHandler("my attachment", "text/plain");
> Exchange exchange = template.request("direct:a", new Processor() {
> @Override
> @@ -46,7 +49,30 @@ public class FreemarkerTest extends CamelTestSupport {
> assertEquals("Christian", exchange.getOut().getHeader("name"));
> assertSame(dataHandler, exchange.getOut().getAttachment("item"));
> }
> +
> +
> + @Test
> + public void testFreemarkerDataModel() throws Exception {
> + Exchange exchange = template.request("direct:a", new Processor() {
> + @Override
> + public void process(Exchange exchange) throws Exception {
> + exchange.getIn().setBody("");
> + exchange.getIn().setHeader("name", "Christian");
> + Map<String, Object> variableMap = new HashMap<String, Object>();
> + Map<String, Object> headersMap = new HashMap<String, Object>();
> + headersMap.put("name", "Willem");
> + variableMap.put("headers", headersMap);
> + variableMap.put("body", "Monday");
> + variableMap.put("exchange", exchange);
> + exchange.getIn().setHeader(FreemarkerConstants.FREEMARKER_DATA_MODLE, variableMap);
> + exchange.setProperty("item", "7");
> + }
> + });
>
> + assertEquals("Dear Willem. You ordered item 7 on Monday.", exchange.getOut().getBody());
> + assertEquals("Christian", exchange.getOut().getHeader("name"));
> + }
> +
> protected RouteBuilder createRouteBuilder() {
> return new RouteBuilder() {
> public void configure() {
>
--
Claus Ibsen
-----------------
Red Hat, Inc.
Email: cibsen@redhat.com
Twitter: davsclaus
Blog: http://davsclaus.com
Author of Camel in Action: http://www.manning.com/ibsen
hawtio: http://hawt.io/
fabric8: http://fabric8.io/
[2/5] git commit: CAMEL-7538 FreemarkerEndpoint should support to set
data model from message header
Posted by ni...@apache.org.
CAMEL-7538 FreemarkerEndpoint should support to set data model from message header
Project: http://git-wip-us.apache.org/repos/asf/camel/repo
Commit: http://git-wip-us.apache.org/repos/asf/camel/commit/e0c7ac45
Tree: http://git-wip-us.apache.org/repos/asf/camel/tree/e0c7ac45
Diff: http://git-wip-us.apache.org/repos/asf/camel/diff/e0c7ac45
Branch: refs/heads/master
Commit: e0c7ac456ebd19d5d18235dc93821297f46969d9
Parents: 157ef3a
Author: Willem Jiang <wi...@gmail.com>
Authored: Wed Jun 25 23:15:52 2014 +0800
Committer: Willem Jiang <wi...@gmail.com>
Committed: Thu Jun 26 12:03:12 2014 +0800
----------------------------------------------------------------------
.../freemarker/FreemarkerConstants.java | 2 ++
.../freemarker/FreemarkerEndpoint.java | 16 ++++++-----
.../component/freemarker/FreemarkerTest.java | 28 +++++++++++++++++++-
3 files changed, 39 insertions(+), 7 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/camel/blob/e0c7ac45/components/camel-freemarker/src/main/java/org/apache/camel/component/freemarker/FreemarkerConstants.java
----------------------------------------------------------------------
diff --git a/components/camel-freemarker/src/main/java/org/apache/camel/component/freemarker/FreemarkerConstants.java b/components/camel-freemarker/src/main/java/org/apache/camel/component/freemarker/FreemarkerConstants.java
index a8bf41f..65d41e2 100644
--- a/components/camel-freemarker/src/main/java/org/apache/camel/component/freemarker/FreemarkerConstants.java
+++ b/components/camel-freemarker/src/main/java/org/apache/camel/component/freemarker/FreemarkerConstants.java
@@ -24,6 +24,8 @@ public final class FreemarkerConstants {
public static final String FREEMARKER_RESOURCE_URI = "CamelFreemarkerResourceUri";
public static final String FREEMARKER_TEMPLATE = "CamelFreemarkerTemplate";
+
+ public static final String FREEMARKER_DATA_MODLE = "CamelFreemarkerDataModle";
private FreemarkerConstants() {
// Utility class
http://git-wip-us.apache.org/repos/asf/camel/blob/e0c7ac45/components/camel-freemarker/src/main/java/org/apache/camel/component/freemarker/FreemarkerEndpoint.java
----------------------------------------------------------------------
diff --git a/components/camel-freemarker/src/main/java/org/apache/camel/component/freemarker/FreemarkerEndpoint.java b/components/camel-freemarker/src/main/java/org/apache/camel/component/freemarker/FreemarkerEndpoint.java
index f2c1849..c865b2e 100644
--- a/components/camel-freemarker/src/main/java/org/apache/camel/component/freemarker/FreemarkerEndpoint.java
+++ b/components/camel-freemarker/src/main/java/org/apache/camel/component/freemarker/FreemarkerEndpoint.java
@@ -16,13 +16,15 @@
*/
package org.apache.camel.component.freemarker;
+
+
import java.io.Reader;
import java.io.StringReader;
import java.io.StringWriter;
-import java.util.Map;
import freemarker.template.Configuration;
import freemarker.template.Template;
+
import org.apache.camel.Component;
import org.apache.camel.Exchange;
import org.apache.camel.ExchangePattern;
@@ -118,16 +120,18 @@ public class FreemarkerEndpoint extends ResourceEndpoint {
// remove the header to avoid it being propagated in the routing
exchange.getIn().removeHeader(FreemarkerConstants.FREEMARKER_TEMPLATE);
}
-
- Map<String, Object> variableMap = ExchangeHelper.createVariableMap(exchange);
+ Object dataModle = exchange.getIn().getHeader(FreemarkerConstants.FREEMARKER_DATA_MODLE, Object.class);
+ if (dataModle == null) {
+ dataModle = ExchangeHelper.createVariableMap(exchange);
+ }
// let freemarker parse and generate the result in buffer
Template template;
if (reader != null) {
- log.debug("Freemarker is evaluating template read from header {} using context: {}", FreemarkerConstants.FREEMARKER_TEMPLATE, variableMap);
+ log.debug("Freemarker is evaluating template read from header {} using context: {}", FreemarkerConstants.FREEMARKER_TEMPLATE, dataModle);
template = new Template("temp", reader, new Configuration());
} else {
- log.debug("Freemarker is evaluating {} using context: {}", path, variableMap);
+ log.debug("Freemarker is evaluating {} using context: {}", path, dataModle);
if (getEncoding() != null) {
template = configuration.getTemplate(path, getEncoding());
} else {
@@ -135,7 +139,7 @@ public class FreemarkerEndpoint extends ResourceEndpoint {
}
}
StringWriter buffer = new StringWriter();
- template.process(variableMap, buffer);
+ template.process(dataModle, buffer);
buffer.flush();
// now lets output the results to the exchange
http://git-wip-us.apache.org/repos/asf/camel/blob/e0c7ac45/components/camel-freemarker/src/test/java/org/apache/camel/component/freemarker/FreemarkerTest.java
----------------------------------------------------------------------
diff --git a/components/camel-freemarker/src/test/java/org/apache/camel/component/freemarker/FreemarkerTest.java b/components/camel-freemarker/src/test/java/org/apache/camel/component/freemarker/FreemarkerTest.java
index 3ebea65..bce8b6b 100644
--- a/components/camel-freemarker/src/test/java/org/apache/camel/component/freemarker/FreemarkerTest.java
+++ b/components/camel-freemarker/src/test/java/org/apache/camel/component/freemarker/FreemarkerTest.java
@@ -16,6 +16,9 @@
*/
package org.apache.camel.component.freemarker;
+import java.util.HashMap;
+import java.util.Map;
+
import javax.activation.DataHandler;
import org.apache.camel.Exchange;
@@ -30,7 +33,7 @@ import org.junit.Test;
public class FreemarkerTest extends CamelTestSupport {
@Test
- public void testVelocityLetter() throws Exception {
+ public void testFreemarkerLetter() throws Exception {
final DataHandler dataHandler = new DataHandler("my attachment", "text/plain");
Exchange exchange = template.request("direct:a", new Processor() {
@Override
@@ -46,7 +49,30 @@ public class FreemarkerTest extends CamelTestSupport {
assertEquals("Christian", exchange.getOut().getHeader("name"));
assertSame(dataHandler, exchange.getOut().getAttachment("item"));
}
+
+
+ @Test
+ public void testFreemarkerDataModel() throws Exception {
+ Exchange exchange = template.request("direct:a", new Processor() {
+ @Override
+ public void process(Exchange exchange) throws Exception {
+ exchange.getIn().setBody("");
+ exchange.getIn().setHeader("name", "Christian");
+ Map<String, Object> variableMap = new HashMap<String, Object>();
+ Map<String, Object> headersMap = new HashMap<String, Object>();
+ headersMap.put("name", "Willem");
+ variableMap.put("headers", headersMap);
+ variableMap.put("body", "Monday");
+ variableMap.put("exchange", exchange);
+ exchange.getIn().setHeader(FreemarkerConstants.FREEMARKER_DATA_MODLE, variableMap);
+ exchange.setProperty("item", "7");
+ }
+ });
+ assertEquals("Dear Willem. You ordered item 7 on Monday.", exchange.getOut().getBody());
+ assertEquals("Christian", exchange.getOut().getHeader("name"));
+ }
+
protected RouteBuilder createRouteBuilder() {
return new RouteBuilder() {
public void configure() {
[4/5] git commit: CAMEL-7541 fixed the issue of
RedisIdempotentRepository doesn't work out of box
Posted by ni...@apache.org.
CAMEL-7541 fixed the issue of RedisIdempotentRepository doesn't work out of box
Project: http://git-wip-us.apache.org/repos/asf/camel/repo
Commit: http://git-wip-us.apache.org/repos/asf/camel/commit/ab468841
Tree: http://git-wip-us.apache.org/repos/asf/camel/tree/ab468841
Diff: http://git-wip-us.apache.org/repos/asf/camel/diff/ab468841
Branch: refs/heads/master
Commit: ab46884160dcb8988208732734b9e15ad31a844b
Parents: e0c7ac4
Author: Willem Jiang <wi...@gmail.com>
Authored: Thu Jun 26 11:17:23 2014 +0800
Committer: Willem Jiang <wi...@gmail.com>
Committed: Thu Jun 26 12:03:12 2014 +0800
----------------------------------------------------------------------
components/camel-spring-redis/pom.xml | 7 ++++++-
.../redis/processor/idempotent/RedisIdempotentRepository.java | 7 ++++++-
.../component/redis/RedisComponentSpringIntegrationTest.java | 2 +-
3 files changed, 13 insertions(+), 3 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/camel/blob/ab468841/components/camel-spring-redis/pom.xml
----------------------------------------------------------------------
diff --git a/components/camel-spring-redis/pom.xml b/components/camel-spring-redis/pom.xml
index 7129da7..9b18a5d 100755
--- a/components/camel-spring-redis/pom.xml
+++ b/components/camel-spring-redis/pom.xml
@@ -45,7 +45,7 @@
<artifactId>spring-data-redis</artifactId>
<version>${spring-data-redis-version}</version>
</dependency>
-
+ <!-- need to add the dependency of jedis as redis client lib -->
<dependency>
<groupId>org.apache.camel</groupId>
<artifactId>camel-test</artifactId>
@@ -71,6 +71,11 @@
<artifactId>log4j</artifactId>
<scope>test</scope>
</dependency>
+ <dependency>
+ <groupId>commons-pool</groupId>
+ <artifactId>commons-pool</artifactId>
+ <scope>test</scope>
+ </dependency>
</dependencies>
</project>
http://git-wip-us.apache.org/repos/asf/camel/blob/ab468841/components/camel-spring-redis/src/main/java/org/apache/camel/component/redis/processor/idempotent/RedisIdempotentRepository.java
----------------------------------------------------------------------
diff --git a/components/camel-spring-redis/src/main/java/org/apache/camel/component/redis/processor/idempotent/RedisIdempotentRepository.java b/components/camel-spring-redis/src/main/java/org/apache/camel/component/redis/processor/idempotent/RedisIdempotentRepository.java
index 36c3c98..aad2da8 100755
--- a/components/camel-spring-redis/src/main/java/org/apache/camel/component/redis/processor/idempotent/RedisIdempotentRepository.java
+++ b/components/camel-spring-redis/src/main/java/org/apache/camel/component/redis/processor/idempotent/RedisIdempotentRepository.java
@@ -54,7 +54,11 @@ public class RedisIdempotentRepository extends ServiceSupport implements Idempot
@ManagedOperation(description = "Adds the key to the store")
public boolean add(String key) {
- return setOperations.add(processorName, key) != null;
+ if (!contains(key)) {
+ return setOperations.add(processorName, key) != null;
+ } else {
+ return false;
+ }
}
@ManagedOperation(description = "Does the store contain the given key")
@@ -64,6 +68,7 @@ public class RedisIdempotentRepository extends ServiceSupport implements Idempot
@ManagedOperation(description = "Remove the key from the store")
public boolean remove(String key) {
+ System.out.println("Remove the key" + key);
return setOperations.remove(processorName, key) != null;
}
http://git-wip-us.apache.org/repos/asf/camel/blob/ab468841/components/camel-spring-redis/src/test/java/org/apache/camel/component/redis/RedisComponentSpringIntegrationTest.java
----------------------------------------------------------------------
diff --git a/components/camel-spring-redis/src/test/java/org/apache/camel/component/redis/RedisComponentSpringIntegrationTest.java b/components/camel-spring-redis/src/test/java/org/apache/camel/component/redis/RedisComponentSpringIntegrationTest.java
index f2d5758..d8548bd 100755
--- a/components/camel-spring-redis/src/test/java/org/apache/camel/component/redis/RedisComponentSpringIntegrationTest.java
+++ b/components/camel-spring-redis/src/test/java/org/apache/camel/component/redis/RedisComponentSpringIntegrationTest.java
@@ -26,7 +26,7 @@ import org.junit.Ignore;
import org.junit.Test;
import org.springframework.context.support.ClassPathXmlApplicationContext;
-@Ignore
+@Ignore ("IntegrationTest")
public class RedisComponentSpringIntegrationTest extends CamelSpringTestSupport {
@EndpointInject(uri = "direct:start")
[5/5] git commit: CAMEL-7050 Added checkException DSL in
DeadLetterChannelBuilder to check the exception
Posted by ni...@apache.org.
CAMEL-7050 Added checkException DSL in DeadLetterChannelBuilder to check the exception
Project: http://git-wip-us.apache.org/repos/asf/camel/repo
Commit: http://git-wip-us.apache.org/repos/asf/camel/commit/cd59dbb8
Tree: http://git-wip-us.apache.org/repos/asf/camel/tree/cd59dbb8
Diff: http://git-wip-us.apache.org/repos/asf/camel/diff/cd59dbb8
Branch: refs/heads/master
Commit: cd59dbb88a09c5aa0fea055a0fefd89376029171
Parents: ab46884
Author: Willem Jiang <wi...@gmail.com>
Authored: Thu Jun 26 12:02:52 2014 +0800
Committer: Willem Jiang <wi...@gmail.com>
Committed: Thu Jun 26 14:00:37 2014 +0800
----------------------------------------------------------------------
.../camel/builder/DeadLetterChannelBuilder.java | 10 ++-
.../apache/camel/processor/SendProcessor.java | 21 +++++-
...msDeadLetterChannelHandlerExceptionTest.java | 77 ++++++++++++++++++++
3 files changed, 106 insertions(+), 2 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/camel/blob/cd59dbb8/camel-core/src/main/java/org/apache/camel/builder/DeadLetterChannelBuilder.java
----------------------------------------------------------------------
diff --git a/camel-core/src/main/java/org/apache/camel/builder/DeadLetterChannelBuilder.java b/camel-core/src/main/java/org/apache/camel/builder/DeadLetterChannelBuilder.java
index b67914a..4ea7f1d 100644
--- a/camel-core/src/main/java/org/apache/camel/builder/DeadLetterChannelBuilder.java
+++ b/camel-core/src/main/java/org/apache/camel/builder/DeadLetterChannelBuilder.java
@@ -37,6 +37,7 @@ import org.slf4j.LoggerFactory;
* @version
*/
public class DeadLetterChannelBuilder extends DefaultErrorHandlerBuilder {
+ boolean checkException;
public DeadLetterChannelBuilder() {
// no-arg constructor used by Spring DSL
@@ -49,6 +50,11 @@ public class DeadLetterChannelBuilder extends DefaultErrorHandlerBuilder {
public DeadLetterChannelBuilder(String uri) {
setDeadLetterUri(uri);
}
+
+ public DeadLetterChannelBuilder checkException() {
+ checkException = true;
+ return this;
+ }
public Processor createErrorHandler(RouteContext routeContext, Processor processor) throws Exception {
validateDeadLetterUri(routeContext);
@@ -78,7 +84,9 @@ public class DeadLetterChannelBuilder extends DefaultErrorHandlerBuilder {
public Processor getFailureProcessor() {
if (failureProcessor == null) {
// force MEP to be InOnly so when sending to DLQ we would not expect a reply if the MEP was InOut
- failureProcessor = new SendProcessor(deadLetter, ExchangePattern.InOnly);
+ // If the checkException is true, sendProcessor will checkException
+ // and mark the exchange ERRORHANDLER_HANDLED property to false
+ failureProcessor = new SendProcessor(deadLetter, ExchangePattern.InOnly, checkException);
}
return failureProcessor;
}
http://git-wip-us.apache.org/repos/asf/camel/blob/cd59dbb8/camel-core/src/main/java/org/apache/camel/processor/SendProcessor.java
----------------------------------------------------------------------
diff --git a/camel-core/src/main/java/org/apache/camel/processor/SendProcessor.java b/camel-core/src/main/java/org/apache/camel/processor/SendProcessor.java
index 6ba6fc8..d8e8803 100644
--- a/camel-core/src/main/java/org/apache/camel/processor/SendProcessor.java
+++ b/camel-core/src/main/java/org/apache/camel/processor/SendProcessor.java
@@ -53,16 +53,22 @@ public class SendProcessor extends ServiceSupport implements AsyncProcessor, Tra
protected ProducerCache producerCache;
protected AsyncProcessor producer;
protected Endpoint destination;
+ protected final boolean unhandleException;
public SendProcessor(Endpoint destination) {
this(destination, null);
}
public SendProcessor(Endpoint destination, ExchangePattern pattern) {
+ this(destination, pattern, false);
+ }
+
+ public SendProcessor(Endpoint destination, ExchangePattern pattern, boolean unhandleException) {
ObjectHelper.notNull(destination, "destination");
this.destination = destination;
this.camelContext = destination.getCamelContext();
this.pattern = pattern;
+ this.unhandleException = unhandleException;
ObjectHelper.notNull(this.camelContext, "camelContext");
}
@@ -81,7 +87,7 @@ public class SendProcessor extends ServiceSupport implements AsyncProcessor, Tra
public String getTraceLabel() {
return URISupport.sanitizeUri(destination.getEndpointUri());
}
-
+
public void process(final Exchange exchange) throws Exception {
AsyncProcessorHelper.process(this, exchange);
}
@@ -93,6 +99,7 @@ public class SendProcessor extends ServiceSupport implements AsyncProcessor, Tra
return true;
}
+
// we should preserve existing MEP so remember old MEP
// if you want to permanently to change the MEP then use .setExchangePattern in the DSL
final ExchangePattern existingPattern = exchange.getPattern();
@@ -120,6 +127,7 @@ public class SendProcessor extends ServiceSupport implements AsyncProcessor, Tra
long timeTaken = watch.stop();
EventHelper.notifyExchangeSent(target.getContext(), target, destination, timeTaken);
} finally {
+ checkException(target);
callback.done(doneSync);
}
}
@@ -127,6 +135,7 @@ public class SendProcessor extends ServiceSupport implements AsyncProcessor, Tra
} catch (Throwable throwable) {
if (exchange != null) {
exchange.setException(throwable);
+ checkException(exchange);
}
}
@@ -144,6 +153,7 @@ public class SendProcessor extends ServiceSupport implements AsyncProcessor, Tra
public void done(boolean doneSync) {
// restore previous MEP
target.setPattern(existingPattern);
+ checkException(target);
// signal we are done
callback.done(doneSync);
}
@@ -151,6 +161,15 @@ public class SendProcessor extends ServiceSupport implements AsyncProcessor, Tra
}
});
}
+
+ protected void checkException(Exchange exchange) {
+ if (unhandleException && exchange.getException() != null) {
+ // Override the default setting of DeadLetterChannel
+ exchange.setProperty(Exchange.ERRORHANDLER_HANDLED, "false");
+ // just override the exception with the new added
+ exchange.setProperty(Exchange.EXCEPTION_CAUGHT, exchange.getException());
+ }
+ }
public Endpoint getDestination() {
return destination;
http://git-wip-us.apache.org/repos/asf/camel/blob/cd59dbb8/components/camel-jms/src/test/java/org/apache/camel/component/jms/issues/JmsDeadLetterChannelHandlerExceptionTest.java
----------------------------------------------------------------------
diff --git a/components/camel-jms/src/test/java/org/apache/camel/component/jms/issues/JmsDeadLetterChannelHandlerExceptionTest.java b/components/camel-jms/src/test/java/org/apache/camel/component/jms/issues/JmsDeadLetterChannelHandlerExceptionTest.java
new file mode 100644
index 0000000..8604e87
--- /dev/null
+++ b/components/camel-jms/src/test/java/org/apache/camel/component/jms/issues/JmsDeadLetterChannelHandlerExceptionTest.java
@@ -0,0 +1,77 @@
+/**
+ * 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.component.jms.issues;
+
+
+import java.util.UUID;
+
+import javax.jms.ConnectionFactory;
+
+import org.apache.camel.CamelContext;
+import org.apache.camel.Exchange;
+import org.apache.camel.Handler;
+import org.apache.camel.builder.RouteBuilder;
+import org.apache.camel.component.jms.CamelJmsTestHelper;
+import org.apache.camel.test.junit4.CamelTestSupport;
+import org.junit.Test;
+
+import static org.apache.camel.component.jms.JmsComponent.jmsComponentTransacted;
+
+public class JmsDeadLetterChannelHandlerExceptionTest extends CamelTestSupport {
+
+ public static class BadErrorHandler {
+ @Handler
+ public void onException(Exchange exchange, Exception exception) throws Exception {
+
+ throw new RuntimeException("error in errorhandler");
+ }
+ }
+
+ private final String testingEndpoint = "activemq:test." + getClass().getName();
+
+ @Override
+ protected RouteBuilder createRouteBuilder() throws Exception {
+ return new RouteBuilder() {
+ @Override
+ public void configure() throws Exception {
+
+ errorHandler(deadLetterChannel("bean:" + BadErrorHandler.class.getName()).checkException());
+
+ from(testingEndpoint).throwException(new RuntimeException("bad error"));
+
+
+ }
+ };
+ }
+
+ @Test
+ public void shouldNotLoseMessagesOnExceptionInErrorHandler() throws Exception {
+ UUID message = UUID.randomUUID();
+ template.sendBody(testingEndpoint, message);
+
+ Object dlqBody = consumer.receiveBody("activemq:ActiveMQ.DLQ", 3000);
+
+ assertEquals(message, dlqBody);
+ }
+
+ protected CamelContext createCamelContext() throws Exception {
+ CamelContext camelContext = super.createCamelContext();
+ ConnectionFactory connectionFactory = CamelJmsTestHelper.createConnectionFactory();
+ camelContext.addComponent("activemq", jmsComponentTransacted(connectionFactory));
+ return camelContext;
+ }
+}
\ No newline at end of file
[3/5] git commit: CAMEL-7539 StringTemplateEndpoint should support
set variable map from message header
Posted by ni...@apache.org.
CAMEL-7539 StringTemplateEndpoint should support set variable map from message header
Project: http://git-wip-us.apache.org/repos/asf/camel/repo
Commit: http://git-wip-us.apache.org/repos/asf/camel/commit/157ef3af
Tree: http://git-wip-us.apache.org/repos/asf/camel/tree/157ef3af
Diff: http://git-wip-us.apache.org/repos/asf/camel/diff/157ef3af
Branch: refs/heads/master
Commit: 157ef3af08f6cef1e8a9fc3a3fce6bfefc6b4206
Parents: 676d8cb
Author: Willem Jiang <wi...@gmail.com>
Authored: Wed Jun 25 23:15:11 2014 +0800
Committer: Willem Jiang <wi...@gmail.com>
Committed: Thu Jun 26 12:03:12 2014 +0800
----------------------------------------------------------------------
.../stringtemplate/StringTemplateConstants.java | 1 +
.../stringtemplate/StringTemplateEndpoint.java | 7 +++++-
.../stringtemplate/StringTemplateTest.java | 25 ++++++++++++++++++++
3 files changed, 32 insertions(+), 1 deletion(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/camel/blob/157ef3af/components/camel-stringtemplate/src/main/java/org/apache/camel/component/stringtemplate/StringTemplateConstants.java
----------------------------------------------------------------------
diff --git a/components/camel-stringtemplate/src/main/java/org/apache/camel/component/stringtemplate/StringTemplateConstants.java b/components/camel-stringtemplate/src/main/java/org/apache/camel/component/stringtemplate/StringTemplateConstants.java
index a01ce63..a06d90e 100644
--- a/components/camel-stringtemplate/src/main/java/org/apache/camel/component/stringtemplate/StringTemplateConstants.java
+++ b/components/camel-stringtemplate/src/main/java/org/apache/camel/component/stringtemplate/StringTemplateConstants.java
@@ -22,6 +22,7 @@ package org.apache.camel.component.stringtemplate;
public final class StringTemplateConstants {
public static final String STRINGTEMPLATE_RESOURCE_URI = "CamelStringTemplateResourceUri";
+ public static final String STRINGTEMPLATE_VARIABLE_MAP = "CamelStringTemplateVariableMap";
private StringTemplateConstants() {
// Utility class
http://git-wip-us.apache.org/repos/asf/camel/blob/157ef3af/components/camel-stringtemplate/src/main/java/org/apache/camel/component/stringtemplate/StringTemplateEndpoint.java
----------------------------------------------------------------------
diff --git a/components/camel-stringtemplate/src/main/java/org/apache/camel/component/stringtemplate/StringTemplateEndpoint.java b/components/camel-stringtemplate/src/main/java/org/apache/camel/component/stringtemplate/StringTemplateEndpoint.java
index a5d6837..5e2d356 100644
--- a/components/camel-stringtemplate/src/main/java/org/apache/camel/component/stringtemplate/StringTemplateEndpoint.java
+++ b/components/camel-stringtemplate/src/main/java/org/apache/camel/component/stringtemplate/StringTemplateEndpoint.java
@@ -72,7 +72,12 @@ public class StringTemplateEndpoint extends ResourceEndpoint {
@Override
protected void onExchange(Exchange exchange) throws Exception {
StringWriter buffer = new StringWriter();
- Map<String, Object> variableMap = ExchangeHelper.createVariableMap(exchange);
+
+ @SuppressWarnings("unchecked")
+ Map<String, Object> variableMap = exchange.getIn().getHeader(StringTemplateConstants.STRINGTEMPLATE_VARIABLE_MAP, Map.class);
+ if (variableMap == null) {
+ variableMap = ExchangeHelper.createVariableMap(exchange);
+ }
// getResourceAsInputStream also considers the content cache
String text = exchange.getContext().getTypeConverter().mandatoryConvertTo(String.class, getResourceAsInputStream());
http://git-wip-us.apache.org/repos/asf/camel/blob/157ef3af/components/camel-stringtemplate/src/test/java/org/apache/camel/component/stringtemplate/StringTemplateTest.java
----------------------------------------------------------------------
diff --git a/components/camel-stringtemplate/src/test/java/org/apache/camel/component/stringtemplate/StringTemplateTest.java b/components/camel-stringtemplate/src/test/java/org/apache/camel/component/stringtemplate/StringTemplateTest.java
index 56b983e..acee109 100644
--- a/components/camel-stringtemplate/src/test/java/org/apache/camel/component/stringtemplate/StringTemplateTest.java
+++ b/components/camel-stringtemplate/src/test/java/org/apache/camel/component/stringtemplate/StringTemplateTest.java
@@ -16,6 +16,9 @@
*/
package org.apache.camel.component.stringtemplate;
+import java.util.HashMap;
+import java.util.Map;
+
import javax.activation.DataHandler;
import org.apache.camel.Exchange;
@@ -44,6 +47,28 @@ public class StringTemplateTest extends CamelTestSupport {
assertEquals("Christian", response.getOut().getHeader("name"));
assertSame(dataHandler, response.getOut().getAttachment("item"));
}
+
+ @Test
+ public void testVelocityContext() throws Exception {
+ Exchange exchange = template.request("direct:a", new Processor() {
+ @Override
+ public void process(Exchange exchange) throws Exception {
+ exchange.getIn().setBody("");
+ exchange.getIn().setHeader("name", "Christian");
+ Map<String, Object> variableMap = new HashMap<String, Object>();
+ Map<String, Object> headersMap = new HashMap<String, Object>();
+ headersMap.put("name", "Willem");
+ variableMap.put("headers", headersMap);
+ variableMap.put("body", "Monday");
+ variableMap.put("exchange", exchange);
+ exchange.getIn().setHeader(StringTemplateConstants.STRINGTEMPLATE_VARIABLE_MAP, variableMap);
+ exchange.setProperty("item", "7");
+ }
+ });
+
+ assertEquals("Dear Willem. You ordered item 7 on Monday.", exchange.getOut().getBody());
+ assertEquals("Christian", exchange.getOut().getHeader("name"));
+ }
protected RouteBuilder createRouteBuilder() {
return new RouteBuilder() {