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/03/08 09:15:51 UTC

[3/3] camel git commit: CAMEL-9649: Optimized the logic a bit

CAMEL-9649: Optimized the logic a bit


Project: http://git-wip-us.apache.org/repos/asf/camel/repo
Commit: http://git-wip-us.apache.org/repos/asf/camel/commit/dcf34000
Tree: http://git-wip-us.apache.org/repos/asf/camel/tree/dcf34000
Diff: http://git-wip-us.apache.org/repos/asf/camel/diff/dcf34000

Branch: refs/heads/master
Commit: dcf3400023e0819c8ee2ff484c399638910930d1
Parents: cebeb22
Author: Claus Ibsen <da...@apache.org>
Authored: Tue Mar 8 08:56:13 2016 +0100
Committer: Claus Ibsen <da...@apache.org>
Committed: Tue Mar 8 09:07:56 2016 +0100

----------------------------------------------------------------------
 .../converter/jaxb/FallbackTypeConverter.java   | 36 +++++++++++++++++---
 .../apache/camel/converter/jaxb/JaxbHelper.java | 12 ++++---
 2 files changed, 39 insertions(+), 9 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/camel/blob/dcf34000/components/camel-jaxb/src/main/java/org/apache/camel/converter/jaxb/FallbackTypeConverter.java
----------------------------------------------------------------------
diff --git a/components/camel-jaxb/src/main/java/org/apache/camel/converter/jaxb/FallbackTypeConverter.java b/components/camel-jaxb/src/main/java/org/apache/camel/converter/jaxb/FallbackTypeConverter.java
index 92571c5..16220a2 100644
--- a/components/camel-jaxb/src/main/java/org/apache/camel/converter/jaxb/FallbackTypeConverter.java
+++ b/components/camel-jaxb/src/main/java/org/apache/camel/converter/jaxb/FallbackTypeConverter.java
@@ -62,26 +62,41 @@ import org.slf4j.LoggerFactory;
  */
 public class FallbackTypeConverter extends ServiceSupport implements TypeConverter, TypeConverterAware, CamelContextAware {
 
-    /**
-     * Whether the JAXB converter should use pretty print or not (default is true)
-     */
     public static final String PRETTY_PRINT = "CamelJaxbPrettyPrint";
+    public static final String OBJECT_FACTORY = "CamelJaxbObjectFactory";
 
     private static final Logger LOG = LoggerFactory.getLogger(FallbackTypeConverter.class);
     private final Map<AnnotatedElement, JAXBContext> contexts = new HashMap<>();
     private final StaxConverter staxConverter = new StaxConverter();
     private TypeConverter parentTypeConverter;
     private boolean prettyPrint = true;
+    private boolean objectFactory = true;
     private CamelContext camelContext;
 
     public boolean isPrettyPrint() {
         return prettyPrint;
     }
 
+    /**
+     * Whether the JAXB converter should use pretty print or not (default is true)
+     */
     public void setPrettyPrint(boolean prettyPrint) {
         this.prettyPrint = prettyPrint;
     }
 
+
+    public boolean isObjectFactory() {
+        return objectFactory;
+    }
+
+    /**
+     * Whether the JAXB converter supports using ObjectFactory classes to create the POJO classes during conversion.
+     * This only applies to POJO classes that has not been annotated with JAXB and providing jaxb.index descriptor files.
+     */
+    public void setObjectFactory(boolean objectFactory) {
+        this.objectFactory = objectFactory;
+    }
+
     public boolean allowNull() {
         return false;
     }
@@ -106,6 +121,16 @@ public class FallbackTypeConverter extends ServiceSupport implements TypeConvert
                 setPrettyPrint(true);
             }
         }
+
+        // configure object factory
+        property = camelContext.getProperty(OBJECT_FACTORY);
+        if (property != null) {
+            if (property.equalsIgnoreCase("false")) {
+                setObjectFactory(false);
+            } else {
+                setObjectFactory(true);
+            }
+        }
     }
 
     public <T> T convertTo(Class<T> type, Object value) {
@@ -127,7 +152,8 @@ public class FallbackTypeConverter extends ServiceSupport implements TypeConvert
                 if (hasXmlRootElement(value.getClass())) {
                     return marshall(type, exchange, value, null);
                 }
-                Method objectFactoryMethod = JaxbHelper.getJaxbElementFactoryMethod(camelContext, value.getClass());
+                CamelContext context = exchange != null ? exchange.getContext() : camelContext;
+                Method objectFactoryMethod = JaxbHelper.getJaxbElementFactoryMethod(context, value.getClass());
                 if (objectFactoryMethod != null) {
                     return marshall(type, exchange, value, objectFactoryMethod);
                 }
@@ -170,7 +196,7 @@ public class FallbackTypeConverter extends ServiceSupport implements TypeConvert
 
     @Override
     protected void doStart() throws Exception {
-        // noop
+        LOG.info("Jaxb FallbackTypeConverter[prettyPrint={}, objectFactory={}]", prettyPrint, objectFactory);
     }
 
     @Override

http://git-wip-us.apache.org/repos/asf/camel/blob/dcf34000/components/camel-jaxb/src/main/java/org/apache/camel/converter/jaxb/JaxbHelper.java
----------------------------------------------------------------------
diff --git a/components/camel-jaxb/src/main/java/org/apache/camel/converter/jaxb/JaxbHelper.java b/components/camel-jaxb/src/main/java/org/apache/camel/converter/jaxb/JaxbHelper.java
index 8fdbc78..137e793 100644
--- a/components/camel-jaxb/src/main/java/org/apache/camel/converter/jaxb/JaxbHelper.java
+++ b/components/camel-jaxb/src/main/java/org/apache/camel/converter/jaxb/JaxbHelper.java
@@ -20,17 +20,17 @@ import java.lang.reflect.Method;
 import javax.xml.bind.annotation.XmlElementDecl;
 
 import org.apache.camel.CamelContext;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
 
 public final class JaxbHelper {
 
-    private static final Logger LOG = LoggerFactory.getLogger(JaxbHelper.class);
-
     private JaxbHelper() {
     }
 
     public static <T> Method getJaxbElementFactoryMethod(CamelContext camelContext, Class<T> type) {
+        if (camelContext == null) {
+            return null;
+        }
+
         // find the first method that has @XmlElementDecl with one parameter that matches the type
         Class factory = getObjectFactory(camelContext, type);
         if (factory != null) {
@@ -50,6 +50,10 @@ public final class JaxbHelper {
     }
 
     public static <T> Class getObjectFactory(CamelContext camelContext, Class<T> type) {
+        if (camelContext == null) {
+            return null;
+        }
+
         if (type.getPackage() != null) {
             String objectFactoryClassName = type.getPackage().getName() + ".ObjectFactory";
             return camelContext.getClassResolver().resolveClass(objectFactoryClassName);