XMLBEANS-551 - use log4j-2 for logging

git-svn-id: https://svn.apache.org/repos/asf/xmlbeans/trunk@1886773 13f79535-47bb-0310-9956-ffa450edef68
diff --git a/build.xml b/build.xml
index 83d817f..50c0df7 100644
--- a/build.xml
+++ b/build.xml
@@ -120,7 +120,7 @@
 
     <!-- dependencies -->
     <dependency prefix="xml-apis" artifact="xml-apis:xml-apis:1.4.01" usage="java8"/>
-    <dependency prefix="slf4j-api" artifact="org.slf4j:slf4j-api:1.7.30" usage="main"/>
+    <dependency prefix="log4j-api" artifact="org.apache.logging.log4j:log4j-api:2.14.0" usage="main"/>
     <dependency prefix="saxon" artifact="net.sf.saxon:Saxon-HE:10.3" usage="main"/>
     <dependency prefix="ant" artifact="org.apache.ant:ant:1.10.8" usage="main"/>
     <dependency prefix="javaparser.core" artifact="com.github.javaparser:javaparser-core:3.18.0" usage="main"/>
@@ -139,7 +139,7 @@
 
     <!-- test dependencies -->
     <dependency prefix="junit" artifact="junit:junit:4.13.1" usage="tests"/>
-    <dependency prefix="slf4j-simple" artifact="org.slf4j:slf4j-simple:1.7.30" usage="tests"/>
+    <dependency prefix="log4j-core" artifact="org.apache.logging.log4j:log4j-core:2.14.0" usage="tests"/>
     <dependency prefix="ant-junit" artifact="org.apache.ant:ant-junit:1.10.8" usage="tests"/>
     <dependency prefix="ant-junit4" artifact="org.apache.ant:ant-junit4:1.10.8" usage="tests"/>
     <dependency prefix="hamcrest" artifact="org.hamcrest:hamcrest:2.2" usage="tests"/>
@@ -153,8 +153,8 @@
         <pathelement location="${ant-junit.jar}"/>
         <pathelement location="${ant-junit4.jar}"/>
         <pathelement location="${saxon.jar}"/>
-        <pathelement location="${slf4j-api.jar}"/>
-        <pathelement location="${slf4j-simple.jar}"/>
+        <pathelement location="${log4j-api.jar}"/>
+        <pathelement location="${log4j-core.jar}"/>
         <pathelement location="test/lib/w3c_domts.jar"/>
         <pathelement location="${junit.jar}"/>
         <pathelement location="${hamcrest.jar}"/>
@@ -184,9 +184,8 @@
         <!-- remove previous versions of third-party jars to prevent them from lingering around,
             we often had hard-to-find build/CI-problems because of these! -->
         <delete dir="compile-lib"/>
-        <delete dir="lib/main" includes="javaparser-core-3.15*.jar"/>
-        <delete dir="lib/main" includes="javaparser-core-3.16*.jar"/>
-        <delete dir="lib/main" includes="Saxon-HE-10.2.jar"/>
+        <delete dir="lib/main" includes="javaparser-core-3.15*.jar,javaparser-core-3.16*.jar,slf4j*.jar,Saxon-HE-10.2.jar"/>
+        <delete dir="lib/tests" includes="slf4j*.jar"/>
         <delete dir="lib/util" includes="forbiddenapis-2.6.jar,apache-rat-0.12.jar"/>
         <condition property="jars.present">
             <or>
@@ -194,8 +193,8 @@
                     <available file="${old.xmlbeans.jar}"/>
                     <available file="${javaparser.core.jar}"/>
                     <available file="${saxon.jar}"/>
-                    <available file="${slf4j-api.jar}"/>
-                    <available file="${slf4j-simple.jar}"/>
+                    <available file="${log4j-api.jar}"/>
+                    <available file="${log4j-core.jar}"/>
                     <available file="${junit.jar}"/>
                     <available file="${hamcrest.jar}"/>
                     <available file="${xerces.jar}"/>
