This is an automated email from the ASF dual-hosted git repository.

davsclaus pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/camel.git


The following commit(s) were added to refs/heads/master by this push:
     new cc9eb90  api: remove createModelFromXml from XMLRoutesDefinitionLoader 
(#4986)
cc9eb90 is described below

commit cc9eb90e54c2afcd7513741c5b322aab2238d777
Author: Luca Burgazzoli <lburgazz...@users.noreply.github.com>
AuthorDate: Mon Feb 1 18:16:18 2021 +0100

    api: remove createModelFromXml from XMLRoutesDefinitionLoader (#4986)
---
 .../camel/spi/XMLRoutesDefinitionLoader.java       |   7 -
 .../in/ModelParserXMLRoutesDefinitionLoader.java   |   6 -
 ...RoutesDefinitionLoader.java => JaxbHelper.java} | 178 ++++-----------------
 .../camel/xml/jaxb/JaxbModelToXMLDumper.java       |  77 +--------
 .../xml/jaxb/JaxbXMLRoutesDefinitionLoader.java    | 145 +----------------
 5 files changed, 47 insertions(+), 366 deletions(-)

diff --git 
a/core/camel-api/src/main/java/org/apache/camel/spi/XMLRoutesDefinitionLoader.java
 
b/core/camel-api/src/main/java/org/apache/camel/spi/XMLRoutesDefinitionLoader.java
index 56c2259..581025e 100644
--- 
a/core/camel-api/src/main/java/org/apache/camel/spi/XMLRoutesDefinitionLoader.java
+++ 
b/core/camel-api/src/main/java/org/apache/camel/spi/XMLRoutesDefinitionLoader.java
@@ -19,7 +19,6 @@ package org.apache.camel.spi;
 import java.io.InputStream;
 
 import org.apache.camel.CamelContext;
-import org.apache.camel.NamedNode;
 
 /**
  * SPI for loading routes/rests from XML input streams and parsing this to 
model definition classes.
@@ -45,10 +44,4 @@ public interface XMLRoutesDefinitionLoader {
      * Loads from XML into rests.
      */
     Object loadRestsDefinition(CamelContext context, InputStream inputStream) 
throws Exception;
-
-    /**
-     * Creates a model of the given type from the xml
-     */
-    <T extends NamedNode> T createModelFromXml(CamelContext context, String 
xml, Class<T> type) throws Exception;
-
 }
diff --git 
a/core/camel-xml-io/src/main/java/org/apache/camel/xml/in/ModelParserXMLRoutesDefinitionLoader.java
 
b/core/camel-xml-io/src/main/java/org/apache/camel/xml/in/ModelParserXMLRoutesDefinitionLoader.java
index 3288af8..fcdcfe9 100644
--- 
a/core/camel-xml-io/src/main/java/org/apache/camel/xml/in/ModelParserXMLRoutesDefinitionLoader.java
+++ 
b/core/camel-xml-io/src/main/java/org/apache/camel/xml/in/ModelParserXMLRoutesDefinitionLoader.java
@@ -19,7 +19,6 @@ package org.apache.camel.xml.in;
 import java.io.InputStream;
 
 import org.apache.camel.CamelContext;
-import org.apache.camel.NamedNode;
 import org.apache.camel.spi.XMLRoutesDefinitionLoader;
 import org.apache.camel.spi.annotations.JdkService;
 
@@ -51,11 +50,6 @@ public class ModelParserXMLRoutesDefinitionLoader implements 
XMLRoutesDefinition
     }
 
     @Override
