You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@tomcat.apache.org by ma...@apache.org on 2019/09/09 11:18:13 UTC

[tomcat] branch 7.0.x updated: Fix Javadoc issues preventing release builds with newer Java versions

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

markt pushed a commit to branch 7.0.x
in repository https://gitbox.apache.org/repos/asf/tomcat.git


The following commit(s) were added to refs/heads/7.0.x by this push:
     new 2efd3a6  Fix Javadoc issues preventing release builds with newer Java versions
2efd3a6 is described below

commit 2efd3a65929374bc9e22fc7902de1ed4af695cc5
Author: Mark Thomas <ma...@apache.org>
AuthorDate: Fri Sep 6 16:21:18 2019 +0100

    Fix Javadoc issues preventing release builds with newer Java versions
    
    Enable release builds to be built with Java 10 onwards.
---
 build.properties.default                           | 11 +++
 build.xml                                          | 58 +++++++++++----
 java/javax/servlet/jsp/tagext/VariableInfo.java    | 56 +++++++--------
 .../org/apache/catalina/filters/ExpiresFilter.java | 30 ++++----
 java/org/apache/catalina/tribes/package.html       |  4 +-
 java/org/apache/juli/logging/package.html          |  2 +-
 java/org/apache/tomcat/util/buf/package.html       |  2 +-
 .../tomcat/util/digester/SetPropertiesRule.java    |  4 +-
 java/org/apache/tomcat/util/digester/package.html  | 84 +++++++++-------------
 java/org/apache/tomcat/util/modeler/package.html   |  8 +--
 java/org/apache/tomcat/util/net/NioChannel.java    | 10 +--
 webapps/docs/changelog.xml                         |  5 ++
 12 files changed, 152 insertions(+), 122 deletions(-)

diff --git a/build.properties.default b/build.properties.default
index 66ab7f5..f620925 100644
--- a/build.properties.default
+++ b/build.properties.default
@@ -306,3 +306,14 @@ cobertura.checksum.value=63a8c5b3f5c1226fcc52cc9c9ea2a812|705d23e5a8815aff3bc4ad
 cobertura.home=${base.path}/cobertura-${cobertura.version}
 cobertura.jar=${cobertura.home}/cobertura-${cobertura.version}.jar
 cobertura.loc=${base-sf.loc}/cobertura/cobertura-${cobertura.version}-bin.tar.gz
+
+# ----- SAAJ API, used by Code Signing for releases -----
+# ----- No longer part of JRE from Java 11 onwards  -----
+# ----- CDDL Licensed                               -----
+saaj-api.version=1.3.5
+saaj-api.checksum.enabled=true
+saaj-api.checksum.algorithm=MD5|SHA-1
+saaj-api.checksum.value=caae8b4bf2c551155815331e9e96256f|1c399a7fea4d0262a6a39750e419c24f0c769586
+saaj-api.home=${base.path}/saaj-api-${saaj-api.version}
+saaj-api.jar=${saaj-api.home}/saaj-api-${saaj-api.version}.jar
+saaj-api.loc=${base-maven.loc}/javax/xml/soap/saaj-api/${saaj-api.version}/saaj-api-${saaj-api.version}.jar
diff --git a/build.xml b/build.xml
index 43eab71..c2dc4e2 100644
--- a/build.xml
+++ b/build.xml
@@ -28,10 +28,10 @@
   <!-- is part of the original project source code.                          -->
   <!-- See "build.properties.default" in the top level directory for some    -->
   <!-- property values you may customize.                                    -->
+  <property environment="env"/>
   <property file="${user.home}/build.properties"/>
   <property file="build.properties"/>
   <property file="build.properties.default"/>
-  <property environment="env"/>
 
   <!-- Project Name -->
   <property name="project"               value="apache-tomcat" />
@@ -84,6 +84,10 @@
   <property name="compile.source" value="1.6"/>
   <property name="compile.target" value="1.6"/>
 
+  <!-- Expose commons-logging defaults so they can be orver-ridden -->
+  <property name="logging.compile.source" value="1.2" />
+  <property name="logging.compile.target" value="1.1" />
+
   <!-- Locations to create the JAR artifacts -->
   <!-- Standard JARs -->
   <property name="bootstrap.jar" value="${tomcat.build}/bin/bootstrap.jar"/>
@@ -194,9 +198,16 @@
   <defaultexcludes remove="**/.gitignore" />
   <!--<defaultexcludes echo="true" />-->
 
+  <!-- Java 9 -->
+  <available classname="java.lang.reflect.InaccessibleObjectException"
+             property="java9.javadoc.options"
+             value="-html5"/>
+  <property name="java9.javadoc.options" value=""/>
+
   <!-- Classpaths -->
   <path id="compile.classpath">
     <pathelement location="${jdt.jar}"/>
+    <pathelement location="${saaj-api.jar}"/>
   </path>
 
   <path id="tomcat.classpath">
@@ -573,7 +584,6 @@
         <!-- Exclude simple test files -->
         <exclude name="test/webapp/bug53257/**/*.txt"/>
         <exclude name="test/webapp-fragments/WEB-INF/classes/*.txt"/>
-        <!-- Exclude developer specific local files -->
         <exclude name="build.properties" />
         <exclude name="res/maven/mvn.properties" />
       </fileset>
@@ -581,6 +591,8 @@
         <exclude name=".*/**"/>
         <exclude name="**/MANIFEST.MF"/>
         <patternset refid="text.files" />
+        <!-- Exclude developer specific local files -->
+        <exclude name="build.properties" />
       </fileset>
     </checkstyle>
     <!-- javax package checks -->