@@ -225,8 +224,8 @@
         <downloadfile dest="${old.xmlbeans.jar}" src="${old.xmlbeans.url}"/>
         <downloadfile dest="${javaparser.core.jar}" src="${javaparser.core.url}"/>
         <downloadfile dest="${saxon.jar}" src="${saxon.url}"/>
-        <downloadfile dest="${slf4j-api.jar}" src="${slf4j-api.url}"/>
-        <downloadfile dest="${slf4j-simple.jar}" src="${slf4j-simple.url}"/>
+        <downloadfile dest="${log4j-api.jar}" src="${log4j-api.url}"/>
+        <downloadfile dest="${log4j-core.jar}" src="${log4j-core.url}"/>
         <downloadfile dest="${junit.jar}" src="${junit.url}"/>
         <downloadfile dest="${hamcrest.jar}" src="${hamcrest.url}"/>
         <downloadfile dest="${xerces.jar}" src="${xerces.url}"/>
@@ -359,7 +358,7 @@
                 <pathelement location="${ant-junit.jar}"/>
                 <pathelement location="${ant-junit4.jar}"/>
                 <pathelement location="${saxon.jar}"/>
-                <pathelement location="${slf4j-api.jar}"/>
+                <pathelement location="${log4j-api.jar}"/>
                 <pathelement location="${javaparser.core.jar}"/>
             </classpath>
         </javac>
@@ -374,7 +373,8 @@
 
         <!-- now generate new xmlbeans re-/sources and remove the traces of the oldxbean generated re-/sources -->
         <path id="oldschemas">
-            <pathelement location="${slf4j-api.jar}"/>
+            <pathelement location="${log4j-api.jar}"/>
+            <pathelement location="${log4j-core.jar}"/>
             <pathelement location="${ant.jar}"/>
             <pathelement location="${ant-junit.jar}"/>
             <pathelement location="${ant-junit4.jar}"/>
@@ -402,7 +402,7 @@
                source="${jdk.version.source}">
             <src refid="sources"/>
             <classpath path="${saxon.jar}"/>
-            <classpath path="${slf4j-api.jar}"/>
+            <classpath path="${log4j-api.jar}"/>
             <classpath path="${javaparser.core.jar}"/>
             <classpath path="${ant.jar}"/>
         </javac>
@@ -718,10 +718,10 @@
                 <include name="xmlbeans-${version.base}-sources.jar"/>
             </zipfileset>
             <zipfileset dir="lib/main" prefix="${prefix}/lib">
-                <include name="slf4j-*.jar"/>
+                <include name="log4j-*.jar"/>
             </zipfileset>
             <zipfileset dir="lib/tests" prefix="${prefix}/lib">
-                <include name="slf4j-*.jar"/>
+                <include name="log4j-*.jar"/>
             </zipfileset>
         </zip>
         <tar destfile="build/xmlbeans-bin-${version.base}-${tstamp.dist}.tgz" compression="gzip" longfile="posix">
@@ -738,10 +738,10 @@
                 <include name="xmlbeans-${version.base}-sources.jar"/>
             </tarfileset>
             <tarfileset dir="lib/main" prefix="${prefix}/lib">
-                <include name="slf4j-*.jar"/>
+                <include name="log4j-*.jar"/>
             </tarfileset>
             <tarfileset dir="lib/tests" prefix="${prefix}/lib">
-                <include name="slf4j-*.jar"/>
+                <include name="log4j-*.jar"/>
             </tarfileset>
         </tar>
 
diff --git a/src/main/java/org/apache/xmlbeans/impl/common/DocumentHelper.java b/src/main/java/org/apache/xmlbeans/impl/common/DocumentHelper.java
index f1b3e77..7e12d26 100644
--- a/src/main/java/org/apache/xmlbeans/impl/common/DocumentHelper.java
+++ b/src/main/java/org/apache/xmlbeans/impl/common/DocumentHelper.java
@@ -15,9 +15,9 @@
 
 package org.apache.xmlbeans.impl.common;
 
