CAMEL-7131 Set the default feature of DocumentFactoryBuilder Conflicts: camel-core/src/test/java/org/apache/camel/builder/xml/XPathFeatureTest.java
Project: http://git-wip-us.apache.org/repos/asf/camel/repo Commit: http://git-wip-us.apache.org/repos/asf/camel/commit/2f490aa2 Tree: http://git-wip-us.apache.org/repos/asf/camel/tree/2f490aa2 Diff: http://git-wip-us.apache.org/repos/asf/camel/diff/2f490aa2 Branch: refs/heads/camel-2.11.x Commit: 2f490aa27ca747afcf2c94cd763b2f039e87869d Parents: 97121cb Author: Willem Jiang <willem.ji...@gmail.com> Authored: Mon Jan 13 21:29:22 2014 +0800 Committer: Willem Jiang <willem.ji...@gmail.com> Committed: Mon Jan 13 21:34:05 2014 +0800 ---------------------------------------------------------------------- .../camel/converter/jaxp/XmlConverter.java | 7 +++++ .../camel/builder/xml/XPathFeatureTest.java | 30 ++++++++++++++------ 2 files changed, 29 insertions(+), 8 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/camel/blob/2f490aa2/camel-core/src/main/java/org/apache/camel/converter/jaxp/XmlConverter.java ---------------------------------------------------------------------- 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 70326f4..c822cfa 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 @@ -963,6 +963,13 @@ public class XmlConverter { factory.setNamespaceAware(true); factory.setIgnoringElementContentWhitespace(true); factory.setIgnoringComments(true); + try { + // Disable the external-general-entitites by default + factory.setFeature("http://xml.org/sax/features/external-general-entities", false); + } catch (ParserConfigurationException e) { + LOG.warn("DocumentBuilderFactory doesn't support the feature {} with value {}, due to {}." + , new Object[]{"http://xml.org/sax/features/external-general-entities", true, e}); + } // setup the feature from the system property setupFeatures(factory); return factory; http://git-wip-us.apache.org/repos/asf/camel/blob/2f490aa2/camel-core/src/test/java/org/apache/camel/builder/xml/XPathFeatureTest.java ---------------------------------------------------------------------- diff --git a/camel-core/src/test/java/org/apache/camel/builder/xml/XPathFeatureTest.java b/camel-core/src/test/java/org/apache/camel/builder/xml/XPathFeatureTest.java index 2a3f947..0d90530 100644 --- a/camel-core/src/test/java/org/apache/camel/builder/xml/XPathFeatureTest.java +++ b/camel-core/src/test/java/org/apache/camel/builder/xml/XPathFeatureTest.java @@ -17,7 +17,9 @@ package org.apache.camel.builder.xml; -import javax.xml.parsers.SAXParserFactory; +import java.io.FileNotFoundException; + +import javax.xml.xpath.XPathExpressionException; import org.apache.camel.ContextTestSupport; import org.apache.camel.Exchange; @@ -36,16 +38,28 @@ public class XPathFeatureTest extends ContextTestSupport { public boolean isUseRouteBuilder() { return false; } - + public void testXPathResult() throws Exception { - // Set this feature will disable the external general entities - System.setProperty(DOM_BUILER_FACTORY_FEATRUE + ":" - + "http://xml.org/sax/features/external-general-entities", "false"); - String result = (String)xpath("/").stringResult().evaluate(createExchange(XML_DATA)); assertEquals("Get a wrong result", " ", result); - System.clearProperty(DOM_BUILER_FACTORY_FEATRUE + ":" - + "http://xml.org/sax/features/external-general-entities"); + } + + public void testXPath() throws Exception { + + // Set this feature will enable the external general entities + System.setProperty(DOM_BUILER_FACTORY_FEATRUE + ":" + + "http://xml.org/sax/features/external-general-entities", "true"); + try { + xpath("/").stringResult().evaluate(createExchange(XML_DATA)); + fail("Expect an Exception here"); + } catch (Exception ex) { + assertTrue("Get a wrong exception cause.", ex instanceof InvalidXPathExpression); + assertTrue("Get a wrong exception cause.", ex.getCause() instanceof XPathExpressionException); + assertTrue("Get a wrong exception cause.", ex.getCause().getCause() instanceof FileNotFoundException); + } finally { + System.clearProperty(DOM_BUILER_FACTORY_FEATRUE + ":" + + "http://xml.org/sax/features/external-general-entities"); + } } protected Exchange createExchange(Object xml) {