Updated Branches: refs/heads/master 7c9326f49 -> 6f2ceef62
CAMEL-7131 Set the default feature of DocumentFactoryBuilder Project: http://git-wip-us.apache.org/repos/asf/camel/repo Commit: http://git-wip-us.apache.org/repos/asf/camel/commit/6f2ceef6 Tree: http://git-wip-us.apache.org/repos/asf/camel/tree/6f2ceef6 Diff: http://git-wip-us.apache.org/repos/asf/camel/diff/6f2ceef6 Branch: refs/heads/master Commit: 6f2ceef627fe4fe350a3ee9d29512ae019dfb614 Parents: 7c9326f 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:29:22 2014 +0800 ---------------------------------------------------------------------- .../camel/converter/jaxp/XmlConverter.java | 7 +++++ .../camel/builder/xml/XPathFeatureTest.java | 30 +++++++++++++++----- 2 files changed, 30 insertions(+), 7 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/camel/blob/6f2ceef6/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 43d39a4..ca3df7d 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 @@ -944,6 +944,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/6f2ceef6/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 71f315f..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,6 +17,10 @@ package org.apache.camel.builder.xml; +import java.io.FileNotFoundException; + +import javax.xml.xpath.XPathExpressionException; + import org.apache.camel.ContextTestSupport; import org.apache.camel.Exchange; import org.apache.camel.converter.jaxp.XmlConverter; @@ -34,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) {