@@ -1735,7 +1747,10 @@
 
     <ant antfile="${tomcat.extras}/logging/commons-logging-${commons-logging.version}-src/build2.xml"
          dir="${tomcat.extras}/logging/commons-logging-${commons-logging.version}-src"
-         inheritAll="false" target="compile" />
+         inheritAll="false" target="compile" >
+      <property name="source.version" value="${logging.compile.source}" />
+      <property name="target.version" value="${logging.compile.target}" />
+    </ant>
 
     <jar jarfile="${tomcat-juli-extras.jar}"
          manifest="${tomcat.manifests}/default.manifest">
@@ -2024,7 +2039,8 @@ Apache Tomcat ${version} native binaries for Win64 AMD64/EMT64 platform.
       encoding="ISO-8859-1"
       docencoding="ISO-8859-1"
       charset="ISO-8859-1"
-      additionalparam="-breakiterator -notimestamp"
+      additionalparam="-breakiterator -notimestamp ${java9.javadoc.options}"
+      source="${compile.source}"
       maxmemory="512m"
       failonerror="true"
       executable="${java.7.home}/bin/javadoc">
@@ -2045,7 +2061,8 @@ Apache Tomcat ${version} native binaries for Win64 AMD64/EMT64 platform.
       encoding="ISO-8859-1"
       docencoding="ISO-8859-1"
       charset="ISO-8859-1"
-      additionalparam="-breakiterator -notimestamp"
+      additionalparam="-breakiterator -notimestamp ${java9.javadoc.options}"
+      source="${compile.source}"
       maxmemory="512m"
       failonerror="true"
       executable="${java.7.home}/bin/javadoc">
@@ -2066,7 +2083,8 @@ Apache Tomcat ${version} native binaries for Win64 AMD64/EMT64 platform.
       encoding="ISO-8859-1"
       docencoding="ISO-8859-1"
       charset="ISO-8859-1"
-      additionalparam="-breakiterator -notimestamp"
+      additionalparam="-breakiterator -notimestamp ${java9.javadoc.options}"
+      source="${compile.source}"
       maxmemory="512m"
       failonerror="true"
       executable="${java.7.home}/bin/javadoc">
@@ -2087,7 +2105,8 @@ Apache Tomcat ${version} native binaries for Win64 AMD64/EMT64 platform.
       encoding="ISO-8859-1"
       docencoding="ISO-8859-1"
       charset="ISO-8859-1"
-      additionalparam="-breakiterator -notimestamp"
+      additionalparam="-breakiterator -notimestamp ${java9.javadoc.options}"
+      source="${compile.source}"
       maxmemory="512m"
       failonerror="true"
       executable="${java.7.home}/bin/javadoc">
@@ -2107,10 +2126,12 @@ Apache Tomcat ${version} native binaries for Win64 AMD64/EMT64 platform.
       encoding="ISO-8859-1"
       docencoding="ISO-8859-1"
       charset="ISO-8859-1"
-      additionalparam="-breakiterator -notimestamp"
+      additionalparam="-breakiterator -notimestamp ${java9.javadoc.options} -J-Dhttps.protocols=TLSv1,TLSv1.1,TLSv1.2"
+      source="${compile.source}"
       maxmemory="512m"
       failonerror="true"
-      executable="${java.7.home}/bin/javadoc">
+      executable="${java.7.home}/bin/javadoc"
+      useexternalfile="true">
       <classpath>
         <path refid="compile.classpath"/>
         <path refid="tomcat.webservices.classpath"/>
@@ -2120,10 +2141,13 @@ Apache Tomcat ${version} native binaries for Win64 AMD64/EMT64 platform.
       <link href="../jspapi"/>
       <link href="../elapi"/>
       <link href="../websocketapi"/>
-      <link href="http://docs.oracle.com/javase/7/docs/api/"/>
-      <link href="http://docs.oracle.com/javaee/6/api/"/>
+      <link href="https://docs.oracle.com/javase/7/docs/api/"/>
+      <link href="https://docs.oracle.com/javaee/6/api/"/>
+      <fileset dir="${tomcat.dist}/src/java">
+        <include name="**/*.java"/>
+        <exclude name="org/apache/catalina/util/Base64.java" if="java11.present" />
+      </fileset>
       <sourcepath>
-        <path location="${tomcat.dist}/src/java"/>
         <!--jdbc-pool src files for javadoc-->
         <path location="${tomcat.dist}/src/modules/jdbc-pool/src/main/java"/>
       </sourcepath>
@@ -2840,6 +2864,16 @@ skip.installer property in build.properties" />
       <param name="checksum.value" value="${jdt.checksum.value}"/>
     </antcall>
 
+    <!-- Download SAAJ API -->
+    <antcall target="downloadfile">
+      <param name="sourcefile" value="${saaj-api.loc}"/>
+      <param name="destfile" value="${saaj-api.jar}"/>
+      <param name="destdir" value="${saaj-api.home}"/>
+      <param name="checksum.enabled" value="${saaj-api.checksum.enabled}"/>
+      <param name="checksum.algorithm" value="${saaj-api.checksum.algorithm}"/>
+      <param name="checksum.value" value="${saaj-api.checksum.value}"/>
+    </antcall>
+
   </target>
 
   <target name="download-test-compile"
diff --git a/java/javax/servlet/jsp/tagext/VariableInfo.java b/java/javax/servlet/jsp/tagext/VariableInfo.java
index b7972f5..2d0cdcd 100644
--- a/java/javax/servlet/jsp/tagext/VariableInfo.java
+++ b/java/javax/servlet/jsp/tagext/VariableInfo.java
@@ -81,78 +81,78 @@ package javax.servlet.jsp.tagext;
  * thus where synchronization is needed as illustrated by the table below.
  * <b>Note:</b> the synchronization of the variable(s) will occur <em>after</em>
  * the respective method has been called. <blockquote>
