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/05/30 12:33:10 UTC
[5/6] camel git commit: CAMEL-8799: Make it possible for JsonPath to
suppress PathNotFoundException. CAMEL-8820: Allow to do post logic when
creating expression/predicate from routes
CAMEL-8799: Make it possible for JsonPath to suppress PathNotFoundException. CAMEL-8820: Allow to do post logic when creating expression/predicate from routes
Project: http://git-wip-us.apache.org/repos/asf/camel/repo
Commit: http://git-wip-us.apache.org/repos/asf/camel/commit/2a285211
Tree: http://git-wip-us.apache.org/repos/asf/camel/tree/2a285211
Diff: http://git-wip-us.apache.org/repos/asf/camel/diff/2a285211
Branch: refs/heads/master
Commit: 2a2852117c094f2bc2778f5e9a8a404e2e395e6f
Parents: 9732938
Author: Claus Ibsen <da...@apache.org>
Authored: Sat May 30 11:27:19 2015 +0200
Committer: Claus Ibsen <da...@apache.org>
Committed: Sat May 30 11:27:19 2015 +0200
----------------------------------------------------------------------
.../apache/camel/AfterPropertiesConfigured.java | 32 ++++++++++
.../apache/camel/builder/ExpressionClause.java | 27 +++++++++
.../model/language/ExpressionDefinition.java | 13 ++++
.../language/NamespaceAwareExpression.java | 2 +
.../model/language/XMLTokenizerExpression.java | 4 +-
.../camel/model/language/XPathExpression.java | 1 -
.../camel/model/language/XQueryExpression.java | 4 +-
.../camel/jsonpath/JsonPathExpression.java | 26 ++++----
.../apache/camel/jsonpath/JsonPathLanguage.java | 15 ++++-
.../camel/jsonpath/JsonPathSuppressTest.java | 63 ++++++++++++++++++++
.../jsonpath/SpringJsonPathSuppressTest.java | 55 +++++++++++++++++
.../jsonpath/SpringJsonPathSuppressTest.xml | 39 ++++++++++++
12 files changed, 264 insertions(+), 17 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/camel/blob/2a285211/camel-core/src/main/java/org/apache/camel/AfterPropertiesConfigured.java
----------------------------------------------------------------------
diff --git a/camel-core/src/main/java/org/apache/camel/AfterPropertiesConfigured.java b/camel-core/src/main/java/org/apache/camel/AfterPropertiesConfigured.java
new file mode 100644
index 0000000..5b95ceb
--- /dev/null
+++ b/camel-core/src/main/java/org/apache/camel/AfterPropertiesConfigured.java
@@ -0,0 +1,32 @@
+/**
+ * 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;
+
+/**
+ * To perform optional initialization on an element after its properties has been configured.
+ */
+public interface AfterPropertiesConfigured {
+
+ /**
+ * Callback invoked after the element have configured its properties.
+ * <p/>
+ * This allows to perform any post init work.
+ *
+ * @param camelContext the Camel Context
+ */
+ void afterPropertiesConfigured(CamelContext camelContext);
+}
http://git-wip-us.apache.org/repos/asf/camel/blob/2a285211/camel-core/src/main/java/org/apache/camel/builder/ExpressionClause.java
----------------------------------------------------------------------
diff --git a/camel-core/src/main/java/org/apache/camel/builder/ExpressionClause.java b/camel-core/src/main/java/org/apache/camel/builder/ExpressionClause.java
index 2fc59bc..85edb58 100644
--- a/camel-core/src/main/java/org/apache/camel/builder/ExpressionClause.java
+++ b/camel-core/src/main/java/org/apache/camel/builder/ExpressionClause.java
@@ -304,6 +304,19 @@ public class ExpressionClause<T> extends ExpressionDefinition {
* expression</a>
*
* @param text the expression to be evaluated
+ * @param suppressExceptions whether to suppress exceptions such as PathNotFoundException
+ * @return the builder to continue processing the DSL
+ */
+ public T jsonpath(String text, boolean suppressExceptions) {
+ return delegate.jsonpath(text, suppressExceptions);
+ }
+
+ /**
+ * Evaluates a <a
+ * href="http://camel.apache.org/jsonpath.html">Json Path
+ * expression</a>
+ *
+ * @param text the expression to be evaluated
* @param resultType the return type expected by the expression
* @return the builder to continue processing the DSL
*/
@@ -312,6 +325,20 @@ public class ExpressionClause<T> extends ExpressionDefinition {
}
/**
+ * Evaluates a <a
+ * href="http://camel.apache.org/jsonpath.html">Json Path
+ * expression</a>
+ *
+ * @param text the expression to be evaluated
+ * @param suppressExceptions whether to suppress exceptions such as PathNotFoundException
+ * @param resultType the return type expected by the expression
+ * @return the builder to continue processing the DSL
+ */
+ public T jsonpath(String text, boolean suppressExceptions, Class<?> resultType) {
+ return delegate.jsonpath(text, suppressExceptions, resultType);
+ }
+
+ /**
* Evaluates a <a href="http://commons.apache.org/jxpath/">JXPath expression</a>
*
* @param text the expression to be evaluated
http://git-wip-us.apache.org/repos/asf/camel/blob/2a285211/camel-core/src/main/java/org/apache/camel/model/language/ExpressionDefinition.java
----------------------------------------------------------------------
diff --git a/camel-core/src/main/java/org/apache/camel/model/language/ExpressionDefinition.java b/camel-core/src/main/java/org/apache/camel/model/language/ExpressionDefinition.java
index 2a0b294..86ea52e 100644
--- a/camel-core/src/main/java/org/apache/camel/model/language/ExpressionDefinition.java
+++ b/camel-core/src/main/java/org/apache/camel/model/language/ExpressionDefinition.java
@@ -28,6 +28,7 @@ import javax.xml.bind.annotation.XmlValue;
import javax.xml.bind.annotation.adapters.CollapsedStringAdapter;
import javax.xml.bind.annotation.adapters.XmlJavaTypeAdapter;
+import org.apache.camel.AfterPropertiesConfigured;
import org.apache.camel.CamelContext;
import org.apache.camel.Exchange;
import org.apache.camel.Expression;
@@ -265,10 +266,22 @@ public class ExpressionDefinition implements Expression, Predicate {
this.expressionType = expressionType;
}
+ @SuppressWarnings("unchecked")
protected void configurePredicate(CamelContext camelContext, Predicate predicate) {
+ // allows to perform additional logic after the properties has been configured which may be needed
+ // in the various camel components outside camel-core
+ if (predicate instanceof AfterPropertiesConfigured) {
+ ((AfterPropertiesConfigured) predicate).afterPropertiesConfigured(camelContext);
+ }
}
+ @SuppressWarnings("unchecked")
protected void configureExpression(CamelContext camelContext, Expression expression) {
+ // allows to perform additional logic after the properties has been configured which may be needed
+ // in the various camel components outside camel-core
+ if (expression instanceof AfterPropertiesConfigured) {
+ ((AfterPropertiesConfigured) expression).afterPropertiesConfigured(camelContext);
+ }
}
/**
http://git-wip-us.apache.org/repos/asf/camel/blob/2a285211/camel-core/src/main/java/org/apache/camel/model/language/NamespaceAwareExpression.java
----------------------------------------------------------------------
diff --git a/camel-core/src/main/java/org/apache/camel/model/language/NamespaceAwareExpression.java b/camel-core/src/main/java/org/apache/camel/model/language/NamespaceAwareExpression.java
index f3d9eb6..c549e16 100644
--- a/camel-core/src/main/java/org/apache/camel/model/language/NamespaceAwareExpression.java
+++ b/camel-core/src/main/java/org/apache/camel/model/language/NamespaceAwareExpression.java
@@ -61,11 +61,13 @@ public abstract class NamespaceAwareExpression extends ExpressionDefinition impl
@Override
protected void configureExpression(CamelContext camelContext, Expression expression) {
configureNamespaceAware(expression);
+ super.configureExpression(camelContext, expression);
}
@Override
protected void configurePredicate(CamelContext camelContext, Predicate predicate) {
configureNamespaceAware(predicate);
+ super.configurePredicate(camelContext, predicate);
}
protected void configureNamespaceAware(Object builder) {
http://git-wip-us.apache.org/repos/asf/camel/blob/2a285211/camel-core/src/main/java/org/apache/camel/model/language/XMLTokenizerExpression.java
----------------------------------------------------------------------
diff --git a/camel-core/src/main/java/org/apache/camel/model/language/XMLTokenizerExpression.java b/camel-core/src/main/java/org/apache/camel/model/language/XMLTokenizerExpression.java
index d85e79d..8d9c266 100644
--- a/camel-core/src/main/java/org/apache/camel/model/language/XMLTokenizerExpression.java
+++ b/camel-core/src/main/java/org/apache/camel/model/language/XMLTokenizerExpression.java
@@ -96,7 +96,6 @@ public class XMLTokenizerExpression extends NamespaceAwareExpression {
@Override
protected void configureExpression(CamelContext camelContext, Expression expression) {
- super.configureExpression(camelContext, expression);
if (headerName != null) {
setProperty(expression, "headerName", headerName);
}
@@ -106,11 +105,11 @@ public class XMLTokenizerExpression extends NamespaceAwareExpression {
if (group != null) {
setProperty(expression, "group", group);
}
+ super.configureExpression(camelContext, expression);
}
@Override
protected void configurePredicate(CamelContext camelContext, Predicate predicate) {
- super.configurePredicate(camelContext, predicate);
if (headerName != null) {
setProperty(predicate, "headerName", headerName);
}
@@ -120,6 +119,7 @@ public class XMLTokenizerExpression extends NamespaceAwareExpression {
if (group != null) {
setProperty(predicate, "group", group);
}
+ super.configurePredicate(camelContext, predicate);
}
@Override
http://git-wip-us.apache.org/repos/asf/camel/blob/2a285211/camel-core/src/main/java/org/apache/camel/model/language/XPathExpression.java
----------------------------------------------------------------------
diff --git a/camel-core/src/main/java/org/apache/camel/model/language/XPathExpression.java b/camel-core/src/main/java/org/apache/camel/model/language/XPathExpression.java
index 4a01417..609a9e4 100644
--- a/camel-core/src/main/java/org/apache/camel/model/language/XPathExpression.java
+++ b/camel-core/src/main/java/org/apache/camel/model/language/XPathExpression.java
@@ -234,7 +234,6 @@ public class XPathExpression extends NamespaceAwareExpression {
}
// moved the super configuration to the bottom so that the namespace init picks up the newly set XPath Factory
super.configureExpression(camelContext, expression);
-
}
@Override
http://git-wip-us.apache.org/repos/asf/camel/blob/2a285211/camel-core/src/main/java/org/apache/camel/model/language/XQueryExpression.java
----------------------------------------------------------------------
diff --git a/camel-core/src/main/java/org/apache/camel/model/language/XQueryExpression.java b/camel-core/src/main/java/org/apache/camel/model/language/XQueryExpression.java
index 763dfc8..0513d8e 100644
--- a/camel-core/src/main/java/org/apache/camel/model/language/XQueryExpression.java
+++ b/camel-core/src/main/java/org/apache/camel/model/language/XQueryExpression.java
@@ -107,24 +107,24 @@ public class XQueryExpression extends NamespaceAwareExpression {
@Override
protected void configureExpression(CamelContext camelContext, Expression expression) {
- super.configureExpression(camelContext, expression);
if (resultType != null) {
setProperty(expression, "resultType", resultType);
}
if (ObjectHelper.isNotEmpty(getHeaderName())) {
setProperty(expression, "headerName", getHeaderName());
}
+ super.configureExpression(camelContext, expression);
}
@Override
protected void configurePredicate(CamelContext camelContext, Predicate predicate) {
- super.configurePredicate(camelContext, predicate);
if (resultType != null) {
setProperty(predicate, "resultType", resultType);
}
if (ObjectHelper.isNotEmpty(getHeaderName())) {
setProperty(predicate, "headerName", getHeaderName());
}
+ super.configurePredicate(camelContext, predicate);
}
}
http://git-wip-us.apache.org/repos/asf/camel/blob/2a285211/components/camel-jsonpath/src/main/java/org/apache/camel/jsonpath/JsonPathExpression.java
----------------------------------------------------------------------
diff --git a/components/camel-jsonpath/src/main/java/org/apache/camel/jsonpath/JsonPathExpression.java b/components/camel-jsonpath/src/main/java/org/apache/camel/jsonpath/JsonPathExpression.java
index 3f84938..5a8bbe6 100644
--- a/components/camel-jsonpath/src/main/java/org/apache/camel/jsonpath/JsonPathExpression.java
+++ b/components/camel-jsonpath/src/main/java/org/apache/camel/jsonpath/JsonPathExpression.java
@@ -17,12 +17,14 @@
package org.apache.camel.jsonpath;
import com.jayway.jsonpath.Option;
+import org.apache.camel.AfterPropertiesConfigured;
+import org.apache.camel.CamelContext;
import org.apache.camel.Exchange;
import org.apache.camel.ExpressionEvaluationException;
import org.apache.camel.ExpressionIllegalSyntaxException;
import org.apache.camel.support.ExpressionAdapter;
-public class JsonPathExpression extends ExpressionAdapter {
+public class JsonPathExpression extends ExpressionAdapter implements AfterPropertiesConfigured {
private final String expression;
private JsonPathEngine engine;
@@ -35,14 +37,6 @@ public class JsonPathExpression extends ExpressionAdapter {
this.expression = expression;
}
- public void init() {
- try {
- engine = new JsonPathEngine(expression, suppressExceptions, options);
- } catch (Exception e) {
- throw new ExpressionIllegalSyntaxException(expression, e);
- }
- }
-
public Class<?> getResultType() {
return resultType;
}
@@ -91,6 +85,19 @@ public class JsonPathExpression extends ExpressionAdapter {
}
@Override
+ public void afterPropertiesConfigured(CamelContext camelContext) {
+ init();
+ }
+
+ public void init() {
+ try {
+ engine = new JsonPathEngine(expression, suppressExceptions, options);
+ } catch (Exception e) {
+ throw new ExpressionIllegalSyntaxException(expression, e);
+ }
+ }
+
+ @Override
public String toString() {
return "jsonpath[" + expression + "]";
}
@@ -98,5 +105,4 @@ public class JsonPathExpression extends ExpressionAdapter {
private Object evaluateJsonPath(Exchange exchange, JsonPathEngine engine) throws Exception {
return engine.read(exchange);
}
-
}
http://git-wip-us.apache.org/repos/asf/camel/blob/2a285211/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 7f25e70..297823b 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
@@ -24,6 +24,7 @@ import org.apache.camel.support.LanguageSupport;
public class JsonPathLanguage extends LanguageSupport {
private Class<?> resultType;
+ private boolean suppressExceptions;
private Option[] options;
public Class<?> getResultType() {
@@ -34,6 +35,14 @@ public class JsonPathLanguage extends LanguageSupport {
this.resultType = resultType;
}
+ public boolean isSuppressExceptions() {
+ return suppressExceptions;
+ }
+
+ public void setSuppressExceptions(boolean suppressExceptions) {
+ this.suppressExceptions = suppressExceptions;
+ }
+
public Option[] getOptions() {
return options;
}
@@ -50,8 +59,9 @@ public class JsonPathLanguage extends LanguageSupport {
public Predicate createPredicate(final String predicate) {
JsonPathExpression answer = new JsonPathExpression(predicate);
answer.setResultType(resultType);
+ answer.setSuppressExceptions(suppressExceptions);
answer.setOptions(options);
- answer.init();
+ answer.afterPropertiesConfigured(getCamelContext());
return answer;
}
@@ -59,8 +69,9 @@ public class JsonPathLanguage extends LanguageSupport {
public Expression createExpression(final String expression) {
JsonPathExpression answer = new JsonPathExpression(expression);
answer.setResultType(resultType);
+ answer.setSuppressExceptions(suppressExceptions);
answer.setOptions(options);
- answer.init();
+ answer.afterPropertiesConfigured(getCamelContext());
return answer;
}
http://git-wip-us.apache.org/repos/asf/camel/blob/2a285211/components/camel-jsonpath/src/test/java/org/apache/camel/jsonpath/JsonPathSuppressTest.java
----------------------------------------------------------------------
diff --git a/components/camel-jsonpath/src/test/java/org/apache/camel/jsonpath/JsonPathSuppressTest.java b/components/camel-jsonpath/src/test/java/org/apache/camel/jsonpath/JsonPathSuppressTest.java
new file mode 100644
index 0000000..8a7d9fb
--- /dev/null
+++ b/components/camel-jsonpath/src/test/java/org/apache/camel/jsonpath/JsonPathSuppressTest.java
@@ -0,0 +1,63 @@
+/**
+ * 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.jsonpath;
+
+import org.apache.camel.builder.RouteBuilder;
+import org.apache.camel.test.junit4.CamelTestSupport;
+import org.junit.Test;
+
+public class JsonPathSuppressTest extends CamelTestSupport {
+
+ @Test
+ public void testMiddle() throws Exception {
+ String json = "{\"person\" : {\"firstname\" : \"foo\", \"middlename\" : \"foo2\", \"lastname\" : \"bar\"}}";
+
+ getMockEndpoint("mock:middle").expectedMessageCount(1);
+ getMockEndpoint("mock:other").expectedMessageCount(0);
+
+ template.sendBody("direct:start", json);
+
+ assertMockEndpointsSatisfied();
+ }
+
+ @Test
+ public void testNoMiddle() throws Exception {
+ String json = "{\"person\" : {\"firstname\" : \"foo\", \"lastname\" : \"bar\"}}";
+
+ getMockEndpoint("mock:middle").expectedMessageCount(0);
+ getMockEndpoint("mock:other").expectedMessageCount(1);
+
+ template.sendBody("direct:start", json);
+
+ assertMockEndpointsSatisfied();
+ }
+
+ @Override
+ protected RouteBuilder createRouteBuilder() throws Exception {
+ return new RouteBuilder() {
+ @Override
+ public void configure() throws Exception {
+ from("direct:start")
+ .choice()
+ .when().jsonpath("person.middlename", true)
+ .to("mock:middle")
+ .otherwise()
+ .to("mock:other");
+ }
+ };
+ }
+}
http://git-wip-us.apache.org/repos/asf/camel/blob/2a285211/components/camel-jsonpath/src/test/java/org/apache/camel/jsonpath/SpringJsonPathSuppressTest.java
----------------------------------------------------------------------
diff --git a/components/camel-jsonpath/src/test/java/org/apache/camel/jsonpath/SpringJsonPathSuppressTest.java b/components/camel-jsonpath/src/test/java/org/apache/camel/jsonpath/SpringJsonPathSuppressTest.java
new file mode 100644
index 0000000..4ca789d
--- /dev/null
+++ b/components/camel-jsonpath/src/test/java/org/apache/camel/jsonpath/SpringJsonPathSuppressTest.java
@@ -0,0 +1,55 @@
+/**
+ * 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.jsonpath;
+
+import org.apache.camel.test.spring.CamelSpringTestSupport;
+import org.junit.Test;
+import org.springframework.context.support.AbstractApplicationContext;
+import org.springframework.context.support.ClassPathXmlApplicationContext;
+
+public class SpringJsonPathSuppressTest extends CamelSpringTestSupport {
+
+ @Override
+ protected AbstractApplicationContext createApplicationContext() {
+ return new ClassPathXmlApplicationContext("org/apache/camel/jsonpath/SpringJsonPathSuppressTest.xml");
+ }
+
+ @Test
+ public void testMiddle() throws Exception {
+ String json = "{\"person\" : {\"firstname\" : \"foo\", \"middlename\" : \"foo2\", \"lastname\" : \"bar\"}}";
+
+ getMockEndpoint("mock:middle").expectedMessageCount(1);
+ getMockEndpoint("mock:other").expectedMessageCount(0);
+
+ template.sendBody("direct:start", json);
+
+ assertMockEndpointsSatisfied();
+ }
+
+ @Test
+ public void testNoMiddle() throws Exception {
+ String json = "{\"person\" : {\"firstname\" : \"foo\", \"lastname\" : \"bar\"}}";
+
+ getMockEndpoint("mock:middle").expectedMessageCount(0);
+ getMockEndpoint("mock:other").expectedMessageCount(1);
+
+ template.sendBody("direct:start", json);
+
+ assertMockEndpointsSatisfied();
+ }
+
+}
http://git-wip-us.apache.org/repos/asf/camel/blob/2a285211/components/camel-jsonpath/src/test/resources/org/apache/camel/jsonpath/SpringJsonPathSuppressTest.xml
----------------------------------------------------------------------
diff --git a/components/camel-jsonpath/src/test/resources/org/apache/camel/jsonpath/SpringJsonPathSuppressTest.xml b/components/camel-jsonpath/src/test/resources/org/apache/camel/jsonpath/SpringJsonPathSuppressTest.xml
new file mode 100644
index 0000000..be89973
--- /dev/null
+++ b/components/camel-jsonpath/src/test/resources/org/apache/camel/jsonpath/SpringJsonPathSuppressTest.xml
@@ -0,0 +1,39 @@
+<?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://camel.apache.org/schema/spring http://camel.apache.org/schema/spring/camel-spring.xsd
+ http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">
+
+ <camelContext id="camel" xmlns="http://camel.apache.org/schema/spring">
+ <route>
+ <from uri="direct:start"/>
+ <choice>
+ <when>
+ <jsonpath suppressExceptions="true">person.middlename</jsonpath>
+ <to uri="mock:middle"/>
+ </when>
+ <otherwise>
+ <to uri="mock:other"/>
+ </otherwise>
+ </choice>
+ </route>
+ </camelContext>
+
+</beans>
\ No newline at end of file