javadoc and spotbugs warnings,
turn javadoc warnings into errors,
remove obsolete code,
update build plugins

Signed-off-by: Lukas Jungmann <lukas.jungmann@oracle.com>
diff --git a/api/pom.xml b/api/pom.xml
index b7b1bc6..d33f2ed 100644
--- a/api/pom.xml
+++ b/api/pom.xml
@@ -67,6 +67,9 @@
                 <plugin>
                     <artifactId>maven-javadoc-plugin</artifactId>
                     <configuration>
+                        <failOnWarnings>true</failOnWarnings>
+                        <doclint>all,-missing</doclint>
+                        <quiet>true</quiet>
                         <nodeprecated>false</nodeprecated>
                         <notimestamp>true</notimestamp>
                         <nosince>true</nosince>
@@ -173,6 +176,7 @@
                 <configuration>
                     <compilerArgs>
                         <arg>-Xlint:all</arg>
+                        <arg>-Xdoclint:all,-missing</arg>
                     </compilerArgs>
                     <showDeprecation>true</showDeprecation>
                     <showWarnings>true</showWarnings>
diff --git a/api/src/main/java/jakarta/xml/bind/Binder.java b/api/src/main/java/jakarta/xml/bind/Binder.java
index 372a6aa..acf2a17 100644
--- a/api/src/main/java/jakarta/xml/bind/Binder.java
+++ b/api/src/main/java/jakarta/xml/bind/Binder.java
@@ -49,7 +49,6 @@
  * A Binder instance is created using the factory method
  * {@link JAXBContext#createBinder()} or {@link JAXBContext#createBinder(Class)}.
  *
- * <p>
  * @param <XmlNode> the template parameter, <code>XmlNode</code>, is the
  * root interface/class for the XML infoset preserving representation.
  * A Binder implementation is required to minimally support
diff --git a/api/src/main/java/jakarta/xml/bind/ContextFinder.java b/api/src/main/java/jakarta/xml/bind/ContextFinder.java
index 6435cd1..727bbb1 100644
--- a/api/src/main/java/jakarta/xml/bind/ContextFinder.java
+++ b/api/src/main/java/jakarta/xml/bind/ContextFinder.java
@@ -367,43 +367,6 @@
         return value;
     }
 
