This is an automated email from the ASF dual-hosted git repository.

michaelo pushed a commit to branch DOXIA-716
in repository https://gitbox.apache.org/repos/asf/maven-doxia.git

commit c8edfefb36b7b4d3639dd3f8cf39db7e8345960a
Author: Michael Osipov <micha...@apache.org>
AuthorDate: Sat Dec 30 13:40:13 2023 +0100

    Make XMLValidator configurable
---
 .../maven/doxia/parser/AbstractXmlParser.java      |  6 ++-
 .../org/apache/maven/doxia/util/XmlValidator.java  | 46 +++++++++++++++++-----
 .../apache/maven/doxia/util/XmlValidatorTest.java  |  3 ++
 3 files changed, 44 insertions(+), 11 deletions(-)

diff --git 
a/doxia-core/src/main/java/org/apache/maven/doxia/parser/AbstractXmlParser.java 
b/doxia-core/src/main/java/org/apache/maven/doxia/parser/AbstractXmlParser.java
index d0d143d6..aa60cb52 100644
--- 
a/doxia-core/src/main/java/org/apache/maven/doxia/parser/AbstractXmlParser.java
+++ 
b/doxia-core/src/main/java/org/apache/maven/doxia/parser/AbstractXmlParser.java
@@ -114,7 +114,11 @@ public abstract class AbstractXmlParser extends 
AbstractParser implements XmlMar
                 throw new ParseException("Error reading the model", e);
             }
 
-            new XmlValidator().validate(content);
+            XmlValidator validator = new XmlValidator();
+            validator.setDefaultHandler(new 
XmlValidator.MessagesErrorHandler());
+            validator.setEntityResolver(new CachedFileEntityResolver());
+
+            validator.validate(content);
 
             src = new StringReader(content);
         }
diff --git 
a/doxia-core/src/main/java/org/apache/maven/doxia/util/XmlValidator.java 
b/doxia-core/src/main/java/org/apache/maven/doxia/util/XmlValidator.java
index 6f3b8dcf..709efc46 100644
--- a/doxia-core/src/main/java/org/apache/maven/doxia/util/XmlValidator.java
+++ b/doxia-core/src/main/java/org/apache/maven/doxia/util/XmlValidator.java
@@ -29,10 +29,10 @@ import java.util.regex.Matcher;
 import java.util.regex.Pattern;
 
 import org.apache.maven.doxia.markup.XmlMarkup;
-import 
org.apache.maven.doxia.parser.AbstractXmlParser.CachedFileEntityResolver;
 import org.apache.maven.doxia.parser.ParseException;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
+import org.xml.sax.EntityResolver;
 import org.xml.sax.InputSource;
 import org.xml.sax.SAXException;
 import org.xml.sax.SAXParseException;
@@ -50,6 +50,34 @@ public class XmlValidator {
     /** lazy xmlReader to validate xml content*/
     private XMLReader xmlReader;
 
+    private boolean validate = true;
+    private DefaultHandler defaultHandler;
+    private EntityResolver entityResolver;
+
+    public boolean isValidate() {
+        return validate;
+    }
+
+    public void setValidate(boolean validate) {
+        this.validate = validate;
+    }
+
+    public DefaultHandler getDefaultHandler() {
+        return defaultHandler;
+    }
+
+    public void setDefaultHandler(DefaultHandler defaultHandler) {
+        this.defaultHandler = defaultHandler;
+    }
+
+    public EntityResolver getEntityResolver() {
+        return entityResolver;
+    }
+
+    public void setEntityResolver(EntityResolver entityResolver) {
+        this.entityResolver = entityResolver;
+    }
+
     /**
      * Validate an XML content with SAX.
      *
@@ -69,7 +97,7 @@ public class XmlValidator {
      * @throws SAXException if any
      * @throws ParserConfigurationException
      */
-    private XMLReader getXmlReader() throws SAXException, 
ParserConfigurationException {
+    public XMLReader getXmlReader() throws SAXException, 
ParserConfigurationException {
         if (xmlReader == null) {
             SAXParserFactory parserFactory = SAXParserFactory.newInstance();
             parserFactory.setNamespaceAware(true);
@@ -80,11 +108,11 @@ public class XmlValidator {
             // Always force language-neutral exception messages for 
MessagesErrorHandler
             parser.setProperty("http://apache.org/xml/properties/locale";, 
Locale.ROOT);
             xmlReader = parser.getXMLReader();
-            xmlReader.setFeature("http://xml.org/sax/features/validation";, 
true);
-            
xmlReader.setFeature("http://apache.org/xml/features/validation/dynamic";, true);
-            
xmlReader.setFeature("http://apache.org/xml/features/validation/schema";, true);
-            xmlReader.setErrorHandler(new MessagesErrorHandler());
-            xmlReader.setEntityResolver(new CachedFileEntityResolver());
+            xmlReader.setFeature("http://xml.org/sax/features/validation";, 
isValidate());
+            
xmlReader.setFeature("http://apache.org/xml/features/validation/dynamic";, 
isValidate());
+            
xmlReader.setFeature("http://apache.org/xml/features/validation/schema";, 
isValidate());
+            xmlReader.setErrorHandler(getDefaultHandler());
+            xmlReader.setEntityResolver(getEntityResolver());
         }
 
         return xmlReader;
@@ -93,7 +121,7 @@ public class XmlValidator {
     /**
      * Convenience class to beautify <code>SAXParseException</code> messages.
      */
-    private static class MessagesErrorHandler extends DefaultHandler {
+    public static class MessagesErrorHandler extends DefaultHandler {
         private static final int TYPE_UNKNOWN = 0;
 
         private static final int TYPE_WARNING = 1;
@@ -108,8 +136,6 @@ public class XmlValidator {
         private static final Pattern ELEMENT_TYPE_PATTERN =
                 Pattern.compile("Element type \".*\" must be declared.", 
Pattern.DOTALL);
 
-        private MessagesErrorHandler() {}
-
         /** {@inheritDoc} */
         @Override
         public void warning(SAXParseException e) throws SAXException {
diff --git 
a/doxia-core/src/test/java/org/apache/maven/doxia/util/XmlValidatorTest.java 
b/doxia-core/src/test/java/org/apache/maven/doxia/util/XmlValidatorTest.java
index 1868ec1a..942d003a 100644
--- a/doxia-core/src/test/java/org/apache/maven/doxia/util/XmlValidatorTest.java
+++ b/doxia-core/src/test/java/org/apache/maven/doxia/util/XmlValidatorTest.java
@@ -19,6 +19,7 @@
 package org.apache.maven.doxia.util;
 
 import org.apache.commons.io.IOUtils;
+import 
org.apache.maven.doxia.parser.AbstractXmlParser.CachedFileEntityResolver;
 import org.codehaus.plexus.testing.PlexusTest;
 import org.codehaus.plexus.util.xml.XmlStreamReader;
 import org.junit.jupiter.api.Test;
@@ -35,6 +36,8 @@ public class XmlValidatorTest {
         String xml = IOUtils.toString(new 
XmlStreamReader(this.getClass().getResourceAsStream("/test.xml")));
 
         XmlValidator validator = new XmlValidator();
+        validator.setDefaultHandler(new XmlValidator.MessagesErrorHandler());
+        validator.setEntityResolver(new CachedFileEntityResolver());
 
         validator.validate(xml);
     }

Reply via email to