aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAndreas Eriksen <andreer@yahooinc.com>2022-08-05 22:15:14 +0200
committerGitHub <noreply@github.com>2022-08-05 22:15:14 +0200
commit866cc9b345768d238f1790b60e052a004e6740bc (patch)
tree3a44d3b595c20b14cbba6fb1dff383e121e794d9
parent1d89c41ce6ecdb56a29317984086740b8ac008d4 (diff)
use namespace unaware parser for bundle validator MERGEOK (#23585)
* use namespace unaware parser for bundle validator * update abi spec
-rw-r--r--config-model/src/main/java/com/yahoo/vespa/model/application/validation/AbstractBundleValidator.java2
-rw-r--r--vespajlib/abi-spec.json2
-rw-r--r--vespajlib/src/main/java/com/yahoo/text/XML.java28
3 files changed, 29 insertions, 3 deletions
diff --git a/config-model/src/main/java/com/yahoo/vespa/model/application/validation/AbstractBundleValidator.java b/config-model/src/main/java/com/yahoo/vespa/model/application/validation/AbstractBundleValidator.java
index b732c7a7e19..ea6a081bf6a 100644
--- a/config-model/src/main/java/com/yahoo/vespa/model/application/validation/AbstractBundleValidator.java
+++ b/config-model/src/main/java/com/yahoo/vespa/model/application/validation/AbstractBundleValidator.java
@@ -102,7 +102,7 @@ public abstract class AbstractBundleValidator extends Validator {
.map(f -> {
try {
String text = new String(jar.getInputStream(f).readAllBytes());
- return XML.getDocumentBuilder()
+ return XML.getDocumentBuilder(false)
.parse(new InputSource(new StringReader(text)));
} catch (SAXException e) {
String message = String.format("Unable to parse pom.xml from %s", filename(jar));
diff --git a/vespajlib/abi-spec.json b/vespajlib/abi-spec.json
index 97eaa1f76f6..fbf1203acdf 100644
--- a/vespajlib/abi-spec.json
+++ b/vespajlib/abi-spec.json
@@ -3358,6 +3358,8 @@
"public static org.w3c.dom.Document getDocument(java.lang.String)",
"public static javax.xml.parsers.DocumentBuilder getDocumentBuilder()",
"public static javax.xml.parsers.DocumentBuilder getDocumentBuilder(java.lang.String, java.lang.ClassLoader)",
+ "public static javax.xml.parsers.DocumentBuilder getDocumentBuilder(boolean)",
+ "public static javax.xml.parsers.DocumentBuilder getDocumentBuilder(java.lang.String, java.lang.ClassLoader, boolean)",
"public static java.util.List getChildren(org.w3c.dom.Element)",
"public static java.util.List getChildren(org.w3c.dom.Element, java.lang.String)",
"public static java.lang.String getValue(org.w3c.dom.Element)",
diff --git a/vespajlib/src/main/java/com/yahoo/text/XML.java b/vespajlib/src/main/java/com/yahoo/text/XML.java
index 6cc042123dc..6aa42773ac0 100644
--- a/vespajlib/src/main/java/com/yahoo/text/XML.java
+++ b/vespajlib/src/main/java/com/yahoo/text/XML.java
@@ -452,7 +452,7 @@ public class XML {
* @throws RuntimeException if we fail to create one
*/
public static DocumentBuilder getDocumentBuilder() {
- return getDocumentBuilder("com.sun.org.apache.xerces.internal.jaxp.DocumentBuilderFactoryImpl", null);
+ return getDocumentBuilder("com.sun.org.apache.xerces.internal.jaxp.DocumentBuilderFactoryImpl", null, true);
}
/**
@@ -464,9 +464,33 @@ public class XML {
* @return a DocumentBuilder
*/
public static DocumentBuilder getDocumentBuilder(String implementation, ClassLoader classLoader) {
+ return getDocumentBuilder(true);
+ }
+
+ /**
+ * Creates a new XML DocumentBuilder
+ *
+ * @return a DocumentBuilder
+ * @throws RuntimeException if we fail to create one
+ * @param namespaceAware Whether the parser should be aware of xml namespaces
+ */
+ public static DocumentBuilder getDocumentBuilder(boolean namespaceAware) {
+ return getDocumentBuilder("com.sun.org.apache.xerces.internal.jaxp.DocumentBuilderFactoryImpl", null, namespaceAware);
+ }
+
+ /**
+ * Creates a new XML DocumentBuilder
+ *
+ * @param implementation which jaxp implementation should be used
+ * @param classLoader which class loader should be used when getting a new DocumentBuilder
+ * @param namespaceAware Whether the parser should be aware of xml namespaces
+ * @throws RuntimeException if we fail to create one
+ * @return a DocumentBuilder
+ */
+ public static DocumentBuilder getDocumentBuilder(String implementation, ClassLoader classLoader, boolean namespaceAware) {
try {
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance(implementation, classLoader);
- factory.setNamespaceAware(true);
+ factory.setNamespaceAware(namespaceAware);
// Disable include directives. If enabled this allows inclusion of any resource, such as file:/// and
// http:///, and these are read even if the document eventually fails to parse
factory.setXIncludeAware(false);