diff --git a/jena-arq/src/main/java/org/apache/jena/riot/system/RiotLib.java b/jena-arq/src/main/java/org/apache/jena/riot/system/RiotLib.java index f1ffae09c6a..2e0e7ee9def 100644 --- a/jena-arq/src/main/java/org/apache/jena/riot/system/RiotLib.java +++ b/jena-arq/src/main/java/org/apache/jena/riot/system/RiotLib.java @@ -22,7 +22,6 @@ import static org.apache.jena.riot.RDFLanguages.NTRIPLES; import static org.apache.jena.riot.RDFLanguages.RDFJSON; import static org.apache.jena.riot.RDFLanguages.sameLang; -import static org.apache.jena.riot.writer.WriterConst.PREFIX_IRI; import java.io.OutputStream; import java.io.Writer; @@ -296,7 +295,7 @@ public static void writeBase(IndentedWriter out, String base, boolean newStyle) private static void writeBaseNewStyle(IndentedWriter out, String base) { if (base != null) { out.print("BASE "); - out.pad(PREFIX_IRI); + out.pad(7); // Align to possible prefixes. 7 is the length of "prefix " out.print("<"); out.print(base); out.print(">"); @@ -307,7 +306,7 @@ private static void writeBaseNewStyle(IndentedWriter out, String base) { private static void writeBaseOldStyle(IndentedWriter out, String base) { if (base != null) { out.print("@base "); - out.pad(PREFIX_IRI); + out.pad(8); // Align to possible prefixes. 8 is the length of "@prefix " out.print("<"); out.print(base); out.print(">"); @@ -348,11 +347,11 @@ public static void writePrefix(IndentedWriter out, String prefix, String uri, bo writePrefix(out, prefix, uri, newStyle, 0); } - private static void writePrefix(IndentedWriter out, String prefix, String uri, boolean newStyle, int maxPrefixLenght) { + private static void writePrefix(IndentedWriter out, String prefix, String uri, boolean newStyle, int maxPrefixLength) { if (newStyle) - writePrefixNewStyle(out, prefix, uri, maxPrefixLenght); + writePrefixNewStyle(out, prefix, uri, maxPrefixLength); else - writePrefixOldStyle(out, prefix, uri, maxPrefixLenght); + writePrefixOldStyle(out, prefix, uri, maxPrefixLength); } /** @@ -362,7 +361,7 @@ private static void writePrefixNewStyle(IndentedWriter out, String prefix, Strin out.print("PREFIX "); out.print(prefix); out.print(": "); - out.pad(9 + intent); // 9 e.q. length of "PREFIX" plus ": " + out.pad(9 + intent); // 9 is length of "PREFIX : " out.print("<"); out.print(uri); out.print(">"); @@ -376,7 +375,7 @@ private static void writePrefixOldStyle(IndentedWriter out, String prefix, Strin out.print("@prefix "); out.print(prefix); out.print(": "); - out.pad(10 + intent); // 10 e.q. length of "@prefix" plus ": " + out.pad(10 + intent); // 10 is length of "@prefix : " out.print("<"); out.print(uri); out.print(">"); diff --git a/jena-core/src/main/java/org/apache/jena/util/JenaXMLInput.java b/jena-core/src/main/java/org/apache/jena/util/JenaXMLInput.java index 6d7f57912c2..4020aae04ac 100644 --- a/jena-core/src/main/java/org/apache/jena/util/JenaXMLInput.java +++ b/jena-core/src/main/java/org/apache/jena/util/JenaXMLInput.java @@ -38,8 +38,10 @@ * Create XML input methods. *
* External DTD and entity processing is disabled to prevent
- * XXE Processing
- * problems.
+ *
+ * XXE Processing Problems
+ *
+ * XML External Entity Prevention Cheat Sheet
*/
public class JenaXMLInput {
@@ -72,6 +74,12 @@ public static XMLReader createXMLReader() throws ParserConfigurationException, S
* Initialize an XMLInputFactory to jena settings.
*/
public static void initXMLInputFactory(XMLInputFactory xf) {
+
+ String name = xf.getClass().getName();
+ boolean isWoodstox = name.startsWith("com.ctc.wstx.stax.");
+ boolean isJDK = name.contains("sun.xml.internal");
+ boolean isXerces = name.startsWith("org.apache.xerces");
+
// This disables DTDs entirely for the factory.
// All DTDs are silently ignored; takes precedence over ACCESS_EXTERNAL_DTD
setXMLInputFactoryProperty(xf, XMLInputFactory.SUPPORT_DTD, Boolean.FALSE);
@@ -79,8 +87,10 @@ public static void initXMLInputFactory(XMLInputFactory xf) {
// disable external entities (silently ignore)
setXMLInputFactoryProperty(xf, XMLInputFactory.IS_SUPPORTING_EXTERNAL_ENTITIES, Boolean.FALSE);
+ // Not supported by Woodstox. IS_SUPPORTING_EXTERNAL_ENTITIES = false is enough.
// Disable external DTDs (files and HTTP) - errors unless SUPPORT_DTD is false.
- setXMLInputFactoryProperty(xf, XMLConstants.ACCESS_EXTERNAL_DTD, "");
+ if ( ! isWoodstox )
+ setXMLInputFactoryProperty(xf, XMLConstants.ACCESS_EXTERNAL_DTD, "");
}
/**