Author: centic
Date: Mon Jan 30 12:19:37 2023
New Revision: 1907108

URL: http://svn.apache.org/viewvc?rev=1907108&view=rev
Log:
Use an error-handler to use logging also for XML parsing errors

Otherwise this output is done to stdout/stderr which we would like to avoid.

Keep the format as one line and do not include a full exception stacktrace
to not introduce lots of exception-stacktraces for some slightly broken input 
files

Modified:
    poi/trunk/poi/src/main/java/org/apache/poi/util/XMLHelper.java

Modified: poi/trunk/poi/src/main/java/org/apache/poi/util/XMLHelper.java
URL: 
http://svn.apache.org/viewvc/poi/trunk/poi/src/main/java/org/apache/poi/util/XMLHelper.java?rev=1907108&r1=1907107&r2=1907108&view=diff
==============================================================================
--- poi/trunk/poi/src/main/java/org/apache/poi/util/XMLHelper.java (original)
+++ poi/trunk/poi/src/main/java/org/apache/poi/util/XMLHelper.java Mon Jan 30 
12:19:37 2023
@@ -47,6 +47,7 @@ import javax.xml.transform.TransformerFa
 import javax.xml.validation.SchemaFactory;
 
 import org.apache.logging.log4j.Level;
+import org.apache.logging.log4j.LogBuilder;
 import org.apache.logging.log4j.LogManager;
 import org.apache.logging.log4j.Logger;
 import org.xml.sax.ErrorHandler;
@@ -139,7 +140,7 @@ public final class XMLHelper {
         try {
             DocumentBuilder documentBuilder = 
documentBuilderFactory.newDocumentBuilder();
             documentBuilder.setEntityResolver(XMLHelper::ignoreEntity);
-            documentBuilder.setErrorHandler(new DocHelperErrorHandler());
+            documentBuilder.setErrorHandler(new DocHelperErrorHandler(true));
             return documentBuilder;
         } catch (ParserConfigurationException e) {
             throw new IllegalStateException("cannot create a DocumentBuilder", 
e);
@@ -176,6 +177,7 @@ public final class XMLHelper {
     public static XMLReader newXMLReader() throws SAXException, 
ParserConfigurationException {
         XMLReader xmlReader = saxFactory.newSAXParser().getXMLReader();
         xmlReader.setEntityResolver(XMLHelper::ignoreEntity);
+        xmlReader.setErrorHandler(new DocHelperErrorHandler(false));
         trySet(xmlReader::setFeature, FEATURE_SECURE_PROCESSING, true);
         trySet(xmlReader::setFeature, FEATURE_EXTERNAL_ENTITIES, false);
         Object manager = getXercesSecurityManager();
@@ -309,6 +311,11 @@ public final class XMLHelper {
     }
 
     private static class DocHelperErrorHandler implements ErrorHandler {
+        private final boolean logException;
+
+        public DocHelperErrorHandler(boolean logException) {
+            this.logException = logException;
+        }
 
         public void warning(SAXParseException exception) {
             printError(Level.WARN, exception);
@@ -339,7 +346,13 @@ public final class XMLHelper {
                     ':' + ex.getColumnNumber() +
                     ':' + ex.getMessage();
 
-            LOG.atLevel(type).withThrowable(ex).log(message);
+            LogBuilder builder = LOG.atLevel(type);
+
+            if (logException) {
+                builder = builder.withThrowable(ex);
+            }
+
+            builder.log(message);
         }
     }
 



---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to