- * <table cellpadding="2" cellspacing="2" border="0" width="55%"
- *        style="background-color:#999999" summary="Variable Synchronization Points">
+ * <table style="background-color:#999999">
+ * <caption>Variable Synchronization Points</caption>
  * <tbody>
- * <tr align="center">
+ * <tr>
  * <td valign="top" colspan="6" style="background-color:#999999">
  *   <u><b>Variable Synchronization Points</b></u><br>
  * </td>
  * </tr>
  * <tr>
  * <th valign="top" style="background-color:#c0c0c0">&nbsp;</th>
- * <th valign="top" style="background-color:#c0c0c0" align="center">doStartTag()</th>
- * <th valign="top" style="background-color:#c0c0c0" align="center">doInitBody()</th>
- * <th valign="top" style="background-color:#c0c0c0" align="center">doAfterBody()</th>
- * <th valign="top" style="background-color:#c0c0c0" align="center">doEndTag()</th>
- * <th valign="top" style="background-color:#c0c0c0" align="center">doTag()</th>
+ * <th valign="top" style="background-color:#c0c0c0">doStartTag()</th>
+ * <th valign="top" style="background-color:#c0c0c0">doInitBody()</th>
+ * <th valign="top" style="background-color:#c0c0c0">doAfterBody()</th>
+ * <th valign="top" style="background-color:#c0c0c0">doEndTag()</th>
+ * <th valign="top" style="background-color:#c0c0c0">doTag()</th>
  * </tr>
  * <tr>
  * <td valign="top" style="background-color:#c0c0c0"><b>Tag<br>
  * </b></td>
- * <td valign="top" align="center" style="background-color:#ffffff">AT_BEGIN, NESTED<br>
+ * <td valign="top" style="background-color:#ffffff">AT_BEGIN, NESTED<br>
  * </td>
- * <td valign="top" align="center" style="background-color:#ffffff"><br>
+ * <td valign="top" style="background-color:#ffffff"><br>
  * </td>
- * <td valign="top" align="center" style="background-color:#ffffff"><br>
+ * <td valign="top" style="background-color:#ffffff"><br>
  * </td>
- * <td valign="top" align="center" style="background-color:#ffffff">AT_BEGIN, AT_END<br>
+ * <td valign="top" style="background-color:#ffffff">AT_BEGIN, AT_END<br>
  * </td>
- * <td valign="top" align="center" style="background-color:#ffffff"><br>
+ * <td valign="top" style="background-color:#ffffff"><br>
  * </td>
  * </tr>
  * <tr>
  * <td valign="top" style="background-color:#c0c0c0"><b>IterationTag<br>
  * </b></td>
- * <td valign="top" align="center" style="background-color:#ffffff">AT_BEGIN, NESTED<br>
+ * <td valign="top" style="background-color:#ffffff">AT_BEGIN, NESTED<br>
  * </td>
- * <td valign="top" align="center" style="background-color:#ffffff"><br>
+ * <td valign="top" style="background-color:#ffffff"><br>
  * </td>
- * <td valign="top" align="center" style="background-color:#ffffff">AT_BEGIN, NESTED<br>
+ * <td valign="top" style="background-color:#ffffff">AT_BEGIN, NESTED<br>
  * </td>
- * <td valign="top" align="center" style="background-color:#ffffff">AT_BEGIN, AT_END<br>
+ * <td valign="top" style="background-color:#ffffff">AT_BEGIN, AT_END<br>
  * </td>
- * <td valign="top" align="center" style="background-color:#ffffff"><br>
+ * <td valign="top" style="background-color:#ffffff"><br>
  * </td>
  * </tr>
  * <tr>
  * <td valign="top" style="background-color:#c0c0c0"><b>BodyTag<br>
  * </b></td>
- * <td valign="top" align="center" style="background-color:#ffffff">AT_BEGIN,
+ * <td valign="top" style="background-color:#ffffff">AT_BEGIN,
  * NESTED<sup>1</sup><br>
  * </td>
- * <td valign="top" align="center" style="background-color:#ffffff">AT_BEGIN,
+ * <td valign="top" style="background-color:#ffffff">AT_BEGIN,
  * NESTED<sup>1</sup><br>
  * </td>
- * <td valign="top" align="center" style="background-color:#ffffff">AT_BEGIN, NESTED<br>
+ * <td valign="top" style="background-color:#ffffff">AT_BEGIN, NESTED<br>
  * </td>
- * <td valign="top" align="center" style="background-color:#ffffff">AT_BEGIN, AT_END<br>
+ * <td valign="top" style="background-color:#ffffff">AT_BEGIN, AT_END<br>
  * </td>
- * <td valign="top" align="center" style="background-color:#ffffff"><br>
+ * <td valign="top" style="background-color:#ffffff"><br>
  * </td>
  * </tr>
  * <tr>
  * <td valign="top" style="background-color:#c0c0c0"><b>SimpleTag<br>
  * </b></td>
- * <td valign="top" align="center" style="background-color:#ffffff"><br>
+ * <td valign="top" style="background-color:#ffffff"><br>
  * </td>
- * <td valign="top" align="center" style="background-color:#ffffff"><br>
+ * <td valign="top" style="background-color:#ffffff"><br>
  * </td>
- * <td valign="top" align="center" style="background-color:#ffffff"><br>
+ * <td valign="top" style="background-color:#ffffff"><br>
  * </td>