-    private static Properties loadJAXBProperties(URL url) throws JAXBException {
-
-        try {
-            Properties props;
-            logger.log(Level.FINE, "loading props from {0}", url);
-            props = new Properties();
-            InputStream is = url.openStream();
-            props.load(is);
-            is.close();
-            return props;
-        } catch (IOException ioe) {
-            logger.log(Level.FINE, "Unable to load " + url.toString(), ioe);
-            throw new JAXBException(ioe.toString(), ioe);
-        }
-    }
-
-    /**
-     * If run on JPMS package containing resource must be open unconditionally.
-     *
-     * @param classLoader classloader to load resource with
-     * @param resourceName qualified name of the resource
-     * @return resource url if found
-     */
-    private static URL getResourceUrl(ClassLoader classLoader, String resourceName) {
-        URL url;
-        if (classLoader == null)
-            url = ClassLoader.getSystemResource(resourceName);
-        else
-            url = classLoader.getResource(resourceName);
-        return url;
-    }
-
-    private static URL getResourceUrl(Class<?> clazz, String resourceName) {
-        return clazz.getResource(resourceName);
-    }
-
-
     /**
      * Search the given ClassLoader for an instance of the specified class and
      * return a string representation of the URL that points to the resource.
diff --git a/api/src/main/java/jakarta/xml/bind/DatatypeConverterImpl.java b/api/src/main/java/jakarta/xml/bind/DatatypeConverterImpl.java
index c394800..f183823 100644
--- a/api/src/main/java/jakarta/xml/bind/DatatypeConverterImpl.java
+++ b/api/src/main/java/jakarta/xml/bind/DatatypeConverterImpl.java
@@ -75,7 +75,7 @@
     }
 
     /**
-     * Faster but less robust String->int conversion.
+     * Faster but less robust {@code String->int} conversion.
      *
      * Note that:
      * <ol>
diff --git a/api/src/main/java/jakarta/xml/bind/JAXB.java b/api/src/main/java/jakarta/xml/bind/JAXB.java
index b3606fc..7610cba 100644
--- a/api/src/main/java/jakarta/xml/bind/JAXB.java
+++ b/api/src/main/java/jakarta/xml/bind/JAXB.java
@@ -289,7 +289,7 @@
      *      the body. If this object has {@link XmlRootElement}
      *      on its class definition, that will be used as the root tag name
      *      and the given object will provide the body. Otherwise,
-     *      the root tag name is {@link java.beans.Introspector#decapitalize(String) infered} from
+     *      the root tag name is inferred from
      *      {@link Class#getSimpleName() the short class name}.
      *      This parameter must not be null.
      *
@@ -313,7 +313,7 @@
      *      the body. If this object has {@link XmlRootElement}
      *      on its class definition, that will be used as the root tag name
      *      and the given object will provide the body. Otherwise,
-     *      the root tag name is {@link java.beans.Introspector#decapitalize(String) infered} from
+     *      the root tag name is inferred from
      *      {@link Class#getSimpleName() the short class name}.
      *      This parameter must not be null.
      *
@@ -340,7 +340,7 @@
      *      the body. If this object has {@link XmlRootElement}
      *      on its class definition, that will be used as the root tag name
      *      and the given object will provide the body. Otherwise,
-     *      the root tag name is {@link java.beans.Introspector#decapitalize(String) infered} from
+     *      the root tag name is inferred from
      *      {@link Class#getSimpleName() the short class name}.
      *      This parameter must not be null.
      *
@@ -364,7 +364,7 @@
      *      the body. If this object has {@link XmlRootElement}
      *      on its class definition, that will be used as the root tag name
      *      and the given object will provide the body. Otherwise,
-     *      the root tag name is {@link java.beans.Introspector#decapitalize(String) infered} from
+     *      the root tag name is inferred from
      *      {@link Class#getSimpleName() the short class name}.
      *      This parameter must not be null.
      *
@@ -389,7 +389,7 @@
      *      the body. If this object has {@link XmlRootElement}
      *      on its class definition, that will be used as the root tag name
      *      and the given object will provide the body. Otherwise,
-     *      the root tag name is {@link java.beans.Introspector#decapitalize(String) infered} from
+     *      the root tag name is inferred from
      *      {@link Class#getSimpleName() the short class name}.
      *      This parameter must not be null.
      *
@@ -413,7 +413,7 @@
      *      the body. If this object has {@link XmlRootElement}
      *      on its class definition, that will be used as the root tag name
      *      and the given object will provide the body. Otherwise,
-     *      the root tag name is {@link java.beans.Introspector#decapitalize(String) infered} from
+     *      the root tag name is inferred from
      *      {@link Class#getSimpleName() the short class name}.
      *      This parameter must not be null.
      *
@@ -437,7 +437,7 @@
      *      the body. If this object has {@link XmlRootElement}
      *      on its class definition, that will be used as the root tag name
      *      and the given object will provide the body. Otherwise,
-     *      the root tag name is {@link java.beans.Introspector#decapitalize(String) infered} from
+     *      the root tag name is inferred from
      *      {@link Class#getSimpleName() the short class name}.
      *      This parameter must not be null.
      *
@@ -477,14 +477,16 @@
      *      the body. If this object has {@link XmlRootElement}
      *      on its class definition, that will be used as the root tag name
      *      and the given object will provide the body. Otherwise,
-     *      the root tag name is {@link java.beans.Introspector#decapitalize(String) infered} from
+     *      the root tag name is inferred from
      *      {@link Class#getSimpleName() the short class name}.
      *      This parameter must not be null.
      *
      * @param xml
      *      Represents the receiver of XML. Objects of the following types are allowed.
      *
-     *      <table><tr>
+     *      <table>
+     *          <caption>Allowed Objects</caption>
+     *      <tr>
      *          <th>Type</th>
      *          <th>Operation</th>
      *      </tr><tr>
@@ -552,14 +554,14 @@
         // XXX - behaviour of this method must be same as of Introspector.decapitalize
         // which is not used to avoid dependency on java.desktop
         String simpleName = clazz.getSimpleName();
-        if (simpleName == null || simpleName.isEmpty()) {
+        if (simpleName.isEmpty()) {
             return simpleName;
         }
         if (simpleName.length() > 1 && Character.isUpperCase(simpleName.charAt(1))
                 && Character.isUpperCase(simpleName.charAt(0))) {
             return simpleName;
         }
-        char chars[] = simpleName.toCharArray();
+        char[] chars = simpleName.toCharArray();
         chars[0] = Character.toLowerCase(chars[0]);
         return new String(chars);
     }
diff --git a/api/src/main/java/jakarta/xml/bind/JAXBPermission.java b/api/src/main/java/jakarta/xml/bind/JAXBPermission.java
index 7f9c641..170a896 100644
--- a/api/src/main/java/jakarta/xml/bind/JAXBPermission.java
+++ b/api/src/main/java/jakarta/xml/bind/JAXBPermission.java
@@ -48,7 +48,7 @@
  *     Malicious code can set {@link DatatypeConverterInterface}, which has
  *     VM-wide singleton semantics,  before a genuine Jakarta XML Binding implementation sets one.
  *     This allows malicious code to gain access to objects that it may otherwise
- *     not have access to, such as {@link java.awt.Frame#getFrames()} that belongs to
+ *     not have access to, such as {@code java.awt.Frame#getFrames()} that belongs to
  *     another application running in the same JVM.
  *   </td>
  * </tr>
diff --git a/api/src/main/java/jakarta/xml/bind/annotation/XmlInlineBinaryData.java b/api/src/main/java/jakarta/xml/bind/annotation/XmlInlineBinaryData.java
index 2d59db6..2b48235 100644
--- a/api/src/main/java/jakarta/xml/bind/annotation/XmlInlineBinaryData.java
+++ b/api/src/main/java/jakarta/xml/bind/annotation/XmlInlineBinaryData.java
@@ -27,7 +27,7 @@
  *
  * <p>
  * When XOP encoding is enabled as described in {@link AttachmentMarshaller#isXOPPackage()},
- * this annotation disables datatypes such as {@link java.awt.Image} or {@link Source}
+ * this annotation disables datatypes such as {@code java.awt.Image} or {@link Source}
  * or {@code byte[]} that are bound to base64-encoded binary from being considered for
  * XOP encoding. If a Jakarta XML Binding property is annotated with this annotation or if
  * the Jakarta XML Binding property's base type is annotated with this annotation, 
diff --git a/api/src/main/java/jakarta/xml/bind/annotation/XmlMimeType.java b/api/src/main/java/jakarta/xml/bind/annotation/XmlMimeType.java
index e57835e..7f52629 100644
--- a/api/src/main/java/jakarta/xml/bind/annotation/XmlMimeType.java
+++ b/api/src/main/java/jakarta/xml/bind/annotation/XmlMimeType.java
@@ -24,7 +24,7 @@
  *
  * <p>
  * This annotation is used in conjunction with datatypes such as
- * {@link java.awt.Image} or {@link Source} that are bound to base64-encoded binary in XML.
+ * {@code java.awt.Image} or {@link Source} that are bound to base64-encoded binary in XML.
  *
  * <p>
  * If a property that has this annotation has a sibling property bound to
diff --git a/api/src/main/java/jakarta/xml/bind/annotation/adapters/XmlJavaTypeAdapter.java b/api/src/main/java/jakarta/xml/bind/annotation/adapters/XmlJavaTypeAdapter.java
index ade56a4..50a3e08 100644
--- a/api/src/main/java/jakarta/xml/bind/annotation/adapters/XmlJavaTypeAdapter.java
+++ b/api/src/main/java/jakarta/xml/bind/annotation/adapters/XmlJavaTypeAdapter.java
@@ -81,6 +81,7 @@
      * Points to the class that converts a value type to a bound type or vice versa.
      * See {@link XmlAdapter} for more details.
      */
