Repository: camel
Updated Branches:
refs/heads/master a2209dcab -> 881e5099f
CAMEL-10604 - Camel-JacksonXML: Add an option to allow the UnmarshallType header use
Project: http://git-wip-us.apache.org/repos/asf/camel/repo
Commit: http://git-wip-us.apache.org/repos/asf/camel/commit/881e5099
Tree: http://git-wip-us.apache.org/repos/asf/camel/tree/881e5099
Diff: http://git-wip-us.apache.org/repos/asf/camel/diff/881e5099
Branch: refs/heads/master
Commit: 881e5099f94316d4a66ffbff0a3e6915829d49d7
Parents: a2209dc
Author: Andrea Cosentino <ancosen@gmail.com>
Authored: Thu Dec 15 11:51:03 2016 +0100
Committer: Andrea Cosentino <ancosen@gmail.com>
Committed: Thu Dec 15 11:54:25 2016 +0100
----------------------------------------------------------------------
.../model/dataformat/JacksonXMLDataFormat.java | 18 +++++++
.../JacksonXMLDataFormatConfiguration.java | 14 ++++++
.../src/main/docs/jacksonxml-dataformat.adoc | 3 +-
.../jacksonxml/JacksonXMLDataFormat.java | 19 ++++++-
...arshalUnmarshalTypeHeaderNotAllowedTest.java | 53 ++++++++++++++++++++
.../JacksonMarshalUnmarshalTypeHeaderTest.java | 1 +
6 files changed, 106 insertions(+), 2 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/camel/blob/881e5099/camel-core/src/main/java/org/apache/camel/model/dataformat/JacksonXMLDataFormat.java
----------------------------------------------------------------------
diff --git a/camel-core/src/main/java/org/apache/camel/model/dataformat/JacksonXMLDataFormat.java
b/camel-core/src/main/java/org/apache/camel/model/dataformat/JacksonXMLDataFormat.java
index 1780228..75ad17e 100644
--- a/camel-core/src/main/java/org/apache/camel/model/dataformat/JacksonXMLDataFormat.java
+++ b/camel-core/src/main/java/org/apache/camel/model/dataformat/JacksonXMLDataFormat.java
@@ -68,6 +68,8 @@ public class JacksonXMLDataFormat extends DataFormatDefinition {
private String enableFeatures;
@XmlAttribute
private String disableFeatures;
+ @XmlAttribute
+ private Boolean allowUnmarshallType;
public JacksonXMLDataFormat() {
super("jacksonxml");
@@ -256,6 +258,19 @@ public class JacksonXMLDataFormat extends DataFormatDefinition {
public void setDisableFeatures(String disableFeatures) {
this.disableFeatures = disableFeatures;
}
+
+ public Boolean getAllowUnmarshallType() {
+ return allowUnmarshallType;
+ }
+
+ /**
+ * If enabled then Jackson is allowed to attempt to use the CamelJacksonUnmarshalType
header during the unmarshalling.
+ * <p/>
+ * This should only be enabled when desired to be used.
+ */
+ public void setAllowUnmarshallType(Boolean allowUnmarshallType) {
+ this.allowUnmarshallType = allowUnmarshallType;
+ }
@Override
public String getDataFormatName() {
@@ -326,6 +341,9 @@ public class JacksonXMLDataFormat extends DataFormatDefinition {
if (disableFeatures != null) {
setProperty(camelContext, dataFormat, "disableFeatures", disableFeatures);
}
+ if (allowUnmarshallType != null) {
+ setProperty(camelContext, dataFormat, "allowUnmarshallType", allowUnmarshallType);
+ }
}
}
http://git-wip-us.apache.org/repos/asf/camel/blob/881e5099/components-starter/camel-jacksonxml-starter/src/main/java/org/apache/camel/component/jacksonxml/springboot/JacksonXMLDataFormatConfiguration.java
----------------------------------------------------------------------
diff --git a/components-starter/camel-jacksonxml-starter/src/main/java/org/apache/camel/component/jacksonxml/springboot/JacksonXMLDataFormatConfiguration.java
b/components-starter/camel-jacksonxml-starter/src/main/java/org/apache/camel/component/jacksonxml/springboot/JacksonXMLDataFormatConfiguration.java
index 49e244a..75734c0 100644
--- a/components-starter/camel-jacksonxml-starter/src/main/java/org/apache/camel/component/jacksonxml/springboot/JacksonXMLDataFormatConfiguration.java
+++ b/components-starter/camel-jacksonxml-starter/src/main/java/org/apache/camel/component/jacksonxml/springboot/JacksonXMLDataFormatConfiguration.java
@@ -101,6 +101,12 @@ public class JacksonXMLDataFormatConfiguration {
* separated by comma
*/
private String disableFeatures;
+ /**
+ * If enabled then Jackson is allowed to attempt to use the
+ * CamelJacksonUnmarshalType header during the unmarshalling. This should
+ * only be enabled when desired to be used.
+ */
+ private Boolean allowUnmarshallType = false;
public String getXmlMapper() {
return xmlMapper;
@@ -205,4 +211,12 @@ public class JacksonXMLDataFormatConfiguration {
public void setDisableFeatures(String disableFeatures) {
this.disableFeatures = disableFeatures;
}
+
+ public Boolean getAllowUnmarshallType() {
+ return allowUnmarshallType;
+ }
+
+ public void setAllowUnmarshallType(Boolean allowUnmarshallType) {
+ this.allowUnmarshallType = allowUnmarshallType;
+ }
}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/camel/blob/881e5099/components/camel-jacksonxml/src/main/docs/jacksonxml-dataformat.adoc
----------------------------------------------------------------------
diff --git a/components/camel-jacksonxml/src/main/docs/jacksonxml-dataformat.adoc b/components/camel-jacksonxml/src/main/docs/jacksonxml-dataformat.adoc
index f631701..85c362e 100644
--- a/components/camel-jacksonxml/src/main/docs/jacksonxml-dataformat.adoc
+++ b/components/camel-jacksonxml/src/main/docs/jacksonxml-dataformat.adoc
@@ -36,7 +36,7 @@ JacksonXML Options
// dataformat options: START
-The JacksonXML dataformat supports 13 options which are listed below.
+The JacksonXML dataformat supports 14 options which are listed below.
@@ -57,6 +57,7 @@ The JacksonXML dataformat supports 13 options which are listed below.
| moduleRefs | | String | To use custom Jackson modules referred from the Camel registry.
Multiple modules can be separated by comma.
| enableFeatures | | String | Set of features to enable on the Jackson com.fasterxml.jackson.databind.ObjectMapper.
The features should be a name that matches a enum from com.fasterxml.jackson.databind.SerializationFeature
com.fasterxml.jackson.databind.DeserializationFeature or com.fasterxml.jackson.databind.MapperFeature
Multiple features can be separated by comma
| disableFeatures | | String | Set of features to disable on the Jackson com.fasterxml.jackson.databind.ObjectMapper.
The features should be a name that matches a enum from com.fasterxml.jackson.databind.SerializationFeature
com.fasterxml.jackson.databind.DeserializationFeature or com.fasterxml.jackson.databind.MapperFeature
Multiple features can be separated by comma
+| allowUnmarshallType | false | Boolean | If enabled then Jackson is allowed to attempt to
use the CamelJacksonUnmarshalType header during the unmarshalling. This should only be enabled
when desired to be used.
|=======================================================================
{% endraw %}
// dataformat options: END
http://git-wip-us.apache.org/repos/asf/camel/blob/881e5099/components/camel-jacksonxml/src/main/java/org/apache/camel/component/jacksonxml/JacksonXMLDataFormat.java
----------------------------------------------------------------------
diff --git a/components/camel-jacksonxml/src/main/java/org/apache/camel/component/jacksonxml/JacksonXMLDataFormat.java
b/components/camel-jacksonxml/src/main/java/org/apache/camel/component/jacksonxml/JacksonXMLDataFormat.java
index 869fe66..dd70cd5 100644
--- a/components/camel-jacksonxml/src/main/java/org/apache/camel/component/jacksonxml/JacksonXMLDataFormat.java
+++ b/components/camel-jacksonxml/src/main/java/org/apache/camel/component/jacksonxml/JacksonXMLDataFormat.java
@@ -68,6 +68,7 @@ public class JacksonXMLDataFormat extends ServiceSupport implements DataFormat,
private String enableFeatures;
private String disableFeatures;
private boolean enableJacksonTypeConverter;
+ private boolean allowUnmarshallType;
/**
* Use the default Jackson {@link XmlMapper} and {@link Map}
@@ -158,7 +159,10 @@ public class JacksonXMLDataFormat extends ServiceSupport implements DataFormat,
// is there a header with the unmarshal type?
Class<?> clazz = unmarshalType;
- String type = exchange.getIn().getHeader(JacksonXMLConstants.UNMARSHAL_TYPE, String.class);
+ String type = null;
+ if (allowUnmarshallType) {
+ type = exchange.getIn().getHeader(JacksonXMLConstants.UNMARSHAL_TYPE, String.class);
+ }
if (type == null && isAllowJmsType()) {
type = exchange.getIn().getHeader("JMSType", String.class);
}
@@ -326,6 +330,19 @@ public class JacksonXMLDataFormat extends ServiceSupport implements DataFormat,
public void setEnableJacksonTypeConverter(boolean enableJacksonTypeConverter) {
this.enableJacksonTypeConverter = enableJacksonTypeConverter;
}
+
+ public boolean isAllowUnmarshallType() {
+ return allowUnmarshallType;
+ }
+
+ /**
+ * If enabled then Jackson is allowed to attempt to use the CamelJacksonUnmarshalType
header during the unmarshalling.
+ * <p/>
+ * This should only be enabled when desired to be used.
+ */
+ public void setAllowUnmarshallType(boolean allowJacksonUnmarshallType) {
+ this.allowUnmarshallType = allowJacksonUnmarshallType;
+ }
public String getEnableFeatures() {
return enableFeatures;
http://git-wip-us.apache.org/repos/asf/camel/blob/881e5099/components/camel-jacksonxml/src/test/java/org/apache/camel/component/jacksonxml/JacksonMarshalUnmarshalTypeHeaderNotAllowedTest.java
----------------------------------------------------------------------
diff --git a/components/camel-jacksonxml/src/test/java/org/apache/camel/component/jacksonxml/JacksonMarshalUnmarshalTypeHeaderNotAllowedTest.java
b/components/camel-jacksonxml/src/test/java/org/apache/camel/component/jacksonxml/JacksonMarshalUnmarshalTypeHeaderNotAllowedTest.java
new file mode 100644
index 0000000..579e3be
--- /dev/null
+++ b/components/camel-jacksonxml/src/test/java/org/apache/camel/component/jacksonxml/JacksonMarshalUnmarshalTypeHeaderNotAllowedTest.java
@@ -0,0 +1,53 @@
+/**
+ * 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.jacksonxml;
+
+import java.util.LinkedHashMap;
+
+import org.apache.camel.builder.RouteBuilder;
+import org.apache.camel.component.mock.MockEndpoint;
+import org.apache.camel.test.junit4.CamelTestSupport;
+import org.junit.Test;
+
+public class JacksonMarshalUnmarshalTypeHeaderNotAllowedTest extends CamelTestSupport {
+
+ @Test
+ public void testUnmarshalPojo() throws Exception {
+ MockEndpoint mock = getMockEndpoint("mock:reversePojo");
+ mock.expectedMessageCount(1);
+
+ String json = "<pojo name=\"Camel\"/>";
+ template.sendBodyAndHeader("direct:backPojo", json, JacksonXMLConstants.UNMARSHAL_TYPE,
TestPojo.class.getName());
+
+ assertMockEndpointsSatisfied();
+ }
+
+ @Override
+ protected RouteBuilder createRouteBuilder() throws Exception {
+ return new RouteBuilder() {
+
+ @Override
+ public void configure() throws Exception {
+ JacksonXMLDataFormat format = new JacksonXMLDataFormat();
+
+ from("direct:backPojo").unmarshal(format).to("mock:reversePojo");
+
+ }
+ };
+ }
+
+}
http://git-wip-us.apache.org/repos/asf/camel/blob/881e5099/components/camel-jacksonxml/src/test/java/org/apache/camel/component/jacksonxml/JacksonMarshalUnmarshalTypeHeaderTest.java
----------------------------------------------------------------------
diff --git a/components/camel-jacksonxml/src/test/java/org/apache/camel/component/jacksonxml/JacksonMarshalUnmarshalTypeHeaderTest.java
b/components/camel-jacksonxml/src/test/java/org/apache/camel/component/jacksonxml/JacksonMarshalUnmarshalTypeHeaderTest.java
index 56e3b35..68dd3fe 100644
--- a/components/camel-jacksonxml/src/test/java/org/apache/camel/component/jacksonxml/JacksonMarshalUnmarshalTypeHeaderTest.java
+++ b/components/camel-jacksonxml/src/test/java/org/apache/camel/component/jacksonxml/JacksonMarshalUnmarshalTypeHeaderTest.java
@@ -46,6 +46,7 @@ public class JacksonMarshalUnmarshalTypeHeaderTest extends CamelTestSupport
{
@Override
public void configure() throws Exception {
JacksonXMLDataFormat format = new JacksonXMLDataFormat();
+ format.setAllowUnmarshallType(true);
from("direct:backPojo").unmarshal(format).to("mock:reversePojo");
|