- * <td valign="top" align="center" style="background-color:#ffffff"><br>
+ * <td valign="top" style="background-color:#ffffff"><br>
  * </td>
- * <td valign="top" align="center" style="background-color:#ffffff">AT_BEGIN, AT_END<br>
+ * <td valign="top" style="background-color:#ffffff">AT_BEGIN, AT_END<br>
  * </td>
  * </tr>
  * </tbody>
diff --git a/java/org/apache/catalina/filters/ExpiresFilter.java b/java/org/apache/catalina/filters/ExpiresFilter.java
index b4dce2e..0b9fcd4 100644
--- a/java/org/apache/catalina/filters/ExpiresFilter.java
+++ b/java/org/apache/catalina/filters/ExpiresFilter.java
@@ -56,7 +56,7 @@ import org.apache.juli.logging.LogFactory;
  * Following documentation is inspired by <a
  * href="https://httpd.apache.org/docs/2.2/mod/mod_expires.html">mod_expires</a>
  * </p>
- * <h1>Summary</h1>
+ * <h2>Summary</h2>
  * <p>
  * This filter controls the setting of the {@code Expires} HTTP header and the
  * {@code max-age} directive of the {@code Cache-Control} HTTP header in
@@ -77,9 +77,9 @@ import org.apache.juli.logging.LogFactory;
  * href="https://httpd.apache.org/docs/2.2/mod/mod_headers.html" >Apache Httpd
  * mod_headers</a> module.
  * </p>
- * <h1>Filter Configuration</h1><h2>Basic configuration to add
+ * <h2>Filter Configuration</h2><h3>Basic configuration to add
  * '{@code Expires}' and '{@code Cache-Control: max-age=}'
- * headers to images, css and javascript</h2>
+ * headers to images, css and javascript</h3>
  *
  * <pre>
  * {@code
@@ -112,9 +112,9 @@ import org.apache.juli.logging.LogFactory;
  * }
  * </pre>
  *
- * <h2>Configuration Parameters</h2>
+ * <h3>Configuration Parameters</h3>
  *
- * <h3>{@code ExpiresByType <content-type>}</h3>
+ * <h4>{@code ExpiresByType <content-type>}</h4>
  * <p>
  * This directive defines the value of the {@code Expires} header and the
  * {@code max-age} directive of the {@code Cache-Control} header generated for
@@ -171,8 +171,8 @@ import org.apache.juli.logging.LogFactory;
  * You can also specify the expiration time calculation using an alternate
  * syntax, described earlier in this document.
  * </p>
- * <h3>
- * {@code ExpiresExcludedResponseStatusCodes}</h3>
+ * <h4>
+ * {@code ExpiresExcludedResponseStatusCodes}</h4>
  * <p>
  * This directive defines the http response status codes for which the
  * {@code ExpiresFilter} will not generate expiration headers. By default, the
@@ -199,7 +199,7 @@ import org.apache.juli.logging.LogFactory;
  * }
  * </pre>
  *
- * <h3>ExpiresDefault</h3>
+ * <h4>ExpiresDefault</h4>
  * <p>
  * This directive sets the default algorithm for calculating the expiration time
  * for all documents in the affected realm. It can be overridden on a
@@ -207,7 +207,7 @@ import org.apache.juli.logging.LogFactory;
  * description of that directive for details about the syntax of the argument,
  * and the "alternate syntax" description as well.
  * </p>
- * <h1>Alternate Syntax</h1>
+ * <h2>Alternate Syntax</h2>
  * <p>
  * The {@code ExpiresDefault} and {@code ExpiresByType} directives can also be
  * defined in a more readable syntax of the form:
@@ -295,7 +295,7 @@ import org.apache.juli.logging.LogFactory;
  * a file on disk. This is due to the fact that there is no modification time
  * for such content.
  * </p>
- * <h1>Expiration headers generation eligibility</h1>
+ * <h2>Expiration headers generation eligibility</h2>
  * <p>
  * A response is eligible to be enriched by {@code ExpiresFilter} if :
  * </p>
@@ -316,7 +316,7 @@ import org.apache.juli.logging.LogFactory;
  * {@code max-age}, they are concatenated with the {@code max-age} directive
  * that is added by the {@code ExpiresFilter}.</li>
  * </ul>
- * <h1>Expiration configuration selection</h1>
+ * <h2>Expiration configuration selection</h2>
  * <p>
  * The expiration configuration if elected according to the following algorithm:
  * </p>
@@ -333,7 +333,7 @@ import org.apache.juli.logging.LogFactory;
  * &#x27;),</li>
  * <li>{@code ExpiresDefault}</li>
  * </ol>
- * <h1>Implementation Details</h1><h2>When to write the expiration headers ?</h2>
+ * <h2>Implementation Details</h2><h3>When to write the expiration headers ?</h3>
  * <p>
  * The {@code ExpiresFilter} traps the &#x27;on before write response
  * body&#x27; event to decide whether it should generate expiration headers or
@@ -349,7 +349,7 @@ import org.apache.juli.logging.LogFactory;
  * case, the {@code ExpiresFilter}, at the end of its {@code doFilter()}
  * method, manually triggers the {@code onBeforeWriteResponseBody()} method.
  * </p>
- * <h2>Configuration syntax</h2>
+ * <h3>Configuration syntax</h3>
  * <p>
  * The {@code ExpiresFilter} supports the same configuration syntax as Apache
  * Httpd mod_expires.
