dom4j/backport-Default-SAXParser-features-are-set-when-SAXParser-is.patch
2020-06-19 15:50:08 +08:00

98 lines
4.3 KiB
Diff

From a16aaa7a192f5e5258dd941cb6a4344c1ca80839 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Filip=20Jirs=C3=A1k?= <filip@jirsak.org>
Date: Sun, 1 Jul 2018 13:20:26 +0200
Subject: [PATCH] #44 Default SAXParser features are set when SAXParser is
created, so they can be overriden.
(cherry picked from commit 161078a8a520dcd1db6d451190f2434d56547664)
---
src/main/java/org/dom4j/io/SAXHelper.java | 15 +++++++++++++++
src/main/java/org/dom4j/io/SAXReader.java | 23 +----------------------
src/test/java/org/dom4j/io/DTDTest.java | 2 ++
3 files changed, 18 insertions(+), 22 deletions(-)
diff --git a/src/main/java/org/dom4j/io/SAXHelper.java b/src/main/java/org/dom4j/io/SAXHelper.java
index 0810a90c..f120337f 100644
--- a/src/main/java/org/dom4j/io/SAXHelper.java
+++ b/src/main/java/org/dom4j/io/SAXHelper.java
@@ -103,6 +103,21 @@ public static XMLReader createXMLReader(boolean validating)
throw new SAXException("Couldn't create SAX reader");
}
+ // configure namespace support
+ SAXHelper.setParserFeature(reader, "http://xml.org/sax/features/namespaces", true);
+ SAXHelper.setParserFeature(reader, "http://xml.org/sax/features/namespace-prefixes", false);
+
+ // external entites
+// SAXHelper.setParserFeature(reader, "http://xml.org/sax/properties/external-general-entities", false);
+// SAXHelper.setParserFeature(reader, "http://xml.org/sax/properties/external-parameter-entities", false);
+
+ // external DTD
+ SAXHelper.setParserFeature(reader,"http://apache.org/xml/features/nonvalidating/load-external-dtd", false);
+
+
+ // use Locator2 if possible
+ SAXHelper.setParserFeature(reader,"http://xml.org/sax/features/use-locator2", true);
+
return reader;
}
diff --git a/src/main/java/org/dom4j/io/SAXReader.java b/src/main/java/org/dom4j/io/SAXReader.java
index 23559e49..6bb3d926 100644
--- a/src/main/java/org/dom4j/io/SAXReader.java
+++ b/src/main/java/org/dom4j/io/SAXReader.java
@@ -65,11 +65,7 @@
public class SAXReader {
private static final String SAX_STRING_INTERNING =
"http://xml.org/sax/features/string-interning";
- private static final String SAX_NAMESPACE_PREFIXES =
- "http://xml.org/sax/features/namespace-prefixes";
- private static final String SAX_NAMESPACES =
- "http://xml.org/sax/features/namespaces";
- private static final String SAX_DECL_HANDLER =
+ private static final String SAX_DECL_HANDLER =
"http://xml.org/sax/properties/declaration-handler";
private static final String SAX_LEXICAL_HANDLER =
"http://xml.org/sax/properties/lexical-handler";
@@ -902,27 +898,10 @@ protected void configureReader(XMLReader reader, DefaultHandler handler)
SAXHelper.setParserProperty(reader, SAX_DECL_HANDLER, handler);
}
- // configure namespace support
- SAXHelper.setParserFeature(reader, SAX_NAMESPACES, true);
-
- SAXHelper.setParserFeature(reader, SAX_NAMESPACE_PREFIXES, false);
-
// string interning
SAXHelper.setParserFeature(reader, SAX_STRING_INTERNING,
isStringInternEnabled());
- // external entites
- /*
- * SAXHelper.setParserFeature( reader,
- * "http://xml.org/sax/properties/external-general-entities",
- * includeExternalGeneralEntities ); SAXHelper.setParserFeature( reader,
- * "http://xml.org/sax/properties/external-parameter-entities",
- * includeExternalParameterEntities );
- */
- // use Locator2 if possible
- SAXHelper.setParserFeature(reader,
- "http://xml.org/sax/features/use-locator2", true);
-
try {
// configure validation support
reader.setFeature("http://xml.org/sax/features/validation",
diff --git a/src/test/java/org/dom4j/io/DTDTest.java b/src/test/java/org/dom4j/io/DTDTest.java
index ff77e4be..1c432328 100644
--- a/src/test/java/org/dom4j/io/DTDTest.java
+++ b/src/test/java/org/dom4j/io/DTDTest.java
@@ -445,6 +445,8 @@ protected Document readDocument(String resourceName,
reader.setEntityResolver(new MyEntityResolver(DTD_FILE,
DTD_PUBLICID, DTD_SYSTEM_ID));
+ reader.setFeature("http://apache.org/xml/features/nonvalidating/load-external-dtd", true);
+
return getDocument(resourceName, reader);
}