+import org.apache.logging.log4j.LogManager;
+import org.apache.logging.log4j.Logger;
 import org.apache.xmlbeans.XmlOptionsBean;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
 import org.w3c.dom.Document;
 import org.xml.sax.ErrorHandler;
 import org.xml.sax.InputSource;
@@ -34,7 +34,7 @@
 import java.util.concurrent.TimeUnit;
 
 public final class DocumentHelper {
-    private static final Logger logger = LoggerFactory.getLogger(DocumentHelper.class);
+    private static final Logger LOG = LogManager.getLogger(DocumentHelper.class);
     private static long lastLog;
 
     private DocumentHelper() {}
@@ -42,15 +42,15 @@
     private static class DocHelperErrorHandler implements ErrorHandler {
 
         public void warning(SAXParseException exception) throws SAXException {
-            logger.warn(asString(exception), exception);
+            LOG.atWarn().withThrowable(exception).log(asString(exception));
         }
 
         public void error(SAXParseException exception) throws SAXException {
-            logger.error(asString(exception), exception);
+            LOG.atError().withThrowable(exception).log(asString(exception));
         }
 
         public void fatalError(SAXParseException exception) throws SAXException {
-            logger.error(asString(exception), exception);
+            LOG.atFatal().withThrowable(exception).log(asString(exception));
             throw exception;
         }
 
@@ -93,7 +93,7 @@
         }
     }
 
-    private static final DocumentBuilderFactory documentBuilderFactory(XmlOptionsBean options) {
+    private static DocumentBuilderFactory documentBuilderFactory(XmlOptionsBean options) {
         DocumentBuilderFactory documentBuilderFactory = DocumentBuilderFactory.newInstance();
         documentBuilderFactory.setNamespaceAware(true);
         documentBuilderFactory.setValidating(false);
@@ -108,9 +108,9 @@
         try {
             dbf.setFeature(feature, enabled);
         } catch (Exception e) {
-            logger.warn("SAX Feature unsupported: {}", feature, e);
+            LOG.atWarn().withThrowable(e).log("SAX Feature unsupported: {}", feature);
         } catch (AbstractMethodError ame) {
-            logger.warn("Cannot set SAX feature {} because of outdated XML parser in classpath", feature, ame);
+            LOG.atWarn().withThrowable(ame).log("Cannot set SAX feature {} because of outdated XML parser in classpath", feature);
         }
     }
 
@@ -131,7 +131,7 @@
                 // continue without log, this is expected in some setups
             } catch (Throwable e) {     // NOSONAR - also catch things like NoClassDefError here
                 if(System.currentTimeMillis() > lastLog + TimeUnit.MINUTES.toMillis(5)) {
-                    logger.warn("DocumentBuilderFactory Security Manager could not be setup [log suppressed for 5 minutes]", e);
+                    LOG.atWarn().withThrowable(e).log("DocumentBuilderFactory Security Manager could not be setup [log suppressed for 5 minutes]");
                     lastLog = System.currentTimeMillis();
                 }
             }
@@ -142,7 +142,7 @@
             dbf.setAttribute(XMLBeansConstants.ENTITY_EXPANSION_LIMIT, options.getEntityExpansionLimit());
         } catch (Throwable e) {
             if(System.currentTimeMillis() > lastLog + TimeUnit.MINUTES.toMillis(5)) {
-                logger.warn("DocumentBuilderFactory Entity Expansion Limit could not be setup [log suppressed for 5 minutes]", e);
+                LOG.atWarn().withThrowable(e).log("DocumentBuilderFactory Entity Expansion Limit could not be setup [log suppressed for 5 minutes]");
                 lastLog = System.currentTimeMillis();
             }
         }
diff --git a/src/main/java/org/apache/xmlbeans/impl/common/SAXHelper.java b/src/main/java/org/apache/xmlbeans/impl/common/SAXHelper.java
index cb24942..f99f69f 100644
--- a/src/main/java/org/apache/xmlbeans/impl/common/SAXHelper.java
+++ b/src/main/java/org/apache/xmlbeans/impl/common/SAXHelper.java
@@ -15,10 +15,10 @@
 
 package org.apache.xmlbeans.impl.common;
 
