Thanks Daniel. I forget to fix on 2.16.x Thanks for tour backport :-) can you upgrade the JIRA too? Thanks Il mer, 14 dic, 2016 alle 21:11, dk...@apache.org<dk...@apache.org> ha scritto: Repository: camel Updated Branches: refs/heads/camel-2.16.x 2f204b742 -> b093ebdb9
CAMEL-10567: Camel-Jackson: 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/235036d2 Tree: http://git-wip-us.apache.org/repos/asf/camel/tree/235036d2 Diff: http://git-wip-us.apache.org/repos/asf/camel/diff/235036d2 Branch: refs/heads/camel-2.16.x Commit: 235036d2396ae45b6809b72a1983dee33b5ba326 Parents: 2f204b7 Author: Andrea Cosentino <anco...@gmail.com> Authored: Wed Dec 7 18:18:45 2016 +0100 Committer: Daniel Kulp <dk...@apache.org> Committed: Wed Dec 14 14:35:03 2016 -0500 ---------------------------------------------------------------------- .../component/jackson/JacksonDataFormat.java | 19 ++++++- ...arshalUnmarshalTypeHeaderNotAllowedTest.java | 54 ++++++++++++++++++++ .../JacksonMarshalUnmarshalTypeHeaderTest.java | 1 + 3 files changed, 73 insertions(+), 1 deletion(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/camel/blob/235036d2/components/camel-jackson/src/main/java/org/apache/camel/component/jackson/JacksonDataFormat.java ---------------------------------------------------------------------- diff --git a/components/camel-jackson/src/main/java/org/apache/camel/component/jackson/JacksonDataFormat.java b/components/camel-jackson/src/main/java/org/apache/camel/component/jackson/JacksonDataFormat.java index 381b81a..553387c 100644 --- a/components/camel-jackson/src/main/java/org/apache/camel/component/jackson/JacksonDataFormat.java +++ b/components/camel-jackson/src/main/java/org/apache/camel/component/jackson/JacksonDataFormat.java @@ -68,6 +68,7 @@ public class JacksonDataFormat extends ServiceSupport implements DataFormat, Dat private String enableFeatures; private String disableFeatures; private boolean enableJacksonTypeConverter; + private boolean allowJacksonUnmarshallType; /** * Use the default Jackson {@link ObjectMapper} and {@link Map} @@ -159,7 +160,10 @@ public class JacksonDataFormat extends ServiceSupport implements DataFormat, Dat // is there a header with the unmarshal type? Class<?> clazz = unmarshalType; - String type = exchange.getIn().getHeader(JacksonConstants.UNMARSHAL_TYPE, String.class); + String type = null; + if (allowJacksonUnmarshallType) { + type = exchange.getIn().getHeader(JacksonConstants.UNMARSHAL_TYPE, String.class); + } if (type == null && isAllowJmsType()) { type = exchange.getIn().getHeader("JMSType", String.class); } @@ -323,6 +327,19 @@ public class JacksonDataFormat extends ServiceSupport implements DataFormat, Dat public void setEnableJacksonTypeConverter(boolean enableJacksonTypeConverter) { this.enableJacksonTypeConverter = enableJacksonTypeConverter; } + + public boolean isAllowJacksonUnmarshallType() { + return allowJacksonUnmarshallType; + } + + /** + * 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 setAllowJacksonUnmarshallType(boolean allowJacksonUnmarshallType) { + this.allowJacksonUnmarshallType = allowJacksonUnmarshallType; + } public String getEnableFeatures() { return enableFeatures; http://git-wip-us.apache.org/repos/asf/camel/blob/235036d2/components/camel-jackson/src/test/java/org/apache/camel/component/jackson/JacksonMarshalUnmarshalTypeHeaderNotAllowedTest.java ---------------------------------------------------------------------- diff --git a/components/camel-jackson/src/test/java/org/apache/camel/component/jackson/JacksonMarshalUnmarshalTypeHeaderNotAllowedTest.java b/components/camel-jackson/src/test/java/org/apache/camel/component/jackson/JacksonMarshalUnmarshalTypeHeaderNotAllowedTest.java new file mode 100644 index 0000000..ffabeeb --- /dev/null +++ b/components/camel-jackson/src/test/java/org/apache/camel/component/jackson/JacksonMarshalUnmarshalTypeHeaderNotAllowedTest.java @@ -0,0 +1,54 @@ +/** + * 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.jackson; + +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); + mock.message(0).body().isInstanceOf(LinkedHashMap.class); + + String json = "{\"name\":\"Camel\"}"; + template.sendBodyAndHeader("direct:backPojo", json, JacksonConstants.UNMARSHAL_TYPE, TestPojo.class.getName()); + + assertMockEndpointsSatisfied(); + } + + @Override + protected RouteBuilder createRouteBuilder() throws Exception { + return new RouteBuilder() { + + @Override + public void configure() throws Exception { + JacksonDataFormat format = new JacksonDataFormat(); + + from("direct:backPojo").unmarshal(format).to("mock:reversePojo"); + + } + }; + } + +} http://git-wip-us.apache.org/repos/asf/camel/blob/235036d2/components/camel-jackson/src/test/java/org/apache/camel/component/jackson/JacksonMarshalUnmarshalTypeHeaderTest.java ---------------------------------------------------------------------- diff --git a/components/camel-jackson/src/test/java/org/apache/camel/component/jackson/JacksonMarshalUnmarshalTypeHeaderTest.java b/components/camel-jackson/src/test/java/org/apache/camel/component/jackson/JacksonMarshalUnmarshalTypeHeaderTest.java index 9cb5b59..623b32e 100644 --- a/components/camel-jackson/src/test/java/org/apache/camel/component/jackson/JacksonMarshalUnmarshalTypeHeaderTest.java +++ b/components/camel-jackson/src/test/java/org/apache/camel/component/jackson/JacksonMarshalUnmarshalTypeHeaderTest.java @@ -46,6 +46,7 @@ public class JacksonMarshalUnmarshalTypeHeaderTest extends CamelTestSupport { @Override public void configure() throws Exception { JacksonDataFormat format = new JacksonDataFormat(); + format.setAllowJacksonUnmarshallType(true); from("direct:backPojo").unmarshal(format).to("mock:reversePojo");