-    public <T extends NamedNode> T createModelFromXml(CamelContext context, 
String xml, Class<T> type) throws Exception {
-        throw new UnsupportedOperationException("Not supported use 
camel-xml-jaxb instead");
-    }
-
-    @Override
     public String toString() {
         return "camel-xml-io";
     }
diff --git 
a/core/camel-xml-jaxb/src/main/java/org/apache/camel/xml/jaxb/JaxbXMLRoutesDefinitionLoader.java
 b/core/camel-xml-jaxb/src/main/java/org/apache/camel/xml/jaxb/JaxbHelper.java
similarity index 51%
copy from 
core/camel-xml-jaxb/src/main/java/org/apache/camel/xml/jaxb/JaxbXMLRoutesDefinitionLoader.java
copy to 
core/camel-xml-jaxb/src/main/java/org/apache/camel/xml/jaxb/JaxbHelper.java
index c32a949..de2b2a1 100644
--- 
a/core/camel-xml-jaxb/src/main/java/org/apache/camel/xml/jaxb/JaxbXMLRoutesDefinitionLoader.java
+++ 
b/core/camel-xml-jaxb/src/main/java/org/apache/camel/xml/jaxb/JaxbHelper.java
@@ -16,8 +16,6 @@
  */
 package org.apache.camel.xml.jaxb;
 
-import java.io.IOException;
-import java.io.InputStream;
 import java.util.Iterator;
 import java.util.LinkedHashMap;
 import java.util.List;
@@ -26,7 +24,6 @@ import java.util.Map;
 import javax.xml.bind.Binder;
 import javax.xml.bind.JAXBContext;
 import javax.xml.bind.JAXBException;
-import javax.xml.bind.Unmarshaller;
 
 import org.w3c.dom.Document;
 import org.w3c.dom.NamedNodeMap;
@@ -44,136 +41,51 @@ import org.apache.camel.model.RouteTemplateDefinition;
 import org.apache.camel.model.RouteTemplatesDefinition;
 import org.apache.camel.model.RoutesDefinition;
 import org.apache.camel.model.language.ExpressionDefinition;
-import org.apache.camel.model.rest.RestDefinition;
-import org.apache.camel.model.rest.RestsDefinition;
-import org.apache.camel.spi.ModelJAXBContextFactory;
 import org.apache.camel.spi.NamespaceAware;
 import org.apache.camel.spi.TypeConverterRegistry;
-import org.apache.camel.spi.XMLRoutesDefinitionLoader;
-import org.apache.camel.spi.annotations.JdkService;
 
 import static 
org.apache.camel.model.ProcessorDefinitionHelper.filterTypeInOutputs;
 
-/**
- * JAXB based {@link XMLRoutesDefinitionLoader}. This is the default loader 
used historically by Camel. The camel-xml-io
- * parser is a light-weight alternative.
- */
-@JdkService(XMLRoutesDefinitionLoader.FACTORY)
-public class JaxbXMLRoutesDefinitionLoader implements 
XMLRoutesDefinitionLoader {
-
-    @Override
-    public Object loadRoutesDefinition(CamelContext context, InputStream 
inputStream) throws Exception {
-        XmlConverter xmlConverter = newXmlConverter(context);
-        Document dom = xmlConverter.toDOMDocument(inputStream, null);
-
-        JAXBContext jaxbContext = getJAXBContext(context);
-
-        Map<String, String> namespaces = new LinkedHashMap<>();
-        extractNamespaces(dom, namespaces);
-
-        Binder<Node> binder = jaxbContext.createBinder();
-        Object result = binder.unmarshal(dom);
-
-        if (result == null) {
-            throw new JAXBException("Cannot unmarshal to RoutesDefinition 
using JAXB");
-        }
-
-        // can either be routes or a single route
-        RoutesDefinition answer;
-        if (result instanceof RouteDefinition) {
-            RouteDefinition route = (RouteDefinition) result;
-            answer = new RoutesDefinition();
-            applyNamespaces(route, namespaces);
-            answer.getRoutes().add(route);
-        } else if (result instanceof RoutesDefinition) {
-            answer = (RoutesDefinition) result;
-            for (RouteDefinition route : answer.getRoutes()) {
-                applyNamespaces(route, namespaces);
-            }
-        } else {
-            // ignore not supported type
-            return null;
-        }
-
-        return answer;
+public final class JaxbHelper {
+    private JaxbHelper() {
     }
 
-    @Override
-    public Object loadRouteTemplatesDefinition(CamelContext context, 
InputStream inputStream) throws Exception {
-        XmlConverter xmlConverter = newXmlConverter(context);
-        Document dom = xmlConverter.toDOMDocument(inputStream, null);
-
-        JAXBContext jaxbContext = getJAXBContext(context);
-
-        Map<String, String> namespaces = new LinkedHashMap<>();
-        extractNamespaces(dom, namespaces);
-
-        Binder<Node> binder = jaxbContext.createBinder();
-        Object result = binder.unmarshal(dom);
+    public static JAXBContext getJAXBContext(CamelContext context) throws 
Exception {
+        return (JAXBContext) 
context.adapt(ExtendedCamelContext.class).getModelJAXBContextFactory().newJAXBContext();
+    }
 
-        if (result == null) {
-            throw new JAXBException("Cannot unmarshal to 
RouteTemplatesDefinition using JAXB");
-        }
+    /**
+     * Extract all XML namespaces from the expressions in the route
+     *
+     * @param route      the route
+     * @param namespaces the map of namespaces to add discovered XML 
namespaces into
+     */
+    public static void extractNamespaces(RouteDefinition route, Map<String, 
String> namespaces) {
+        Iterator<ExpressionNode> it = filterTypeInOutputs(route.getOutputs(), 
ExpressionNode.class);
+        while (it.hasNext()) {
+            NamespaceAware na = getNamespaceAwareFromExpression(it.next());
 
-        // can either be routes or a single route
-        RouteTemplatesDefinition answer;
-        if (result instanceof RouteTemplateDefinition) {
-            RouteTemplateDefinition route = (RouteTemplateDefinition) result;
-            answer = new RouteTemplatesDefinition();
-            applyNamespaces(route.getRoute(), namespaces);
-            answer.getRouteTemplates().add(route);
-        } else if (result instanceof RouteTemplatesDefinition) {
-            answer = (RouteTemplatesDefinition) result;
-            for (RouteTemplateDefinition route : answer.getRouteTemplates()) {
-                applyNamespaces(route.getRoute(), namespaces);
+            if (na != null) {
+                Map<String, String> map = na.getNamespaces();
+                if (map != null && !map.isEmpty()) {
+                    namespaces.putAll(map);
+                }
             }
-        } else {
-            // ignore not supported type
-            return null;
         }
-
-        return answer;
     }
 
-    @Override
-    public Object loadRestsDefinition(CamelContext context, InputStream 
inputStream) throws Exception {
-        // load routes using JAXB
-        Unmarshaller unmarshaller = 
getJAXBContext(context).createUnmarshaller();
-        Object result = unmarshaller.unmarshal(inputStream);
-
-        if (result == null) {
-            throw new IOException("Cannot unmarshal to rests using JAXB from 
input stream: " + inputStream);
-        }
+    public static NamespaceAware 
getNamespaceAwareFromExpression(ExpressionNode expressionNode) {
+        ExpressionDefinition ed = expressionNode.getExpression();
 
-        // can either be routes or a single route
-        RestsDefinition answer;
-        if (result instanceof RestDefinition) {
-            RestDefinition rest = (RestDefinition) result;
-            answer = new RestsDefinition();
-            answer.getRests().add(rest);
-        } else if (result instanceof RestsDefinition) {
-            answer = (RestsDefinition) result;
-        } else {
-            // ignore not supported type
-            return null;
+        NamespaceAware na = null;
+        Expression exp = ed.getExpressionValue();
+        if (exp instanceof NamespaceAware) {
+            na = (NamespaceAware) exp;
+        } else if (ed instanceof NamespaceAware) {
+            na = (NamespaceAware) ed;
         }
 
-        return answer;
-    }
-
-    @Override
-    public <T extends NamedNode> T createModelFromXml(CamelContext context, 
String xml, Class<T> type) throws Exception {
-        return modelToXml(context, null, xml, type);
-    }
-
-    @Override
-    public String toString() {
-        return "camel-xml-jaxb";
-    }
-
-    private static JAXBContext getJAXBContext(CamelContext context) throws 
Exception {
-        ModelJAXBContextFactory factory = 
context.adapt(ExtendedCamelContext.class).getModelJAXBContextFactory();
-        return (JAXBContext) factory.newJAXBContext();
+        return na;
     }
 
     /**
@@ -182,7 +94,7 @@ public class JaxbXMLRoutesDefinitionLoader implements 
XMLRoutesDefinitionLoader
      * @param  context CamelContext if provided
      * @return         a new XmlConverter instance
      */
-    private static XmlConverter newXmlConverter(CamelContext context) {
+    public static XmlConverter newXmlConverter(CamelContext context) {
         XmlConverter xmlConverter;
         if (context != null) {
             TypeConverterRegistry registry = 
context.getTypeConverterRegistry();
@@ -199,7 +111,7 @@ public class JaxbXMLRoutesDefinitionLoader implements 
XMLRoutesDefinitionLoader
      * @param document   the DOM document
      * @param namespaces the map of namespaces to add new found XML namespaces
      */
-    private static void extractNamespaces(Document document, Map<String, 
String> namespaces) throws JAXBException {
+    public static void extractNamespaces(Document document, Map<String, 
String> namespaces) throws JAXBException {
         NamedNodeMap attributes = 
document.getDocumentElement().getAttributes();
         for (int i = 0; i < attributes.getLength(); i++) {
             Node item = attributes.item(i);
@@ -219,21 +131,7 @@ public class JaxbXMLRoutesDefinitionLoader implements 
XMLRoutesDefinitionLoader
         }
     }
 
-    private static NamespaceAware 
getNamespaceAwareFromExpression(ExpressionNode expressionNode) {
-        ExpressionDefinition ed = expressionNode.getExpression();
-
-        NamespaceAware na = null;
-        Expression exp = ed.getExpressionValue();
-        if (exp instanceof NamespaceAware) {
-            na = (NamespaceAware) exp;
-        } else if (ed instanceof NamespaceAware) {
-            na = (NamespaceAware) ed;
-        }
-
-        return na;
-    }
-
-    private static void applyNamespaces(RouteDefinition route, Map<String, 
String> namespaces) {
+    public static void applyNamespaces(RouteDefinition route, Map<String, 
String> namespaces) {
         Iterator<ExpressionNode> it = filterTypeInOutputs(route.getOutputs(), 
ExpressionNode.class);
         while (it.hasNext()) {
             NamespaceAware na = getNamespaceAwareFromExpression(it.next());
@@ -243,18 +141,13 @@ public class JaxbXMLRoutesDefinitionLoader implements 
XMLRoutesDefinitionLoader
         }
     }
 
-    private static <T extends NamedNode> T modelToXml(CamelContext context, 
InputStream is, String xml, Class<T> type)
-            throws Exception {
+    public static <T extends NamedNode> T modelToXml(CamelContext context, 
String xml, Class<T> type) throws Exception {
         JAXBContext jaxbContext = getJAXBContext(context);
 
         XmlConverter xmlConverter = newXmlConverter(context);
-        Document dom = null;
+        Document dom;
         try {
-            if (is != null) {
-                dom = xmlConverter.toDOMDocument(is, null);
-            } else if (xml != null) {
-                dom = xmlConverter.toDOMDocument(xml, null);
-            }
+            dom = xmlConverter.toDOMDocument(xml, null);
         } catch (Exception e) {
             throw new TypeConversionException(xml, Document.class, e);
         }
@@ -293,5 +186,4 @@ public class JaxbXMLRoutesDefinitionLoader implements 
XMLRoutesDefinitionLoader
 
         return type.cast(result);
     }
-
 }
diff --git 
a/core/camel-xml-jaxb/src/main/java/org/apache/camel/xml/jaxb/JaxbModelToXMLDumper.java
 
b/core/camel-xml-jaxb/src/main/java/org/apache/camel/xml/jaxb/JaxbModelToXMLDumper.java
index 1f2e912..4f8fe6f 100644
--- 
a/core/camel-xml-jaxb/src/main/java/org/apache/camel/xml/jaxb/JaxbModelToXMLDumper.java
+++ 
b/core/camel-xml-jaxb/src/main/java/org/apache/camel/xml/jaxb/JaxbModelToXMLDumper.java
@@ -20,7 +20,6 @@ import java.io.ByteArrayInputStream;
 import java.io.InputStream;
 import java.io.StringWriter;
 import java.nio.charset.StandardCharsets;
-import java.util.Iterator;
 import java.util.LinkedHashMap;
 import java.util.List;
 import java.util.Map;
@@ -38,25 +37,22 @@ import org.w3c.dom.Element;
 import org.apache.camel.CamelContext;
 import org.apache.camel.DelegateEndpoint;
 import org.apache.camel.Endpoint;
-import org.apache.camel.Expression;
 import org.apache.camel.ExtendedCamelContext;
 import org.apache.camel.NamedNode;
 import org.apache.camel.TypeConversionException;
 import org.apache.camel.converter.jaxp.XmlConverter;
-import org.apache.camel.model.ExpressionNode;
 import org.apache.camel.model.RouteDefinition;
 import org.apache.camel.model.RouteTemplateDefinition;
 import org.apache.camel.model.RouteTemplatesDefinition;
 import org.apache.camel.model.RoutesDefinition;
-import org.apache.camel.model.language.ExpressionDefinition;
-import org.apache.camel.spi.ModelJAXBContextFactory;
 import org.apache.camel.spi.ModelToXMLDumper;
-import org.apache.camel.spi.NamespaceAware;
-import org.apache.camel.spi.TypeConverterRegistry;
 import org.apache.camel.spi.annotations.JdkService;
 import org.apache.camel.util.xml.XmlLineNumberParser;
 
-import static 
org.apache.camel.model.ProcessorDefinitionHelper.filterTypeInOutputs;
+import static org.apache.camel.xml.jaxb.JaxbHelper.extractNamespaces;
+import static org.apache.camel.xml.jaxb.JaxbHelper.getJAXBContext;
+import static org.apache.camel.xml.jaxb.JaxbHelper.modelToXml;
+import static org.apache.camel.xml.jaxb.JaxbHelper.newXmlConverter;
 
 /**
  * JAXB based {@link ModelToXMLDumper}.
@@ -66,7 +62,7 @@ public class JaxbModelToXMLDumper implements ModelToXMLDumper 
{
 
     @Override
     public String dumpModelAsXml(CamelContext context, NamedNode definition) 
throws Exception {
-        JAXBContext jaxbContext = getJAXBContext(context);
+        final JAXBContext jaxbContext = getJAXBContext(context);
         final Map<String, String> namespaces = new LinkedHashMap<>();
 
         // gather all namespaces from the routes or route which is stored on 
the
@@ -134,9 +130,8 @@ public class JaxbModelToXMLDumper implements 
ModelToXMLDumper {
         // placeholders during parsing
         if (resolvePlaceholders || resolveDelegateEndpoints) {
             final AtomicBoolean changed = new AtomicBoolean();
-            InputStream is = new 
ByteArrayInputStream(xml.getBytes(StandardCharsets.UTF_8));
-            Document dom = XmlLineNumberParser.parseXml(is, new 
XmlLineNumberParser.XmlTextTransformer() {
-
+            final InputStream is = new 
ByteArrayInputStream(xml.getBytes(StandardCharsets.UTF_8));
+            final Document dom = XmlLineNumberParser.parseXml(is, new 
XmlLineNumberParser.XmlTextTransformer() {
                 private String prev;
 
                 @Override
@@ -182,7 +177,7 @@ public class JaxbModelToXMLDumper implements 
ModelToXMLDumper {
             if (changed.get()) {
                 xml = 
context.getTypeConverter().mandatoryConvertTo(String.class, dom);
                 ExtendedCamelContext ecc = 
context.adapt(ExtendedCamelContext.class);
-                NamedNode copy = 
ecc.getXMLRoutesDefinitionLoader().createModelFromXml(context, xml, 
NamedNode.class);
+                NamedNode copy = modelToXml(context, xml, NamedNode.class);
                 xml = ecc.getModelToXMLDumper().dumpModelAsXml(context, copy);
             }
         }
@@ -190,60 +185,4 @@ public class JaxbModelToXMLDumper implements 
ModelToXMLDumper {
         return xml;
     }
 
-    private static JAXBContext getJAXBContext(CamelContext context) throws 
Exception {
-        ModelJAXBContextFactory factory = 
context.adapt(ExtendedCamelContext.class).getModelJAXBContextFactory();
-        return (JAXBContext) factory.newJAXBContext();
-    }
-
-    /**
-     * Extract all XML namespaces from the expressions in the route
-     *
-     * @param route      the route
-     * @param namespaces the map of namespaces to add discovered XML 
namespaces into
-     */
-    private static void extractNamespaces(RouteDefinition route, Map<String, 
String> namespaces) {
-        Iterator<ExpressionNode> it = filterTypeInOutputs(route.getOutputs(), 
ExpressionNode.class);
-        while (it.hasNext()) {
-            NamespaceAware na = getNamespaceAwareFromExpression(it.next());
-
-            if (na != null) {
-                Map<String, String> map = na.getNamespaces();
-                if (map != null && !map.isEmpty()) {
-                    namespaces.putAll(map);
-                }
-            }
-        }
-    }
-
-    private static NamespaceAware 
getNamespaceAwareFromExpression(ExpressionNode expressionNode) {
-        ExpressionDefinition ed = expressionNode.getExpression();
-
-        NamespaceAware na = null;
-        Expression exp = ed.getExpressionValue();
-        if (exp instanceof NamespaceAware) {
-            na = (NamespaceAware) exp;
-        } else if (ed instanceof NamespaceAware) {
-            na = (NamespaceAware) ed;
-        }
-
-        return na;
-    }
-
-    /**
-     * Creates a new {@link XmlConverter}
-     *
-     * @param  context CamelContext if provided
-     * @return         a new XmlConverter instance
-     */
-    private static XmlConverter newXmlConverter(CamelContext context) {
-        XmlConverter xmlConverter;
-        if (context != null) {
-            TypeConverterRegistry registry = 
context.getTypeConverterRegistry();
-            xmlConverter = 
registry.getInjector().newInstance(XmlConverter.class, false);
-        } else {
-            xmlConverter = new XmlConverter();
-        }
-        return xmlConverter;
-    }
-
 }
diff --git 
a/core/camel-xml-jaxb/src/main/java/org/apache/camel/xml/jaxb/JaxbXMLRoutesDefinitionLoader.java
 
b/core/camel-xml-jaxb/src/main/java/org/apache/camel/xml/jaxb/JaxbXMLRoutesDefinitionLoader.java
index c32a949..a3c8113 100644
--- 
a/core/camel-xml-jaxb/src/main/java/org/apache/camel/xml/jaxb/JaxbXMLRoutesDefinitionLoader.java
+++ 
b/core/camel-xml-jaxb/src/main/java/org/apache/camel/xml/jaxb/JaxbXMLRoutesDefinitionLoader.java
@@ -18,9 +18,7 @@ package org.apache.camel.xml.jaxb;
 
 import java.io.IOException;
 import java.io.InputStream;
-import java.util.Iterator;
 import java.util.LinkedHashMap;
-import java.util.List;
 import java.util.Map;
 
 import javax.xml.bind.Binder;
@@ -29,30 +27,23 @@ import javax.xml.bind.JAXBException;
 import javax.xml.bind.Unmarshaller;
 
 import org.w3c.dom.Document;
-import org.w3c.dom.NamedNodeMap;
 import org.w3c.dom.Node;
 
 import org.apache.camel.CamelContext;
-import org.apache.camel.Expression;
-import org.apache.camel.ExtendedCamelContext;
-import org.apache.camel.NamedNode;
-import org.apache.camel.TypeConversionException;
 import org.apache.camel.converter.jaxp.XmlConverter;
-import org.apache.camel.model.ExpressionNode;
 import org.apache.camel.model.RouteDefinition;
 import org.apache.camel.model.RouteTemplateDefinition;
 import org.apache.camel.model.RouteTemplatesDefinition;
 import org.apache.camel.model.RoutesDefinition;
-import org.apache.camel.model.language.ExpressionDefinition;
 import org.apache.camel.model.rest.RestDefinition;
 import org.apache.camel.model.rest.RestsDefinition;
-import org.apache.camel.spi.ModelJAXBContextFactory;
-import org.apache.camel.spi.NamespaceAware;
-import org.apache.camel.spi.TypeConverterRegistry;
 import org.apache.camel.spi.XMLRoutesDefinitionLoader;
 import org.apache.camel.spi.annotations.JdkService;
 
-import static 
org.apache.camel.model.ProcessorDefinitionHelper.filterTypeInOutputs;
+import static org.apache.camel.xml.jaxb.JaxbHelper.applyNamespaces;
+import static org.apache.camel.xml.jaxb.JaxbHelper.extractNamespaces;
+import static org.apache.camel.xml.jaxb.JaxbHelper.getJAXBContext;
+import static org.apache.camel.xml.jaxb.JaxbHelper.newXmlConverter;
 
 /**
  * JAXB based {@link XMLRoutesDefinitionLoader}. This is the default loader 
used historically by Camel. The camel-xml-io
@@ -162,136 +153,8 @@ public class JaxbXMLRoutesDefinitionLoader implements 
XMLRoutesDefinitionLoader
     }
 
     @Override
-    public <T extends NamedNode> T createModelFromXml(CamelContext context, 
String xml, Class<T> type) throws Exception {
-        return modelToXml(context, null, xml, type);
-    }
-
-    @Override
     public String toString() {
         return "camel-xml-jaxb";
     }
 
-    private static JAXBContext getJAXBContext(CamelContext context) throws 
Exception {
-        ModelJAXBContextFactory factory = 
context.adapt(ExtendedCamelContext.class).getModelJAXBContextFactory();
-        return (JAXBContext) factory.newJAXBContext();
-    }
-
-    /**
-     * Creates a new {@link XmlConverter}
-     *
-     * @param  context CamelContext if provided
-     * @return         a new XmlConverter instance
-     */
-    private static XmlConverter newXmlConverter(CamelContext context) {
-        XmlConverter xmlConverter;
-        if (context != null) {
-            TypeConverterRegistry registry = 
context.getTypeConverterRegistry();
-            xmlConverter = 
registry.getInjector().newInstance(XmlConverter.class, false);
-        } else {
-            xmlConverter = new XmlConverter();
-        }
-        return xmlConverter;
-    }
-
-    /**
-     * Extract all XML namespaces from the root element in a DOM Document
-     *
-     * @param document   the DOM document
-     * @param namespaces the map of namespaces to add new found XML namespaces
-     */
-    private static void extractNamespaces(Document document, Map<String, 
String> namespaces) throws JAXBException {
-        NamedNodeMap attributes = 
document.getDocumentElement().getAttributes();
-        for (int i = 0; i < attributes.getLength(); i++) {
-            Node item = attributes.item(i);
-            String nsPrefix = item.getNodeName();
-            if (nsPrefix != null && nsPrefix.startsWith("xmlns")) {
-                String nsValue = item.getNodeValue();
-                String[] nsParts = nsPrefix.split(":");
-                if (nsParts.length == 1) {
-                    namespaces.put(nsParts[0], nsValue);
-                } else if (nsParts.length == 2) {
-                    namespaces.put(nsParts[1], nsValue);
-                } else {
-                    // Fallback on adding the namespace prefix as we find it
-                    namespaces.put(nsPrefix, nsValue);
-                }
-            }
-        }
-    }
-
-    private static NamespaceAware 
getNamespaceAwareFromExpression(ExpressionNode expressionNode) {
-        ExpressionDefinition ed = expressionNode.getExpression();
-
-        NamespaceAware na = null;
-        Expression exp = ed.getExpressionValue();
-        if (exp instanceof NamespaceAware) {
-            na = (NamespaceAware) exp;
-        } else if (ed instanceof NamespaceAware) {
-            na = (NamespaceAware) ed;
-        }
-
-        return na;
-    }
-
-    private static void applyNamespaces(RouteDefinition route, Map<String, 
String> namespaces) {
-        Iterator<ExpressionNode> it = filterTypeInOutputs(route.getOutputs(), 
ExpressionNode.class);
-        while (it.hasNext()) {
-            NamespaceAware na = getNamespaceAwareFromExpression(it.next());
-            if (na != null) {
-                na.setNamespaces(namespaces);
-            }
-        }
-    }
-
-    private static <T extends NamedNode> T modelToXml(CamelContext context, 
InputStream is, String xml, Class<T> type)
-            throws Exception {
-        JAXBContext jaxbContext = getJAXBContext(context);
-
-        XmlConverter xmlConverter = newXmlConverter(context);
-        Document dom = null;
-        try {
-            if (is != null) {
-                dom = xmlConverter.toDOMDocument(is, null);
-            } else if (xml != null) {
-                dom = xmlConverter.toDOMDocument(xml, null);
-            }
-        } catch (Exception e) {
-            throw new TypeConversionException(xml, Document.class, e);
-        }
-        if (dom == null) {
-            throw new IllegalArgumentException("InputStream and XML is both 
null");
-        }
-
-        Map<String, String> namespaces = new LinkedHashMap<>();
-        extractNamespaces(dom, namespaces);
-
-        Binder<Node> binder = jaxbContext.createBinder();
-        Object result = binder.unmarshal(dom);
-
-        if (result == null) {
-            throw new JAXBException("Cannot unmarshal to " + type + " using 
JAXB");
-        }
-
-        // Restore namespaces to anything that's NamespaceAware
-        if (result instanceof RouteTemplatesDefinition) {
-            List<RouteTemplateDefinition> templates = 
((RouteTemplatesDefinition) result).getRouteTemplates();
-            for (RouteTemplateDefinition template : templates) {
-                applyNamespaces(template.getRoute(), namespaces);
-            }
-        } else if (result instanceof RouteTemplateDefinition) {
-            RouteTemplateDefinition template = (RouteTemplateDefinition) 
result;
-            applyNamespaces(template.getRoute(), namespaces);
-        } else if (result instanceof RoutesDefinition) {
-            List<RouteDefinition> routes = ((RoutesDefinition) 
result).getRoutes();
-            for (RouteDefinition route : routes) {
-                applyNamespaces(route, namespaces);
-            }
-        } else if (result instanceof RouteDefinition) {
-            RouteDefinition route = (RouteDefinition) result;
-            applyNamespaces(route, namespaces);
-        }
-
-        return type.cast(result);
-    }
-
 }

Reply via email to