@@ -365,7 +365,7 @@ import org.apache.juli.logging.LogFactory;
  * The workaround has been to declare the content type in the
  * {@code <param-name>} rather than in the {@code <param-value>}.
  * </p>
- * <h2>Designed for extension : the open/close principle</h2>
+ * <h3>Designed for extension : the open/close principle</h3>
  * <p>
  * The {@code ExpiresFilter} has been designed for extension following the
  * open/close principle.
@@ -380,7 +380,7 @@ import org.apache.juli.logging.LogFactory;
  * <li>
  * {@link #getExpirationDate(XHttpServletResponse)}</li>
  * </ul>
- * <h1>Troubleshooting</h1>
+ * <h2>Troubleshooting</h2>
  * <p>
  * To troubleshoot, enable logging on the
  * {@code org.apache.catalina.filters.ExpiresFilter}.
diff --git a/java/org/apache/catalina/tribes/package.html b/java/org/apache/catalina/tribes/package.html
index 8a726c4..8921117 100644
--- a/java/org/apache/catalina/tribes/package.html
+++ b/java/org/apache/catalina/tribes/package.html
@@ -16,7 +16,7 @@
 -->
 <body>
 <head><title>Apache Tribes - The Tomcat Cluster Communication Module</title>
-<h3>QuickStart</h3>
+<h2>QuickStart</h2>
     <pre><code>
             //create a channel
             Channel myChannel = new GroupChannel();
@@ -43,7 +43,7 @@
             channel.send(group,myMsg,Channel.SEND_OPTIONS_DEFAULT);
 
     </code></pre>
-<h3>Interfaces for the Application Developer</h3>
+<h2>Interfaces for the Application Developer</h2>
     <ol>
         <li><code>org.apache.catalina.tribes.Channel</code>
             Main component to interact with to send messages
diff --git a/java/org/apache/juli/logging/package.html b/java/org/apache/juli/logging/package.html
index e768de7..30afa40 100644
--- a/java/org/apache/juli/logging/package.html
+++ b/java/org/apache/juli/logging/package.html
@@ -16,7 +16,7 @@
 -->
 <body>
 
-<h3>Overview</h3>
+<h2>Overview</h2>
 
 
 <p>This implementation of commons-logging uses a  commons-logging.jar
diff --git a/java/org/apache/tomcat/util/buf/package.html b/java/org/apache/tomcat/util/buf/package.html
index 833cffa..61f2c38 100644
--- a/java/org/apache/tomcat/util/buf/package.html
+++ b/java/org/apache/tomcat/util/buf/package.html
@@ -15,7 +15,7 @@
   limitations under the License.
 -->
 <html><body>
-<H1>Buffers and Encodings</h1>
+<H2>Buffers and Encodings</h2>
 
 This package contains buffers and utils to perform encoding/decoding of buffers. That includes byte to char
 conversions, URL encodings, etc.
diff --git a/java/org/apache/tomcat/util/digester/SetPropertiesRule.java b/java/org/apache/tomcat/util/digester/SetPropertiesRule.java
index ac9a86e..206aa80 100644
--- a/java/org/apache/tomcat/util/digester/SetPropertiesRule.java
+++ b/java/org/apache/tomcat/util/digester/SetPropertiesRule.java
@@ -94,7 +94,7 @@ public class SetPropertiesRule extends Rule {
      * <p>If a property name is null or the attribute name has no matching
      * property name, then this indicates that the attribute should be ignored.</p>
      *
-     * <h2>Example One</h2>
+     * <h4>Example One</h4>
      * <p> The following constructs a rule that maps the <code>alt-city</code>
      * attribute to the <code>city</code> property and the <code>alt-state</code>
      * to the <code>state</code> property.
@@ -105,7 +105,7 @@ public class SetPropertiesRule extends Rule {
      *                new String[] {"city", "state"});
      * </pre>
      *
-     * <h2>Example Two</h2>
+     * <h4>Example Two</h4>
      * <p> The following constructs a rule that maps the <code>class</code>
      * attribute to the <code>className</code> property.
      * The attribute <code>ignore-me</code> is not mapped.
diff --git a/java/org/apache/tomcat/util/digester/package.html b/java/org/apache/tomcat/util/digester/package.html
index 059cd14..6ffdf94 100644
--- a/java/org/apache/tomcat/util/digester/package.html
+++ b/java/org/apache/tomcat/util/digester/package.html
@@ -22,8 +22,7 @@
 The Digester package provides for rules-based processing of arbitrary
 XML documents.
 <br><br>
-<a name="doc.Description"></a>
-<div align="center">
+<div>
 <a href="#doc.Intro">[Introduction]</a>
 <a href="#doc.Properties">[Configuration Properties]</a>
 <a href="#doc.Stack">[The Object Stack]</a>
@@ -41,8 +40,7 @@ XML documents.
 <a href="#doc.Limits">[Known Limitations]</a>
 </div>
 
-<a name="doc.Intro"></a>
-<h3>Introduction</h3>
+<h2 id="doc.Intro">Introduction</h2>
 
 <p>In many application environments that deal with XML-formatted data, it is
 useful to be able to process an XML document in an "event driven" manner,
@@ -84,8 +82,7 @@ the developer to focus on the processing to be performed.</p>
 <p>For example code, see <a href="#doc.Usage"> the usage
 examples</a>, and <a href="#doc.FAQ.Examples"> the FAQ </a>. </p>
 
-<a name="doc.Properties"></a>
-<h3>Digester Configuration Properties</h3>
+<h2 id="doc.Properties">Digester Configuration Properties</h2>
 
 <p>A <code>org.apache.commons.digester.Digester</code> instance contains several
 configuration properties that can be used to customize its operation.  These
@@ -191,8 +188,7 @@ or <code>java.lang.ClassLoader.getResourceAsStream()</code>.  The actual DTD
 resource is loaded through the same class loader that loads all of the Struts
 classes -- typically from the <code>struts.jar</code> file.</p>
 
-<a name="doc.Stack"></a>
-<h3>The Object Stack</h3>
+<h2 id="doc.Stack">The Object Stack</h2>
 
 <p>One very common use of <code>org.apache.commons.digester.Digester</code>
 technology is to dynamically construct a tree of Java objects, whose internal
@@ -253,8 +249,7 @@ features of the Digester functionality:</p>
     the parse finishes as well.</li>
 </ul>
 
-<a name="doc.Patterns"></a>
-<h3>Element Matching Patterns</h3>
+<h2 id="doc.Patterns">Element Matching Patterns</h2>
 
 <p>A primary feature of the <code>org.apache.commons.digester.Digester</code>
 parser is that the Digester automatically navigates the element hierarchy of
@@ -313,8 +308,7 @@ order that the <code>Rules</code> where initially registered with the
 <code>Digester</code>, whilst <code>end</code> method calls are execute in
 reverse order. In other words - the order is first in, last out.</p>
 
-<a name="doc.Rules"></a>
-<h3>Processing Rules</h3>
+<h2 id="doc.Rules">Processing Rules</h2>
 
 <p>The <a href="#doc.Patterns">previous section</a> documented how you identify
 <strong>when</strong> you wish to have certain actions take place.  The purpose
@@ -443,8 +437,7 @@ class.  For example, the following code sequence:</p>
                         "com.mycompany.mypackage.MyChildClass");
 </pre>
 
-<a name="doc.Logging"></a>
-<h3>Logging</h3>
+<h2 id="doc.Logging">Logging</h2>
 
 <p>Logging is a vital tool for debugging Digester rulesets. Digester can log
 copious amounts of debugging information. So, you need to know how logging
@@ -462,11 +455,10 @@ works before you start using Digester seriously.</p>
     volume.</li>
 </ul>
 
-<a name="doc.Usage"></a>
-<h3>Usage Examples</h3>
+<h2 id="doc.Usage">Usage Examples</h2>
 
 
-<h5>Creating a Simple Object Tree</h5>
+<h3>Creating a Simple Object Tree</h3>
 
 <p>Let's assume that you have two simple JavaBeans, <code>Foo</code> and
 <code>Bar</code>, with the following method signatures:</p>
@@ -546,7 +538,7 @@ have had its properties set, and all of its child <code>Bar</code> objects
 created for you.</p>
 
 
-<h5>Processing A Struts Configuration File</h5>
+<h3>Processing A Struts Configuration File</h3>
 
 <p>As stated earlier, the primary reason that the
 <code>Digester</code> package was created is because the
@@ -639,8 +631,7 @@ information that was defined in the <code>struts-config.xml</code> file is
 now represented as collections of objects cached within the Struts controller
 servlet, as well as being exposed as servlet context attributes.</p>
 
-
-<h5>Parsing Body Text In XML Files</h5>
+<h3>Parsing Body Text In XML Files</h3>
 
 <p>The Digester module also allows you to process the nested body text in an
 XML file, not just the elements and attributes that are encountered.  The
@@ -724,8 +715,7 @@ brevity in this example):</p>
 </ul>
 
 