+import org.apache.logging.log4j.LogManager;
+import org.apache.logging.log4j.Logger;
 import org.apache.xmlbeans.XmlOptions;
 import org.apache.xmlbeans.XmlOptionsBean;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
 import org.xml.sax.EntityResolver;
 import org.xml.sax.InputSource;
 import org.xml.sax.SAXException;
@@ -36,7 +36,7 @@
  * Provides handy methods for working with SAX parsers and readers
  */
 public final class SAXHelper {
-    private static final Logger logger = LoggerFactory.getLogger(SAXHelper.class);
+    private static final Logger LOG = LogManager.getLogger(SAXHelper.class);
     private static long lastLog;
 
     private SAXHelper() {
@@ -79,9 +79,9 @@
         try {
             spf.setFeature(feature, flag);
         } catch (Exception e) {
-            logger.warn("SAX Feature unsupported: {}", feature, e);
+            LOG.atWarn().withThrowable(e).log("SAX Feature unsupported: {}", feature);
         } catch (AbstractMethodError ame) {
-            logger.warn("Cannot set SAX feature {} because outdated XML parser in classpath", feature, ame);
+            LOG.atWarn().withThrowable(ame).log("Cannot set SAX feature {} because outdated XML parser in classpath", feature);
         }
     }
 
@@ -89,9 +89,9 @@
         try {
             xmlReader.setFeature(feature, true);
         } catch (Exception e) {
-            logger.warn("SAX Feature unsupported: {}", feature, e);
+            LOG.atWarn().withThrowable(e).log("SAX Feature unsupported: {}", feature);
         } catch (AbstractMethodError ame) {
-            logger.warn("Cannot set SAX feature {} because outdated XML parser in classpath", feature, ame);
+            LOG.atWarn().withThrowable(ame).log("Cannot set SAX feature {} because outdated XML parser in classpath", feature);
         }
     }
 
@@ -111,7 +111,7 @@
             } catch (Throwable e) {     // NOSONAR - also catch things like NoClassDefError here
                 // throttle the log somewhat as it can spam the log otherwise
                 if (System.currentTimeMillis() > lastLog + TimeUnit.MINUTES.toMillis(5)) {
-                    logger.warn("SAX Security Manager could not be setup [log suppressed for 5 minutes]", e);
+                    LOG.atWarn().withThrowable(e).log("SAX Security Manager could not be setup [log suppressed for 5 minutes]");
                     lastLog = System.currentTimeMillis();
                 }
             }
@@ -123,7 +123,7 @@
         } catch (SAXException e) {     // NOSONAR - also catch things like NoClassDefError here
             // throttle the log somewhat as it can spam the log otherwise
             if (System.currentTimeMillis() > lastLog + TimeUnit.MINUTES.toMillis(5)) {
-                logger.warn("SAX Security Manager could not be setup [log suppressed for 5 minutes]", e);
+                LOG.atWarn().withThrowable(e).log("SAX Security Manager could not be setup [log suppressed for 5 minutes]");
                 lastLog = System.currentTimeMillis();
             }
         }
diff --git a/src/main/java/org/apache/xmlbeans/impl/common/StaxHelper.java b/src/main/java/org/apache/xmlbeans/impl/common/StaxHelper.java
index 59cebaa..207e8cd 100644
--- a/src/main/java/org/apache/xmlbeans/impl/common/StaxHelper.java
+++ b/src/main/java/org/apache/xmlbeans/impl/common/StaxHelper.java
@@ -15,19 +15,19 @@
 
 package org.apache.xmlbeans.impl.common;
 
+import org.apache.logging.log4j.LogManager;
+import org.apache.logging.log4j.Logger;
+import org.apache.xmlbeans.XmlOptionsBean;
+
 import javax.xml.stream.XMLEventFactory;
 import javax.xml.stream.XMLInputFactory;
 import javax.xml.stream.XMLOutputFactory;
 