+    @SuppressWarnings({"rawtypes"})
     Class<? extends XmlAdapter> value();
 
     /**
diff --git a/api/src/main/java/jakarta/xml/bind/annotation/package-info.java b/api/src/main/java/jakarta/xml/bind/annotation/package-info.java
index a016cff..903f65d 100644
--- a/api/src/main/java/jakarta/xml/bind/annotation/package-info.java
+++ b/api/src/main/java/jakarta/xml/bind/annotation/package-info.java
@@ -16,7 +16,6 @@
  * <h2>Package Specification</h2>
  * <p>The following table shows the Jakarta XML Binding mapping annotations
  * that can be associated with each program element. </p>
- * <p>
  * <table class="striped">
  *   <caption>Annotations for customizing Java program elements to XML Schema mapping</caption>
  *   <thead>
@@ -143,7 +142,6 @@
  * <b>Namespace prefixes</b>
  * <p>The following namespace prefixes are used in the XML Schema
  * fragments in this package.
- * <p>
  * <table class="striped">
  *   <caption>XML Schema fragments namespace prefixes</caption>
  *   <thead>
diff --git a/api/src/main/java/jakarta/xml/bind/attachment/package-info.java b/api/src/main/java/jakarta/xml/bind/attachment/package-info.java
index c163a2e..e570c53 100644
--- a/api/src/main/java/jakarta/xml/bind/attachment/package-info.java
+++ b/api/src/main/java/jakarta/xml/bind/attachment/package-info.java
@@ -13,7 +13,6 @@
  * enables the interpretation and creation of optimized binary data
  * within an MIME-based package format.
  * <p>
- * <p>
  * Soap MTOM[1], XOP([2][3]) and WS-I AP[4] standardize approaches to
  * optimized transmission of binary datatypes as an attachment.
  * To optimally support these standards within a message passing
@@ -23,13 +22,10 @@
  * References in this document to JAXB refer to the Jakarta XML Binding unless otherwise noted.
  *
  * <h2>Package Specification</h2>
- * <p>
  * <ul>
  * <li><a href="https://projects.eclipse.org/projects/ee4j.jaxb">Jakarta XML Binding Specification project</a>
  * </ul>
- * <p>
  * <h2>Related Standards</h2>
- * <p>
  * <ul>
  * <li><a href="http://www.w3.org/TR/2004/WD-soap12-mtom-20040608/">[1]SOAP Message Transmission Optimization Mechanism</a> </li>
  * <li><a href="http://www.w3.org/TR/2005/REC-xop10-20050125/">[2]XML-binary Optimized Packaging</a></li>
diff --git a/api/src/main/java/jakarta/xml/bind/package-info.java b/api/src/main/java/jakarta/xml/bind/package-info.java
index 36480ae..60ba012 100644
--- a/api/src/main/java/jakarta/xml/bind/package-info.java
+++ b/api/src/main/java/jakarta/xml/bind/package-info.java
@@ -12,21 +12,16 @@
  * Provides a runtime binding framework for client applications including
  * unmarshalling, marshalling, and validation capabilities.
  * <p>
- * <p>
  * <code>JAXBContext</code> is the client-entry point to the runtime binding
  * framework.
  * <p>
- * <p>
  * References in this document to JAXB refer to the Jakarta XML Binding unless otherwise noted.
  *
  * <h2>Package Specification</h2>
- * <p>
  * <ul>
  * <li><a href="https://projects.eclipse.org/projects/ee4j.jaxb">Jakarta XML Binding Specification project</a>
  * </ul>
- * <p>
  * <h2>Related Documentation</h2>
- * <p>
  * For overviews, tutorials, examples, guides, and tool documentation,
  * please see:
  * <ul>
diff --git a/etc/spotbugs-exclude.xml b/etc/spotbugs-exclude.xml
index 5ce58f2..7dfe711 100644
--- a/etc/spotbugs-exclude.xml
+++ b/etc/spotbugs-exclude.xml
@@ -13,6 +13,35 @@
 <FindBugsFilter>
 
     <!--
+    TODO: reevaluate for MR
+    As designed, impossible to change, maybe with MR.
+    -->
+    <Match>
+        <Bug pattern="EI_EXPOSE_REP"/>
+        <Or>
+            <Class name="~.*\.*Exception"/>
+            <Class name="~.*\.W3CDomHandler"/>
+            <Class name="~.*\.ValidationEventImpl"/>
+            <Class name="~.*\.ValidationEventLocatorImpl"/>
+        </Or>
+    </Match>
+
+    <!--
+    TODO: reevaluate for MR
+    As designed, impossible to change, maybe with MR.
+    -->
+    <Match>
+        <Bug pattern="EI_EXPOSE_REP2"/>
+        <Or>
+            <Class name="~.*\.*Exception"/>
+            <Class name="~.*\.W3CDomHandler"/>
+            <Class name="~.*\.ValidationEventImpl"/>
+            <Class name="~.*\.ValidationEventLocatorImpl"/>
+            <Class name="jakarta.xml.bind.util.JAXBSource"/>
+        </Or>
+    </Match>
+
+    <!--
     As designed.
     -->
     <Match>
@@ -29,13 +58,4 @@
         <Bug pattern="PZLA_PREFER_ZERO_LENGTH_ARRAYS"/>
     </Match>
 
-    <!--
-      https://github.com/eclipse-ee4j/jaxb-api/issues/78
-    -->
-    <Match>
-        <Class name="jakarta.xml.bind.ModuleUtil"/>
-        <Bug pattern="DM_STRING_TOSTRING"/>
-    </Match>
-
-
 </FindBugsFilter>
diff --git a/pom.xml b/pom.xml
index 75f1e8d..14171a4 100644
--- a/pom.xml
+++ b/pom.xml
@@ -76,12 +76,12 @@
         <copyright.update>false</copyright.update>
         <spotbugs.skip>false</spotbugs.skip>
         <spotbugs.threshold>Low</spotbugs.threshold>
-        <spotbugs.version>4.3.0</spotbugs.version>
+        <spotbugs.version>4.5.0.0</spotbugs.version>
 
         <maven.compiler.release>11</maven.compiler.release>
 
         <release.spec.feedback>jaxb-dev@eclipse.org</release.spec.feedback>
-        <release.spec.date>Jul 2017</release.spec.date>
+        <release.spec.date>Jan 2022</release.spec.date>
         <api.package>jakarta.xml.bind</api.package>
         <extension.name>jakarta.xml.bind</extension.name>
         <spec.version>4.0</spec.version>
@@ -110,7 +110,7 @@
                 <plugin>
                     <groupId>org.codehaus.mojo</groupId>
                     <artifactId>buildnumber-maven-plugin</artifactId>
-                    <version>1.4</version>
+                    <version>3.0.0</version>
                 </plugin>
                 <plugin>
                     <groupId>org.codehaus.mojo</groupId>
@@ -132,7 +132,7 @@
                 </plugin>
                 <plugin>
                     <artifactId>maven-javadoc-plugin</artifactId>
-                    <version>3.3.0</version>
+                    <version>3.3.1</version>
                 </plugin>
                 <plugin>
                     <artifactId>maven-enforcer-plugin</artifactId>