-<a name="doc.Namespace"></a>
-<h3>Namespace Aware Parsing</h3>
+<h2 id="doc.Namespace">Namespace Aware Parsing</h2>
 
 <p>For digesting XML documents that do not use XML namespaces, the default
 behavior of <code>Digester</code>, as described above, is generally sufficient.
@@ -794,7 +784,7 @@ any restrictions on what other content is present in the document.</p>
 Rule Sets</a> if you wish to reuse a particular set of rules, associated
 with a particular namespace, in more than one application context.</p>
 
-<h4>Using Namespace Prefixes In Pattern Matching</h4>
+<h3>Using Namespace Prefixes In Pattern Matching</h3>
 
 <p>Using rules with namespaces is very useful when you have orthogonal rulesets.
 One ruleset applies to a namespace and is independent of other rulesets applying
@@ -812,15 +802,14 @@ prefixes.</p>
 'foo:bar'</code> will match a top level element named <code>'bar'</code> in the
 namespace with (local) prefix <code>'foo'</code>.</p>
 
-<h4>Limitations of Digester Namespace support</h4>
+<h3>Limitations of Digester Namespace support</h3>
 <p>Digester does not provide general "xpath-compliant" matching;
 only the namespace attached to the <i>last</i> element in the match path
 is involved in the matching process. Namespaces attached to parent
 elements are ignored for matching purposes.</p>
 
 
-<a name="doc.Pluggable"></a>
-<h3>Pluggable Rules Processing</h3>
+<h2 id="doc.Pluggable">Pluggable Rules Processing</h2>
 
 <p>By default, <code>Digester</code> selects the rules that match a particular
 pattern of nested elements as described under
@@ -846,7 +835,7 @@ that:</p>
     creator can use any prefix that they like).</li>
 </ul>
 
-<h4>ExtendedBaseRules</h4>
+<h3>ExtendedBaseRules</h3>
 <p><a href="ExtendedBaseRules.html">ExtendedBaseRules</a>,
 adds some additional expression syntax for pattern matching
 to the default mechanism, but it also executes more slowly.  See the
@@ -861,7 +850,7 @@ following as part of your Digester initialization:</p>
   ...
 </pre>
 
