This is an automated email from the ASF dual-hosted git repository. acosentino pushed a commit to branch sandbox/camel-3.x in repository https://gitbox.apache.org/repos/asf/camel.git
commit a2480d757505bb1c37802939384aef12d4101fb5 Author: Colm O hEigeartaigh <cohei...@apache.org> AuthorDate: Tue Nov 27 13:46:24 2018 +0000 Set the secure processing feature on various DocumentBuilderFactory, TransformerFactory, SAXParserFactory instances Conflicts: camel-core/src/main/java/org/apache/camel/management/mbean/RouteCoverageXmlParser.java --- .../java/org/apache/camel/converter/jaxp/XmlConverter.java | 8 ++++++++ .../apache/camel/management/mbean/RouteCoverageXmlParser.java | 5 ++++- .../main/java/org/apache/camel/util/XmlLineNumberParser.java | 3 +++ .../org/apache/camel/component/cm/CMSenderOneMessageImpl.java | 6 +++++- .../apache/camel/component/flatpack/FlatpackConverter.java | 5 ++++- .../main/java/org/apache/camel/component/fop/FopProducer.java | 7 +++++-- .../schematron/processor/SchematronProcessorFactory.java | 2 ++ .../camel/component/spring/ws/bean/CamelEndpointMapping.java | 2 ++ .../ws/filter/impl/HeaderTransformationMessageFilter.java | 10 +++++++++- .../apache/camel/dataformat/tagsoup/TidyMarkupDataFormat.java | 5 ++++- .../java/org/apache/camel/component/tika/TikaProducer.java | 2 ++ .../org/apache/camel/catalog/nexus/BaseNexusRepository.java | 3 +++ .../java/org/apache/camel/catalog/DefaultCamelCatalog.java | 7 ++++++- .../org/apache/camel/parser/helper/XmlLineNumberParser.java | 4 ++++ .../apache/camel/maven/bom/generator/BomGeneratorMojo.java | 11 ++++++++--- .../src/main/java/org/apache/camel/maven/XmlHelper.java | 7 ++++++- .../apache/camel/maven/packaging/PrepareCatalogKarafMojo.java | 3 +++ .../apache/camel/maven/packaging/SpringBootStarterMojo.java | 10 ++++++++-- 18 files changed, 86 insertions(+), 14 deletions(-) diff --git a/camel-core/src/main/java/org/apache/camel/converter/jaxp/XmlConverter.java b/camel-core/src/main/java/org/apache/camel/converter/jaxp/XmlConverter.java index 1739dcf..cc48911 100644 --- a/camel-core/src/main/java/org/apache/camel/converter/jaxp/XmlConverter.java +++ b/camel-core/src/main/java/org/apache/camel/converter/jaxp/XmlConverter.java @@ -33,6 +33,7 @@ import java.util.List; import java.util.Map; import java.util.Properties; +import javax.xml.XMLConstants; import javax.xml.parsers.DocumentBuilder; import javax.xml.parsers.DocumentBuilderFactory; import javax.xml.parsers.ParserConfigurationException; @@ -895,6 +896,13 @@ public class XmlConverter { factory.setIgnoringElementContentWhitespace(true); factory.setIgnoringComments(true); try { + // Set secure processing + factory.setFeature(XMLConstants.FEATURE_SECURE_PROCESSING, Boolean.TRUE); + } catch (ParserConfigurationException e) { + LOG.warn("DocumentBuilderFactory doesn't support the feature {} with value {}, due to {}.", + new Object[]{XMLConstants.FEATURE_SECURE_PROCESSING, true, e}); + } + try { // Disable the external-general-entities by default factory.setFeature("http://xml.org/sax/features/external-general-entities", false); } catch (ParserConfigurationException e) { diff --git a/camel-management-impl/src/main/java/org/apache/camel/management/mbean/RouteCoverageXmlParser.java b/camel-management-impl/src/main/java/org/apache/camel/management/mbean/RouteCoverageXmlParser.java index e06a833..25b9b87 100644 --- a/camel-management-impl/src/main/java/org/apache/camel/management/mbean/RouteCoverageXmlParser.java +++ b/camel-management-impl/src/main/java/org/apache/camel/management/mbean/RouteCoverageXmlParser.java @@ -19,6 +19,7 @@ package org.apache.camel.management.mbean; import java.io.InputStream; import java.util.Stack; +import javax.xml.XMLConstants; import javax.xml.parsers.DocumentBuilder; import javax.xml.parsers.DocumentBuilderFactory; import javax.xml.parsers.SAXParser; @@ -63,8 +64,10 @@ public final class RouteCoverageXmlParser { */ public static Document parseXml(final CamelContext camelContext, final InputStream is) throws Exception { final SAXParserFactory factory = SAXParserFactory.newInstance(); + factory.setFeature(XMLConstants.FEATURE_SECURE_PROCESSING, Boolean.TRUE); final SAXParser parser = factory.newSAXParser(); final DocumentBuilderFactory docBuilderFactory = DocumentBuilderFactory.newInstance(); + docBuilderFactory.setFeature(XMLConstants.FEATURE_SECURE_PROCESSING, Boolean.TRUE); final DocumentBuilder docBuilder = docBuilderFactory.newDocumentBuilder(); final Document doc = docBuilder.newDocument(); @@ -171,4 +174,4 @@ public final class RouteCoverageXmlParser { return doc; } -} \ No newline at end of file +} diff --git a/camel-util/src/main/java/org/apache/camel/util/XmlLineNumberParser.java b/camel-util/src/main/java/org/apache/camel/util/XmlLineNumberParser.java index d80cb45..7c01d8a 100644 --- a/camel-util/src/main/java/org/apache/camel/util/XmlLineNumberParser.java +++ b/camel-util/src/main/java/org/apache/camel/util/XmlLineNumberParser.java @@ -21,6 +21,7 @@ import java.io.InputStream; import java.io.StringReader; import java.util.Stack; +import javax.xml.XMLConstants; import javax.xml.parsers.DocumentBuilder; import javax.xml.parsers.DocumentBuilderFactory; import javax.xml.parsers.SAXParser; @@ -107,11 +108,13 @@ public final class XmlLineNumberParser { final Document doc; SAXParser parser; final SAXParserFactory factory = SAXParserFactory.newInstance(); + factory.setFeature(XMLConstants.FEATURE_SECURE_PROCESSING, Boolean.TRUE); parser = factory.newSAXParser(); final DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance(); // turn off validator and loading external dtd dbf.setValidating(false); dbf.setNamespaceAware(true); + dbf.setFeature(XMLConstants.FEATURE_SECURE_PROCESSING, Boolean.TRUE); dbf.setFeature("http://xml.org/sax/features/namespaces", false); dbf.setFeature("http://xml.org/sax/features/validation", false); dbf.setFeature("http://apache.org/xml/features/nonvalidating/load-dtd-grammar", false); diff --git a/components/camel-cm-sms/src/main/java/org/apache/camel/component/cm/CMSenderOneMessageImpl.java b/components/camel-cm-sms/src/main/java/org/apache/camel/component/cm/CMSenderOneMessageImpl.java index 07e0e14..64bb92d 100644 --- a/components/camel-cm-sms/src/main/java/org/apache/camel/component/cm/CMSenderOneMessageImpl.java +++ b/components/camel-cm-sms/src/main/java/org/apache/camel/component/cm/CMSenderOneMessageImpl.java @@ -23,6 +23,7 @@ import java.io.InputStreamReader; import java.nio.charset.Charset; import java.util.UUID; +import javax.xml.XMLConstants; import javax.xml.parsers.DocumentBuilder; import javax.xml.parsers.DocumentBuilderFactory; import javax.xml.parsers.ParserConfigurationException; @@ -90,6 +91,7 @@ public class CMSenderOneMessageImpl implements CMSender { final ByteArrayOutputStream xml = new ByteArrayOutputStream(); final DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance(); + factory.setFeature(XMLConstants.FEATURE_SECURE_PROCESSING, Boolean.TRUE); factory.setNamespaceAware(true); // Get the DocumentBuilder @@ -158,7 +160,9 @@ public class CMSenderOneMessageImpl implements CMSender { } // Creatate XML as String - final Transformer aTransformer = TransformerFactory.newInstance().newTransformer(); + TransformerFactory transformerFactory = TransformerFactory.newInstance(); + transformerFactory.setFeature(XMLConstants.FEATURE_SECURE_PROCESSING, Boolean.TRUE); + final Transformer aTransformer = transformerFactory.newTransformer(); aTransformer.setOutputProperty(OutputKeys.INDENT, "yes"); final Source src = new DOMSource(doc); final Result dest = new StreamResult(xml); diff --git a/components/camel-flatpack/src/main/java/org/apache/camel/component/flatpack/FlatpackConverter.java b/components/camel-flatpack/src/main/java/org/apache/camel/component/flatpack/FlatpackConverter.java index 5dbce99..f51ab3c 100644 --- a/components/camel-flatpack/src/main/java/org/apache/camel/component/flatpack/FlatpackConverter.java +++ b/components/camel-flatpack/src/main/java/org/apache/camel/component/flatpack/FlatpackConverter.java @@ -21,6 +21,7 @@ import java.util.HashMap; import java.util.List; import java.util.Map; +import javax.xml.XMLConstants; import javax.xml.parsers.DocumentBuilderFactory; import javax.xml.parsers.ParserConfigurationException; @@ -60,7 +61,9 @@ public final class FlatpackConverter { @Converter public static Document toDocument(DataSet dataSet) throws ParserConfigurationException { - Document doc = DocumentBuilderFactory.newInstance().newDocumentBuilder().newDocument(); + DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance(); + dbf.setFeature(XMLConstants.FEATURE_SECURE_PROCESSING, Boolean.TRUE); + Document doc = dbf.newDocumentBuilder().newDocument(); if (dataSet.getIndex() == -1) { Element list = doc.createElement("Dataset"); diff --git a/components/camel-fop/src/main/java/org/apache/camel/component/fop/FopProducer.java b/components/camel-fop/src/main/java/org/apache/camel/component/fop/FopProducer.java index 5eb046e..928c722 100644 --- a/components/camel-fop/src/main/java/org/apache/camel/component/fop/FopProducer.java +++ b/components/camel-fop/src/main/java/org/apache/camel/component/fop/FopProducer.java @@ -19,6 +19,8 @@ package org.apache.camel.component.fop; import java.io.ByteArrayOutputStream; import java.io.OutputStream; import java.util.Map; + +import javax.xml.XMLConstants; import javax.xml.transform.Result; import javax.xml.transform.Source; import javax.xml.transform.Transformer; @@ -85,8 +87,9 @@ public class FopProducer extends DefaultProducer { throws FOPException, TransformerException { OutputStream out = new ByteArrayOutputStream(); Fop fop = fopFactory.newFop(outputFormat, userAgent, out); - TransformerFactory factory = TransformerFactory.newInstance(); - Transformer transformer = factory.newTransformer(); + TransformerFactory transformerFactory = TransformerFactory.newInstance(); + transformerFactory.setFeature(XMLConstants.FEATURE_SECURE_PROCESSING, Boolean.TRUE); + Transformer transformer = transformerFactory.newTransformer(); Result res = new SAXResult(fop.getDefaultHandler()); transformer.transform(src, res); diff --git a/components/camel-schematron/src/main/java/org/apache/camel/component/schematron/processor/SchematronProcessorFactory.java b/components/camel-schematron/src/main/java/org/apache/camel/component/schematron/processor/SchematronProcessorFactory.java index 71d9e02..739493f 100644 --- a/components/camel-schematron/src/main/java/org/apache/camel/component/schematron/processor/SchematronProcessorFactory.java +++ b/components/camel-schematron/src/main/java/org/apache/camel/component/schematron/processor/SchematronProcessorFactory.java @@ -16,6 +16,7 @@ */ package org.apache.camel.component.schematron.processor; +import javax.xml.XMLConstants; import javax.xml.parsers.ParserConfigurationException; import javax.xml.parsers.SAXParser; import javax.xml.parsers.SAXParserFactory; @@ -68,6 +69,7 @@ public final class SchematronProcessorFactory { */ private static XMLReader getXMLReader() throws ParserConfigurationException, SAXException { final SAXParserFactory fac = SAXParserFactory.newInstance(); + fac.setFeature(XMLConstants.FEATURE_SECURE_PROCESSING, Boolean.TRUE); fac.setValidating(false); final SAXParser parser = fac.newSAXParser(); XMLReader reader = parser.getXMLReader(); diff --git a/components/camel-spring-ws/src/main/java/org/apache/camel/component/spring/ws/bean/CamelEndpointMapping.java b/components/camel-spring-ws/src/main/java/org/apache/camel/component/spring/ws/bean/CamelEndpointMapping.java index 7b27a18..78b6e25 100644 --- a/components/camel-spring-ws/src/main/java/org/apache/camel/component/spring/ws/bean/CamelEndpointMapping.java +++ b/components/camel-spring-ws/src/main/java/org/apache/camel/component/spring/ws/bean/CamelEndpointMapping.java @@ -21,6 +21,7 @@ import java.net.URISyntaxException; import java.util.Map; import java.util.concurrent.ConcurrentHashMap; +import javax.xml.XMLConstants; import javax.xml.namespace.QName; import javax.xml.parsers.ParserConfigurationException; import javax.xml.stream.XMLStreamException; @@ -248,6 +249,7 @@ public class CamelEndpointMapping extends AbstractEndpointMapping implements Ini xmlConverter.setTransformerFactory(transformerFactory); } else { transformerFactory = TransformerFactory.newInstance(); + transformerFactory.setFeature(XMLConstants.FEATURE_SECURE_PROCESSING, Boolean.TRUE); } } diff --git a/components/camel-spring-ws/src/main/java/org/apache/camel/component/spring/ws/filter/impl/HeaderTransformationMessageFilter.java b/components/camel-spring-ws/src/main/java/org/apache/camel/component/spring/ws/filter/impl/HeaderTransformationMessageFilter.java index b7bce5b..be0a853 100644 --- a/components/camel-spring-ws/src/main/java/org/apache/camel/component/spring/ws/filter/impl/HeaderTransformationMessageFilter.java +++ b/components/camel-spring-ws/src/main/java/org/apache/camel/component/spring/ws/filter/impl/HeaderTransformationMessageFilter.java @@ -18,9 +18,11 @@ package org.apache.camel.component.spring.ws.filter.impl; import java.util.Map; +import javax.xml.XMLConstants; import javax.xml.transform.ErrorListener; import javax.xml.transform.Source; import javax.xml.transform.Transformer; +import javax.xml.transform.TransformerConfigurationException; import javax.xml.transform.TransformerException; import javax.xml.transform.TransformerFactory; @@ -130,6 +132,12 @@ public class HeaderTransformationMessageFilter implements MessageFilter { throw new IllegalStateException("Cannot resolve a transformer factory"); } + try { + transformerFactory.setFeature(XMLConstants.FEATURE_SECURE_PROCESSING, Boolean.TRUE); + } catch (TransformerConfigurationException ex) { + // ignore + } + transformerFactory.setErrorListener(new ErrorListener() { @Override @@ -191,4 +199,4 @@ public class HeaderTransformationMessageFilter implements MessageFilter { this.saxon = saxon; } -} \ No newline at end of file +} diff --git a/components/camel-tagsoup/src/main/java/org/apache/camel/dataformat/tagsoup/TidyMarkupDataFormat.java b/components/camel-tagsoup/src/main/java/org/apache/camel/dataformat/tagsoup/TidyMarkupDataFormat.java index bf3c308..8ebbed2 100644 --- a/components/camel-tagsoup/src/main/java/org/apache/camel/dataformat/tagsoup/TidyMarkupDataFormat.java +++ b/components/camel-tagsoup/src/main/java/org/apache/camel/dataformat/tagsoup/TidyMarkupDataFormat.java @@ -23,6 +23,7 @@ import java.io.Writer; import java.util.Map; import java.util.Map.Entry; +import javax.xml.XMLConstants; import javax.xml.transform.Transformer; import javax.xml.transform.TransformerFactory; import javax.xml.transform.dom.DOMResult; @@ -176,7 +177,9 @@ public class TidyMarkupDataFormat extends ServiceSupport implements DataFormat, parser.setContentHandler(createContentHandler(w)); try { - Transformer transformer = TransformerFactory.newInstance().newTransformer(); + TransformerFactory transformerFactory = TransformerFactory.newInstance(); + transformerFactory.setFeature(XMLConstants.FEATURE_SECURE_PROCESSING, Boolean.TRUE); + Transformer transformer = transformerFactory.newTransformer(); DOMResult result = new DOMResult(); transformer.transform(new SAXSource(parser, new InputSource(inputStream)), result); return result.getNode(); diff --git a/components/camel-tika/src/main/java/org/apache/camel/component/tika/TikaProducer.java b/components/camel-tika/src/main/java/org/apache/camel/component/tika/TikaProducer.java index c9b1f12..62b5bf2 100644 --- a/components/camel-tika/src/main/java/org/apache/camel/component/tika/TikaProducer.java +++ b/components/camel-tika/src/main/java/org/apache/camel/component/tika/TikaProducer.java @@ -23,6 +23,7 @@ import java.io.OutputStream; import java.io.OutputStreamWriter; import java.io.UnsupportedEncodingException; +import javax.xml.XMLConstants; import javax.xml.transform.OutputKeys; import javax.xml.transform.TransformerConfigurationException; import javax.xml.transform.TransformerFactory; @@ -150,6 +151,7 @@ public class TikaProducer extends DefaultProducer { private TransformerHandler getTransformerHandler(OutputStream output, String method, boolean prettyPrint) throws TransformerConfigurationException, UnsupportedEncodingException { SAXTransformerFactory factory = (SAXTransformerFactory) TransformerFactory.newInstance(); + factory.setFeature(XMLConstants.FEATURE_SECURE_PROCESSING, Boolean.TRUE); TransformerHandler handler = factory.newTransformerHandler(); handler.getTransformer().setOutputProperty(OutputKeys.METHOD, method); handler.getTransformer().setOutputProperty(OutputKeys.INDENT, prettyPrint ? "yes" : "no"); diff --git a/platforms/camel-catalog-nexus/src/main/java/org/apache/camel/catalog/nexus/BaseNexusRepository.java b/platforms/camel-catalog-nexus/src/main/java/org/apache/camel/catalog/nexus/BaseNexusRepository.java index d46b304..38bdd6f 100644 --- a/platforms/camel-catalog-nexus/src/main/java/org/apache/camel/catalog/nexus/BaseNexusRepository.java +++ b/platforms/camel-catalog-nexus/src/main/java/org/apache/camel/catalog/nexus/BaseNexusRepository.java @@ -27,6 +27,8 @@ import java.util.concurrent.Executors; import java.util.concurrent.ScheduledExecutorService; import java.util.concurrent.TimeUnit; import java.util.concurrent.atomic.AtomicBoolean; + +import javax.xml.XMLConstants; import javax.xml.parsers.DocumentBuilder; import javax.xml.parsers.DocumentBuilderFactory; import javax.xml.xpath.XPath; @@ -194,6 +196,7 @@ public abstract class BaseNexusRepository { factory.setNamespaceAware(true); factory.setIgnoringElementContentWhitespace(true); factory.setIgnoringComments(true); + factory.setFeature(XMLConstants.FEATURE_SECURE_PROCESSING, Boolean.TRUE); DocumentBuilder documentBuilder = factory.newDocumentBuilder(); diff --git a/platforms/camel-catalog/src/main/java/org/apache/camel/catalog/DefaultCamelCatalog.java b/platforms/camel-catalog/src/main/java/org/apache/camel/catalog/DefaultCamelCatalog.java index 4fde346..1c6057f 100644 --- a/platforms/camel-catalog/src/main/java/org/apache/camel/catalog/DefaultCamelCatalog.java +++ b/platforms/camel-catalog/src/main/java/org/apache/camel/catalog/DefaultCamelCatalog.java @@ -29,6 +29,8 @@ import java.util.Set; import java.util.SortedSet; import java.util.TreeSet; import java.util.regex.PatternSyntaxException; + +import javax.xml.XMLConstants; import javax.xml.parsers.DocumentBuilderFactory; import javax.xml.xpath.XPathConstants; import javax.xml.xpath.XPathFactory; @@ -1379,7 +1381,10 @@ public class DefaultCamelCatalog extends AbstractCamelCatalog implements CamelCa int archetypes = 0; try { String xml = archetypeCatalogAsXml(); - Document dom = DocumentBuilderFactory.newInstance().newDocumentBuilder().parse(new ByteArrayInputStream(xml.getBytes())); + + DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance(); + dbf.setFeature(XMLConstants.FEATURE_SECURE_PROCESSING, Boolean.TRUE); + Document dom = dbf.newDocumentBuilder().parse(new ByteArrayInputStream(xml.getBytes())); Object val = XPathFactory.newInstance().newXPath().evaluate("count(/archetype-catalog/archetypes/archetype)", dom, XPathConstants.NUMBER); double num = (double) val; archetypes = (int) num; diff --git a/tooling/camel-route-parser/src/main/java/org/apache/camel/parser/helper/XmlLineNumberParser.java b/tooling/camel-route-parser/src/main/java/org/apache/camel/parser/helper/XmlLineNumberParser.java index a96fb86..129740b 100644 --- a/tooling/camel-route-parser/src/main/java/org/apache/camel/parser/helper/XmlLineNumberParser.java +++ b/tooling/camel-route-parser/src/main/java/org/apache/camel/parser/helper/XmlLineNumberParser.java @@ -25,6 +25,8 @@ import java.util.LinkedHashMap; import java.util.List; import java.util.Map; import java.util.Stack; + +import javax.xml.XMLConstants; import javax.xml.parsers.DocumentBuilder; import javax.xml.parsers.DocumentBuilderFactory; import javax.xml.parsers.SAXParser; @@ -86,11 +88,13 @@ public final class XmlLineNumberParser { final Document doc; SAXParser parser; final SAXParserFactory factory = SAXParserFactory.newInstance(); + factory.setFeature(XMLConstants.FEATURE_SECURE_PROCESSING, Boolean.TRUE); parser = factory.newSAXParser(); final DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance(); // turn off validator and loading external dtd dbf.setValidating(false); dbf.setNamespaceAware(true); + dbf.setFeature(XMLConstants.FEATURE_SECURE_PROCESSING, Boolean.TRUE); dbf.setFeature("http://xml.org/sax/features/namespaces", false); dbf.setFeature("http://xml.org/sax/features/validation", false); dbf.setFeature("http://apache.org/xml/features/nonvalidating/load-dtd-grammar", false); diff --git a/tooling/maven/bom-generator-maven-plugin/src/main/java/org/apache/camel/maven/bom/generator/BomGeneratorMojo.java b/tooling/maven/bom-generator-maven-plugin/src/main/java/org/apache/camel/maven/bom/generator/BomGeneratorMojo.java index ea83c74..c309cab 100644 --- a/tooling/maven/bom-generator-maven-plugin/src/main/java/org/apache/camel/maven/bom/generator/BomGeneratorMojo.java +++ b/tooling/maven/bom-generator-maven-plugin/src/main/java/org/apache/camel/maven/bom/generator/BomGeneratorMojo.java @@ -28,6 +28,8 @@ import java.util.HashSet; import java.util.List; import java.util.Set; import java.util.TreeSet; + +import javax.xml.XMLConstants; import javax.xml.parsers.DocumentBuilder; import javax.xml.parsers.DocumentBuilderFactory; import javax.xml.transform.OutputKeys; @@ -205,7 +207,9 @@ public class BomGeneratorMojo extends AbstractMojo { } private Document loadBasePom() throws Exception { - DocumentBuilder builder = DocumentBuilderFactory.newInstance().newDocumentBuilder(); + DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance(); + dbf.setFeature(XMLConstants.FEATURE_SECURE_PROCESSING, Boolean.TRUE); + DocumentBuilder builder = dbf.newDocumentBuilder(); Document pom = builder.parse(sourcePom); XPath xpath = XPathFactory.newInstance().newXPath(); @@ -236,7 +240,9 @@ public class BomGeneratorMojo extends AbstractMojo { emptyNode.getParentNode().removeChild(emptyNode); } - Transformer transformer = TransformerFactory.newInstance().newTransformer(); + TransformerFactory transformerFactory = TransformerFactory.newInstance(); + transformerFactory.setFeature(XMLConstants.FEATURE_SECURE_PROCESSING, Boolean.TRUE); + Transformer transformer = transformerFactory.newTransformer(); transformer.setOutputProperty(OutputKeys.INDENT, "yes"); transformer.setOutputProperty(OutputKeys.METHOD, "xml"); transformer.setOutputProperty("{http://xml.apache.org/xslt}indent-amount", "2"); @@ -285,7 +291,6 @@ public class BomGeneratorMojo extends AbstractMojo { private void overwriteDependencyManagement(Document pom, List<Dependency> dependencies) throws Exception { - XPath xpath = XPathFactory.newInstance().newXPath(); XPathExpression expr = xpath.compile("/project/dependencyManagement/dependencies"); diff --git a/tooling/maven/camel-eip-documentation-enricher-maven-plugin/src/main/java/org/apache/camel/maven/XmlHelper.java b/tooling/maven/camel-eip-documentation-enricher-maven-plugin/src/main/java/org/apache/camel/maven/XmlHelper.java index af6b528..863779a 100644 --- a/tooling/maven/camel-eip-documentation-enricher-maven-plugin/src/main/java/org/apache/camel/maven/XmlHelper.java +++ b/tooling/maven/camel-eip-documentation-enricher-maven-plugin/src/main/java/org/apache/camel/maven/XmlHelper.java @@ -18,6 +18,8 @@ package org.apache.camel.maven; import java.io.File; import java.io.IOException; + +import javax.xml.XMLConstants; import javax.xml.namespace.NamespaceContext; import javax.xml.parsers.DocumentBuilderFactory; import javax.xml.parsers.ParserConfigurationException; @@ -38,11 +40,14 @@ public final class XmlHelper { public static Document buildNamespaceAwareDocument(File xml) throws SAXException, ParserConfigurationException, IOException { DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance(); factory.setNamespaceAware(true); + factory.setFeature(XMLConstants.FEATURE_SECURE_PROCESSING, Boolean.TRUE); return factory.newDocumentBuilder().parse(xml); } public static Transformer buildTransformer() throws TransformerConfigurationException { - Transformer transformer = TransformerFactory.newInstance().newTransformer(); + TransformerFactory transformerFactory = TransformerFactory.newInstance(); + transformerFactory.setFeature(XMLConstants.FEATURE_SECURE_PROCESSING, Boolean.TRUE); + Transformer transformer = transformerFactory.newTransformer(); transformer.setOutputProperty(OutputKeys.INDENT, "yes"); transformer.setOutputProperty("{http://xml.apache.org/xslt}indent-amount", "2"); return transformer; diff --git a/tooling/maven/camel-package-maven-plugin/src/main/java/org/apache/camel/maven/packaging/PrepareCatalogKarafMojo.java b/tooling/maven/camel-package-maven-plugin/src/main/java/org/apache/camel/maven/packaging/PrepareCatalogKarafMojo.java index 1d8c79e..3db3d78 100644 --- a/tooling/maven/camel-package-maven-plugin/src/main/java/org/apache/camel/maven/packaging/PrepareCatalogKarafMojo.java +++ b/tooling/maven/camel-package-maven-plugin/src/main/java/org/apache/camel/maven/packaging/PrepareCatalogKarafMojo.java @@ -29,6 +29,8 @@ import java.util.LinkedHashSet; import java.util.List; import java.util.Set; import java.util.TreeSet; + +import javax.xml.XMLConstants; import javax.xml.parsers.DocumentBuilderFactory; import org.w3c.dom.Document; @@ -641,6 +643,7 @@ public class PrepareCatalogKarafMojo extends AbstractMojo { dbf.setNamespaceAware(false); dbf.setValidating(false); dbf.setXIncludeAware(false); + dbf.setFeature(XMLConstants.FEATURE_SECURE_PROCESSING, Boolean.TRUE); Document dom = dbf.newDocumentBuilder().parse(is); NodeList children = dom.getElementsByTagName("features"); diff --git a/tooling/maven/camel-package-maven-plugin/src/main/java/org/apache/camel/maven/packaging/SpringBootStarterMojo.java b/tooling/maven/camel-package-maven-plugin/src/main/java/org/apache/camel/maven/packaging/SpringBootStarterMojo.java index b4f6560..3ef6d13 100644 --- a/tooling/maven/camel-package-maven-plugin/src/main/java/org/apache/camel/maven/packaging/SpringBootStarterMojo.java +++ b/tooling/maven/camel-package-maven-plugin/src/main/java/org/apache/camel/maven/packaging/SpringBootStarterMojo.java @@ -34,6 +34,8 @@ import java.util.Properties; import java.util.Set; import java.util.TreeSet; import java.util.stream.Collectors; + +import javax.xml.XMLConstants; import javax.xml.parsers.DocumentBuilder; import javax.xml.parsers.DocumentBuilderFactory; import javax.xml.transform.OutputKeys; @@ -270,7 +272,9 @@ public class SpringBootStarterMojo extends AbstractMojo { private void fixAdditionalRepositories(Document pom) throws Exception { if (project.getFile() != null) { - DocumentBuilder builder = DocumentBuilderFactory.newInstance().newDocumentBuilder(); + DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance(); + dbf.setFeature(XMLConstants.FEATURE_SECURE_PROCESSING, Boolean.TRUE); + DocumentBuilder builder = dbf.newDocumentBuilder(); Document originalPom = builder.parse(project.getFile()); XPath xpath = XPathFactory.newInstance().newXPath(); @@ -613,7 +617,9 @@ public class SpringBootStarterMojo extends AbstractMojo { pom.setXmlStandalone(true); - Transformer transformer = TransformerFactory.newInstance().newTransformer(); + TransformerFactory transformerFactory = TransformerFactory.newInstance(); + transformerFactory.setFeature(XMLConstants.FEATURE_SECURE_PROCESSING, Boolean.TRUE); + Transformer transformer = transformerFactory.newTransformer(); transformer.setOutputProperty(OutputKeys.INDENT, "yes"); transformer.setOutputProperty(OutputKeys.METHOD, "xml"); transformer.setOutputProperty("{http://xml.apache.org/xslt}indent-amount", "2");