-import org.apache.xmlbeans.XmlOptionsBean;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
 /**
  * Provides handy methods for working with StAX parsers and readers
  */
 public final class StaxHelper {
-    private static final Logger logger = LoggerFactory.getLogger(StaxHelper.class);
+    private static final Logger LOG = LogManager.getLogger(StaxHelper.class);
 
     private StaxHelper() {}
 
@@ -58,14 +58,14 @@
     public static XMLEventFactory newXMLEventFactory(XmlOptionsBean options) {
         return XMLEventFactory.newFactory();
     }
-            
+
     private static void trySetProperty(XMLInputFactory factory, String feature, boolean flag) {
         try {
             factory.setProperty(feature, flag);
         } catch (Exception e) {
-            logger.warn("StAX Property unsupported: {}", feature, e);
+            LOG.atWarn().withThrowable(e).log("StAX Property unsupported: {}", feature);
         } catch (AbstractMethodError ame) {
-            logger.warn("Cannot set StAX property {} because outdated StAX parser in classpath", feature, ame);
+            LOG.atWarn().withThrowable(ame).log("Cannot set StAX property {} because outdated StAX parser in classpath", feature);
         }
     }
 
@@ -73,9 +73,9 @@
         try {
             factory.setProperty(feature, flag);
         } catch (Exception e) {
-            logger.warn("StAX Property unsupported: {}", feature, e);
+            LOG.atWarn().withThrowable(e).log("StAX Property unsupported: {}", feature);
         } catch (AbstractMethodError ame) {
-            logger.warn("Cannot set StAX property {} because outdated StAX parser in classpath", feature, ame);
+            LOG.atWarn().withThrowable(ame).log("Cannot set StAX property {} because outdated StAX parser in classpath", feature);
         }
     }
 }
diff --git a/src/main/java/org/apache/xmlbeans/impl/store/Locale.java b/src/main/java/org/apache/xmlbeans/impl/store/Locale.java
index 58529a0..9d9ace7 100755
--- a/src/main/java/org/apache/xmlbeans/impl/store/Locale.java
+++ b/src/main/java/org/apache/xmlbeans/impl/store/Locale.java
@@ -15,14 +15,17 @@
 
 package org.apache.xmlbeans.impl.store;
 
+import org.apache.logging.log4j.LogManager;
+import org.apache.logging.log4j.Logger;
 import org.apache.xmlbeans.*;
 import org.apache.xmlbeans.XmlCursor.XmlBookmark;
-import org.apache.xmlbeans.impl.common.*;
+import org.apache.xmlbeans.impl.common.QNameHelper;
+import org.apache.xmlbeans.impl.common.ResolverUtil;
+import org.apache.xmlbeans.impl.common.SAXHelper;
+import org.apache.xmlbeans.impl.common.XmlLocale;
 import org.apache.xmlbeans.impl.store.Cur.Locations;
 import org.apache.xmlbeans.impl.store.DomImpl.Dom;
 import org.apache.xmlbeans.impl.store.Saaj.SaajCallback;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
 import org.w3c.dom.*;
 import org.xml.sax.*;
 import org.xml.sax.ext.DeclHandler;
