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 2020/02/04 18:54:47 UTC
[camel] 01/02: CAMEL-14484: Make XML dumper its own model outside
camel-core-engine
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
commit 7282c926a8e582ed090c7ba444ab371cfe11741b
Author: Claus Ibsen <cl...@gmail.com>
AuthorDate: Tue Feb 4 16:55:36 2020 +0100
CAMEL-14484: Make XML dumper its own model outside camel-core-engine
---
components/camel-blueprint/pom.xml | 4 +
components/camel-openapi-java/pom.xml | 4 +
.../apache/camel/openapi/RestOpenApiSupport.java | 22 +-
.../RestOpenApiReaderPropertyPlaceholderTest.java | 2 +-
components/camel-spring/pom.xml | 4 +
components/camel-swagger-java/pom.xml | 4 +
.../apache/camel/swagger/RestSwaggerSupport.java | 20 +-
.../RestSwaggerReaderPropertyPlaceholderTest.java | 2 +-
.../camel/spi/XMLRoutesDefinitionLoader.java | 6 +
core/camel-core-engine/pom.xml | 4 -
.../java/org/apache/camel/model/ModelHelper.java | 407 ---------------------
.../apache/camel/util/CreateModelFromXmlTest.java | 9 +-
.../management/mbean/ManagedCamelContext.java | 32 +-
.../camel/management/mbean/ManagedRoute.java | 10 +-
.../in/ModelParserXMLRoutesDefinitionLoader.java | 6 +
.../camel/xml/jaxb/JaxbModelToXMLDumper.java | 3 +-
.../xml/jaxb/JaxbXMLRoutesDefinitionLoader.java | 51 +++
.../modules/ROOT/pages/camel-3x-upgrade-guide.adoc | 5 +
.../commands/AbstractLocalCamelController.java | 8 +-
.../itest/DuplicateNamespacePrefixIssueTest.java | 10 +-
.../generator/openapi/RestDslXmlGenerator.java | 5 +-
.../generator/swagger/RestDslXmlGenerator.java | 5 +-
22 files changed, 142 insertions(+), 481 deletions(-)
diff --git a/components/camel-blueprint/pom.xml b/components/camel-blueprint/pom.xml
index d037b4b..61c34fc 100644
--- a/components/camel-blueprint/pom.xml
+++ b/components/camel-blueprint/pom.xml
@@ -52,6 +52,10 @@
</dependency>
<dependency>
<groupId>org.apache.camel</groupId>
+ <artifactId>camel-jaxp</artifactId>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.camel</groupId>
<artifactId>camel-bean</artifactId>
</dependency>
<dependency>
diff --git a/components/camel-openapi-java/pom.xml b/components/camel-openapi-java/pom.xml
index 5fd3a1c..728dba4 100644
--- a/components/camel-openapi-java/pom.xml
+++ b/components/camel-openapi-java/pom.xml
@@ -50,6 +50,10 @@
<groupId>org.apache.camel</groupId>
<artifactId>camel-core-engine</artifactId>
</dependency>
+ <dependency>
+ <groupId>org.apache.camel</groupId>
+ <artifactId>camel-xml-jaxb</artifactId>
+ </dependency>
<!-- json -->
<dependency>
diff --git a/components/camel-openapi-java/src/main/java/org/apache/camel/openapi/RestOpenApiSupport.java b/components/camel-openapi-java/src/main/java/org/apache/camel/openapi/RestOpenApiSupport.java
index ed82997..f156b8f 100644
--- a/components/camel-openapi-java/src/main/java/org/apache/camel/openapi/RestOpenApiSupport.java
+++ b/components/camel-openapi-java/src/main/java/org/apache/camel/openapi/RestOpenApiSupport.java
@@ -16,7 +16,6 @@
*/
package org.apache.camel.openapi;
-
import java.io.ByteArrayInputStream;
import java.io.InputStream;
import java.lang.management.ManagementFactory;
@@ -37,6 +36,7 @@ import javax.management.AttributeNotFoundException;
import javax.management.MBeanServer;
import javax.management.ObjectName;
+import org.apache.camel.ExtendedCamelContext;
import org.w3c.dom.Document;
import com.fasterxml.jackson.annotation.JsonInclude;
@@ -57,7 +57,6 @@ import io.apicurio.datamodels.openapi.v3.models.Oas30Server;
import org.apache.camel.CamelContext;
import org.apache.camel.Exchange;
import org.apache.camel.model.Model;
-import org.apache.camel.model.ModelHelper;
import org.apache.camel.model.rest.RestDefinition;
import org.apache.camel.model.rest.RestsDefinition;
import org.apache.camel.spi.ClassResolver;
@@ -70,7 +69,6 @@ import org.apache.camel.util.xml.XmlLineNumberParser;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
-
import static org.apache.camel.openapi.OpenApiHelper.clearVendorExtensions;
/**
@@ -206,7 +204,8 @@ public class RestOpenApiSupport {
// use a routes definition to dump the rests
RestsDefinition def = new RestsDefinition();
def.setRests(rests);
- String xml = ModelHelper.dumpModelAsXml(camelContext, def);
+ ExtendedCamelContext ecc = camelContext.adapt(ExtendedCamelContext.class);
+ String xml = ecc.getModelToXMLDumper().dumpModelAsXml(camelContext, def);
// if resolving placeholders we parse the xml, and resolve the property placeholders during parsing
final AtomicBoolean changed = new AtomicBoolean();
@@ -229,7 +228,8 @@ public class RestOpenApiSupport {
// okay there were some property placeholder replaced so re-create the model
if (changed.get()) {
xml = camelContext.getTypeConverter().mandatoryConvertTo(String.class, dom);
- def = ModelHelper.createModelFromXml(camelContext, xml, RestsDefinition.class);
+ InputStream xmlis = camelContext.getTypeConverter().convertTo(InputStream.class, xml);
+ def = (RestsDefinition) ecc.getXMLRoutesDefinitionLoader().loadRestsDefinition(camelContext, xmlis);
if (def != null) {
return def.getRests();
}
@@ -238,7 +238,7 @@ public class RestOpenApiSupport {
return rests;
}
- public List<RestDefinition> getRestDefinitions(String camelId) throws Exception {
+ public List<RestDefinition> getRestDefinitions(CamelContext camelContext, String camelId) throws Exception {
ObjectName found = null;
boolean supportResolvePlaceholder = false;
@@ -271,7 +271,9 @@ public class RestOpenApiSupport {
}
if (xml != null) {
LOG.debug("DumpRestAsXml:\n{}", xml);
- RestsDefinition rests = ModelHelper.createModelFromXml(null, xml, RestsDefinition.class);
+ InputStream xmlis = camelContext.getTypeConverter().convertTo(InputStream.class, xml);
+ ExtendedCamelContext ecc = camelContext.adapt(ExtendedCamelContext.class);
+ RestsDefinition rests = (RestsDefinition) ecc.getXMLRoutesDefinitionLoader().loadRestsDefinition(camelContext, xmlis);
if (rests != null) {
return rests.getRests();
}
@@ -321,11 +323,11 @@ public class RestOpenApiSupport {
setupCorsHeaders(response, configuration.getCorsHeaders());
}
- List<RestDefinition> rests = null;
- if (camelContext != null && camelContext.getName().equals(contextId)) {
+ List<RestDefinition> rests;
+ if (camelContext.getName().equals(contextId)) {
rests = getRestDefinitions(camelContext);
} else {
- rests = getRestDefinitions(contextId);
+ rests = getRestDefinitions(camelContext, contextId);
}
if (rests != null) {
diff --git a/components/camel-openapi-java/src/test/java/org/apache/camel/openapi/RestOpenApiReaderPropertyPlaceholderTest.java b/components/camel-openapi-java/src/test/java/org/apache/camel/openapi/RestOpenApiReaderPropertyPlaceholderTest.java
index bf0fccb..6c6ece5 100644
--- a/components/camel-openapi-java/src/test/java/org/apache/camel/openapi/RestOpenApiReaderPropertyPlaceholderTest.java
+++ b/components/camel-openapi-java/src/test/java/org/apache/camel/openapi/RestOpenApiReaderPropertyPlaceholderTest.java
@@ -79,7 +79,7 @@ public class RestOpenApiReaderPropertyPlaceholderTest extends CamelTestSupport {
RestOpenApiReader reader = new RestOpenApiReader();
RestOpenApiSupport support = new RestOpenApiSupport();
- List<RestDefinition> rests = support.getRestDefinitions(context.getName());
+ List<RestDefinition> rests = support.getRestDefinitions(context, context.getName());
OasDocument openApi = reader.read(rests, null, config, context.getName(), new DefaultClassResolver());
assertNotNull(openApi);
diff --git a/components/camel-spring/pom.xml b/components/camel-spring/pom.xml
index e2b9b06..1241072 100644
--- a/components/camel-spring/pom.xml
+++ b/components/camel-spring/pom.xml
@@ -39,6 +39,10 @@
</dependency>
<dependency>
<groupId>org.apache.camel</groupId>
+ <artifactId>camel-jaxp</artifactId>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.camel</groupId>
<artifactId>camel-bean</artifactId>
</dependency>
<dependency>
diff --git a/components/camel-swagger-java/pom.xml b/components/camel-swagger-java/pom.xml
index 539056f..3bfc607 100644
--- a/components/camel-swagger-java/pom.xml
+++ b/components/camel-swagger-java/pom.xml
@@ -48,6 +48,10 @@
<groupId>org.apache.camel</groupId>
<artifactId>camel-core-engine</artifactId>
</dependency>
+ <dependency>
+ <groupId>org.apache.camel</groupId>
+ <artifactId>camel-xml-jaxb</artifactId>
+ </dependency>
<!-- json -->
<dependency>
diff --git a/components/camel-swagger-java/src/main/java/org/apache/camel/swagger/RestSwaggerSupport.java b/components/camel-swagger-java/src/main/java/org/apache/camel/swagger/RestSwaggerSupport.java
index fe32ed2..bce28c4 100644
--- a/components/camel-swagger-java/src/main/java/org/apache/camel/swagger/RestSwaggerSupport.java
+++ b/components/camel-swagger-java/src/main/java/org/apache/camel/swagger/RestSwaggerSupport.java
@@ -32,6 +32,7 @@ import javax.management.AttributeNotFoundException;
import javax.management.MBeanServer;
import javax.management.ObjectName;
+import org.apache.camel.ExtendedCamelContext;
import org.w3c.dom.Document;
import com.fasterxml.jackson.annotation.JsonInclude;
@@ -49,7 +50,6 @@ import io.swagger.util.Yaml;
import org.apache.camel.CamelContext;
import org.apache.camel.Exchange;
import org.apache.camel.model.Model;
-import org.apache.camel.model.ModelHelper;
import org.apache.camel.model.rest.RestDefinition;
import org.apache.camel.model.rest.RestsDefinition;
import org.apache.camel.spi.ClassResolver;
@@ -155,7 +155,8 @@ public class RestSwaggerSupport {
// use a routes definition to dump the rests
RestsDefinition def = new RestsDefinition();
def.setRests(rests);
- String xml = ModelHelper.dumpModelAsXml(camelContext, def);
+ ExtendedCamelContext ecc = camelContext.adapt(ExtendedCamelContext.class);
+ String xml = ecc.getModelToXMLDumper().dumpModelAsXml(camelContext, def);
// if resolving placeholders we parse the xml, and resolve the property placeholders during parsing
final AtomicBoolean changed = new AtomicBoolean();
@@ -178,7 +179,8 @@ public class RestSwaggerSupport {
// okay there were some property placeholder replaced so re-create the model
if (changed.get()) {
xml = camelContext.getTypeConverter().mandatoryConvertTo(String.class, dom);
- def = ModelHelper.createModelFromXml(camelContext, xml, RestsDefinition.class);
+ InputStream isxml = camelContext.getTypeConverter().convertTo(InputStream.class, xml);
+ def = (RestsDefinition) ecc.getXMLRoutesDefinitionLoader().loadRestsDefinition(camelContext, isxml);
if (def != null) {
return def.getRests();
}
@@ -187,7 +189,7 @@ public class RestSwaggerSupport {
return rests;
}
- public List<RestDefinition> getRestDefinitions(String camelId) throws Exception {
+ public List<RestDefinition> getRestDefinitions(CamelContext camelContext, String camelId) throws Exception {
ObjectName found = null;
boolean supportResolvePlaceholder = false;
@@ -219,7 +221,9 @@ public class RestSwaggerSupport {
}
if (xml != null) {
LOG.debug("DumpRestAsXml:\n{}", xml);
- RestsDefinition rests = ModelHelper.createModelFromXml(null, xml, RestsDefinition.class);
+ InputStream isxml = camelContext.getTypeConverter().convertTo(InputStream.class, xml);
+ ExtendedCamelContext ecc = camelContext.adapt(ExtendedCamelContext.class);
+ RestsDefinition rests = (RestsDefinition) ecc.getXMLRoutesDefinitionLoader().loadRestsDefinition(camelContext, isxml);
if (rests != null) {
return rests.getRests();
}
@@ -266,11 +270,11 @@ public class RestSwaggerSupport {
setupCorsHeaders(response, configuration.getCorsHeaders());
}
- List<RestDefinition> rests = null;
- if (camelContext != null && camelContext.getName().equals(contextId)) {
+ List<RestDefinition> rests;
+ if (camelContext.getName().equals(contextId)) {
rests = getRestDefinitions(camelContext);
} else {
- rests = getRestDefinitions(contextId);
+ rests = getRestDefinitions(camelContext, contextId);
}
if (rests != null) {
diff --git a/components/camel-swagger-java/src/test/java/org/apache/camel/swagger/RestSwaggerReaderPropertyPlaceholderTest.java b/components/camel-swagger-java/src/test/java/org/apache/camel/swagger/RestSwaggerReaderPropertyPlaceholderTest.java
index 387a155..f4b8be2 100644
--- a/components/camel-swagger-java/src/test/java/org/apache/camel/swagger/RestSwaggerReaderPropertyPlaceholderTest.java
+++ b/components/camel-swagger-java/src/test/java/org/apache/camel/swagger/RestSwaggerReaderPropertyPlaceholderTest.java
@@ -84,7 +84,7 @@ public class RestSwaggerReaderPropertyPlaceholderTest extends CamelTestSupport {
RestSwaggerReader reader = new RestSwaggerReader();
RestSwaggerSupport support = new RestSwaggerSupport();
- List<RestDefinition> rests = support.getRestDefinitions(context.getName());
+ List<RestDefinition> rests = support.getRestDefinitions(context, context.getName());
Swagger swagger = reader.read(rests, null, config, context.getName(), new DefaultClassResolver());
assertNotNull(swagger);
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 3fc06c2..2a3a741 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,6 +19,7 @@ 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.
@@ -36,4 +37,9 @@ public interface XMLRoutesDefinitionLoader {
*/
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-core-engine/pom.xml b/core/camel-core-engine/pom.xml
index f9e70a2..6ac7415 100644
--- a/core/camel-core-engine/pom.xml
+++ b/core/camel-core-engine/pom.xml
@@ -70,10 +70,6 @@
</dependency>
<dependency>
<groupId>org.apache.camel</groupId>
- <artifactId>camel-jaxp</artifactId>
- </dependency>
- <dependency>
- <groupId>org.apache.camel</groupId>
<artifactId>camel-management-api</artifactId>
</dependency>
<dependency>
diff --git a/core/camel-core-engine/src/main/java/org/apache/camel/model/ModelHelper.java b/core/camel-core-engine/src/main/java/org/apache/camel/model/ModelHelper.java
deleted file mode 100644
index 63134c3..0000000
--- a/core/camel-core-engine/src/main/java/org/apache/camel/model/ModelHelper.java
+++ /dev/null
@@ -1,407 +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.model;
-
-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;
-import java.util.Properties;
-import java.util.concurrent.atomic.AtomicBoolean;
-
-import javax.xml.bind.Binder;
-import javax.xml.bind.JAXBContext;
-import javax.xml.bind.JAXBException;
-import javax.xml.bind.Marshaller;
-import javax.xml.transform.OutputKeys;
-import javax.xml.transform.TransformerException;
-
-import org.w3c.dom.Document;
-import org.w3c.dom.Element;
-import org.w3c.dom.NamedNodeMap;
-import org.w3c.dom.Node;
-
-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.language.ExpressionDefinition;
-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.util.xml.XmlLineNumberParser;
-
-import static org.apache.camel.model.ProcessorDefinitionHelper.filterTypeInOutputs;
-
-/**
- * Helper for the Camel {@link org.apache.camel.model model} classes.
- */
-@Deprecated
-public final class ModelHelper {
-
- private ModelHelper() {
- // utility class
- }
-
- /**
- * Dumps the definition as XML
- *
- * @param context the CamelContext, if <tt>null</tt> then
- * {@link org.apache.camel.spi.ModelJAXBContextFactory} is not in
- * use
- * @param definition the definition, such as a
- * {@link org.apache.camel.NamedNode}
- * @return the output in XML (is formatted)
- * @throws JAXBException is throw if error marshalling to XML
- */
- @Deprecated
- public static String dumpModelAsXml(CamelContext context, NamedNode definition) throws JAXBException {
- JAXBContext jaxbContext = getJAXBContext(context);
- final Map<String, String> namespaces = new LinkedHashMap<>();
-
- // gather all namespaces from the routes or route which is stored on the
- // expression nodes
- if (definition instanceof RoutesDefinition) {
- List<RouteDefinition> routes = ((RoutesDefinition)definition).getRoutes();
- for (RouteDefinition route : routes) {
- extractNamespaces(route, namespaces);
- }
- } else if (definition instanceof RouteDefinition) {
- RouteDefinition route = (RouteDefinition)definition;
- extractNamespaces(route, namespaces);
- }
-
- Marshaller marshaller = jaxbContext.createMarshaller();
- marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, Boolean.TRUE);
- marshaller.setProperty(Marshaller.JAXB_ENCODING, "UTF-8");
- StringWriter buffer = new StringWriter();
- marshaller.marshal(definition, buffer);
-
- XmlConverter xmlConverter = newXmlConverter(context);
- String xml = buffer.toString();
- Document dom;
- try {
- dom = xmlConverter.toDOMDocument(xml, null);
- } catch (Exception e) {
- throw new TypeConversionException(xml, Document.class, e);
- }
-
- // Add additional namespaces to the document root element
- Element documentElement = dom.getDocumentElement();
- for (String nsPrefix : namespaces.keySet()) {
- String prefix = nsPrefix.equals("xmlns") ? nsPrefix : "xmlns:" + nsPrefix;
- documentElement.setAttribute(prefix, namespaces.get(nsPrefix));
- }
-
- // We invoke the type converter directly because we need to pass some
- // custom XML output options
- Properties outputProperties = new Properties();
- outputProperties.put(OutputKeys.INDENT, "yes");
- outputProperties.put(OutputKeys.STANDALONE, "yes");
- outputProperties.put(OutputKeys.ENCODING, "UTF-8");
- try {
- return xmlConverter.toStringFromDocument(dom, outputProperties);
- } catch (TransformerException e) {
- throw new IllegalStateException("Failed converting document object to string", e);
- }
- }
-
- /**
- * Dumps the definition as XML
- *
- * @param context the CamelContext, if <tt>null</tt> then
- * {@link org.apache.camel.spi.ModelJAXBContextFactory} is not in
- * use
- * @param definition the definition, such as a
- * {@link org.apache.camel.NamedNode}
- * @param resolvePlaceholders whether to resolve property placeholders in
- * the dumped XML
- * @param resolveDelegateEndpoints whether to resolve delegate endpoints in
- * the dumped XML (limited to endpoints used in uri attributes in
- * the model)
- * @return the output in XML (is formatted)
- * @throws Exception is throw if error marshalling to XML
- */
- @Deprecated
- public static String dumpModelAsXml(CamelContext context, NamedNode definition, boolean resolvePlaceholders, boolean resolveDelegateEndpoints) throws Exception {
- String xml = ModelHelper.dumpModelAsXml(context, definition);
-
- // if resolving placeholders we parse the xml, and resolve the property
- // 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() {
-
- private String prev;
-
- @Override
- public String transform(String text) {
- String after = text;
- if (resolveDelegateEndpoints && "uri".equals(prev)) {
- try {
- // must resolve placeholder as the endpoint may use
- // property placeholders
- String uri = context.resolvePropertyPlaceholders(text);
- Endpoint endpoint = context.hasEndpoint(uri);
- if (endpoint instanceof DelegateEndpoint) {
- endpoint = ((DelegateEndpoint)endpoint).getEndpoint();
- after = endpoint.getEndpointUri();
- }
- } catch (Exception e) {
- // ignore
- }
- }
-
- if (resolvePlaceholders) {
- try {
- after = context.resolvePropertyPlaceholders(after);
- } catch (Exception e) {
- // ignore
- }
- }
-
- if (!changed.get()) {
- changed.set(!text.equals(after));
- }
-
- // okay the previous must be the attribute key with uri, so
- // it refers to an endpoint
- prev = text;
-
- return after;
- }
- });
-
- // okay there were some property placeholder or delegate endpoints
- // replaced so re-create the model
- if (changed.get()) {
- xml = context.getTypeConverter().mandatoryConvertTo(String.class, dom);
- NamedNode copy = ModelHelper.createModelFromXml(context, xml, NamedNode.class);
- xml = ModelHelper.dumpModelAsXml(context, copy);
- }
- }
-
- return xml;
- }
-
- /**
- * Marshal the xml to the model definition
- *
- * @param context the CamelContext, if <tt>null</tt> then
- * {@link org.apache.camel.spi.ModelJAXBContextFactory} is not in
- * use
- * @param xml the xml
- * @param type the definition type to return, will throw a
- * {@link ClassCastException} if not the expected type
- * @return the model definition
- * @throws javax.xml.bind.JAXBException is thrown if error unmarshalling
- * from xml to model
- */
- public static <T extends NamedNode> T createModelFromXml(CamelContext context, String xml, Class<T> type) throws JAXBException {
- return modelToXml(context, null, xml, type);
- }
-
- /**
- * Marshal the xml to the model definition
- *
- * @param context the CamelContext, if <tt>null</tt> then
- * {@link org.apache.camel.spi.ModelJAXBContextFactory} is not in
- * use
- * @param stream the xml stream
- * @param type the definition type to return, will throw a
- * {@link ClassCastException} if not the expected type
- * @return the model definition
- * @throws javax.xml.bind.JAXBException is thrown if error unmarshalling
- * from xml to model
- */
- public static <T extends NamedNode> T createModelFromXml(CamelContext context, InputStream stream, Class<T> type) throws JAXBException {
- return modelToXml(context, stream, null, type);
- }
-
- /**
- * Marshal the xml to the model definition
- *
- * @param context the CamelContext, if <tt>null</tt> then
- * {@link org.apache.camel.spi.ModelJAXBContextFactory} is not in
- * use
- * @param inputStream the xml stream
- * @throws Exception is thrown if an error is encountered unmarshalling from
- * xml to model
- *
- * @deprecated use {@link org.apache.camel.spi.XMLRoutesDefinitionLoader} from {@link ExtendedCamelContext}
- */
- @Deprecated
- public static RoutesDefinition loadRoutesDefinition(CamelContext context, InputStream inputStream) throws Exception {
- ExtendedCamelContext ecc = context.adapt(ExtendedCamelContext.class);
- return (RoutesDefinition) ecc.getXMLRoutesDefinitionLoader().loadRoutesDefinition(context, inputStream);
- }
-
- /**
- * @deprecated use {@link org.apache.camel.spi.XMLRoutesDefinitionLoader} from {@link ExtendedCamelContext}
- */
- @Deprecated
- public static RestsDefinition loadRestsDefinition(CamelContext context, InputStream inputStream) throws Exception {
- ExtendedCamelContext ecc = context.adapt(ExtendedCamelContext.class);
- return (RestsDefinition) ecc.getXMLRoutesDefinitionLoader().loadRestsDefinition(context, inputStream);
- }
-
- private static <T extends NamedNode> T modelToXml(CamelContext context, InputStream is, String xml, Class<T> type) throws JAXBException {
- 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 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);
- }
-
- private static JAXBContext getJAXBContext(CamelContext context) throws JAXBException {
- ModelJAXBContextFactory factory = context.adapt(ExtendedCamelContext.class).getModelJAXBContextFactory();
- return factory.newJAXBContext();
- }
-
- 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 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;
- }
-
- /**
- * 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);
- }
- }
- }
- }
-
- /**
- * 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);
- }
- }
- }
- }
-
- /**
- * 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-core/src/test/java/org/apache/camel/util/CreateModelFromXmlTest.java b/core/camel-core/src/test/java/org/apache/camel/util/CreateModelFromXmlTest.java
index e83a3f0..f5c3048 100644
--- a/core/camel-core/src/test/java/org/apache/camel/util/CreateModelFromXmlTest.java
+++ b/core/camel-core/src/test/java/org/apache/camel/util/CreateModelFromXmlTest.java
@@ -23,8 +23,8 @@ import java.util.Map;
import org.apache.camel.ContextTestSupport;
import org.apache.camel.Expression;
+import org.apache.camel.ExtendedCamelContext;
import org.apache.camel.model.ExpressionNode;
-import org.apache.camel.model.ModelHelper;
import org.apache.camel.model.RouteDefinition;
import org.apache.camel.model.RoutesDefinition;
import org.apache.camel.model.language.ExpressionDefinition;
@@ -88,14 +88,17 @@ public class CreateModelFromXmlTest extends ContextTestSupport {
}
private RoutesDefinition createModelFromXml(String camelContextResource, boolean fromString) throws Exception {
+ ExtendedCamelContext ecc = context.adapt(ExtendedCamelContext.class);
+
InputStream inputStream = getClass().getResourceAsStream(camelContextResource);
if (fromString) {
String xml = context.getTypeConverter().convertTo(String.class, inputStream);
- return ModelHelper.createModelFromXml(context, xml, RoutesDefinition.class);
+ InputStream isxml = context.getTypeConverter().convertTo(InputStream.class, xml);
+ return (RoutesDefinition) ecc.getXMLRoutesDefinitionLoader().loadRoutesDefinition(context, isxml);
}
- return ModelHelper.createModelFromXml(context, inputStream, RoutesDefinition.class);
+ return (RoutesDefinition) ecc.getXMLRoutesDefinitionLoader().loadRoutesDefinition(context, inputStream);
}
private void assertNamespacesPresent(RoutesDefinition routesDefinition, Map<String, String> expectedNamespaces) {
diff --git a/core/camel-management/src/main/java/org/apache/camel/management/mbean/ManagedCamelContext.java b/core/camel-management/src/main/java/org/apache/camel/management/mbean/ManagedCamelContext.java
index 9ee72c5..37e9146 100644
--- a/core/camel-management/src/main/java/org/apache/camel/management/mbean/ManagedCamelContext.java
+++ b/core/camel-management/src/main/java/org/apache/camel/management/mbean/ManagedCamelContext.java
@@ -26,7 +26,6 @@ import java.util.List;
import java.util.Map;
import java.util.Set;
import java.util.concurrent.TimeUnit;
-import java.util.concurrent.atomic.AtomicBoolean;
import javax.management.MBeanServer;
import javax.management.ObjectName;
@@ -48,13 +47,11 @@ import org.apache.camel.api.management.mbean.ManagedProcessorMBean;
import org.apache.camel.api.management.mbean.ManagedRouteMBean;
import org.apache.camel.api.management.mbean.ManagedStepMBean;
import org.apache.camel.model.Model;
-import org.apache.camel.model.ModelHelper;
import org.apache.camel.model.RouteDefinition;
import org.apache.camel.model.RoutesDefinition;
import org.apache.camel.model.rest.RestDefinition;
import org.apache.camel.model.rest.RestsDefinition;
import org.apache.camel.spi.ManagementStrategy;
-import org.apache.camel.util.xml.XmlLineNumberParser;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -415,34 +412,9 @@ public class ManagedCamelContext extends ManagedPerformanceCounter implements Ti
// use a routes definition to dump the rests
RestsDefinition def = new RestsDefinition();
def.setRests(rests);
- ExtendedCamelContext ecc = context.adapt(ExtendedCamelContext.class);
- String xml = ecc.getModelToXMLDumper().dumpModelAsXml(context, def);
-
- // if resolving placeholders we parse the xml, and resolve the property placeholders during parsing
- if (resolvePlaceholders) {
- final AtomicBoolean changed = new AtomicBoolean();
- InputStream is = new ByteArrayInputStream(xml.getBytes("UTF-8"));
- Document dom = XmlLineNumberParser.parseXml(is, text -> {
- try {
- String after = getContext().resolvePropertyPlaceholders(text);
- if (!changed.get()) {
- changed.set(!text.equals(after));
- }
- return after;
- } catch (Exception e) {
- // ignore
- return text;
- }
- });
- // okay there were some property placeholder replaced so re-create the model
- if (changed.get()) {
- xml = context.getTypeConverter().mandatoryConvertTo(String.class, dom);
- RestsDefinition copy = ModelHelper.createModelFromXml(context, xml, RestsDefinition.class);
- xml = ecc.getModelToXMLDumper().dumpModelAsXml(context, copy);
- }
- }
- return xml;
+ ExtendedCamelContext ecc = context.adapt(ExtendedCamelContext.class);
+ return ecc.getModelToXMLDumper().dumpModelAsXml(context, def, resolvePlaceholders, false);
}
@Override
diff --git a/core/camel-management/src/main/java/org/apache/camel/management/mbean/ManagedRoute.java b/core/camel-management/src/main/java/org/apache/camel/management/mbean/ManagedRoute.java
index 0c53717..862f7f8 100644
--- a/core/camel-management/src/main/java/org/apache/camel/management/mbean/ManagedRoute.java
+++ b/core/camel-management/src/main/java/org/apache/camel/management/mbean/ManagedRoute.java
@@ -16,6 +16,7 @@
*/
package org.apache.camel.management.mbean;
+import java.io.InputStream;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
@@ -51,8 +52,8 @@ import org.apache.camel.api.management.mbean.ManagedRouteMBean;
import org.apache.camel.api.management.mbean.ManagedStepMBean;
import org.apache.camel.api.management.mbean.RouteError;
import org.apache.camel.model.Model;
-import org.apache.camel.model.ModelHelper;
import org.apache.camel.model.RouteDefinition;
+import org.apache.camel.model.RoutesDefinition;
import org.apache.camel.spi.InflightRepository;
import org.apache.camel.spi.ManagementStrategy;
import org.apache.camel.spi.RoutePolicy;
@@ -364,10 +365,13 @@ public class ManagedRoute extends ManagedPerformanceCounter implements TimerList
@Override
public void updateRouteFromXml(String xml) throws Exception {
// convert to model from xml
- RouteDefinition def = ModelHelper.createModelFromXml(context, xml, RouteDefinition.class);
- if (def == null) {
+ ExtendedCamelContext ecc = context.adapt(ExtendedCamelContext.class);
+ InputStream is = context.getTypeConverter().convertTo(InputStream.class, xml);
+ RoutesDefinition routes = (RoutesDefinition) ecc.getXMLRoutesDefinitionLoader().loadRoutesDefinition(context, is);
+ if (routes == null || routes.getRoutes().isEmpty()) {
return;
}
+ RouteDefinition def = routes.getRoutes().get(0);
// if the xml does not contain the route-id then we fix this by adding the actual route id
// this may be needed if the route-id was auto-generated, as the intend is to update this route
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 89f00b9..e166c52 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,6 +19,7 @@ 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;
/**
@@ -42,6 +43,11 @@ 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 support 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/JaxbModelToXMLDumper.java b/core/camel-xml-jaxb/src/main/java/org/apache/camel/xml/jaxb/JaxbModelToXMLDumper.java
index 6242445..518c4ae 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
@@ -41,7 +41,6 @@ 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.ModelHelper;
import org.apache.camel.model.RouteDefinition;
import org.apache.camel.model.RoutesDefinition;
import org.apache.camel.model.language.ExpressionDefinition;
@@ -169,8 +168,8 @@ public class JaxbModelToXMLDumper implements ModelToXMLDumper {
// replaced so re-create the model
if (changed.get()) {
xml = context.getTypeConverter().mandatoryConvertTo(String.class, dom);
- NamedNode copy = ModelHelper.createModelFromXml(context, xml, NamedNode.class);
ExtendedCamelContext ecc = context.adapt(ExtendedCamelContext.class);
+ NamedNode copy = ecc.getXMLRoutesDefinitionLoader().createModelFromXml(context, xml, NamedNode.class);
xml = ecc.getModelToXMLDumper().dumpModelAsXml(context, copy);
}
}
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 208d5f8..1404e8a 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
@@ -24,11 +24,14 @@ 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 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;
@@ -116,6 +119,11 @@ 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";
}
@@ -191,4 +199,47 @@ public class JaxbXMLRoutesDefinitionLoader implements XMLRoutesDefinitionLoader
}
}
}
+
+ 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 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);
+ }
+
}
diff --git a/docs/user-manual/modules/ROOT/pages/camel-3x-upgrade-guide.adoc b/docs/user-manual/modules/ROOT/pages/camel-3x-upgrade-guide.adoc
index cac752a..793a646 100644
--- a/docs/user-manual/modules/ROOT/pages/camel-3x-upgrade-guide.adoc
+++ b/docs/user-manual/modules/ROOT/pages/camel-3x-upgrade-guide.adoc
@@ -222,6 +222,11 @@ Should now be:
exchange.setRollbackOnly(true);
----
+==== ModelHelper removed
+
+The class `org.apache.camel.model.ModelHelper` has been removed. Instead you can use its functionality from `ExtendedCamelContext` by
+the `getModelToXMLDumper` and `getXMLRoutesDefinitionLoader` methods which has APIs similar to `ModelHelper`.
+
==== camel-jaxp
The class `org.apache.camel.processor.validation.PredicateValidatingProcessor` has moved from `camel-jaxp` JAR
diff --git a/platforms/commands/commands-core/src/main/java/org/apache/camel/commands/AbstractLocalCamelController.java b/platforms/commands/commands-core/src/main/java/org/apache/camel/commands/AbstractLocalCamelController.java
index 90a6ce1..a65b02b 100644
--- a/platforms/commands/commands-core/src/main/java/org/apache/camel/commands/AbstractLocalCamelController.java
+++ b/platforms/commands/commands-core/src/main/java/org/apache/camel/commands/AbstractLocalCamelController.java
@@ -39,7 +39,6 @@ import org.apache.camel.StatefulService;
import org.apache.camel.api.management.ManagedCamelContext;
import org.apache.camel.api.management.mbean.ManagedRouteMBean;
import org.apache.camel.model.Model;
-import org.apache.camel.model.ModelHelper;
import org.apache.camel.model.RouteDefinition;
import org.apache.camel.model.rest.RestDefinition;
import org.apache.camel.model.rest.RestsDefinition;
@@ -394,7 +393,8 @@ public abstract class AbstractLocalCamelController extends AbstractCamelControll
return null;
}
- return ModelHelper.dumpModelAsXml(context, route);
+ ExtendedCamelContext ecc = context.adapt(ExtendedCamelContext.class);
+ return ecc.getModelToXMLDumper().dumpModelAsXml(context, route);
}
@Override
@@ -459,7 +459,9 @@ public abstract class AbstractLocalCamelController extends AbstractCamelControll
// use a rests definition to dump the rests
RestsDefinition def = new RestsDefinition();
def.setRests(rests);
- return ModelHelper.dumpModelAsXml(context, def);
+
+ ExtendedCamelContext ecc = context.adapt(ExtendedCamelContext.class);
+ return ecc.getModelToXMLDumper().dumpModelAsXml(context, def);
}
@Override
diff --git a/tests/camel-itest-osgi/src/test/java/org/apache/camel/itest/DuplicateNamespacePrefixIssueTest.java b/tests/camel-itest-osgi/src/test/java/org/apache/camel/itest/DuplicateNamespacePrefixIssueTest.java
index 54f9871..8b1de84 100644
--- a/tests/camel-itest-osgi/src/test/java/org/apache/camel/itest/DuplicateNamespacePrefixIssueTest.java
+++ b/tests/camel-itest-osgi/src/test/java/org/apache/camel/itest/DuplicateNamespacePrefixIssueTest.java
@@ -20,10 +20,10 @@ import java.io.ByteArrayInputStream;
import java.io.InputStream;
import org.apache.camel.CamelContext;
+import org.apache.camel.ExtendedCamelContext;
import org.apache.camel.blueprint.BlueprintCamelContext;
import org.apache.camel.builder.RouteBuilder;
import org.apache.camel.model.Model;
-import org.apache.camel.model.ModelHelper;
import org.apache.camel.model.RoutesDefinition;
import org.apache.camel.test.karaf.AbstractFeatureTest;
import org.junit.Assert;
@@ -36,7 +36,6 @@ import org.ops4j.pax.exam.junit.PaxExam;
/**
* CAMEL-10817: dumpModelAsXml can return invalid XML namespace xmlns:xmlns
*/
-
@RunWith(PaxExam.class)
public class DuplicateNamespacePrefixIssueTest extends AbstractFeatureTest {
@@ -58,14 +57,15 @@ public class DuplicateNamespacePrefixIssueTest extends AbstractFeatureTest {
});
// Dump the model XML
- String originalModelXML = ModelHelper.dumpModelAsXml(context, context.getExtension(Model.class).getRouteDefinition("foo"));
+ ExtendedCamelContext ecc = context.adapt(ExtendedCamelContext.class);
+ String originalModelXML = ecc.getModelToXMLDumper().dumpModelAsXml(context, context.getExtension(Model.class).getRouteDefinition("foo"));
// Reload routes from dumped XML
InputStream stream = new ByteArrayInputStream(originalModelXML.getBytes("UTF-8"));
- RoutesDefinition routesDefinition = ModelHelper.loadRoutesDefinition(context, stream);
+ RoutesDefinition routesDefinition = (RoutesDefinition) ecc.getXMLRoutesDefinitionLoader().loadRoutesDefinition(context, stream);
// Verify namespaces are as we expect
- String modifiedModelXML = ModelHelper.dumpModelAsXml(context, routesDefinition);
+ String modifiedModelXML = ecc.getModelToXMLDumper().dumpModelAsXml(context, routesDefinition);
String modifiedRoutesElementXML = modifiedModelXML.split("\n")[1];
String expectedRoutesElementXML = "<routes xmlns=\"http://camel.apache.org/schema/spring\">";
Assert.assertEquals(expectedRoutesElementXML, modifiedRoutesElementXML);
diff --git a/tooling/openapi-rest-dsl-generator/src/main/java/org/apache/camel/generator/openapi/RestDslXmlGenerator.java b/tooling/openapi-rest-dsl-generator/src/main/java/org/apache/camel/generator/openapi/RestDslXmlGenerator.java
index f139b61..63b66e0 100644
--- a/tooling/openapi-rest-dsl-generator/src/main/java/org/apache/camel/generator/openapi/RestDslXmlGenerator.java
+++ b/tooling/openapi-rest-dsl-generator/src/main/java/org/apache/camel/generator/openapi/RestDslXmlGenerator.java
@@ -27,6 +27,7 @@ import javax.xml.transform.TransformerFactory;
import javax.xml.transform.dom.DOMSource;
import javax.xml.transform.stream.StreamResult;
+import org.apache.camel.ExtendedCamelContext;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.NodeList;
@@ -35,7 +36,6 @@ import org.xml.sax.InputSource;
import io.apicurio.datamodels.openapi.models.OasDocument;
import org.apache.camel.CamelContext;
-import org.apache.camel.model.ModelHelper;
import org.apache.camel.model.rest.RestsDefinition;
import org.apache.camel.util.ObjectHelper;
@@ -58,7 +58,8 @@ public class RestDslXmlGenerator extends RestDslGenerator<RestDslXmlGenerator> {
openapi.paths.getPathItems().forEach(restDslStatement::visit);
final RestsDefinition rests = emitter.result();
- final String xml = ModelHelper.dumpModelAsXml(context, rests);
+ ExtendedCamelContext ecc = context.adapt(ExtendedCamelContext.class);
+ final String xml = ecc.getModelToXMLDumper().dumpModelAsXml(context, rests);
final DocumentBuilderFactory builderFactory = DocumentBuilderFactory.newInstance();
builderFactory.setFeature(XMLConstants.FEATURE_SECURE_PROCESSING, true);
diff --git a/tooling/swagger-rest-dsl-generator/src/main/java/org/apache/camel/generator/swagger/RestDslXmlGenerator.java b/tooling/swagger-rest-dsl-generator/src/main/java/org/apache/camel/generator/swagger/RestDslXmlGenerator.java
index c54d02e..62d43e6 100644
--- a/tooling/swagger-rest-dsl-generator/src/main/java/org/apache/camel/generator/swagger/RestDslXmlGenerator.java
+++ b/tooling/swagger-rest-dsl-generator/src/main/java/org/apache/camel/generator/swagger/RestDslXmlGenerator.java
@@ -27,6 +27,7 @@ import javax.xml.transform.TransformerFactory;
import javax.xml.transform.dom.DOMSource;
import javax.xml.transform.stream.StreamResult;
+import org.apache.camel.ExtendedCamelContext;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.NodeList;
@@ -35,7 +36,6 @@ import org.xml.sax.InputSource;
import io.swagger.models.Swagger;
import org.apache.camel.CamelContext;
-import org.apache.camel.model.ModelHelper;
import org.apache.camel.model.rest.RestsDefinition;
import org.apache.camel.util.ObjectHelper;
@@ -56,7 +56,8 @@ public class RestDslXmlGenerator extends RestDslGenerator<RestDslXmlGenerator> {
swagger.getPaths().forEach(restDslStatement::visit);
final RestsDefinition rests = emitter.result();
- final String xml = ModelHelper.dumpModelAsXml(context, rests);
+ ExtendedCamelContext ecc = context.adapt(ExtendedCamelContext.class);
+ final String xml = ecc.getModelToXMLDumper().dumpModelAsXml(context, rests);
final DocumentBuilderFactory builderFactory = DocumentBuilderFactory.newInstance();
builderFactory.setFeature(XMLConstants.FEATURE_SECURE_PROCESSING, true);