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 2016/02/10 09:50:28 UTC
[1/2] camel git commit: CAMEL-9583: camel-jackson - Allow the
FallbackTypeConverter to convert to/from string types
Repository: camel
Updated Branches:
refs/heads/master 2c78e2f30 -> 2b4b9df67
CAMEL-9583: camel-jackson - Allow the FallbackTypeConverter to convert to/from string types
Project: http://git-wip-us.apache.org/repos/asf/camel/repo
Commit: http://git-wip-us.apache.org/repos/asf/camel/commit/7009d640
Tree: http://git-wip-us.apache.org/repos/asf/camel/tree/7009d640
Diff: http://git-wip-us.apache.org/repos/asf/camel/diff/7009d640
Branch: refs/heads/master
Commit: 7009d64091876c3b1f9e36e074f8cc7484cfb434
Parents: 2c78e2f
Author: Claus Ibsen <da...@apache.org>
Authored: Wed Feb 10 08:16:35 2016 +0100
Committer: Claus Ibsen <da...@apache.org>
Committed: Wed Feb 10 08:16:35 2016 +0100
----------------------------------------------------------------------
.../component/jackson/JacksonConstants.java | 1 +
.../converter/JacksonTypeConverters.java | 36 ++++++++++++++++----
2 files changed, 30 insertions(+), 7 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/camel/blob/7009d640/components/camel-jackson/src/main/java/org/apache/camel/component/jackson/JacksonConstants.java
----------------------------------------------------------------------
diff --git a/components/camel-jackson/src/main/java/org/apache/camel/component/jackson/JacksonConstants.java b/components/camel-jackson/src/main/java/org/apache/camel/component/jackson/JacksonConstants.java
index 1429dc0..d4f5c26 100644
--- a/components/camel-jackson/src/main/java/org/apache/camel/component/jackson/JacksonConstants.java
+++ b/components/camel-jackson/src/main/java/org/apache/camel/component/jackson/JacksonConstants.java
@@ -19,6 +19,7 @@ package org.apache.camel.component.jackson;
public final class JacksonConstants {
public static final String ENABLE_TYPE_CONVERTER = "CamelJacksonEnableTypeConverter";
+ public static final String TYPE_CONVERTER_POJO_ONLY = "CamelJacksonTypeConverterPojoOnly";
public static final String UNMARSHAL_TYPE = "CamelJacksonUnmarshalType";
http://git-wip-us.apache.org/repos/asf/camel/blob/7009d640/components/camel-jackson/src/main/java/org/apache/camel/component/jackson/converter/JacksonTypeConverters.java
----------------------------------------------------------------------
diff --git a/components/camel-jackson/src/main/java/org/apache/camel/component/jackson/converter/JacksonTypeConverters.java b/components/camel-jackson/src/main/java/org/apache/camel/component/jackson/converter/JacksonTypeConverters.java
index 5cb2451..110b6ce 100644
--- a/components/camel-jackson/src/main/java/org/apache/camel/component/jackson/converter/JacksonTypeConverters.java
+++ b/components/camel-jackson/src/main/java/org/apache/camel/component/jackson/converter/JacksonTypeConverters.java
@@ -16,10 +16,10 @@
*/
package org.apache.camel.component.jackson.converter;
-import java.util.Map;
import java.util.Set;
import com.fasterxml.jackson.databind.ObjectMapper;
+import com.fasterxml.jackson.module.jaxb.JaxbAnnotationModule;
import org.apache.camel.Exchange;
import org.apache.camel.FallbackConverter;
import org.apache.camel.component.jackson.JacksonConstants;
@@ -28,21 +28,33 @@ import org.apache.camel.spi.TypeConverterRegistry;
public final class JacksonTypeConverters {
- private final ObjectMapper defaultMapper = new ObjectMapper();
+ private final ObjectMapper defaultMapper;
private boolean init;
private Boolean enabled;
+ private boolean pojoOnly = true;
public JacksonTypeConverters() {
+ defaultMapper = new ObjectMapper();
+ // Enables JAXB processing
+ JaxbAnnotationModule module = new JaxbAnnotationModule();
+ defaultMapper.registerModule(module);
}
@FallbackConverter
- public <T> T convertTo(Class<T> type, Exchange exchange, Object value, TypeConverterRegistry registry) {
+ public <T> T convertTo(Class<T> type, Exchange exchange, Object value, TypeConverterRegistry registry) throws Exception {
// only do this if enabled
if (!init && exchange != null) {
// init to see if this is enabled
String text = exchange.getContext().getProperties().get(JacksonConstants.ENABLE_TYPE_CONVERTER);
enabled = "true".equalsIgnoreCase(text);
+
+ // pojo only by default
+ text = exchange.getContext().getProperties().get(JacksonConstants.TYPE_CONVERTER_POJO_ONLY);
+ if (text != null) {
+ pojoOnly = "true".equalsIgnoreCase(text);
+ }
+
init = true;
}
@@ -50,14 +62,24 @@ public final class JacksonTypeConverters {
return null;
}
-
- if (isNotPojoType(type)) {
+ if (pojoOnly && isNotPojoType(type)) {
return null;
}
- if (exchange != null && value instanceof Map) {
+ if (exchange != null) {
ObjectMapper mapper = resolveObjectMapper(exchange.getContext().getRegistry());
- if (mapper.canSerialize(type)) {
+ if (String.class.isAssignableFrom(type)) {
+ String out = mapper.writeValueAsString(value);
+ return type.cast(out);
+ } else if (byte[].class.isAssignableFrom(type)) {
+ byte[] out = mapper.writeValueAsBytes(value);
+ return type.cast(out);
+ } else if (mapper.canSerialize(type)) {
+ // TODO: favor using mapper readValue
+ // if the input is string or input stream
+ if (String.class.isAssignableFrom(value.getClass())) {
+ return mapper.readValue((String) value, type);
+ }
return mapper.convertValue(value, type);
}
}
[2/2] camel git commit: CAMEL-9583: camel-jackson - Allow the
FallbackTypeConverter to convert to/from string types
Posted by da...@apache.org.
CAMEL-9583: camel-jackson - Allow the FallbackTypeConverter to convert to/from string types
Project: http://git-wip-us.apache.org/repos/asf/camel/repo
Commit: http://git-wip-us.apache.org/repos/asf/camel/commit/2b4b9df6
Tree: http://git-wip-us.apache.org/repos/asf/camel/tree/2b4b9df6
Diff: http://git-wip-us.apache.org/repos/asf/camel/diff/2b4b9df6
Branch: refs/heads/master
Commit: 2b4b9df67da4b84cb69d9dd42ef77155a803679a
Parents: 7009d64
Author: Claus Ibsen <da...@apache.org>
Authored: Wed Feb 10 09:43:46 2016 +0100
Committer: Claus Ibsen <da...@apache.org>
Committed: Wed Feb 10 09:44:40 2016 +0100
----------------------------------------------------------------------
.../component/jackson/JacksonConstants.java | 2 +-
.../converter/JacksonTypeConverters.java | 62 +++++++++++++----
.../jackson/JacksonConversionsSimpleTest.java | 69 -------------------
.../jackson/JacksonConversionsTest.java | 58 ----------------
.../converter/JacksonConversionsPojoTest.java | 58 ++++++++++++++++
.../converter/JacksonConversionsSimpleTest.java | 70 ++++++++++++++++++++
.../converter/JacksonConversionsTest.java | 60 +++++++++++++++++
.../component/jackson/converter/Order.java | 68 +++++++++++++++++++
8 files changed, 306 insertions(+), 141 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/camel/blob/2b4b9df6/components/camel-jackson/src/main/java/org/apache/camel/component/jackson/JacksonConstants.java
----------------------------------------------------------------------
diff --git a/components/camel-jackson/src/main/java/org/apache/camel/component/jackson/JacksonConstants.java b/components/camel-jackson/src/main/java/org/apache/camel/component/jackson/JacksonConstants.java
index d4f5c26..07f6236 100644
--- a/components/camel-jackson/src/main/java/org/apache/camel/component/jackson/JacksonConstants.java
+++ b/components/camel-jackson/src/main/java/org/apache/camel/component/jackson/JacksonConstants.java
@@ -19,7 +19,7 @@ package org.apache.camel.component.jackson;
public final class JacksonConstants {
public static final String ENABLE_TYPE_CONVERTER = "CamelJacksonEnableTypeConverter";
- public static final String TYPE_CONVERTER_POJO_ONLY = "CamelJacksonTypeConverterPojoOnly";
+ public static final String TYPE_CONVERTER_TO_POJO = "CamelJacksonTypeConverterToPojo";
public static final String UNMARSHAL_TYPE = "CamelJacksonUnmarshalType";
http://git-wip-us.apache.org/repos/asf/camel/blob/2b4b9df6/components/camel-jackson/src/main/java/org/apache/camel/component/jackson/converter/JacksonTypeConverters.java
----------------------------------------------------------------------
diff --git a/components/camel-jackson/src/main/java/org/apache/camel/component/jackson/converter/JacksonTypeConverters.java b/components/camel-jackson/src/main/java/org/apache/camel/component/jackson/converter/JacksonTypeConverters.java
index 110b6ce..567af5c 100644
--- a/components/camel-jackson/src/main/java/org/apache/camel/component/jackson/converter/JacksonTypeConverters.java
+++ b/components/camel-jackson/src/main/java/org/apache/camel/component/jackson/converter/JacksonTypeConverters.java
@@ -16,26 +16,42 @@
*/
package org.apache.camel.component.jackson.converter;
+import java.io.File;
+import java.io.InputStream;
+import java.io.Reader;
import java.util.Set;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.module.jaxb.JaxbAnnotationModule;
+import org.apache.camel.CamelContext;
import org.apache.camel.Exchange;
import org.apache.camel.FallbackConverter;
import org.apache.camel.component.jackson.JacksonConstants;
import org.apache.camel.spi.Registry;
import org.apache.camel.spi.TypeConverterRegistry;
+/**
+ * Jackson {@link org.apache.camel.TypeConverter} that allows converting json to/from POJOs and other types.
+ * <br/>
+ * This implementation uses a {@link FallbackConverter}.
+ * <p/>
+ * The converter is disabled by default. To enable then set the property
+ * {@link JacksonConstants#ENABLE_TYPE_CONVERTER} to <tt>true</tt> on {@link CamelContext#getProperties()}.
+ * <br/>
+ * The option {@link JacksonConstants#TYPE_CONVERTER_TO_POJO} can be used to allow converting to POJO types. By
+ * default the converter only attempts to convert to primitive types such as String and numbers. To convert to any kind, then
+ * enable this by setting {@link JacksonConstants#TYPE_CONVERTER_TO_POJO} to <tt>true</tt> on {@link CamelContext#getProperties()}.
+ */
public final class JacksonTypeConverters {
private final ObjectMapper defaultMapper;
private boolean init;
- private Boolean enabled;
- private boolean pojoOnly = true;
+ private boolean enabled;
+ private boolean toPojo;
public JacksonTypeConverters() {
defaultMapper = new ObjectMapper();
- // Enables JAXB processing
+ // Enables JAXB processing so we can easily convert JAXB annotated pojos also
JaxbAnnotationModule module = new JaxbAnnotationModule();
defaultMapper.registerModule(module);
}
@@ -43,31 +59,39 @@ public final class JacksonTypeConverters {
@FallbackConverter
public <T> T convertTo(Class<T> type, Exchange exchange, Object value, TypeConverterRegistry registry) throws Exception {
- // only do this if enabled
+ // only do this if enabled (disabled by default)
if (!init && exchange != null) {
// init to see if this is enabled
String text = exchange.getContext().getProperties().get(JacksonConstants.ENABLE_TYPE_CONVERTER);
- enabled = "true".equalsIgnoreCase(text);
+ if (text != null) {
+ text = exchange.getContext().resolvePropertyPlaceholders(text);
+ enabled = "true".equalsIgnoreCase(text);
+ }
- // pojo only by default
- text = exchange.getContext().getProperties().get(JacksonConstants.TYPE_CONVERTER_POJO_ONLY);
+ // pojoOnly is enabled by default
+ text = exchange.getContext().getProperties().get(JacksonConstants.TYPE_CONVERTER_TO_POJO);
if (text != null) {
- pojoOnly = "true".equalsIgnoreCase(text);
+ text = exchange.getContext().resolvePropertyPlaceholders(text);
+ toPojo = "true".equalsIgnoreCase(text);
}
init = true;
}
- if (enabled == null || !enabled) {
+ if (!enabled) {
return null;
}
- if (pojoOnly && isNotPojoType(type)) {
+ if (!toPojo && isNotPojoType(type)) {
return null;
}
if (exchange != null) {
ObjectMapper mapper = resolveObjectMapper(exchange.getContext().getRegistry());
+
+ // favor use write/read operations as they are higher level than the convertValue
+
+ // if we want to convert to a String or byte[] then use write operation
if (String.class.isAssignableFrom(type)) {
String out = mapper.writeValueAsString(value);
return type.cast(out);
@@ -75,12 +99,21 @@ public final class JacksonTypeConverters {
byte[] out = mapper.writeValueAsBytes(value);
return type.cast(out);
} else if (mapper.canSerialize(type)) {
- // TODO: favor using mapper readValue
- // if the input is string or input stream
+ // if the source value type is readable by the mapper then use its read operation
if (String.class.isAssignableFrom(value.getClass())) {
return mapper.readValue((String) value, type);
+ } else if (byte[].class.isAssignableFrom(value.getClass())) {
+ return mapper.readValue((byte[]) value, type);
+ } else if (File.class.isAssignableFrom(value.getClass())) {
+ return mapper.readValue((File) value, type);
+ } else if (InputStream.class.isAssignableFrom(value.getClass())) {
+ return mapper.readValue((InputStream) value, type);
+ } else if (Reader.class.isAssignableFrom(value.getClass())) {
+ return mapper.readValue((Reader) value, type);
+ } else {
+ // fallback to generic convert value
+ return mapper.convertValue(value, type);
}
- return mapper.convertValue(value, type);
}
}
@@ -88,6 +121,9 @@ public final class JacksonTypeConverters {
return null;
}
+ /**
+ * Whether the type is NOT a pojo type but only a set of simple types such as String and numbers.
+ */
private static boolean isNotPojoType(Class<?> type) {
boolean isString = String.class.isAssignableFrom(type);
boolean isNumber = Number.class.isAssignableFrom(type)
http://git-wip-us.apache.org/repos/asf/camel/blob/2b4b9df6/components/camel-jackson/src/test/java/org/apache/camel/component/jackson/JacksonConversionsSimpleTest.java
----------------------------------------------------------------------
diff --git a/components/camel-jackson/src/test/java/org/apache/camel/component/jackson/JacksonConversionsSimpleTest.java b/components/camel-jackson/src/test/java/org/apache/camel/component/jackson/JacksonConversionsSimpleTest.java
deleted file mode 100644
index 1128fa4..0000000
--- a/components/camel-jackson/src/test/java/org/apache/camel/component/jackson/JacksonConversionsSimpleTest.java
+++ /dev/null
@@ -1,69 +0,0 @@
-/**
- * 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.HashMap;
-import java.util.Map;
-
-import org.apache.camel.CamelContext;
-import org.apache.camel.Exchange;
-import org.apache.camel.impl.DefaultExchange;
-import org.apache.camel.test.junit4.CamelTestSupport;
-import org.junit.Test;
-
-public class JacksonConversionsSimpleTest extends CamelTestSupport {
-
- @Override
- public boolean isUseRouteBuilder() {
- return false;
- }
-
- @Override
- protected CamelContext createCamelContext() throws Exception {
- CamelContext context = super.createCamelContext();
- // enable jackson type converter by setting this property on CamelContext
- context.getProperties().put(JacksonConstants.ENABLE_TYPE_CONVERTER, "true");
- return context;
- }
-
- @Test
- public void shouldNotConvertMapToString() {
- Exchange exchange = new DefaultExchange(context);
-
- Map<String, String> body = new HashMap<String, String>();
- Object convertedObject = context.getTypeConverter().convertTo(String.class, exchange, body);
- // will do a toString which is an empty map
- assertEquals(body.toString(), convertedObject);
- }
-
- @Test
- public void shouldNotConvertMapToNumber() {
- Exchange exchange = new DefaultExchange(context);
-
- Object convertedObject = context.getTypeConverter().convertTo(Long.class, exchange, new HashMap<String, String>());
- assertNull(convertedObject);
- }
-
- @Test
- public void shouldNotConvertMapToPrimitive() {
- Exchange exchange = new DefaultExchange(context);
- Object convertedObject = context.getTypeConverter().convertTo(long.class, exchange, new HashMap<String, String>());
-
- assertNull(convertedObject);
- }
-
-}
http://git-wip-us.apache.org/repos/asf/camel/blob/2b4b9df6/components/camel-jackson/src/test/java/org/apache/camel/component/jackson/JacksonConversionsTest.java
----------------------------------------------------------------------
diff --git a/components/camel-jackson/src/test/java/org/apache/camel/component/jackson/JacksonConversionsTest.java b/components/camel-jackson/src/test/java/org/apache/camel/component/jackson/JacksonConversionsTest.java
deleted file mode 100644
index 255e033..0000000
--- a/components/camel-jackson/src/test/java/org/apache/camel/component/jackson/JacksonConversionsTest.java
+++ /dev/null
@@ -1,58 +0,0 @@
-/**
- * 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.HashMap;
-import java.util.Map;
-
-import org.apache.camel.CamelContext;
-import org.apache.camel.builder.RouteBuilder;
-import org.apache.camel.test.junit4.CamelTestSupport;
-import org.junit.Test;
-
-public class JacksonConversionsTest extends CamelTestSupport {
-
- @Override
- protected CamelContext createCamelContext() throws Exception {
- CamelContext context = super.createCamelContext();
- // enable jackson type converter by setting this property on CamelContext
- context.getProperties().put(JacksonConstants.ENABLE_TYPE_CONVERTER, "true");
- return context;
- }
-
- @Test
- public void shouldConvertMapToPojo() {
- String name = "someName";
- Map<String, String> pojoAsMap = new HashMap<String, String>();
- pojoAsMap.put("name", name);
-
- TestPojo testPojo = (TestPojo) template.requestBody("direct:test", pojoAsMap);
-
- assertEquals(name, testPojo.getName());
- }
-
- @Override
- protected RouteBuilder createRouteBuilder() throws Exception {
- return new RouteBuilder() {
- @Override
- public void configure() throws Exception {
- from("direct:test").convertBodyTo(TestPojo.class);
- }
- };
- }
-
-}
http://git-wip-us.apache.org/repos/asf/camel/blob/2b4b9df6/components/camel-jackson/src/test/java/org/apache/camel/component/jackson/converter/JacksonConversionsPojoTest.java
----------------------------------------------------------------------
diff --git a/components/camel-jackson/src/test/java/org/apache/camel/component/jackson/converter/JacksonConversionsPojoTest.java b/components/camel-jackson/src/test/java/org/apache/camel/component/jackson/converter/JacksonConversionsPojoTest.java
new file mode 100644
index 0000000..4df73e6
--- /dev/null
+++ b/components/camel-jackson/src/test/java/org/apache/camel/component/jackson/converter/JacksonConversionsPojoTest.java
@@ -0,0 +1,58 @@
+/**
+ * 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.converter;
+
+import org.apache.camel.CamelContext;
+import org.apache.camel.builder.RouteBuilder;
+import org.apache.camel.component.jackson.JacksonConstants;
+import org.apache.camel.component.jackson.converter.Order;
+import org.apache.camel.test.junit4.CamelTestSupport;
+import org.junit.Test;
+
+public class JacksonConversionsPojoTest extends CamelTestSupport {
+
+ @Override
+ protected CamelContext createCamelContext() throws Exception {
+ CamelContext context = super.createCamelContext();
+ // enable jackson type converter by setting this property on CamelContext
+ context.getProperties().put(JacksonConstants.ENABLE_TYPE_CONVERTER, "true");
+ context.getProperties().put(JacksonConstants.TYPE_CONVERTER_TO_POJO, "true");
+ return context;
+ }
+
+ @Test
+ public void shouldConvertPojoToString() {
+ Order order = new Order();
+ order.setAmount(1);
+ order.setCustomerName("Acme");
+ order.setPartName("Camel");
+
+ String json = (String) template.requestBody("direct:test", order);
+ assertEquals("{\"id\":0,\"partName\":\"Camel\",\"amount\":1,\"customerName\":\"Acme\"}", json);
+ }
+
+ @Override
+ protected RouteBuilder createRouteBuilder() throws Exception {
+ return new RouteBuilder() {
+ @Override
+ public void configure() throws Exception {
+ from("direct:test").convertBodyTo(String.class);
+ }
+ };
+ }
+
+}
http://git-wip-us.apache.org/repos/asf/camel/blob/2b4b9df6/components/camel-jackson/src/test/java/org/apache/camel/component/jackson/converter/JacksonConversionsSimpleTest.java
----------------------------------------------------------------------
diff --git a/components/camel-jackson/src/test/java/org/apache/camel/component/jackson/converter/JacksonConversionsSimpleTest.java b/components/camel-jackson/src/test/java/org/apache/camel/component/jackson/converter/JacksonConversionsSimpleTest.java
new file mode 100644
index 0000000..3f05880
--- /dev/null
+++ b/components/camel-jackson/src/test/java/org/apache/camel/component/jackson/converter/JacksonConversionsSimpleTest.java
@@ -0,0 +1,70 @@
+/**
+ * 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.converter;
+
+import java.util.HashMap;
+import java.util.Map;
+
+import org.apache.camel.CamelContext;
+import org.apache.camel.Exchange;
+import org.apache.camel.component.jackson.JacksonConstants;
+import org.apache.camel.impl.DefaultExchange;
+import org.apache.camel.test.junit4.CamelTestSupport;
+import org.junit.Test;
+
+public class JacksonConversionsSimpleTest extends CamelTestSupport {
+
+ @Override
+ public boolean isUseRouteBuilder() {
+ return false;
+ }
+
+ @Override
+ protected CamelContext createCamelContext() throws Exception {
+ CamelContext context = super.createCamelContext();
+ // enable jackson type converter by setting this property on CamelContext
+ context.getProperties().put(JacksonConstants.ENABLE_TYPE_CONVERTER, "true");
+ return context;
+ }
+
+ @Test
+ public void shouldNotConvertMapToString() {
+ Exchange exchange = new DefaultExchange(context);
+
+ Map<String, String> body = new HashMap<String, String>();
+ Object convertedObject = context.getTypeConverter().convertTo(String.class, exchange, body);
+ // will do a toString which is an empty map
+ assertEquals(body.toString(), convertedObject);
+ }
+
+ @Test
+ public void shouldNotConvertMapToNumber() {
+ Exchange exchange = new DefaultExchange(context);
+
+ Object convertedObject = context.getTypeConverter().convertTo(Long.class, exchange, new HashMap<String, String>());
+ assertNull(convertedObject);
+ }
+
+ @Test
+ public void shouldNotConvertMapToPrimitive() {
+ Exchange exchange = new DefaultExchange(context);
+ Object convertedObject = context.getTypeConverter().convertTo(long.class, exchange, new HashMap<String, String>());
+
+ assertNull(convertedObject);
+ }
+
+}
http://git-wip-us.apache.org/repos/asf/camel/blob/2b4b9df6/components/camel-jackson/src/test/java/org/apache/camel/component/jackson/converter/JacksonConversionsTest.java
----------------------------------------------------------------------
diff --git a/components/camel-jackson/src/test/java/org/apache/camel/component/jackson/converter/JacksonConversionsTest.java b/components/camel-jackson/src/test/java/org/apache/camel/component/jackson/converter/JacksonConversionsTest.java
new file mode 100644
index 0000000..83a2c9d
--- /dev/null
+++ b/components/camel-jackson/src/test/java/org/apache/camel/component/jackson/converter/JacksonConversionsTest.java
@@ -0,0 +1,60 @@
+/**
+ * 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.converter;
+
+import java.util.HashMap;
+import java.util.Map;
+
+import org.apache.camel.CamelContext;
+import org.apache.camel.builder.RouteBuilder;
+import org.apache.camel.component.jackson.JacksonConstants;
+import org.apache.camel.component.jackson.TestPojo;
+import org.apache.camel.test.junit4.CamelTestSupport;
+import org.junit.Test;
+
+public class JacksonConversionsTest extends CamelTestSupport {
+
+ @Override
+ protected CamelContext createCamelContext() throws Exception {
+ CamelContext context = super.createCamelContext();
+ // enable jackson type converter by setting this property on CamelContext
+ context.getProperties().put(JacksonConstants.ENABLE_TYPE_CONVERTER, "true");
+ return context;
+ }
+
+ @Test
+ public void shouldConvertMapToPojo() {
+ String name = "someName";
+ Map<String, String> pojoAsMap = new HashMap<String, String>();
+ pojoAsMap.put("name", name);
+
+ TestPojo testPojo = (TestPojo) template.requestBody("direct:test", pojoAsMap);
+
+ assertEquals(name, testPojo.getName());
+ }
+
+ @Override
+ protected RouteBuilder createRouteBuilder() throws Exception {
+ return new RouteBuilder() {
+ @Override
+ public void configure() throws Exception {
+ from("direct:test").convertBodyTo(TestPojo.class);
+ }
+ };
+ }
+
+}
http://git-wip-us.apache.org/repos/asf/camel/blob/2b4b9df6/components/camel-jackson/src/test/java/org/apache/camel/component/jackson/converter/Order.java
----------------------------------------------------------------------
diff --git a/components/camel-jackson/src/test/java/org/apache/camel/component/jackson/converter/Order.java b/components/camel-jackson/src/test/java/org/apache/camel/component/jackson/converter/Order.java
new file mode 100644
index 0000000..6202d3c
--- /dev/null
+++ b/components/camel-jackson/src/test/java/org/apache/camel/component/jackson/converter/Order.java
@@ -0,0 +1,68 @@
+/**
+ * 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.converter;
+
+import javax.xml.bind.annotation.XmlAccessType;
+import javax.xml.bind.annotation.XmlAccessorType;
+import javax.xml.bind.annotation.XmlAttribute;
+import javax.xml.bind.annotation.XmlRootElement;
+
+@XmlRootElement(name = "order")
+@XmlAccessorType(XmlAccessType.FIELD)
+public class Order {
+
+ @XmlAttribute
+ private int id;
+ @XmlAttribute
+ private String partName;
+ @XmlAttribute
+ private int amount;
+ @XmlAttribute
+ private String customerName;
+
+ public int getId() {
+ return id;
+ }
+
+ public void setId(int id) {
+ this.id = id;
+ }
+
+ public String getPartName() {
+ return partName;
+ }
+
+ public void setPartName(String partName) {
+ this.partName = partName;
+ }
+
+ public int getAmount() {
+ return amount;
+ }
+
+ public void setAmount(int amount) {
+ this.amount = amount;
+ }
+
+ public String getCustomerName() {
+ return customerName;
+ }
+
+ public void setCustomerName(String customerName) {
+ this.customerName = customerName;
+ }
+}