CAMEL-8799: Make it possible for JsonPath to suppress PathNotFoundException
Project: http://git-wip-us.apache.org/repos/asf/camel/repo Commit: http://git-wip-us.apache.org/repos/asf/camel/commit/0654622f Tree: http://git-wip-us.apache.org/repos/asf/camel/tree/0654622f Diff: http://git-wip-us.apache.org/repos/asf/camel/diff/0654622f Branch: refs/heads/master Commit: 0654622f2a3e3d2e41fec9af4c2edeb0b5c34465 Parents: e6fb2d5 Author: Claus Ibsen <davscl...@apache.org> Authored: Sat May 30 10:20:22 2015 +0200 Committer: Claus Ibsen <davscl...@apache.org> Committed: Sat May 30 10:20:22 2015 +0200 ---------------------------------------------------------------------- .../apache/camel/jsonpath/JsonPathEngine.java | 10 +++--- .../apache/camel/jsonpath/JsonPathLanguage.java | 33 ++++++++++++++++++++ .../apache/camel/jsonpath/JsonPathBeanTest.java | 10 ++++++ .../apache/camel/jsonpath/JsonPathCBRTest.java | 1 - .../camel/jsonpath/JsonPathLanguageTest.java | 5 ++- 5 files changed, 53 insertions(+), 6 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/camel/blob/0654622f/components/camel-jsonpath/src/main/java/org/apache/camel/jsonpath/JsonPathEngine.java ---------------------------------------------------------------------- diff --git a/components/camel-jsonpath/src/main/java/org/apache/camel/jsonpath/JsonPathEngine.java b/components/camel-jsonpath/src/main/java/org/apache/camel/jsonpath/JsonPathEngine.java index 5ed84b4..f73315e 100644 --- a/components/camel-jsonpath/src/main/java/org/apache/camel/jsonpath/JsonPathEngine.java +++ b/components/camel-jsonpath/src/main/java/org/apache/camel/jsonpath/JsonPathEngine.java @@ -40,14 +40,16 @@ public class JsonPathEngine { private final Configuration configuration; public JsonPathEngine(String expression) { - Defaults defaults = DefaultsImpl.INSTANCE; - this.configuration = Configuration.builder().jsonProvider(defaults.jsonProvider()).build(); - this.path = JsonPath.compile(expression); + this(expression, null); } public JsonPathEngine(String expression, Option[] options) { Defaults defaults = DefaultsImpl.INSTANCE; - this.configuration = Configuration.builder().jsonProvider(defaults.jsonProvider()).options(options).build(); + if (options != null) { + this.configuration = Configuration.builder().jsonProvider(defaults.jsonProvider()).options(options).build(); + } else { + this.configuration = Configuration.builder().jsonProvider(defaults.jsonProvider()).build(); + } this.path = JsonPath.compile(expression); } http://git-wip-us.apache.org/repos/asf/camel/blob/0654622f/components/camel-jsonpath/src/main/java/org/apache/camel/jsonpath/JsonPathLanguage.java ---------------------------------------------------------------------- diff --git a/components/camel-jsonpath/src/main/java/org/apache/camel/jsonpath/JsonPathLanguage.java b/components/camel-jsonpath/src/main/java/org/apache/camel/jsonpath/JsonPathLanguage.java index 8eb78db..7f25e70 100644 --- a/components/camel-jsonpath/src/main/java/org/apache/camel/jsonpath/JsonPathLanguage.java +++ b/components/camel-jsonpath/src/main/java/org/apache/camel/jsonpath/JsonPathLanguage.java @@ -16,15 +16,41 @@ */ package org.apache.camel.jsonpath; +import com.jayway.jsonpath.Option; import org.apache.camel.Expression; import org.apache.camel.Predicate; import org.apache.camel.support.LanguageSupport; public class JsonPathLanguage extends LanguageSupport { + private Class<?> resultType; + private Option[] options; + + public Class<?> getResultType() { + return resultType; + } + + public void setResultType(Class<?> resultType) { + this.resultType = resultType; + } + + public Option[] getOptions() { + return options; + } + + public void setOption(Option option) { + this.options = new Option[]{option}; + } + + public void setOptions(Option[] options) { + this.options = options; + } + @Override public Predicate createPredicate(final String predicate) { JsonPathExpression answer = new JsonPathExpression(predicate); + answer.setResultType(resultType); + answer.setOptions(options); answer.init(); return answer; } @@ -32,8 +58,15 @@ public class JsonPathLanguage extends LanguageSupport { @Override public Expression createExpression(final String expression) { JsonPathExpression answer = new JsonPathExpression(expression); + answer.setResultType(resultType); + answer.setOptions(options); answer.init(); return answer; } + @Override + public boolean isSingleton() { + // cannot be singleton due options + return false; + } } http://git-wip-us.apache.org/repos/asf/camel/blob/0654622f/components/camel-jsonpath/src/test/java/org/apache/camel/jsonpath/JsonPathBeanTest.java ---------------------------------------------------------------------- diff --git a/components/camel-jsonpath/src/test/java/org/apache/camel/jsonpath/JsonPathBeanTest.java b/components/camel-jsonpath/src/test/java/org/apache/camel/jsonpath/JsonPathBeanTest.java index f53d858..2ef033f 100644 --- a/components/camel-jsonpath/src/test/java/org/apache/camel/jsonpath/JsonPathBeanTest.java +++ b/components/camel-jsonpath/src/test/java/org/apache/camel/jsonpath/JsonPathBeanTest.java @@ -32,6 +32,16 @@ public class JsonPathBeanTest extends CamelTestSupport { } @Test + public void testFullNameTwo() throws Exception { + String json = "{\"person\" : {\"firstname\" : \"foo\", \"middlename\" : \"foo2\", \"lastname\" : \"bar\"}}"; + String json2 = "{\"person\" : {\"firstname\" : \"bar\", \"middlename\" : \"bar2\", \"lastname\" : \"foo\"}}"; + getMockEndpoint("mock:result").expectedBodiesReceived("foo foo2 bar", "bar bar2 foo"); + template.sendBody("direct:start", json); + template.sendBody("direct:start", json2); + assertMockEndpointsSatisfied(); + } + + @Test public void testFirstAndLastName() throws Exception { String json = "{\"person\" : {\"firstname\" : \"foo\", \"lastname\" : \"bar\"}}"; getMockEndpoint("mock:result").expectedBodiesReceived("foo bar"); http://git-wip-us.apache.org/repos/asf/camel/blob/0654622f/components/camel-jsonpath/src/test/java/org/apache/camel/jsonpath/JsonPathCBRTest.java ---------------------------------------------------------------------- diff --git a/components/camel-jsonpath/src/test/java/org/apache/camel/jsonpath/JsonPathCBRTest.java b/components/camel-jsonpath/src/test/java/org/apache/camel/jsonpath/JsonPathCBRTest.java index 2e869a6..4e85260 100644 --- a/components/camel-jsonpath/src/test/java/org/apache/camel/jsonpath/JsonPathCBRTest.java +++ b/components/camel-jsonpath/src/test/java/org/apache/camel/jsonpath/JsonPathCBRTest.java @@ -68,7 +68,6 @@ public class JsonPathCBRTest extends CamelTestSupport { sendMessageToBicycleRoute("direct:bicycle"); resetMocks(); sendMessageToBicycleRoute("direct:bicycle2"); - } private void sendMessageToBicycleRoute(String startPoint) throws Exception { http://git-wip-us.apache.org/repos/asf/camel/blob/0654622f/components/camel-jsonpath/src/test/java/org/apache/camel/jsonpath/JsonPathLanguageTest.java ---------------------------------------------------------------------- diff --git a/components/camel-jsonpath/src/test/java/org/apache/camel/jsonpath/JsonPathLanguageTest.java b/components/camel-jsonpath/src/test/java/org/apache/camel/jsonpath/JsonPathLanguageTest.java index 66db4a8..0f10864 100644 --- a/components/camel-jsonpath/src/test/java/org/apache/camel/jsonpath/JsonPathLanguageTest.java +++ b/components/camel-jsonpath/src/test/java/org/apache/camel/jsonpath/JsonPathLanguageTest.java @@ -19,6 +19,7 @@ package org.apache.camel.jsonpath; import java.io.File; import java.util.List; +import com.jayway.jsonpath.Option; import org.apache.camel.Exchange; import org.apache.camel.Expression; import org.apache.camel.Predicate; @@ -93,7 +94,9 @@ public class JsonPathLanguageTest extends CamelTestSupport { Exchange exchange = new DefaultExchange(context); exchange.getIn().setBody(new File("src/test/resources/type.json")); - Language lan = context.resolveLanguage("jsonpath"); + JsonPathLanguage lan = (JsonPathLanguage) context.resolveLanguage("jsonpath"); + lan.setOption(Option.SUPPRESS_EXCEPTIONS); + Expression exp = lan.createExpression("$.foo"); String nofoo = exp.evaluate(exchange, String.class);