-<h4>RegexRules</h4>
+<h3>RegexRules</h3>
 <p><a href="RegexRules.html">RegexRules</a> is an advanced <code>Rules</code>
 implementation which does not build on the default pattern matching rules.
 It uses a pluggable <a href="RegexMatcher.html">RegexMatcher</a> implementation to test
@@ -879,7 +868,7 @@ Example usage:
   digester.setRules(new RegexRules(new SimpleRegexMatcher()));
   ...
 </pre>
-<h5>RegexMatchers</h5>
+<h3>RegexMatchers</h3>
 <p>
 <code>Digester</code> ships only with one <code>RegexMatcher</code>
 implementation: <a href='SimpleRegexMatcher.html'>SimpleRegexMatcher</a>.
@@ -934,8 +923,7 @@ when a pattern does not match any other rule, then rule alpha will be called.
 <code>WithDefaultsRulesWrapper</code> follows the <em>Decorator</em> pattern.
 </p>
 
-<a name="doc.RuleSets"></a>
-<h3>Encapsulated Rule Sets</h3>
+<h2 id="doc.RuleSets">Encapsulated Rule Sets</h2>
 
 <p>All of the examples above have described a scenario where the rules to be
 processed are registered with a <code>Digester</code> instance immediately
@@ -1001,8 +989,8 @@ public class MyRuleSet extends RuleSetBase {
     the same set of nested elements at different nesting levels within an
     XML document.</li>
 </ul>
-<a name="doc.NamedStacks"></a>
-<h3>Using Named Stacks For Inter-Rule Communication</h3>
+
+<h2 id="doc.NamedStacks">Using Named Stacks For Inter-Rule Communication</h2>
 <p>
 <code>Digester</code> is based on <code>Rule</code> instances working together
 to process xml. For anything other than the most trivial processing,
@@ -1043,10 +1031,10 @@ are reserved for future use by the <code>Digester</code> component. It is also r
 that users choose stack names perfixed by the name of their own domain to avoid conflicts
 with other <code>Rule</code> implementations.
 </p>
-<a name="doc.RegisteringDTDs"></a>
-<h3>Registering DTDs</h3>
 
-<h4>Brief (But Still Too Long) Introduction To System and Public Identifiers</h4>
+<h2 id="doc.RegisteringDTDs">Registering DTDs</h2>
+
+<h3>Brief (But Still Too Long) Introduction To System and Public Identifiers</h3>
 <p>A definition for an external entity comes in one of two forms:
 </p>
 <ol>
@@ -1098,7 +1086,7 @@ Only when no local copy exists is it necessary to download the document
 from the internet URL. This naming scheme is recommended when using <code>Digester</code>.
 </p>
 
-<h4>External Entity Resolution Using Digester</h4>
+<h3>External Entity Resolution Using Digester</h3>
 <p>
 SAX factors out the resolution of external entities into an <code>EntityResolver</code>.
 <code>Digester</code> supports the use of custom <code>EntityResolver</code>
@@ -1117,9 +1105,8 @@ whenever an external entity with public id
 <p><strong>Note:</strong> This is a simple (but useful) implementation.
 Greater sophistication requires a custom <code>EntityResolver</code>.</p>
 
-<a name="doc.troubleshooting"></a>
-<h3>Troubleshooting</h3>
-<h4>Debugging Exceptions</h4>
+<h2 id="doc.troubleshooting">Troubleshooting</h2>
+<h3>Debugging Exceptions</h3>
 <p>
 <code>Digester</code> is based on <a href='http://www.saxproject.org'>SAX</a>.
 Digestion throws two kinds of <code>Exception</code>:
@@ -1134,7 +1121,7 @@ that developers know all about. The second is thrown by SAX parsers when the pro
 of the XML cannot be completed. So, to diagnose the cause a certain familiarity with
 the way that SAX error handling works is very useful.
 </p>
-<h5>Diagnosing SAX Exceptions</h5>
+<h3>Diagnosing SAX Exceptions</h3>
 <p>
 This is a short, potted guide to SAX error handling strategies. It's not intended as a
 proper guide to error handling in SAX.
@@ -1157,9 +1144,9 @@ throw by <code>Digester</code> each of these will be wrapped into a
 <code>SAXException</code> and rethrown. So, catch these and examine the wrapped
 exception to diagnose what went wrong.
 </p>
-<a name="doc.FAQ"></a>
-<h3>Frequently Asked Questions</h3>
-<p><ul>
+
+<h2 id="doc.FAQ">Frequently Asked Questions</h2>
+<ul>
 <li><strong>Why do I get warnings when using a JAXP 1.1 parser?</strong>
 <p>If you're using a JAXP 1.1 parser, you might see the following warning (in your log):
 <code><pre>
@@ -1202,8 +1189,7 @@ Digester logs but the processing will continue. To change this behaviour, call
 <code>digester.setErrorHandler</code> with a more suitable implementation.
 </p>
 
-<li><strong>Where Can I Find Example Code?</strong>
-<a name="doc.FAQ.Examples">
+<li id="doc.FAQ.Examples"><strong>Where Can I Find Example Code?</strong>
 <p>Digester ships with a sample application: a mapping for the <em>Rich Site
 Summary</em> format used by many newsfeeds. Download the source distribution
 to see how it works.</p>
@@ -1224,9 +1210,9 @@ commons dev mailing list</a>
 </p>
 </li>
 </ul>
-<a name="doc.Limits"></a>
-<h3>Known Limitations</h3>
-<h4>Accessing Public Methods In A Default Access Superclass</h4>
+
+<h2 id="doc.Limits">Known Limitations</h2>
+<h3>Accessing Public Methods In A Default Access Superclass</h3>
 <p>There is an issue when invoking public methods contained in a default access superclass.
 Reflection locates these methods fine and correctly assigns them as public.
 However, an <code>IllegalAccessException</code> is thrown if the method is invoked.</p>
diff --git a/java/org/apache/tomcat/util/modeler/package.html b/java/org/apache/tomcat/util/modeler/package.html
index d94cfb4..a64f08a 100644
--- a/java/org/apache/tomcat/util/modeler/package.html
+++ b/java/org/apache/tomcat/util/modeler/package.html
@@ -52,7 +52,7 @@ source distribution), and much more complex usage code in Tomcat 4.1 (in the
 be found in Tomcat 5.
 
 
-<h3>1.  Acquire a JMX Implementation</h3>
+<h2>1.  Acquire a JMX Implementation</h2>
 
 <p><em>Modeler</em> has been tested with different JMX implementations:
 <ul>
@@ -71,7 +71,7 @@ compilation classpath, and in the classpath of your server application when it
 is executed.</p>
 
 
-<h3>2.  Create a Modeler Configuration File</h3>
+<h2>2.  Create a Modeler Configuration File</h2>
 
 <p><em>Modeler</em> requires that you construct a configuration file that
 describes the metadata ultimately need to construct the
@@ -194,7 +194,7 @@ object (by name) before calling the <code>addRole</code> method on the
 underlying <code>Group</code> instance within the Server.</p>
 
 
-<h3>3.  Create Modeler Registry at Startup Time</h3>
+<h2>3.  Create Modeler Registry at Startup Time</h2>
 
 <p>The metadata information, and the corresponding Model MBean factory, is
 represented at runtime in an instance of <a href="Registry.html">Registry</a>
@@ -224,7 +224,7 @@ ant, to determine a reasonable metadata</p>
 descriptors</p>
 
 
-<h3>4.  Instantiate Model MBeans As Needed</h3>
+<h2>4.  Instantiate Model MBeans As Needed</h2>
 
 <p>When your server application needs to instantiate a new MBean and register
 it with the corresponding <code>MBeanServer</code>, it can execute code like
diff --git a/java/org/apache/tomcat/util/net/NioChannel.java b/java/org/apache/tomcat/util/net/NioChannel.java
index 7cc3ff5..64056ba 100644
--- a/java/org/apache/tomcat/util/net/NioChannel.java
+++ b/java/org/apache/tomcat/util/net/NioChannel.java
@@ -89,7 +89,6 @@ public class NioChannel implements ByteChannel{
      * Closes this channel.
      *
      * @throws IOException If an I/O error occurs
-     * TODO Implement this java.nio.channels.Channel method
      */
     @Override
     public void close() throws IOException {
@@ -104,7 +103,6 @@ public class NioChannel implements ByteChannel{
      * Tells whether or not this channel is open.
      *
      * @return <code>true</code> if, and only if, this channel is open
-     * TODO Implement this java.nio.channels.Channel method
      */
     @Override
     public boolean isOpen() {
@@ -117,7 +115,6 @@ public class NioChannel implements ByteChannel{
      * @param src The buffer from which bytes are to be retrieved
      * @return The number of bytes written, possibly zero
      * @throws IOException If some other I/O error occurs
-     * TODO Implement this java.nio.channels.WritableByteChannel method
      */
     @Override
     public int write(ByteBuffer src) throws IOException {
@@ -129,9 +126,9 @@ public class NioChannel implements ByteChannel{
      * Reads a sequence of bytes from this channel into the given buffer.
      *
      * @param dst The buffer into which bytes are to be transferred
-     * @return The number of bytes read, possibly zero, or <code>-1</code> if the channel has reached end-of-stream
+     * @return The number of bytes read, possibly zero, or <code>-1</code> if
+     *         the channel has reached end-of-stream
      * @throws IOException If some other I/O error occurs
-     * TODO Implement this java.nio.channels.ReadableByteChannel method
      */
     @Override
     public int read(ByteBuffer dst) throws IOException {
@@ -149,7 +146,6 @@ public class NioChannel implements ByteChannel{
      * getBufHandler
      *
      * @return ApplicationBufferHandler
-     * TODO Implement this org.apache.tomcat.util.net.SecureNioChannel method
      */
     public ApplicationBufferHandler getBufHandler() {
         return bufHandler;
@@ -162,7 +158,6 @@ public class NioChannel implements ByteChannel{
      * getIOChannel
      *
      * @return SocketChannel
-     * TODO Implement this org.apache.tomcat.util.net.SecureNioChannel method
      */
     public SocketChannel getIOChannel() {
         return sc;
@@ -172,7 +167,6 @@ public class NioChannel implements ByteChannel{
      * isClosing
      *
      * @return boolean
-     * TODO Implement this org.apache.tomcat.util.net.SecureNioChannel method
      */
     public boolean isClosing() {
         return false;
diff --git a/webapps/docs/changelog.xml b/webapps/docs/changelog.xml
index fae50c6..6d4f8fc 100644
--- a/webapps/docs/changelog.xml
+++ b/webapps/docs/changelog.xml
@@ -123,6 +123,11 @@
         Correct the source code links on the index page for the ROOT web
         application to point to Git rather than Subversion. (markt)
       </fix>
+      <fix>
+        Fix various issues with the Javadoc generated for the documentation web
+        application to enable release builds to be built with Java 10 onwards.
+        (markt)
+      </fix>
     </changelog>
   </subsection>
   <subsection name="Other">


---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@tomcat.apache.org
For additional commands, e-mail: dev-help@tomcat.apache.org