@@ -46,7 +49,7 @@
 
 public final class Locale
     implements DOMImplementation, SaajCallback, XmlLocale {
-    private static final Logger logger = LoggerFactory.getLogger(Locale.class);
+    private static final Logger LOG = LogManager.getLogger(Locale.class);
 
     static final int ROOT = Cur.ROOT;
     static final int ELEM = Cur.ELEM;
@@ -1914,7 +1917,7 @@
 
 
         // the "better" cache should never walk more than 1/2 len
-        Dom x = null;
+        Dom x;
         boolean bInvalidate = (db - _domNthCache_B._len / 2 > 0) &&
                               (db - _domNthCache_B._len / 2 - domNthCache.BLITZ_BOUNDARY > 0);
         boolean aInvalidate = (da - _domNthCache_A._len / 2 > 0) &&
@@ -2003,7 +2006,7 @@
             }
 
             if (_len == -1) {
-                Dom x = null;
+                Dom x;
 
                 if (_child != null && _n != -1) {
                     x = _child;
@@ -2294,7 +2297,7 @@
         return !_noSync;
     }
 
-    static final boolean isWhiteSpace(String s) {
+    static boolean isWhiteSpace(String s) {
         int l = s.length();
 
         while (l-- > 0) {
@@ -2306,7 +2309,7 @@
         return true;
     }
 
-    static final boolean isWhiteSpace(StringBuffer sb) {
+    static boolean isWhiteSpace(StringBuffer sb) {
         int l = sb.length();
 
         while (l-- > 0) {
@@ -2616,7 +2619,7 @@
             }
         }
 
-        public void characters(char ch[], int start, int length)
+        public void characters(char[] ch, int start, int length)
             throws SAXException {
             _context.text(ch, start, length);
 
@@ -2634,11 +2637,11 @@
             }
         }
 
-        public void ignorableWhitespace(char ch[], int start, int length)
+        public void ignorableWhitespace(char[] ch, int start, int length)
             throws SAXException {
         }
 
-        public void comment(char ch[], int start, int length)
+        public void comment(char[] ch, int start, int length)
             throws SAXException {
             _context.comment(ch, start, length);
         }
@@ -2759,7 +2762,7 @@
             try {
                 _xr.setProperty("http://xml.org/sax/properties/declaration-handler", this);
             } catch (Throwable e) {
-                logger.warn("SAX Declaration Handler is not supported", e);
+                LOG.atWarn().withThrowable(e).log("SAX Declaration Handler is not supported");
             }
         }
 
@@ -2830,7 +2833,7 @@
             throw e;
         }
 
-        private XMLReader _xr;
+        private final XMLReader _xr;
     }
 
     private Dom load(InputSource is, XmlOptions options)
@@ -2974,7 +2977,7 @@
 
     private static final class DefaultQNameFactory
         implements QNameFactory {
-        private QNameCache _cache = XmlBeans.getQNameCache();
+        private final QNameCache _cache = XmlBeans.getQNameCache();
 
         public QName getQName(String uri, String local) {
             return _cache.getName(uri, local, "");
@@ -3005,7 +3008,7 @@
 
     private static final class LocalDocumentQNameFactory
         implements QNameFactory {
-        private QNameCache _cache = new QNameCache(32);
+        private final QNameCache _cache = new QNameCache(32);
 
         public QName getQName(String uri, String local) {
             return _cache.getName(uri, local, "");
diff --git a/src/main/multimodule/java9/module-info.class b/src/main/multimodule/java9/module-info.class
index 836fbf5..e794481 100644
--- a/src/main/multimodule/java9/module-info.class
+++ b/src/main/multimodule/java9/module-info.class
Binary files differ
diff --git a/src/main/multimodule/java9/module-info.java b/src/main/multimodule/java9/module-info.java
index 6c9bc1f..fb91d07 100644
--- a/src/main/multimodule/java9/module-info.java
+++ b/src/main/multimodule/java9/module-info.java
@@ -18,7 +18,7 @@
 module org.apache.xmlbeans {
     requires java.xml;
     requires jdk.xml.dom;
-    requires org.slf4j;
+    requires org.apache.logging.log4j;
     requires static ant;
     requires static com.github.javaparser.core;
     requires static Saxon.HE;
diff --git a/src/main/resources/maven/pom.xml b/src/main/resources/maven/pom.xml
index 77bee6f..eab851b 100644
--- a/src/main/resources/maven/pom.xml
+++ b/src/main/resources/maven/pom.xml
@@ -78,9 +78,15 @@
 
     <dependencies>
         <dependency>
-            <groupId>org.slf4j</groupId>
-            <artifactId>slf4j-api</artifactId>
-            <version>1.7.30</version>
+            <groupId>org.apache.logging.log4j</groupId>
+            <artifactId>log4j-api</artifactId>
+            <version>2.14.0</version>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.logging.log4j</groupId>
+            <artifactId>log4j-core</artifactId>
+            <version>2.14.0</version>
+            <scope>provided</scope>
         </dependency>
         <dependency>
             <groupId>net.sf.saxon</groupId>