This is an automated email from the ASF dual-hosted git repository. onders pushed a commit to branch master in repository https://gitbox.apache.org/repos/asf/camel.git
The following commit(s) were added to refs/heads/master by this push: new d8934d4 CAMEL-12464 Add support for transform with context d8934d4 is described below commit d8934d471eb86a913fe9dfe164b0891b06f35a92 Author: Ganesh Pagade <ganesh.pag...@tesco.com> AuthorDate: Sun May 6 14:39:07 2018 +0530 CAMEL-12464 Add support for transform with context --- .../apache/camel/component/jolt/JoltEndpoint.java | 32 +++++++++++++--------- .../camel/component/jolt/JoltFirstSampleTest.java | 15 ++++++++++ .../camel/component/jolt/firstSample/output.json | 2 +- .../camel/component/jolt/firstSample/spec.json | 6 ++++ 4 files changed, 41 insertions(+), 14 deletions(-) diff --git a/components/camel-jolt/src/main/java/org/apache/camel/component/jolt/JoltEndpoint.java b/components/camel-jolt/src/main/java/org/apache/camel/component/jolt/JoltEndpoint.java index ec3c82a..fc51d36 100644 --- a/components/camel-jolt/src/main/java/org/apache/camel/component/jolt/JoltEndpoint.java +++ b/components/camel-jolt/src/main/java/org/apache/camel/component/jolt/JoltEndpoint.java @@ -17,14 +17,9 @@ package org.apache.camel.component.jolt; import java.io.InputStream; +import java.util.Map; -import com.bazaarvoice.jolt.Chainr; -import com.bazaarvoice.jolt.Defaultr; -import com.bazaarvoice.jolt.JsonUtils; -import com.bazaarvoice.jolt.Removr; -import com.bazaarvoice.jolt.Shiftr; -import com.bazaarvoice.jolt.Sortr; -import com.bazaarvoice.jolt.Transform; +import com.bazaarvoice.jolt.*; import org.apache.camel.Exchange; import org.apache.camel.ExchangePattern; @@ -32,6 +27,7 @@ import org.apache.camel.Message; import org.apache.camel.component.ResourceEndpoint; import org.apache.camel.spi.UriEndpoint; import org.apache.camel.spi.UriParam; +import org.apache.camel.util.ExchangeHelper; import org.apache.camel.util.ObjectHelper; /** @@ -40,8 +36,8 @@ import org.apache.camel.util.ObjectHelper; @UriEndpoint(firstVersion = "2.16.0", scheme = "jolt", title = "JOLT", syntax = "jolt:resourceUri", producerOnly = true, label = "transformation") public class JoltEndpoint extends ResourceEndpoint { - private Transform transform; - + private JoltTransform transform; + @UriParam(defaultValue = "Hydrated") private JoltInputOutputType outputType; @@ -73,7 +69,7 @@ public class JoltEndpoint extends ResourceEndpoint { return "jolt:" + getResourceUri(); } - private synchronized Transform getTransform() throws Exception { + private synchronized JoltTransform getTransform() throws Exception { if (transform == null) { if (log.isDebugEnabled()) { String path = getResourceUri(); @@ -110,7 +106,7 @@ public class JoltEndpoint extends ResourceEndpoint { /** * Sets the Transform to use. If not set a Transform specified by the transformDsl will be created */ - public void setTransform(Transform transform) { + public void setTransform(JoltTransform transform) { this.transform = transform; } @@ -167,14 +163,24 @@ public class JoltEndpoint extends ResourceEndpoint { newEndpoint.onExchange(exchange); return; } + Object input; if (getInputType() == JoltInputOutputType.JsonString) { input = JsonUtils.jsonToObject(exchange.getIn().getBody(InputStream.class)); } else { input = exchange.getIn().getBody(); } - Object output = getTransform().transform(input); - + + Object output; + + @SuppressWarnings("unchecked") + Map<String, Object> inputContextMap = exchange.getIn().getHeader(JoltConstants.JOLT_CONTEXT, Map.class); + if (inputContextMap != null) { + output = ((ContextualTransform)getTransform()).transform(input, inputContextMap); + } else { + output = ((Transform)getTransform()).transform(input); + } + // now lets output the results to the exchange Message out = exchange.getOut(); if (getOutputType() == JoltInputOutputType.JsonString) { diff --git a/components/camel-jolt/src/test/java/org/apache/camel/component/jolt/JoltFirstSampleTest.java b/components/camel-jolt/src/test/java/org/apache/camel/component/jolt/JoltFirstSampleTest.java index a70cc5b..63bef43 100644 --- a/components/camel-jolt/src/test/java/org/apache/camel/component/jolt/JoltFirstSampleTest.java +++ b/components/camel-jolt/src/test/java/org/apache/camel/component/jolt/JoltFirstSampleTest.java @@ -16,12 +16,17 @@ */ package org.apache.camel.component.jolt; +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.IOHelper; import org.apache.camel.util.ResourceHelper; import org.junit.Test; +import java.util.HashMap; +import java.util.Map; + /** * Unit test based on the first sample test from the JOLT project. */ @@ -46,9 +51,19 @@ public class JoltFirstSampleTest extends CamelTestSupport { @Override protected RouteBuilder createRouteBuilder() throws Exception { + final Processor processor = new Processor() { + public void process(Exchange exchange) { + Map<String, String> contextMap = new HashMap<>(); + contextMap.put("contextB", "bb"); + + exchange.getIn().setHeader(JoltConstants.JOLT_CONTEXT, contextMap); + } + }; + return new RouteBuilder() { public void configure() { from("direct://start") + .process(processor) .to("jolt:org/apache/camel/component/jolt/firstSample/spec.json?inputType=JsonString&outputType=JsonString") .to("mock:result"); } diff --git a/components/camel-jolt/src/test/resources/org/apache/camel/component/jolt/firstSample/output.json b/components/camel-jolt/src/test/resources/org/apache/camel/component/jolt/firstSample/output.json index 093bb81..7b7e8fc 100644 --- a/components/camel-jolt/src/test/resources/org/apache/camel/component/jolt/firstSample/output.json +++ b/components/camel-jolt/src/test/resources/org/apache/camel/component/jolt/firstSample/output.json @@ -1 +1 @@ -{"~a":"aa","~id":"id","~z":"zz","Rating":3,"RatingRange":5,"SecondaryRatings":{"quality":{"Id":"quality","Range":7,"Value":3},"sharpness":{"Id":"sharpness","Range":5,"Value":5}},"zz":"zz"} \ No newline at end of file +{"~a":"aa","~id":"id","~z":"zz","Rating":3,"RatingRange":5,"SecondaryRatings":{"quality":{"Id":"quality","Range":7,"Value":3},"sharpness":{"Id":"sharpness","Range":5,"Value":5}},"b":"bb","zz":"zz"} \ No newline at end of file diff --git a/components/camel-jolt/src/test/resources/org/apache/camel/component/jolt/firstSample/spec.json b/components/camel-jolt/src/test/resources/org/apache/camel/component/jolt/firstSample/spec.json index d5b39b6..eed7bee 100644 --- a/components/camel-jolt/src/test/resources/org/apache/camel/component/jolt/firstSample/spec.json +++ b/components/camel-jolt/src/test/resources/org/apache/camel/component/jolt/firstSample/spec.json @@ -35,6 +35,12 @@ } }, { + "operation": "modify-overwrite-beta", + "spec": { + "b": "^contextB" + } + }, + { // last operation is to sort the JSON "operation": "sort" } -- To stop receiving notification emails like this one, please contact ond...@apache.org.