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

Fokko pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/avro.git


The following commit(s) were added to refs/heads/main by this push:
     new 37921335f5 Bump com.puppycrawl.tools:checkstyle from 13.3.0 to 14.4.0 
in /lang/java (#4082)
37921335f5 is described below

commit 37921335f5d2c66f07c2139497700fcd07af5707
Author: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
AuthorDate: Tue Nov 10 19:07:15 2026 +0100

    Bump com.puppycrawl.tools:checkstyle from 13.3.0 to 14.4.0 in /lang/java 
(#4082)
    
    * Bump com.puppycrawl.tools:checkstyle from 13.3.0 to 14.4.0 in /lang/java
    
    Bumps 
[com.puppycrawl.tools:checkstyle](https://github.com/checkstyle/checkstyle) 
from 13.3.0 to 14.4.0.
    - [Release notes](https://github.com/checkstyle/checkstyle/releases)
    - 
[Commits](https://github.com/checkstyle/checkstyle/compare/checkstyle-13.3.0...checkstyle-14.4.0)
    
    ---
    updated-dependencies:
    - dependency-name: com.puppycrawl.tools:checkstyle
      dependency-version: 14.4.0
      dependency-type: direct:production
      update-type: version-update:semver-major
    ...
    
    Signed-off-by: dependabot[bot] <[email protected]>
    
    * Fix checkstyle
    
    * Fix spotless violation in Decoder javadoc
    
    Wrap the readMapStart example in spotless:off/on toggles so the eclipse
    formatter leaves the <pre>{@code} block intact; checkstyle 14.4.0 parses
    it fine (same shape as the Encoder example).
    
    ---------
    
    Signed-off-by: dependabot[bot] <[email protected]>
    Co-authored-by: dependabot[bot] 
<49699333+dependabot[bot]@users.noreply.github.com>
    Co-authored-by: Fokko Driesprong <[email protected]>
---
 .../src/main/java/org/apache/avro/Conversion.java  |  15 ++-
 .../org/apache/avro/FormattedSchemaParser.java     |   6 +-
 .../java/org/apache/avro/JsonSchemaParser.java     |   8 +-
 .../main/java/org/apache/avro/ParseContext.java    |  12 +--
 .../avro/src/main/java/org/apache/avro/Schema.java |   4 +-
 .../main/java/org/apache/avro/SchemaBuilder.java   | 104 ++++++++++-----------
 .../java/org/apache/avro/SchemaCompatibility.java  |  12 +--
 .../main/java/org/apache/avro/SchemaFormatter.java |   4 +-
 .../org/apache/avro/SchemaFormatterFactory.java    |   6 +-
 .../main/java/org/apache/avro/SchemaParser.java    |  12 +--
 .../org/apache/avro/SchemaValidationStrategy.java  |   2 +-
 .../main/java/org/apache/avro/SchemaValidator.java |   4 +-
 .../org/apache/avro/SchemaValidatorBuilder.java    |   2 +-
 .../java/org/apache/avro/SystemLimitException.java |   2 +-
 .../src/main/java/org/apache/avro/ValidateAll.java |   4 +-
 .../main/java/org/apache/avro/ValidateLatest.java  |   4 +-
 .../java/org/apache/avro/file/DataFileWriter.java  |   2 +-
 .../java/org/apache/avro/generic/GenericData.java  |   2 +-
 .../java/org/apache/avro/io/BinaryDecoder.java     |  24 ++---
 .../java/org/apache/avro/io/BinaryEncoder.java     |   4 +-
 .../org/apache/avro/io/BlockingBinaryEncoder.java  |   6 +-
 .../avro/io/BlockingDirectBinaryEncoder.java       |   8 +-
 .../org/apache/avro/io/BufferedBinaryEncoder.java  |  12 +--
 .../src/main/java/org/apache/avro/io/Decoder.java  |  26 +++---
 .../java/org/apache/avro/io/DecoderFactory.java    |  20 ++--
 .../org/apache/avro/io/DirectBinaryDecoder.java    |   2 +-
 .../org/apache/avro/io/DirectBinaryEncoder.java    |   6 +-
 .../src/main/java/org/apache/avro/io/Encoder.java  |   8 +-
 .../java/org/apache/avro/io/EncoderFactory.java    |  50 +++++-----
 .../main/java/org/apache/avro/io/JsonDecoder.java  |  12 +--
 .../main/java/org/apache/avro/io/JsonEncoder.java  |  18 ++--
 .../java/org/apache/avro/io/ValidatingDecoder.java |   4 +-
 .../java/org/apache/avro/io/ValidatingEncoder.java |   4 +-
 .../org/apache/avro/specific/SpecificData.java     |   4 +-
 .../main/java/org/apache/avro/util/TimePeriod.java |  10 +-
 .../java/org/apache/avro/util/UtfTextUtils.java    |   6 +-
 .../avro/compiler/specific/SpecificCompiler.java   |   4 +-
 .../avro/hadoop/file/SortedKeyValueFile.java       |  14 +--
 .../avro/hadoop/io/AvroDatumConverterFactory.java  |   2 +-
 .../apache/avro/hadoop/io/AvroDeserializer.java    |   4 +-
 .../apache/avro/hadoop/io/AvroKeyComparator.java   |   2 +-
 .../apache/avro/hadoop/io/AvroSequenceFile.java    |  20 ++--
 .../org/apache/avro/hadoop/io/AvroSerializer.java  |   4 +-
 .../hadoop/util/AvroCharSequenceComparator.java    |   4 +-
 .../org/apache/avro/mapred/AvroMultipleInputs.java |  10 +-
 .../apache/avro/mapred/AvroMultipleOutputs.java    |  38 ++++----
 .../org/apache/avro/mapred/AvroOutputFormat.java   |   2 +-
 .../org/apache/avro/mapred/DelegatingMapper.java   |   3 +-
 .../apache/avro/mapred/tether/TetheredProcess.java |   2 +-
 .../java/org/apache/avro/mapreduce/AvroJob.java    |   4 +-
 .../apache/avro/mapreduce/AvroKeyInputFormat.java  |   2 +-
 .../apache/avro/mapreduce/AvroKeyOutputFormat.java |   2 +-
 .../avro/mapreduce/AvroKeyValueInputFormat.java    |   2 +-
 .../avro/mapreduce/AvroKeyValueOutputFormat.java   |   4 +-
 .../avro/mapreduce/AvroKeyValueRecordReader.java   |   2 +-
 .../avro/mapreduce/AvroKeyValueRecordWriter.java   |   2 +-
 .../apache/avro/mapreduce/AvroMultipleOutputs.java |  10 +-
 .../avro/mapreduce/AvroRecordReaderBase.java       |   2 +-
 .../mapreduce/AvroSequenceFileInputFormat.java     |   2 +-
 .../org/apache/avro/mojo/AbstractAvroMojo.java     |   2 +-
 .../org/apache/avro/protobuf/ProtoConversions.java |   2 +-
 .../avro/mapreduce/AvroTrevniKeyInputFormat.java   |   2 +-
 .../avro/mapreduce/AvroTrevniKeyOutputFormat.java  |   2 +-
 .../mapreduce/AvroTrevniKeyValueInputFormat.java   |   2 +-
 .../mapreduce/AvroTrevniKeyValueOutputFormat.java  |   4 +-
 .../mapreduce/AvroTrevniKeyValueRecordReader.java  |   2 +-
 .../mapreduce/AvroTrevniKeyValueRecordWriter.java  |   2 +-
 .../avro/mapreduce/AvroTrevniRecordReaderBase.java |   2 +-
 pom.xml                                            |   2 +-
 69 files changed, 299 insertions(+), 293 deletions(-)

diff --git a/lang/java/avro/src/main/java/org/apache/avro/Conversion.java 
b/lang/java/avro/src/main/java/org/apache/avro/Conversion.java
index 934672e7d3..a257b2f38a 100644
--- a/lang/java/avro/src/main/java/org/apache/avro/Conversion.java
+++ b/lang/java/avro/src/main/java/org/apache/avro/Conversion.java
@@ -21,9 +21,7 @@ package org.apache.avro;
 import java.nio.ByteBuffer;
 import java.util.Collection;
 import java.util.Map;
-import java.util.ServiceLoader;
 
-import org.apache.avro.generic.GenericData;
 import org.apache.avro.generic.GenericEnumSymbol;
 import org.apache.avro.generic.GenericFixed;
 import org.apache.avro.generic.IndexedRecord;
@@ -33,11 +31,12 @@ import org.apache.avro.generic.IndexedRecord;
  * <p>
  * Instances of this class can be added to GenericData to convert a logical 
type
  * to a particular representation. This can be done manually, using
- * {@link GenericData#addLogicalTypeConversion(Conversion)}, or automatically.
- * This last option uses the Java {@link ServiceLoader}, and requires the
- * implementation to be a public class with a public no-arg constructor, be
- * named in a file called {@code 
/META-INF/services/org.apache.avro.Conversion},
- * and both must available in the classpath.</li>
+ * {@link 
org.apache.avro.generic.GenericData#addLogicalTypeConversion(Conversion)},
+ * or automatically. This last option uses the Java
+ * {@link java.util.ServiceLoader}, and requires the implementation to be a
+ * public class with a public no-arg constructor, be named in a file called
+ * {@code /META-INF/services/org.apache.avro.Conversion}, and both must
+ * available in the classpath.
  * <p>
  * Implementations must provide:
  * <ul>
@@ -55,7 +54,7 @@ import org.apache.avro.generic.IndexedRecord;
  * {@code ReflectData} or {@code ProtobufData}, for example.
  *
  * @param <T> a Java type that can represent the named logical type
- * @see ServiceLoader
+ * @see java.util.ServiceLoader
  */
 @SuppressWarnings("unused")
 public abstract class Conversion<T> {
diff --git 
a/lang/java/avro/src/main/java/org/apache/avro/FormattedSchemaParser.java 
b/lang/java/avro/src/main/java/org/apache/avro/FormattedSchemaParser.java
index c37eca15dc..12023ba3b5 100644
--- a/lang/java/avro/src/main/java/org/apache/avro/FormattedSchemaParser.java
+++ b/lang/java/avro/src/main/java/org/apache/avro/FormattedSchemaParser.java
@@ -26,13 +26,13 @@ import java.net.URI;
  * <p>
  * The {@link SchemaParser} class uses this interface, supporting text based
  * schema sources.
- * </p>
+ * <p>
  *
  * <p>
  * Implementations are located using a {@link java.util.ServiceLoader} and must
  * therefore be threadsafe. See the {@code ServiceLoader} class for details on
  * loading your implementation.
- * </p>
+ * <p>
  *
  * @see java.util.ServiceLoader
  */
@@ -40,7 +40,7 @@ public interface FormattedSchemaParser {
   /**
    * <p>
    * Parse schema definitions from a text based source.
-   * </p>
+   * <p>
    *
    * <h2>Notes for implementers:</h2>
    *
diff --git a/lang/java/avro/src/main/java/org/apache/avro/JsonSchemaParser.java 
b/lang/java/avro/src/main/java/org/apache/avro/JsonSchemaParser.java
index 5dd532444a..ff8682d3d8 100644
--- a/lang/java/avro/src/main/java/org/apache/avro/JsonSchemaParser.java
+++ b/lang/java/avro/src/main/java/org/apache/avro/JsonSchemaParser.java
@@ -30,23 +30,23 @@ import java.net.URI;
  * {@link java.util.ServiceLoader}, as its use is hardcoded as fallback when no
  * service exists. This enables users to reliably override the standard JSON
  * parser as well.
- * </p>
+ * <p>
  */
 public class JsonSchemaParser implements FormattedSchemaParser {
   /**
    * <p>
    * Parse a schema written in the internal (JSON) format without any 
validations.
-   * </p>
+   * <p>
    *
    * <p>
    * Using this method is only safe if used to parse a write schema (i.e., a
    * schema used to read Avro data). Other usages, for example by generated 
Avro
    * code, can cause interoperability problems.
-   * </p>
+   * <p>
    *
    * <p>
    * Use with care and sufficient testing!
-   * </p>
+   * <p>
    *
    * @param fragments one or more strings making up the schema (some schemata
    *                  exceed the compiler limits)
diff --git a/lang/java/avro/src/main/java/org/apache/avro/ParseContext.java 
b/lang/java/avro/src/main/java/org/apache/avro/ParseContext.java
index 1d0873eb8b..dec4f60ac4 100644
--- a/lang/java/avro/src/main/java/org/apache/avro/ParseContext.java
+++ b/lang/java/avro/src/main/java/org/apache/avro/ParseContext.java
@@ -44,12 +44,12 @@ import static java.util.Objects.requireNonNull;
  *
  * <p>
  * This class is NOT thread-safe.
- * </p>
+ * <p>
  *
  * <p>
  * Note: this class has no use for most Avro users, but is a key component when
  * implementing a schema parser.
- * </p>
+ * <p>
  *
  * @see <a href="https://avro.apache.org/docs/current/specification/";>JSON 
based
  *      schema definition</a>
@@ -129,11 +129,11 @@ public class ParseContext {
   /**
    * <p>
    * Find a schema by name and namespace.
-   * </p>
+   * <p>
    *
    * <p>
    * That is:
-   * </p>
+   * <p>
    *
    * <ol>
    * <li>If {@code name} is a primitive name, return a (new) schema for it</li>
@@ -150,7 +150,7 @@ public class ParseContext {
    * directly usable. Please {@link #put(Schema)} the schema using it in the
    * context. The {@link SchemaParser} and protocol parsers will ensure you'll
    * only get a resolved schema that is usable.
-   * </p>
+   * <p>
    *
    * @param name      the schema name to find
    * @param namespace the namespace to find the schema against
@@ -201,7 +201,7 @@ public class ParseContext {
    * Note that although this method works for all types except for arrays, maps
    * and unions, all primitive types have already been defined upon 
construction.
    * This means you cannot redefine a 'long' with a logical timestamp type.
-   * </p>
+   * <p>
    *
    * @param schema the schema to put into the context
    */
diff --git a/lang/java/avro/src/main/java/org/apache/avro/Schema.java 
b/lang/java/avro/src/main/java/org/apache/avro/Schema.java
index 87f9d045db..fe6d4ce75a 100644
--- a/lang/java/avro/src/main/java/org/apache/avro/Schema.java
+++ b/lang/java/avro/src/main/java/org/apache/avro/Schema.java
@@ -400,12 +400,12 @@ public abstract class Schema extends JsonProperties 
implements Serializable {
   /**
    * <p>
    * Render this as <a href="https://json.org/";>JSON</a>.
-   * </p>
+   * <p>
    *
    * <p>
    * This method is equivalent to:
    * {@code SchemaFormatter.getInstance("json").format(this)}
-   * </p>
+   * <p>
    */
   @Override
   public String toString() {
diff --git a/lang/java/avro/src/main/java/org/apache/avro/SchemaBuilder.java 
b/lang/java/avro/src/main/java/org/apache/avro/SchemaBuilder.java
index 66fa8fbbd3..b8cc801caf 100644
--- a/lang/java/avro/src/main/java/org/apache/avro/SchemaBuilder.java
+++ b/lang/java/avro/src/main/java/org/apache/avro/SchemaBuilder.java
@@ -48,7 +48,7 @@ import com.fasterxml.jackson.databind.node.TextNode;
  * is designed to mimic the
  * <a href="https://avro.apache.org/docs/current/spec.html#schemas";>Avro Schema
  * Specification</a>
- * </p>
+ * <p>
  * For example, the below JSON schema and the fluent builder code to create it
  * are very similar:
  *
@@ -72,13 +72,13 @@ import com.fasterxml.jackson.databind.node.TextNode;
  *     
.name("serverHash").type("MD5").noDefault().name("meta").type().nullable().map().values().bytesType().noDefault()
  *     .endRecord();
  * </pre>
- * <p/>
+ * <p>
  *
  * <h5>Usage Guide</h5> SchemaBuilder chains together many smaller builders and
  * maintains nested context in order to mimic the Avro Schema specification.
  * Every Avro type in JSON has required and optional JSON properties, as well 
as
  * user-defined properties.
- * <p/>
+ * <p>
  * <h6>Selecting and Building an Avro Type</h6> The API analogy for the right
  * hand side of the Avro Schema JSON
  *
@@ -89,7 +89,7 @@ import com.fasterxml.jackson.databind.node.TextNode;
  * is a {@link TypeBuilder}, {@link FieldTypeBuilder}, or
  * {@link UnionFieldTypeBuilder}, depending on the context. These types all
  * share a similar API for selecting and building types.
- * <p/>
+ * <p>
  * <h5>Primitive Types</h5> All Avro primitive types are trivial to configure. 
A
  * primitive type in Avro JSON can be declared two ways, one that supports
  * custom properties and one that does not:
@@ -120,7 +120,7 @@ import com.fasterxml.jackson.databind.node.TextNode;
  * <li>{@link NamespacedBuilder#namespace(String)}</li>
  * <li>{@link NamespacedBuilder#aliases(String...)}</li>
  * <li>{@link PropBuilder#prop(String, String)}</li>
- * <p/>
+ * <p>
  * Each named type completes configuration of the optional properties with its
  * own method:
  * <li>{@link FixedBuilder#size(int)}</li>
@@ -161,12 +161,12 @@ import com.fasterxml.jackson.databind.node.TextNode;
  * defining aliases, custom properties, and documentation of the field. After
  * configuring these optional values for a field, the type is selected or built
  * with {@link FieldBuilder#type()}.
- * <p/>
+ * <p>
  * Fields have default values that must be specified to complete the field.
  * {@link FieldDefault#noDefault()} is available for all field types, and a
  * specific method is available for each type to use a default, for example
  * {@link IntDefault#intDefault(int)}
- * <p/>
+ * <p>
  * There are field shortcut methods on {@link FieldAssembler} for primitive
  * types. These shortcuts create required, optional, and nullable fields, but 
do
  * not support field aliases, doc, or custom properties.
@@ -194,7 +194,7 @@ import com.fasterxml.jackson.databind.node.TextNode;
  *
  * In a field context, the first type of a union defines what default type is
  * allowed.
- * </p>
+ * <p>
  * Unions have two shortcuts for common cases. nullable() creates a union of a
  * type and null. In a field type context, optional() is available and creates 
a
  * union of null and a type, with a null default. The below two are equivalent:
@@ -225,7 +225,7 @@ import com.fasterxml.jackson.databind.node.TextNode;
  * as a default to child fields, nested types, or later defined types in a
  * union. To specify a name that has no namespace and ignore the inherited
  * namespace, set the namespace to "".
- * <p/>
+ * <p>
  * {@link SchemaBuilder#builder(String)} returns a type builder with a default
  * namespace. {@link SchemaBuilder#builder()} returns a type builder with no
  * default namespace.
@@ -405,7 +405,7 @@ public class SchemaBuilder {
    * An abstract type that provides builder methods for configuring the name, 
doc,
    * and aliases of all Avro types that have names (fields, Fixed, Record, and
    * Enum).
-   * <p/>
+   * <p>
    * All Avro named types and fields have 'doc', 'aliases', and 'name' 
components.
    * 'name' is required, and provided to this builder. 'doc' and 'aliases' are
    * optional.
@@ -479,7 +479,7 @@ public class SchemaBuilder {
 
     /**
      * Set the namespace of this type. To clear the namespace, set empty 
string.
-     * <p/>
+     * <p>
      * When the namespace is null or unset, the namespace of the type defaults 
to
      * the namespace of the enclosing context.
      **/
@@ -724,11 +724,11 @@ public class SchemaBuilder {
   /**
    * Builds an Avro Fixed type with optional properties, namespace, doc, and
    * aliases.
-   * <p/>
+   * <p>
    * Set properties with {@link #prop(String, String)}, namespace with
    * {@link #namespace(String)}, doc with {@link #doc(String)}, and aliases 
with
    * {@link #aliases(String[])}.
-   * <p/>
+   * <p>
    * The Fixed schema is finalized when its required size is set via
    * {@link #size(int)}.
    **/
@@ -757,11 +757,11 @@ public class SchemaBuilder {
   /**
    * Builds an Avro Enum type with optional properties, namespace, doc, and
    * aliases.
-   * <p/>
+   * <p>
    * Set properties with {@link #prop(String, String)}, namespace with
    * {@link #namespace(String)}, doc with {@link #doc(String)}, and aliases 
with
    * {@link #aliases(String[])}.
-   * <p/>
+   * <p>
    * The Enum schema is finalized when its required symbols are set via
    * {@link #symbols(String[])}.
    **/
@@ -800,9 +800,9 @@ public class SchemaBuilder {
 
   /**
    * Builds an Avro Map type with optional properties.
-   * <p/>
+   * <p>
    * Set properties with {@link #prop(String, String)}.
-   * <p/>
+   * <p>
    * The Map schema's properties are finalized when {@link #values()} or
    * {@link #values(Schema)} is called.
    **/
@@ -843,9 +843,9 @@ public class SchemaBuilder {
 
   /**
    * Builds an Avro Array type with optional properties.
-   * <p/>
+   * <p>
    * Set properties with {@link #prop(String, String)}.
-   * <p/>
+   * <p>
    * The Array schema's properties are finalized when {@link #items()} or
    * {@link #items(Schema)} is called.
    **/
@@ -971,7 +971,7 @@ public class SchemaBuilder {
    * A common API for building types within a context. BaseTypeBuilder can 
build
    * all types other than Unions. {@link TypeBuilder} can additionally build
    * Unions.
-   * <p/>
+   * <p>
    * The builder has two contexts:
    * <li>A naming context provides a default namespace and allows for 
previously
    * defined named types to be referenced from {@link #type(String)}</li>
@@ -997,7 +997,7 @@ public class SchemaBuilder {
     /**
      * Look up the type by name. This type must be previously defined in the 
context
      * of this builder.
-     * <p/>
+     * <p>
      * The name may be fully qualified or a short name. If it is a short name, 
the
      * default namespace of the current context will additionally be searched.
      **/
@@ -1008,7 +1008,7 @@ public class SchemaBuilder {
     /**
      * Look up the type by name and namespace. This type must be previously 
defined
      * in the context of this builder.
-     * <p/>
+     * <p>
      * The name may be fully qualified or a short name. If it is a fully 
qualified
      * name, the namespace provided is ignored. If it is a short name, the 
namespace
      * provided is used if not null, else the default namespace of the current
@@ -1278,7 +1278,7 @@ public class SchemaBuilder {
 
     /**
      * A shortcut for building a union of a type and null.
-     * <p/>
+     * <p>
      * For example, the code snippets below are equivalent:
      *
      * <pre>
@@ -1333,11 +1333,11 @@ public class SchemaBuilder {
    * A special Builder for Record fields. The API is very similar to
    * {@link BaseTypeBuilder}. However, fields have their own names, properties,
    * and default values.
-   * <p/>
+   * <p>
    * The methods on this class create builder instances that return their 
control
    * to the {@link FieldAssembler} of the enclosing record context after
    * configuring a default for the field.
-   * <p/>
+   * <p>
    * For example, an int field with default value 1:
    *
    * <pre>
@@ -1563,7 +1563,7 @@ public class SchemaBuilder {
     /**
      * A shortcut for building a union of a type and null, with an optional 
default
      * value of the non-null type.
-     * <p/>
+     * <p>
      * For example, the two code snippets below are equivalent:
      *
      * <pre>
@@ -1580,7 +1580,7 @@ public class SchemaBuilder {
 
     /**
      * A shortcut for building a union of null and a type, with a null default.
-     * <p/>
+     * <p>
      * For example, the two code snippets below are equivalent:
      *
      * <pre>
@@ -1836,7 +1836,7 @@ public class SchemaBuilder {
 
     /**
      * Shortcut for creating a boolean field with the given name and no 
default.
-     * <p/>
+     * <p>
      * This is equivalent to:
      *
      * <pre>
@@ -1850,7 +1850,7 @@ public class SchemaBuilder {
     /**
      * Shortcut for creating an optional boolean field: a union of null and 
boolean
      * with null default.
-     * <p/>
+     * <p>
      * This is equivalent to:
      *
      * <pre>
@@ -1864,7 +1864,7 @@ public class SchemaBuilder {
     /**
      * Shortcut for creating a nullable boolean field: a union of boolean and 
null
      * with an boolean default.
-     * <p/>
+     * <p>
      * This is equivalent to:
      *
      * <pre>
@@ -1877,7 +1877,7 @@ public class SchemaBuilder {
 
     /**
      * Shortcut for creating an int field with the given name and no default.
-     * <p/>
+     * <p>
      * This is equivalent to:
      *
      * <pre>
@@ -1891,7 +1891,7 @@ public class SchemaBuilder {
     /**
      * Shortcut for creating an optional int field: a union of null and int 
with
      * null default.
-     * <p/>
+     * <p>
      * This is equivalent to:
      *
      * <pre>
@@ -1905,7 +1905,7 @@ public class SchemaBuilder {
     /**
      * Shortcut for creating a nullable int field: a union of int and null 
with an
      * int default.
-     * <p/>
+     * <p>
      * This is equivalent to:
      *
      * <pre>
@@ -1918,7 +1918,7 @@ public class SchemaBuilder {
 
     /**
      * Shortcut for creating a long field with the given name and no default.
-     * <p/>
+     * <p>
      * This is equivalent to:
      *
      * <pre>
@@ -1932,7 +1932,7 @@ public class SchemaBuilder {
     /**
      * Shortcut for creating an optional long field: a union of null and long 
with
      * null default.
-     * <p/>
+     * <p>
      * This is equivalent to:
      *
      * <pre>
@@ -1946,7 +1946,7 @@ public class SchemaBuilder {
     /**
      * Shortcut for creating a nullable long field: a union of long and null 
with a
      * long default.
-     * <p/>
+     * <p>
      * This is equivalent to:
      *
      * <pre>
@@ -1959,7 +1959,7 @@ public class SchemaBuilder {
 
     /**
      * Shortcut for creating a float field with the given name and no default.
-     * <p/>
+     * <p>
      * This is equivalent to:
      *
      * <pre>
@@ -1973,7 +1973,7 @@ public class SchemaBuilder {
     /**
      * Shortcut for creating an optional float field: a union of null and 
float with
      * null default.
-     * <p/>
+     * <p>
      * This is equivalent to:
      *
      * <pre>
@@ -1987,7 +1987,7 @@ public class SchemaBuilder {
     /**
      * Shortcut for creating a nullable float field: a union of float and null 
with
      * a float default.
-     * <p/>
+     * <p>
      * This is equivalent to:
      *
      * <pre>
@@ -2000,7 +2000,7 @@ public class SchemaBuilder {
 
     /**
      * Shortcut for creating a double field with the given name and no default.
-     * <p/>
+     * <p>
      * This is equivalent to:
      *
      * <pre>
@@ -2014,7 +2014,7 @@ public class SchemaBuilder {
     /**
      * Shortcut for creating an optional double field: a union of null and 
double
      * with null default.
-     * <p/>
+     * <p>
      * This is equivalent to:
      *
      * <pre>
@@ -2028,7 +2028,7 @@ public class SchemaBuilder {
     /**
      * Shortcut for creating a nullable double field: a union of double and 
null
      * with a double default.
-     * <p/>
+     * <p>
      * This is equivalent to:
      *
      * <pre>
@@ -2041,7 +2041,7 @@ public class SchemaBuilder {
 
     /**
      * Shortcut for creating a string field with the given name and no default.
-     * <p/>
+     * <p>
      * This is equivalent to:
      *
      * <pre>
@@ -2055,7 +2055,7 @@ public class SchemaBuilder {
     /**
      * Shortcut for creating an optional string field: a union of null and 
string
      * with null default.
-     * <p/>
+     * <p>
      * This is equivalent to:
      *
      * <pre>
@@ -2069,7 +2069,7 @@ public class SchemaBuilder {
     /**
      * Shortcut for creating a nullable string field: a union of string and 
null
      * with a string default.
-     * <p/>
+     * <p>
      * This is equivalent to:
      *
      * <pre>
@@ -2082,7 +2082,7 @@ public class SchemaBuilder {
 
     /**
      * Shortcut for creating a bytes field with the given name and no default.
-     * <p/>
+     * <p>
      * This is equivalent to:
      *
      * <pre>
@@ -2096,7 +2096,7 @@ public class SchemaBuilder {
     /**
      * Shortcut for creating an optional bytes field: a union of null and 
bytes with
      * null default.
-     * <p/>
+     * <p>
      * This is equivalent to:
      *
      * <pre>
@@ -2110,7 +2110,7 @@ public class SchemaBuilder {
     /**
      * Shortcut for creating a nullable bytes field: a union of bytes and null 
with
      * a bytes default.
-     * <p/>
+     * <p>
      * This is equivalent to:
      *
      * <pre>
@@ -2216,12 +2216,12 @@ public class SchemaBuilder {
     /**
      * Final step in configuring this field, finalizing name, namespace, 
alias, and
      * order. Sets the field's type to the schema by name reference.
-     * <p/>
+     * <p>
      * The name must correspond with a named schema that has already been 
created in
      * the context of this builder. The name may be a fully qualified name, or 
a
      * short name. If it is a short name, the namespace context of this 
builder will
      * be used.
-     * <p/>
+     * <p>
      * The name and namespace context rules are the same as the Avro schema 
JSON
      * specification.
      */
@@ -2232,13 +2232,13 @@ public class SchemaBuilder {
     /**
      * Final step in configuring this field, finalizing name, namespace, 
alias, and
      * order. Sets the field's type to the schema by name reference.
-     * <p/>
+     * <p>
      * The name must correspond with a named schema that has already been 
created in
      * the context of this builder. The name may be a fully qualified name, or 
a
      * short name. If it is a full name, the namespace is ignored. If it is a 
short
      * name, the namespace provided is used. If the namespace provided is 
null, the
      * namespace context of this builder will be used.
-     * <p/>
+     * <p>
      * The name and namespace context rules are the same as the Avro schema 
JSON
      * specification.
      */
diff --git 
a/lang/java/avro/src/main/java/org/apache/avro/SchemaCompatibility.java 
b/lang/java/avro/src/main/java/org/apache/avro/SchemaCompatibility.java
index 8b6a2839ad..77a1257c23 100644
--- a/lang/java/avro/src/main/java/org/apache/avro/SchemaCompatibility.java
+++ b/lang/java/avro/src/main/java/org/apache/avro/SchemaCompatibility.java
@@ -87,7 +87,7 @@ public class SchemaCompatibility {
    *
    * <p>
    * Matching includes reader name aliases.
-   * </p>
+   * <p>
    *
    * @param reader Named reader schema.
    * @param writer Named writer schema.
@@ -106,7 +106,7 @@ public class SchemaCompatibility {
    *
    * <p>
    * Matching includes reader name aliases.
-   * </p>
+   * <p>
    *
    * @param writerSchema Schema of the record where to look for the writer 
field.
    * @param readerField  Reader field to identify the corresponding writer 
field
@@ -188,7 +188,7 @@ public class SchemaCompatibility {
    *
    * <p>
    * Provides memoization to handle recursive schemas.
-   * </p>
+   * <p>
    */
   private static final class ReaderWriterCompatibilityChecker {
     private static final String ROOT_REFERENCE_TOKEN = "";
@@ -199,7 +199,7 @@ public class SchemaCompatibility {
      *
      * <p>
      * Memoizes the compatibility results.
-     * </p>
+     * <p>
      *
      * @param reader Reader schema to test.
      * @param writer Writer schema to test.
@@ -214,7 +214,7 @@ public class SchemaCompatibility {
      * Reports the compatibility of a reader/writer schema pair.
      * <p>
      * Memoizes the compatibility results.
-     * </p>
+     * <p>
      *
      * @param referenceToken The equivalent JSON pointer reference token
      *                       representation of the schema node being visited.
@@ -252,7 +252,7 @@ public class SchemaCompatibility {
      * <p>
      * Relies on external memoization performed by
      * {@link #getCompatibility(Schema, Schema)}.
-     * </p>
+     * <p>
      *
      * @param reader   Reader schema to test.
      * @param writer   Writer schema to test.
diff --git a/lang/java/avro/src/main/java/org/apache/avro/SchemaFormatter.java 
b/lang/java/avro/src/main/java/org/apache/avro/SchemaFormatter.java
index dee5382a19..72ffddd0fc 100644
--- a/lang/java/avro/src/main/java/org/apache/avro/SchemaFormatter.java
+++ b/lang/java/avro/src/main/java/org/apache/avro/SchemaFormatter.java
@@ -26,7 +26,7 @@ import java.util.ServiceLoader;
  * <p>
  * Schema formats have a name, and optionally a variant (all lowercase). The
  * Avro library supports a few formats out of the box:
- * </p>
+ * <p>
  *
  * <dl>
  *
@@ -59,7 +59,7 @@ import java.util.ServiceLoader;
  * {@link java.util.ServiceLoader}, which loads them using the context
  * ClassLoader when available, or the application ClassLoader when not. See the
  * {@code ServiceLoader} class for more details΀.
- * </p>
+ * <p>
  *
  * @see <a href=
  *      
"https://avro.apache.org/docs/current/specification/#schema-declaration";>Specification:
diff --git 
a/lang/java/avro/src/main/java/org/apache/avro/SchemaFormatterFactory.java 
b/lang/java/avro/src/main/java/org/apache/avro/SchemaFormatterFactory.java
index be731a86dd..d294fa80e1 100644
--- a/lang/java/avro/src/main/java/org/apache/avro/SchemaFormatterFactory.java
+++ b/lang/java/avro/src/main/java/org/apache/avro/SchemaFormatterFactory.java
@@ -26,7 +26,7 @@ import java.util.regex.Pattern;
  *
  * <p>
  * Notes to implementers:
- * </p>
+ * <p>
  *
  * <ul>
  *
@@ -57,7 +57,7 @@ public interface SchemaFormatterFactory {
    * class if it is named {@code <format>SchemaFormatterFactory}. That is, if 
the
    * implementing class is named {@code 
some.package.JsonSchemaFormatterFactory},
    * it returns: {@literal "json"}
-   * </p>
+   * <p>
    *
    * @return the name of the format
    */
@@ -80,7 +80,7 @@ public interface SchemaFormatterFactory {
    * Implementations should either return the only formatter for this format, 
or
    * call {@link #getFormatterForVariant(String)} with the default variant and
    * implement that method as well.
-   * </p>
+   * <p>
    *
    * @return the default formatter for this schema format
    */
diff --git a/lang/java/avro/src/main/java/org/apache/avro/SchemaParser.java 
b/lang/java/avro/src/main/java/org/apache/avro/SchemaParser.java
index 295cb778e3..1513ee9413 100644
--- a/lang/java/avro/src/main/java/org/apache/avro/SchemaParser.java
+++ b/lang/java/avro/src/main/java/org/apache/avro/SchemaParser.java
@@ -41,13 +41,13 @@ import java.util.ServiceLoader;
  * first result. This means it can transparently handle any schema format. The
  * Avro project defines a JSON based format and an IDL format (the latter
  * available as a separate dependency), but you can also provide your own.
- * </p>
+ * <p>
  *
  * <p>
  * The parser can handle various text based sources. If the source contains a
  * UTF encoded latin text based format it can even detect which UTF encoding 
was
  * used (UTF-8, UTF16BE, UTF16LE, UTF-32BE or UTF32LE).
- * </p>
+ * <p>
  *
  * @see FormattedSchemaParser
  * @see UtfTextUtils
@@ -59,7 +59,7 @@ public class SchemaParser {
   /**
    * <p>
    * Use a default SchemaParser to parse a single schema. Equivalent to:
-   * </p>
+   * <p>
    * <code>
    *   new SchemaParser().parse(schema).mainSchema()
    * </code>
@@ -77,7 +77,7 @@ public class SchemaParser {
    * <p>
    * Use a default SchemaParser to parse a single schema from a file. 
Equivalent
    * to:
-   * </p>
+   * <p>
    * <code>
    *   new SchemaParser().parse(schemaFile).mainSchema()
    * </code>
@@ -104,11 +104,11 @@ public class SchemaParser {
    * Create a schema parser with the specified name validator.
    * <p>
    * Initially, the list of known (named) schemata is empty.
-   * </p>
+   * <p>
    * <p>
    * Note: using {@link NameValidator#STRICT_VALIDATOR} to validate names is
    * advised for maximum interoperability.
-   * </p>
+   * <p>
    *
    * @param nameValidator the name validator to use
    */
diff --git 
a/lang/java/avro/src/main/java/org/apache/avro/SchemaValidationStrategy.java 
b/lang/java/avro/src/main/java/org/apache/avro/SchemaValidationStrategy.java
index 881aa36565..b8297b82a9 100644
--- a/lang/java/avro/src/main/java/org/apache/avro/SchemaValidationStrategy.java
+++ b/lang/java/avro/src/main/java/org/apache/avro/SchemaValidationStrategy.java
@@ -23,7 +23,7 @@ package org.apache.avro;
  * another.
  * <p>
  * What makes one schema compatible with another is not defined by the 
contract.
- * <p/>
+ * <p>
  */
 public interface SchemaValidationStrategy {
 
diff --git a/lang/java/avro/src/main/java/org/apache/avro/SchemaValidator.java 
b/lang/java/avro/src/main/java/org/apache/avro/SchemaValidator.java
index d1dee747d5..430cc6e608 100644
--- a/lang/java/avro/src/main/java/org/apache/avro/SchemaValidator.java
+++ b/lang/java/avro/src/main/java/org/apache/avro/SchemaValidator.java
@@ -22,11 +22,11 @@ package org.apache.avro;
  * <p>
  * A SchemaValidator has one method, which validates that a {@link Schema} is
  * <b>compatible<b/> with the other schemas provided.
- * </p>
+ * <p>
  * <p>
  * What makes one Schema compatible with another is not part of the interface
  * contract.
- * </p>
+ * <p>
  */
 public interface SchemaValidator {
 
diff --git 
a/lang/java/avro/src/main/java/org/apache/avro/SchemaValidatorBuilder.java 
b/lang/java/avro/src/main/java/org/apache/avro/SchemaValidatorBuilder.java
index a10e0408ba..514485d946 100644
--- a/lang/java/avro/src/main/java/org/apache/avro/SchemaValidatorBuilder.java
+++ b/lang/java/avro/src/main/java/org/apache/avro/SchemaValidatorBuilder.java
@@ -21,7 +21,7 @@ package org.apache.avro;
 /**
  * <p>
  * A Builder for creating SchemaValidators.
- * </p>
+ * <p>
  */
 public final class SchemaValidatorBuilder {
   private SchemaValidationStrategy strategy;
diff --git 
a/lang/java/avro/src/main/java/org/apache/avro/SystemLimitException.java 
b/lang/java/avro/src/main/java/org/apache/avro/SystemLimitException.java
index 003f2e406f..86faa24c1f 100644
--- a/lang/java/avro/src/main/java/org/apache/avro/SystemLimitException.java
+++ b/lang/java/avro/src/main/java/org/apache/avro/SystemLimitException.java
@@ -24,7 +24,7 @@ import org.slf4j.LoggerFactory;
 /**
  * Thrown to prevent making large allocations when reading potentially
  * pathological input data from an untrusted source.
- * <p/>
+ * <p>
  * The following system properties can be set to limit the size of bytes,
  * strings and collection types to be allocated:
  * <ul>
diff --git a/lang/java/avro/src/main/java/org/apache/avro/ValidateAll.java 
b/lang/java/avro/src/main/java/org/apache/avro/ValidateAll.java
index 9692dfe78b..0c5cbcf5dc 100644
--- a/lang/java/avro/src/main/java/org/apache/avro/ValidateAll.java
+++ b/lang/java/avro/src/main/java/org/apache/avro/ValidateAll.java
@@ -22,12 +22,12 @@ package org.apache.avro;
  * <p>
  * A {@link SchemaValidator} for validating the provided schema against all
  * schemas in the Iterable in {@link #validate(Schema, Iterable)}.
- * </p>
+ * <p>
  * <p>
  * Uses the {@link SchemaValidationStrategy} provided in the constructor to
  * validate the {@link Schema} against each Schema in the Iterable, in Iterator
  * order, via {@link SchemaValidationStrategy#validate(Schema, Schema)}.
- * </p>
+ * <p>
  */
 public final class ValidateAll implements SchemaValidator {
   private final SchemaValidationStrategy strategy;
diff --git a/lang/java/avro/src/main/java/org/apache/avro/ValidateLatest.java 
b/lang/java/avro/src/main/java/org/apache/avro/ValidateLatest.java
index ef75cd31aa..ecaf8060fb 100644
--- a/lang/java/avro/src/main/java/org/apache/avro/ValidateLatest.java
+++ b/lang/java/avro/src/main/java/org/apache/avro/ValidateLatest.java
@@ -24,12 +24,12 @@ import java.util.Iterator;
  * <p>
  * A {@link SchemaValidator} for validating the provided schema against the
  * first {@link Schema} in the iterable in {@link #validate(Schema, Iterable)}.
- * </p>
+ * <p>
  * <p>
  * Uses the {@link SchemaValidationStrategy} provided in the constructor to
  * validate the schema against the first Schema in the iterable, if it exists,
  * via {@link SchemaValidationStrategy#validate(Schema, Schema)}.
- * </p>
+ * <p>
  */
 public final class ValidateLatest implements SchemaValidator {
   private final SchemaValidationStrategy strategy;
diff --git 
a/lang/java/avro/src/main/java/org/apache/avro/file/DataFileWriter.java 
b/lang/java/avro/src/main/java/org/apache/avro/file/DataFileWriter.java
index 466fa28135..055353c1f5 100644
--- a/lang/java/avro/src/main/java/org/apache/avro/file/DataFileWriter.java
+++ b/lang/java/avro/src/main/java/org/apache/avro/file/DataFileWriter.java
@@ -380,7 +380,7 @@ public class DataFileWriter<D> implements Closeable, 
Flushable {
    * files are compatible, data blocks are copied directly without 
decompression.
    * If the codecs are not compatible, blocks from otherFile are uncompressed 
and
    * then compressed using this file's codec.
-   * <p/>
+   * <p>
    * If the recompress flag is set all blocks are decompressed and then 
compressed
    * using this file's codec. This is useful when the two files have compatible
    * compression codecs but different codec options. For example, one might 
append
diff --git 
a/lang/java/avro/src/main/java/org/apache/avro/generic/GenericData.java 
b/lang/java/avro/src/main/java/org/apache/avro/generic/GenericData.java
index ebbac9a322..9f1837628e 100644
--- a/lang/java/avro/src/main/java/org/apache/avro/generic/GenericData.java
+++ b/lang/java/avro/src/main/java/org/apache/avro/generic/GenericData.java
@@ -88,7 +88,7 @@ public class GenericData {
   /** Used to specify the Java type for a string schema. */
   public enum StringType {
     CharSequence, String, Utf8
-  };
+  }
 
   public static final String STRING_PROP = "avro.java.string";
   protected static final String STRING_TYPE_STRING = "String";
diff --git a/lang/java/avro/src/main/java/org/apache/avro/io/BinaryDecoder.java 
b/lang/java/avro/src/main/java/org/apache/avro/io/BinaryDecoder.java
index 3974eb5c62..fbd78f7d90 100644
--- a/lang/java/avro/src/main/java/org/apache/avro/io/BinaryDecoder.java
+++ b/lang/java/avro/src/main/java/org/apache/avro/io/BinaryDecoder.java
@@ -32,14 +32,14 @@ import java.util.Arrays;
 
 /**
  * An {@link Decoder} for binary-format data.
- * <p/>
+ * <p>
  * Instances are created using {@link DecoderFactory}.
- * <p/>
+ * <p>
  * This class may read-ahead and buffer bytes from the source beyond what is
  * required to serve its read methods. The number of unused bytes in the buffer
  * can be accessed by inputStream().remaining(), if the BinaryDecoder is not
  * 'direct'.
- * <p/>
+ * <p>
  *
  * @see Encoder
  * @see SystemLimitException
@@ -120,7 +120,7 @@ public class BinaryDecoder extends Decoder {
    * it exists) from this Decoder. The old source's state no longer depends on
    * this Decoder and its InputStream interface will continue to drain the
    * remaining buffer and source data.
-   * <p/>
+   * <p>
    * The decoder will read from the new source. The source will generally 
replace
    * the buffer with its own. If the source allocates a new buffer, it will 
create
    * it with size bufferSize.
@@ -510,7 +510,7 @@ public class BinaryDecoder extends Decoder {
    * Returns true if the current BinaryDecoder is at the end of its source data
    * and cannot read any further without throwing an EOFException or other
    * IOException.
-   * <p/>
+   * <p>
    * Not all implementations of BinaryDecoder support isEnd(). Implementations
    * that do not support isEnd() will throw a
    * {@link java.lang.UnsupportedOperationException}.
@@ -553,12 +553,12 @@ public class BinaryDecoder extends Decoder {
    * Ensures that buf[pos + num - 1] is not out of the buffer array bounds.
    * However, buf[pos + num -1] may be >= limit if there is not enough data 
left
    * in the source to fill the array with num bytes.
-   * <p/>
+   * <p>
    * This method allows readers to read ahead by num bytes safely without 
checking
    * for EOF at each byte. However, readers must ensure that their reads are 
valid
    * by checking that their read did not advance past the limit before 
adjusting
    * pos.
-   * <p/>
+   * <p>
    * num must be less than the buffer size and greater than 0
    */
   private void ensureBounds(int num) throws IOException {
@@ -688,16 +688,16 @@ public class BinaryDecoder extends Decoder {
    * InputStream's API is a barrier to performance due to several quirks:
    * InputStream does not in general require that as many bytes as possible 
have
    * been read when filling a buffer.
-   * <p/>
+   * <p>
    * InputStream's terminating conditions for a read are two-fold: EOFException
    * and '-1' on the return from read(). Implementations are supposed to return
    * '-1' on EOF but often do not. The extra terminating conditions cause extra
    * conditionals on both sides of the API, and slow performance significantly.
-   * <p/>
+   * <p>
    * ByteSource implementations provide read() and skip() variants that have
    * stronger guarantees than InputStream, freeing client code to be simplified
    * and faster.
-   * <p/>
+   * <p>
    * {@link #skipSourceBytes} and {@link #readRaw} are guaranteed to have read 
or
    * skipped as many bytes as possible, or throw EOFException.
    * {@link #trySkipBytes} and {@link #tryReadRaw} are guaranteed to attempt to
@@ -707,7 +707,7 @@ public class BinaryDecoder extends Decoder {
    * also be detected by a client if an EOFException is thrown from
    * {@link #skipSourceBytes} or {@link #readRaw}, or if {@link #trySkipBytes} 
or
    * {@link #tryReadRaw} return 0;
-   * <p/>
+   * <p>
    * A ByteSource also implements the InputStream contract for use by APIs that
    * require it. The InputStream interface must take into account buffering in 
any
    * decoder that this ByteSource is attached to. The other methods do not 
account
@@ -779,7 +779,7 @@ public class BinaryDecoder extends Decoder {
      * Attempts to copy up to <i>len</i> bytes from the source into data, 
starting
      * at index <i>off</i>. Returns the actual number of bytes copied which 
may be
      * between 0 and <i>len</i>.
-     * <p/>
+     * <p>
      * This method must attempt to read as much as possible from the source. 
Returns
      * 0 when at the end of stream/channel/file/etc.
      *
diff --git a/lang/java/avro/src/main/java/org/apache/avro/io/BinaryEncoder.java 
b/lang/java/avro/src/main/java/org/apache/avro/io/BinaryEncoder.java
index 97d9895c74..60d54718e2 100644
--- a/lang/java/avro/src/main/java/org/apache/avro/io/BinaryEncoder.java
+++ b/lang/java/avro/src/main/java/org/apache/avro/io/BinaryEncoder.java
@@ -25,7 +25,7 @@ import org.apache.avro.util.Utf8;
 
 /**
  * An abstract {@link Encoder} for Avro's binary encoding.
- * <p/>
+ * <p>
  * To construct and configure instances, use {@link EncoderFactory}
  *
  * @see EncoderFactory
@@ -167,7 +167,7 @@ public abstract class BinaryEncoder extends Encoder {
   /**
    * Returns the number of bytes currently buffered by this encoder. If this
    * Encoder does not buffer, this will always return zero.
-   * <p/>
+   * <p>
    * Call {@link #flush()} to empty the buffer to the underlying output.
    */
   public abstract int bytesBuffered();
diff --git 
a/lang/java/avro/src/main/java/org/apache/avro/io/BlockingBinaryEncoder.java 
b/lang/java/avro/src/main/java/org/apache/avro/io/BlockingBinaryEncoder.java
index 9a0d9e414b..5501df234e 100644
--- a/lang/java/avro/src/main/java/org/apache/avro/io/BlockingBinaryEncoder.java
+++ b/lang/java/avro/src/main/java/org/apache/avro/io/BlockingBinaryEncoder.java
@@ -31,13 +31,13 @@ import org.apache.avro.Schema;
  * arbitrarily long arrays and maps may be written and subsequently read 
without
  * exhausting memory. Values are buffered until the specified block size would
  * be exceeded, minimizing block overhead.
- * <p/>
+ * <p>
  * Use {@link EncoderFactory#blockingBinaryEncoder(OutputStream, 
BinaryEncoder)}
  * to construct and configure.
- * <p/>
+ * <p>
  * BlockingBinaryEncoder buffers writes, data may not appear on the output 
until
  * {@link #flush()} is called.
- * <p/>
+ * <p>
  * BlockingBinaryEncoder is not thread-safe
  *
  * @see BinaryEncoder
diff --git 
a/lang/java/avro/src/main/java/org/apache/avro/io/BlockingDirectBinaryEncoder.java
 
b/lang/java/avro/src/main/java/org/apache/avro/io/BlockingDirectBinaryEncoder.java
index 9f391a3192..e668abba0c 100644
--- 
a/lang/java/avro/src/main/java/org/apache/avro/io/BlockingDirectBinaryEncoder.java
+++ 
b/lang/java/avro/src/main/java/org/apache/avro/io/BlockingDirectBinaryEncoder.java
@@ -26,19 +26,19 @@ import java.util.ArrayList;
 
 /**
  * An {@link Encoder} for Avro's binary encoding that does not buffer output.
- * <p/>
+ * <p>
  * This encoder does not buffer writes in contrast to
  * {@link BufferedBinaryEncoder}. However, it is lighter-weight and useful 
when:
  * The buffering in BufferedBinaryEncoder is not desired because you buffer a
  * different level or the Encoder is very short-lived.
- * </p>
+ * <p>
  * The BlockingDirectBinaryEncoder will encode the number of bytes of the Map
  * and Array blocks. This will allow to postpone the decoding, or skip over it
  * at all.
- * <p/>
+ * <p>
  * To construct, use
  * {@link EncoderFactory#blockingDirectBinaryEncoder(OutputStream, 
BinaryEncoder)}
- * <p/>
+ * <p>
  * {@link BlockingDirectBinaryEncoder} instances returned by this method are 
not
  * thread-safe
  *
diff --git 
a/lang/java/avro/src/main/java/org/apache/avro/io/BufferedBinaryEncoder.java 
b/lang/java/avro/src/main/java/org/apache/avro/io/BufferedBinaryEncoder.java
index b0dfa4faf6..d8379f3f21 100644
--- a/lang/java/avro/src/main/java/org/apache/avro/io/BufferedBinaryEncoder.java
+++ b/lang/java/avro/src/main/java/org/apache/avro/io/BufferedBinaryEncoder.java
@@ -28,17 +28,17 @@ import org.apache.avro.AvroRuntimeException;
 
 /**
  * An {@link Encoder} for Avro's binary encoding.
- * <p/>
+ * <p>
  * This implementation buffers output to enhance performance. Output may not
  * appear on the underlying output until flush() is called.
- * <p/>
+ * <p>
  * {@link DirectBinaryEncoder} can be used in place of this implementation if
  * the buffering semantics are not desired, and the performance difference is
  * acceptable.
- * <p/>
+ * <p>
  * To construct or reconfigure, use
  * {@link EncoderFactory#binaryEncoder(OutputStream, BinaryEncoder)}.
- * <p/>
+ * <p>
  * To change the buffer size, configure the factory instance used to create
  * instances with {@link EncoderFactory#configureBufferSize(int)}
  *
@@ -190,11 +190,11 @@ public class BufferedBinaryEncoder extends BinaryEncoder {
   /**
    * ByteSink abstracts the destination of written data from the core workings 
of
    * BinaryEncoder.
-   * <p/>
+   * <p>
    * Currently the only destination option is an OutputStream, but we may later
    * want to handle other constructs or specialize for certain OutputStream
    * Implementations such as ByteBufferOutputStream.
-   * <p/>
+   * <p>
    */
   private abstract static class ByteSink {
     protected ByteSink() {
diff --git a/lang/java/avro/src/main/java/org/apache/avro/io/Decoder.java 
b/lang/java/avro/src/main/java/org/apache/avro/io/Decoder.java
index 80640a61aa..c9ba8ea4a7 100644
--- a/lang/java/avro/src/main/java/org/apache/avro/io/Decoder.java
+++ b/lang/java/avro/src/main/java/org/apache/avro/io/Decoder.java
@@ -24,14 +24,14 @@ import org.apache.avro.util.Utf8;
 
 /**
  * Low-level support for de-serializing Avro values.
- * <p/>
+ * <p>
  * This class has two types of methods. One type of methods support the reading
  * of leaf values (for example, {@link #readLong} and {@link #readString}).
- * <p/>
+ * <p>
  * The other type of methods support the reading of maps and arrays. These
  * methods are {@link #readArrayStart}, {@link #arrayNext}, and similar methods
  * for maps. See {@link #readArrayStart} for details on these methods.
- * <p/>
+ * <p>
  * {@link DecoderFactory} contains Decoder construction and configuration
  * facilities.
  *
@@ -243,18 +243,22 @@ public abstract class Decoder {
    * consisting of a Long field and a Boolean field. Your code would look
    * something like this:
    *
+   * <!-- spotless:off -->
    * <pre>
-   * Map<String, Record> m = new HashMap<String, Record>();
-   * Record reuse = new Record();
-   * for (long i = in.readMapStart(); i != 0; i = in.readMapNext()) {
-   *   for (long j = 0; j < i; j++) {
-   *     String key = in.readString();
-   *     reuse.intField = in.readInt();
-   *     reuse.boolField = in.readBoolean();
-   *     m.put(key, reuse);
+   * {@code
+   *   Map<String, Record> m = new HashMap<String, Record>();
+   *   Record reuse = new Record();
+   *   for (long i = in.readMapStart(); i != 0; i = in.readMapNext()) {
+   *     for (long j = 0; j < i; j++) {
+   *       String key = in.readString();
+   *       reuse.intField = in.readInt();
+   *       reuse.boolField = in.readBoolean();
+   *       m.put(key, reuse);
+   *     }
    *   }
    * }
    * </pre>
+   * <!-- spotless:on -->
    *
    * @throws AvroTypeException If this is a stateful reader and map is not the
    *                           type of the next value to be read
diff --git 
a/lang/java/avro/src/main/java/org/apache/avro/io/DecoderFactory.java 
b/lang/java/avro/src/main/java/org/apache/avro/io/DecoderFactory.java
index 1f9e05dad5..fce1ac5b24 100644
--- a/lang/java/avro/src/main/java/org/apache/avro/io/DecoderFactory.java
+++ b/lang/java/avro/src/main/java/org/apache/avro/io/DecoderFactory.java
@@ -28,10 +28,10 @@ import org.apache.avro.Schema;
  * Factories are thread-safe, and are generally cached by applications for
  * performance reasons. Multiple instances are only required if multiple
  * concurrent configurations are needed.
- * </p>
+ * <p>
  * <p>
  * Although Factories are thread-safe the {@link Decoder}s they return are not.
- * </p>
+ * <p>
  *
  * @see Decoder
  */
@@ -111,13 +111,13 @@ public class DecoderFactory {
    * Creates or reinitializes a {@link BinaryDecoder} with the input stream
    * provided as the source of data. If <i>reuse</i> is provided, it will be
    * reinitialized to the given input stream.
-   * <p/>
+   * <p>
    * {@link BinaryDecoder} instances returned by this method buffer their 
input,
    * reading up to {@link #getConfiguredBufferSize()} bytes past the minimum
    * required to satisfy read requests in order to achieve better performance. 
If
    * the buffering is not desired, use
    * {@link #directBinaryDecoder(InputStream, BinaryDecoder)}.
-   * <p/>
+   * <p>
    * {@link BinaryDecoder#inputStream()} provides a view on the data that is
    * buffer-aware, for users that need to interleave access to data with the
    * Decoder API.
@@ -146,17 +146,17 @@ public class DecoderFactory {
    * Creates or reinitializes a {@link BinaryDecoder} with the input stream
    * provided as the source of data. If <i>reuse</i> is provided, it will be
    * reinitialized to the given input stream.
-   * <p/>
+   * <p>
    * {@link BinaryDecoder} instances returned by this method do not buffer 
their
    * input. In most cases a buffering BinaryDecoder is sufficient in 
combination
    * with {@link BinaryDecoder#inputStream()} which provides a buffer-aware 
view
    * on the data.
-   * <p/>
+   * <p>
    * A "direct" BinaryDecoder does not read ahead from an InputStream or other
    * data source that cannot be rewound. From the perspective of a client, a
    * "direct" decoder must never read beyond the minimum necessary bytes to
    * service a {@link BinaryDecoder} API read request.
-   * <p/>
+   * <p>
    * In the case that the improved performance of a buffering implementation 
does
    * not outweigh the inconvenience of its buffering semantics, a "direct" 
decoder
    * can be used.
@@ -199,7 +199,7 @@ public class DecoderFactory {
    * as the source of data. If <i>reuse</i> is provided, it will attempt to
    * reinitialize <i>reuse</i> to the new byte array. This instance will use 
the
    * provided byte array as its buffer.
-   * <p/>
+   * <p>
    * {@link BinaryDecoder#inputStream()} provides a view on the data that is
    * buffer-aware and can provide a view of the data not yet read by Decoder 
API
    * methods.
@@ -245,7 +245,7 @@ public class DecoderFactory {
   /**
    * Creates a {@link JsonDecoder} using the InputStream provided for reading 
data
    * that conforms to the Schema provided.
-   * <p/>
+   * <p>
    *
    * @param schema The Schema for data read from this JsonEncoder. Cannot be 
null.
    * @param input  The InputStream to read from. Cannot be null.
@@ -259,7 +259,7 @@ public class DecoderFactory {
   /**
    * Creates a {@link JsonDecoder} using the String provided for reading data 
that
    * conforms to the Schema provided.
-   * <p/>
+   * <p>
    *
    * @param schema The Schema for data read from this JsonEncoder. Cannot be 
null.
    * @param input  The String to read from. Cannot be null.
diff --git 
a/lang/java/avro/src/main/java/org/apache/avro/io/DirectBinaryDecoder.java 
b/lang/java/avro/src/main/java/org/apache/avro/io/DirectBinaryDecoder.java
index ac251550da..de4c063811 100644
--- a/lang/java/avro/src/main/java/org/apache/avro/io/DirectBinaryDecoder.java
+++ b/lang/java/avro/src/main/java/org/apache/avro/io/DirectBinaryDecoder.java
@@ -28,7 +28,7 @@ import org.apache.avro.util.ByteBufferInputStream;
 
 /**
  * A non-buffering version of {@link BinaryDecoder}.
- * <p/>
+ * <p>
  * This implementation will not read-ahead from the provided InputStream beyond
  * the minimum required to service the API requests.
  *
diff --git 
a/lang/java/avro/src/main/java/org/apache/avro/io/DirectBinaryEncoder.java 
b/lang/java/avro/src/main/java/org/apache/avro/io/DirectBinaryEncoder.java
index df7c118b64..0f22592e43 100644
--- a/lang/java/avro/src/main/java/org/apache/avro/io/DirectBinaryEncoder.java
+++ b/lang/java/avro/src/main/java/org/apache/avro/io/DirectBinaryEncoder.java
@@ -23,15 +23,15 @@ import java.util.Objects;
 
 /**
  * An {@link Encoder} for Avro's binary encoding that does not buffer output.
- * <p/>
+ * <p>
  * This encoder does not buffer writes, and as a result is slower than
  * {@link BufferedBinaryEncoder}. However, it is lighter-weight and useful when
  * the buffering in BufferedBinaryEncoder is not desired and/or the Encoder is
  * very short-lived.
- * <p/>
+ * <p>
  * To construct, use
  * {@link EncoderFactory#directBinaryEncoder(OutputStream, BinaryEncoder)}
- * <p/>
+ * <p>
  * DirectBinaryEncoder is not thread-safe
  *
  * @see BinaryEncoder
diff --git a/lang/java/avro/src/main/java/org/apache/avro/io/Encoder.java 
b/lang/java/avro/src/main/java/org/apache/avro/io/Encoder.java
index 85d5c421fb..5c04676e1e 100644
--- a/lang/java/avro/src/main/java/org/apache/avro/io/Encoder.java
+++ b/lang/java/avro/src/main/java/org/apache/avro/io/Encoder.java
@@ -25,18 +25,18 @@ import org.apache.avro.util.Utf8;
 
 /**
  * Low-level support for serializing Avro values.
- * <p/>
+ * <p>
  * This class has two types of methods. One type of methods support the writing
  * of leaf values (for example, {@link #writeLong} and {@link #writeString}).
  * These methods have analogs in {@link Decoder}.
- * <p/>
+ * <p>
  * The other type of methods support the writing of maps and arrays. These
  * methods are {@link #writeArrayStart}, {@link #startItem}, and
  * {@link #writeArrayEnd} (and similar methods for maps). Some implementations
  * of {@link Encoder} handle the buffering required to break large maps and
  * arrays into blocks, which is necessary for applications that want to do
  * streaming. (See {@link #writeArrayStart} for details on these methods.)
- * <p/>
+ * <p>
  * {@link EncoderFactory} contains Encoder construction and configuration
  * facilities.
  *
@@ -272,6 +272,7 @@ public abstract class Encoder implements Flushable {
    * something like this:
    *
    * <pre>
+   * {@code
    * out.writeMapStart();
    * out.setItemCount(list.size());
    * for (Map.Entry<String, Record> entry : map.entrySet()) {
@@ -281,6 +282,7 @@ public abstract class Encoder implements Flushable {
    *   out.writeBoolean(entry.getValue().boolField);
    * }
    * out.writeMapEnd();
+   * }
    * </pre>
    *
    * @throws AvroTypeException If this is a stateful writer and a map is not
diff --git 
a/lang/java/avro/src/main/java/org/apache/avro/io/EncoderFactory.java 
b/lang/java/avro/src/main/java/org/apache/avro/io/EncoderFactory.java
index eaa83ba8ba..368c02c5ac 100644
--- a/lang/java/avro/src/main/java/org/apache/avro/io/EncoderFactory.java
+++ b/lang/java/avro/src/main/java/org/apache/avro/io/EncoderFactory.java
@@ -27,7 +27,7 @@ import com.fasterxml.jackson.core.JsonGenerator;
 
 /**
  * A factory for creating and configuring {@link Encoder} instances.
- * <p/>
+ * <p>
  * Factory methods that create Encoder instances are thread-safe. Multiple
  * instances with different configurations can be cached by an application.
  *
@@ -131,7 +131,7 @@ public class EncoderFactory {
    * {@link BinaryEncoder} instances created with
    * #blockingBinaryEncoder(OutputStream, BinaryEncoder) will have block 
buffers
    * of this size.
-   * <p/>
+   * <p>
    *
    * @see #configureBlockSize(int)
    * @see #blockingBinaryEncoder(OutputStream, BinaryEncoder)
@@ -146,15 +146,15 @@ public class EncoderFactory {
    * provided as the destination for written data. If <i>reuse</i> is 
provided, an
    * attempt will be made to reconfigure <i>reuse</i> rather than construct a 
new
    * instance, but this is not guaranteed, a new instance may be returned.
-   * <p/>
+   * <p>
    * The {@link BinaryEncoder} implementation returned may buffer its output. 
Data
    * may not appear on the underlying OutputStream until {@link 
Encoder#flush()}
    * is called. The buffer size is configured with
    * {@link #configureBufferSize(int)}.
-   * </p>
+   * <p>
    * If buffering is not desired, and lower performance is acceptable, use
    * {@link #directBinaryEncoder(OutputStream, BinaryEncoder)}
-   * <p/>
+   * <p>
    * {@link BinaryEncoder} instances returned by this method are not 
thread-safe
    *
    * @param out   The OutputStream to write to. Cannot be null.
@@ -182,18 +182,18 @@ public class EncoderFactory {
    * provided as the destination for written data. If <i>reuse</i> is 
provided, an
    * attempt will be made to reconfigure <i>reuse</i> rather than construct a 
new
    * instance, but this is not guaranteed, a new instance may be returned.
-   * <p/>
+   * <p>
    * The {@link BinaryEncoder} implementation returned does not buffer its 
output,
    * calling {@link Encoder#flush()} will simply cause the wrapped 
OutputStream to
    * be flushed.
-   * <p/>
+   * <p>
    * Performance of unbuffered writes can be significantly slower than buffered
    * writes. {@link #binaryEncoder(OutputStream, BinaryEncoder)} returns
    * BinaryEncoder instances that are tuned for performance but may buffer 
output.
    * The unbuffered, 'direct' encoder may be desired when buffering semantics 
are
    * problematic, or if the lifetime of the encoder is so short that the buffer
    * would not be useful.
-   * <p/>
+   * <p>
    * {@link BinaryEncoder} instances returned by this method are not 
thread-safe.
    *
    * @param out   The OutputStream to initialize to. Cannot be null.
@@ -222,21 +222,21 @@ public class EncoderFactory {
    * provided, an attempt will be made to reconfigure <i>reuse</i> rather than
    * construct a new instance, but this is not guaranteed, a new instance may 
be
    * returned.
-   * <p/>
+   * <p>
    * The {@link BinaryEncoder} implementation returned does not buffer its 
output,
    * calling {@link Encoder#flush()} will simply cause the wrapped 
OutputStream to
    * be flushed.
-   * <p/>
+   * <p>
    * The {@link BlockingDirectBinaryEncoder} will write the block sizes for the
    * arrays and maps so efficient skipping can be done.
-   * <p/>
+   * <p>
    * Performance of unbuffered writes can be significantly slower than buffered
    * writes. {@link #binaryEncoder(OutputStream, BinaryEncoder)} returns
    * BinaryEncoder instances that are tuned for performance but may buffer 
output.
    * The unbuffered, 'direct' encoder may be desired when buffering semantics 
are
    * problematic, or if the lifetime of the encoder is so short that the buffer
    * would not be useful.
-   * <p/>
+   * <p>
    * {@link BinaryEncoder} instances returned by this method are not 
thread-safe.
    *
    * @param out   The OutputStream to initialize to. Cannot be null.
@@ -264,17 +264,17 @@ public class EncoderFactory {
    * provided as the destination for written data. If <i>reuse</i> is 
provided, an
    * attempt will be made to reconfigure <i>reuse</i> rather than construct a 
new
    * instance, but this is not guaranteed, a new instance may be returned.
-   * <p/>
+   * <p>
    * The {@link BinaryEncoder} implementation returned buffers its output, 
calling
    * {@link Encoder#flush()} is required for output to appear on the underlying
    * OutputStream.
-   * <p/>
+   * <p>
    * The returned BinaryEncoder implements the Avro binary encoding using 
blocks
    * delimited with byte sizes for Arrays and Maps. This allows for some 
decoders
    * to skip over large Arrays or Maps without decoding the contents, but adds
    * some overhead. The default block size is configured with
    * {@link #configureBlockSize(int)}
-   * <p/>
+   * <p>
    * {@link BinaryEncoder} instances returned by this method are not 
thread-safe.
    *
    * @param out   The OutputStream to initialize to. Cannot be null.
@@ -302,10 +302,10 @@ public class EncoderFactory {
   /**
    * Creates a {@link JsonEncoder} using the OutputStream provided for writing
    * data conforming to the Schema provided.
-   * <p/>
+   * <p>
    * {@link JsonEncoder} buffers its output. Data may not appear on the 
underlying
    * OutputStream until {@link Encoder#flush()} is called.
-   * <p/>
+   * <p>
    * {@link JsonEncoder} is not thread-safe.
    *
    * @param schema The Schema for data written to this JsonEncoder. Cannot be
@@ -321,10 +321,10 @@ public class EncoderFactory {
   /**
    * Creates a {@link JsonEncoder} using the OutputStream provided for writing
    * data conforming to the Schema provided with optional pretty printing.
-   * <p/>
+   * <p>
    * {@link JsonEncoder} buffers its output. Data may not appear on the 
underlying
    * OutputStream until {@link Encoder#flush()} is called.
-   * <p/>
+   * <p>
    * {@link JsonEncoder} is not thread-safe.
    *
    * @param schema The Schema for data written to this JsonEncoder. Cannot be
@@ -342,10 +342,10 @@ public class EncoderFactory {
   /**
    * Creates a {@link JsonEncoder} using the OutputStream provided for writing
    * data conforming to the Schema provided with optional pretty printing.
-   * <p/>
+   * <p>
    * {@link JsonEncoder} buffers its output. Data may not appear on the 
underlying
    * OutputStream until {@link Encoder#flush()} is called.
-   * <p/>
+   * <p>
    * {@link JsonEncoder} is not thread-safe.
    *
    * @param schema    The Schema for data written to this JsonEncoder. Cannot 
be
@@ -374,10 +374,10 @@ public class EncoderFactory {
   /**
    * Creates a {@link JsonEncoder} using the {@link JsonGenerator} provided for
    * output of data conforming to the Schema provided.
-   * <p/>
+   * <p>
    * {@link JsonEncoder} buffers its output. Data may not appear on the 
underlying
    * output until {@link Encoder#flush()} is called.
-   * <p/>
+   * <p>
    * {@link JsonEncoder} is not thread-safe.
    *
    * @param schema The Schema for data written to this JsonEncoder. Cannot be
@@ -394,10 +394,10 @@ public class EncoderFactory {
    * Creates a {@link ValidatingEncoder} that wraps the Encoder provided. This
    * ValidatingEncoder will ensure that operations against it conform to the
    * schema provided.
-   * <p/>
+   * <p>
    * Many {@link Encoder}s buffer their output. Data may not appear on the
    * underlying output until {@link Encoder#flush()} is called.
-   * <p/>
+   * <p>
    * {@link ValidatingEncoder} is not thread-safe.
    *
    * @param schema  The Schema to validate operations against. Cannot be null.
diff --git a/lang/java/avro/src/main/java/org/apache/avro/io/JsonDecoder.java 
b/lang/java/avro/src/main/java/org/apache/avro/io/JsonDecoder.java
index 1876f87aaa..b921031f8e 100644
--- a/lang/java/avro/src/main/java/org/apache/avro/io/JsonDecoder.java
+++ b/lang/java/avro/src/main/java/org/apache/avro/io/JsonDecoder.java
@@ -40,9 +40,9 @@ import com.fasterxml.jackson.databind.util.TokenBuffer;
 
 /**
  * A {@link Decoder} for Avro's JSON data encoding.
- * </p>
+ * <p>
  * Construct using {@link DecoderFactory}.
- * </p>
+ * <p>
  * JsonDecoder is not thread-safe.
  */
 public class JsonDecoder extends ParsingDecoder implements 
Parser.ActionHandler {
@@ -81,9 +81,9 @@ public class JsonDecoder extends ParsingDecoder implements 
Parser.ActionHandler
 
   /**
    * Reconfigures this JsonDecoder to use the InputStream provided.
-   * <p/>
+   * <p>
    * If the InputStream provided is null, a NullPointerException is thrown.
-   * <p/>
+   * <p>
    * Otherwise, this JsonDecoder will reset its state and then reconfigure its
    * input.
    *
@@ -104,9 +104,9 @@ public class JsonDecoder extends ParsingDecoder implements 
Parser.ActionHandler
 
   /**
    * Reconfigures this JsonDecoder to use the String provided for input.
-   * <p/>
+   * <p>
    * If the String provided is null, a NullPointerException is thrown.
-   * <p/>
+   * <p>
    * Otherwise, this JsonDecoder will reset its state and then reconfigure its
    * input.
    *
diff --git a/lang/java/avro/src/main/java/org/apache/avro/io/JsonEncoder.java 
b/lang/java/avro/src/main/java/org/apache/avro/io/JsonEncoder.java
index 4613f403d0..8b72d4b799 100644
--- a/lang/java/avro/src/main/java/org/apache/avro/io/JsonEncoder.java
+++ b/lang/java/avro/src/main/java/org/apache/avro/io/JsonEncoder.java
@@ -41,12 +41,12 @@ import com.fasterxml.jackson.core.util.MinimalPrettyPrinter;
 
 /**
  * An {@link Encoder} for Avro's JSON data encoding.
- * </p>
+ * <p>
  * Construct using {@link EncoderFactory}.
- * </p>
+ * <p>
  * JsonEncoder buffers output, and data may not appear on the output until
  * {@link Encoder#flush()} is called.
- * </p>
+ * <p>
  * JsonEncoder is not thread-safe.
  */
 public class JsonEncoder extends ParsingEncoder implements 
Parser.ActionHandler {
@@ -120,9 +120,9 @@ public class JsonEncoder extends ParsingEncoder implements 
Parser.ActionHandler
 
   /**
    * Reconfigures this JsonEncoder to use the output stream provided.
-   * <p/>
+   * <p>
    * If the OutputStream provided is null, a NullPointerException is thrown.
-   * <p/>
+   * <p>
    * Otherwise, this JsonEncoder will flush its current output and then
    * reconfigure its output to use a default UTF8 JsonGenerator that writes to 
the
    * provided OutputStream.
@@ -138,9 +138,9 @@ public class JsonEncoder extends ParsingEncoder implements 
Parser.ActionHandler
 
   /**
    * Reconfigures this JsonEncoder to use the output stream provided.
-   * <p/>
+   * <p>
    * If the OutputStream provided is null, a NullPointerException is thrown.
-   * <p/>
+   * <p>
    * Otherwise, this JsonEncoder will flush its current output and then
    * reconfigure its output to use a default UTF8 JsonGenerator that writes to 
the
    * provided OutputStream.
@@ -161,9 +161,9 @@ public class JsonEncoder extends ParsingEncoder implements 
Parser.ActionHandler
 
   /**
    * Reconfigures this JsonEncoder to output to the JsonGenerator provided.
-   * <p/>
+   * <p>
    * If the JsonGenerator provided is null, a NullPointerException is thrown.
-   * <p/>
+   * <p>
    * Otherwise, this JsonEncoder will flush its current output and then
    * reconfigure its output to use the provided JsonGenerator.
    *
diff --git 
a/lang/java/avro/src/main/java/org/apache/avro/io/ValidatingDecoder.java 
b/lang/java/avro/src/main/java/org/apache/avro/io/ValidatingDecoder.java
index 3c5e084218..6a84885e51 100644
--- a/lang/java/avro/src/main/java/org/apache/avro/io/ValidatingDecoder.java
+++ b/lang/java/avro/src/main/java/org/apache/avro/io/ValidatingDecoder.java
@@ -31,10 +31,10 @@ import org.apache.avro.util.Utf8;
 /**
  * An implementation of {@link Decoder} that ensures that the sequence of
  * operations conforms to a schema.
- * <p/>
+ * <p>
  * Use {@link DecoderFactory#validatingDecoder(Schema, Decoder)} to construct
  * and configure.
- * <p/>
+ * <p>
  * ValidatingDecoder is not thread-safe.
  * 
  * @see Decoder
diff --git 
a/lang/java/avro/src/main/java/org/apache/avro/io/ValidatingEncoder.java 
b/lang/java/avro/src/main/java/org/apache/avro/io/ValidatingEncoder.java
index d61967751a..a64e295d16 100644
--- a/lang/java/avro/src/main/java/org/apache/avro/io/ValidatingEncoder.java
+++ b/lang/java/avro/src/main/java/org/apache/avro/io/ValidatingEncoder.java
@@ -31,10 +31,10 @@ import org.apache.avro.util.Utf8;
 /**
  * An implementation of {@link Encoder} that wraps another Encoder and ensures
  * that the sequence of operations conforms to the provided schema.
- * <p/>
+ * <p>
  * Use {@link EncoderFactory#validatingEncoder(Schema, Encoder)} to construct
  * and configure.
- * <p/>
+ * <p>
  * ValidatingEncoder is not thread-safe.
  *
  * @see Encoder
diff --git 
a/lang/java/avro/src/main/java/org/apache/avro/specific/SpecificData.java 
b/lang/java/avro/src/main/java/org/apache/avro/specific/SpecificData.java
index dbed69d79b..29345c56f7 100644
--- a/lang/java/avro/src/main/java/org/apache/avro/specific/SpecificData.java
+++ b/lang/java/avro/src/main/java/org/apache/avro/specific/SpecificData.java
@@ -246,8 +246,8 @@ public class SpecificData extends GenericData {
    * Retrieve the current value of the custom-coders feature flag. Defaults to
    * <code>false</code>, but this default can be overridden using the system
    * property <code>org.apache.avro.specific.use_custom_coders</code>, and can 
be
-   * set dynamically by {@link SpecificData#useCustomCoders()}. See <a
-   * 
href="https://avro.apache.org/docs/current/gettingstartedjava.html#Beta+feature:+Generating+faster+code"Getting
+   * set dynamically by {@link SpecificData#useCustomCoders()}. See <a href=
+   * 
"https://avro.apache.org/docs/current/gettingstartedjava.html#Beta+feature:+Generating+faster+code";>Getting
    * started with Java</a> for more about this feature flag.
    */
   public boolean useCustomCoders() {
diff --git a/lang/java/avro/src/main/java/org/apache/avro/util/TimePeriod.java 
b/lang/java/avro/src/main/java/org/apache/avro/util/TimePeriod.java
index 89496744f3..2e6922d0da 100644
--- a/lang/java/avro/src/main/java/org/apache/avro/util/TimePeriod.java
+++ b/lang/java/avro/src/main/java/org/apache/avro/util/TimePeriod.java
@@ -42,18 +42,18 @@ import static java.util.Objects.requireNonNull;
  * <p>
  * A temporal amount to model an {@link org.apache.avro.LogicalTypes.Duration
  * Avro duration} (the logical type).
- * </p>
+ * <p>
  *
  * <p>
  * It consists of a number of months, days and milliseconds, all modelled as an
  * unsigned integer.
- * </p>
+ * <p>
  *
  * <p>
  * Compared to {@link Period java.time.Period}, this class has a smaller range
  * ('only' supporting a little less than 358 million years), and cannot support
  * negative periods.
- * </p>
+ * <p>
  *
  * <p>
  * Compared to {@link Duration java.time.Duration}, this class has less
@@ -61,11 +61,11 @@ import static java.util.Objects.requireNonNull;
  * durations, and has a much smaller range. Where {@code java.time.Duration}
  * supports fixed ranges up to about 68 years, {@code TimePeriod} can only
  * handle about 49 days.
- * </p>
+ * <p>
  *
  * <p>
  * Comparison with the regular {@code java.time} classes:
- * </p>
+ * <p>
  *
  * <table>
  * <tr>
diff --git 
a/lang/java/avro/src/main/java/org/apache/avro/util/UtfTextUtils.java 
b/lang/java/avro/src/main/java/org/apache/avro/util/UtfTextUtils.java
index 967a48bf36..bb534dd1b4 100644
--- a/lang/java/avro/src/main/java/org/apache/avro/util/UtfTextUtils.java
+++ b/lang/java/avro/src/main/java/org/apache/avro/util/UtfTextUtils.java
@@ -35,7 +35,7 @@ import java.nio.charset.StandardCharsets;
  * is in the range U+0000-U+00FF. This heuristic works for all latin text based
  * formats, which includes Avro IDL, JSON, XML, etc. If the heuristic fails,
  * UTF-8 is assumed.
- * </p>
+ * <p>
  *
  * @see <a href="https://www.w3.org/TR/xml/#sec-guessing";>XML specification,
  *      appendix F: Autodetection of Character Encodings (Non-Normative)</a>
@@ -141,14 +141,14 @@ public class UtfTextUtils {
    * To ensure the most accurate detection, the algorithm requires at least 4
    * bytes. One should only provide less than 4 bytes of data if that is all 
there
    * is.
-   * </p>
+   * <p>
    *
    * <p>
    * Detection is certain when a byte order mark (BOM) is used. Otherwise a
    * heuristic is used, which works when the first character is from the first 
256
    * characters from the BMP (U+0000-U+00FF). This works for all latin-based
    * textual formats, like Avro IDL, JSON, YAML, XML, etc.
-   * </p>
+   * <p>
    *
    * @param firstFewBytes the first few bytes of the text to detect the 
character
    *                      set of
diff --git 
a/lang/java/compiler/src/main/java/org/apache/avro/compiler/specific/SpecificCompiler.java
 
b/lang/java/compiler/src/main/java/org/apache/avro/compiler/specific/SpecificCompiler.java
index 32a7d97cca..4d5403390c 100644
--- 
a/lang/java/compiler/src/main/java/org/apache/avro/compiler/specific/SpecificCompiler.java
+++ 
b/lang/java/compiler/src/main/java/org/apache/avro/compiler/specific/SpecificCompiler.java
@@ -249,8 +249,8 @@ public class SpecificCompiler {
    * Set to true to add @Nullable and @NotNull annotations. By default, 
JetBrains
    * annotations are used (org.jetbrains.annotations.Nullable and
    * org.jetbrains.annotations.NotNull) but this can be overridden using
-   * {@link #setNullSafeAnnotationNullable)} and
-   * {@link #setNullSafeAnnotationNotNull)}.
+   * {@link #setNullSafeAnnotationNullable} and
+   * {@link #setNullSafeAnnotationNotNull}.
    */
   public void setCreateNullSafeAnnotations(boolean createNullSafeAnnotations) {
     this.createNullSafeAnnotations = createNullSafeAnnotations;
diff --git 
a/lang/java/mapred/src/main/java/org/apache/avro/hadoop/file/SortedKeyValueFile.java
 
b/lang/java/mapred/src/main/java/org/apache/avro/hadoop/file/SortedKeyValueFile.java
index 247f0434e6..b8bd929b87 100644
--- 
a/lang/java/mapred/src/main/java/org/apache/avro/hadoop/file/SortedKeyValueFile.java
+++ 
b/lang/java/mapred/src/main/java/org/apache/avro/hadoop/file/SortedKeyValueFile.java
@@ -56,11 +56,11 @@ import org.slf4j.LoggerFactory;
  * keys in the 'data' file to their byte positions. The index file is intended
  * to fit in memory, so it should remain small. There is one entry in the index
  * file for each data block in the Avro container file.
- * </p>
+ * <p>
  *
  * <p>
  * SortedKeyValueFile is to Avro container file as MapFile is to SequenceFile.
- * </p>
+ * <p>
  */
 public class SortedKeyValueFile {
   private static final Logger LOG = 
LoggerFactory.getLogger(SortedKeyValueFile.class);
@@ -79,7 +79,7 @@ public class SortedKeyValueFile {
    * using the key index. It performs a single disk seek to the block and loads
    * the entire block into memory. The block is scanned until the key is found 
or
    * is determined not to exist.
-   * </p>
+   * <p>
    *
    * @param <K> The key type.
    * @param <V> The value type.
@@ -237,7 +237,7 @@ public class SortedKeyValueFile {
      * <p>
      * This method will move the current position in the file to the record
      * immediately following the requested key.
-     * </p>
+     * <p>
      *
      * @param key The key to look up.
      * @return The value associated with the key, or null if not found.
@@ -281,12 +281,12 @@ public class SortedKeyValueFile {
      *
      * <p>
      * Use the get() method to move the current position.
-     * </p>
+     * <p>
      *
      * <p>
      * Note that this iterator is shared with other clients of the file; it 
does not
      * contain a separate pointer into the file.
-     * </p>
+     * <p>
      *
      * @return An iterator.
      */
@@ -488,7 +488,7 @@ public class SortedKeyValueFile {
        * <p>
        * If the index inverval is N, then every N records will be indexed into 
the
        * index file.
-       * </p>
+       * <p>
        *
        * @param indexInterval The index interval.
        * @return This options instance.
diff --git 
a/lang/java/mapred/src/main/java/org/apache/avro/hadoop/io/AvroDatumConverterFactory.java
 
b/lang/java/mapred/src/main/java/org/apache/avro/hadoop/io/AvroDatumConverterFactory.java
index a9984e08e5..da55b857f0 100644
--- 
a/lang/java/mapred/src/main/java/org/apache/avro/hadoop/io/AvroDatumConverterFactory.java
+++ 
b/lang/java/mapred/src/main/java/org/apache/avro/hadoop/io/AvroDatumConverterFactory.java
@@ -59,7 +59,7 @@ import org.apache.hadoop.mapred.JobConf;
  * <li>NullWritable</li>
  * <li>Text</li>
  * </ul>
- * </p>
+ * <p>
  */
 public class AvroDatumConverterFactory extends Configured {
   /**
diff --git 
a/lang/java/mapred/src/main/java/org/apache/avro/hadoop/io/AvroDeserializer.java
 
b/lang/java/mapred/src/main/java/org/apache/avro/hadoop/io/AvroDeserializer.java
index 053c77a919..2c35dec41c 100644
--- 
a/lang/java/mapred/src/main/java/org/apache/avro/hadoop/io/AvroDeserializer.java
+++ 
b/lang/java/mapred/src/main/java/org/apache/avro/hadoop/io/AvroDeserializer.java
@@ -38,13 +38,13 @@ import org.apache.hadoop.io.serializer.Deserializer;
  * of the WritableSerialization model, so they are wrapper in
  * {@link org.apache.avro.mapred.AvroWrapper} objects and deserialization is
  * handled by this class.
- * </p>
+ * <p>
  *
  * <p>
  * MapReduce jobs that use AvroWrapper objects as keys or values need to be
  * configured with {@link AvroSerialization}. Use
  * {@link org.apache.avro.mapreduce.AvroJob} to help with Job configuration.
- * </p>
+ * <p>
  *
  * @param <T> The type of Avro wrapper.
  * @param <D> The Java type of the Avro data being wrapped.
diff --git 
a/lang/java/mapred/src/main/java/org/apache/avro/hadoop/io/AvroKeyComparator.java
 
b/lang/java/mapred/src/main/java/org/apache/avro/hadoop/io/AvroKeyComparator.java
index ca5e7c4b07..53496dc55e 100644
--- 
a/lang/java/mapred/src/main/java/org/apache/avro/hadoop/io/AvroKeyComparator.java
+++ 
b/lang/java/mapred/src/main/java/org/apache/avro/hadoop/io/AvroKeyComparator.java
@@ -33,7 +33,7 @@ import org.apache.hadoop.io.RawComparator;
  *
  * <p>
  * Compares AvroKeys output from the map phase for sorting.
- * </p>
+ * <p>
  */
 public class AvroKeyComparator<T> extends Configured implements 
RawComparator<AvroKey<T>> {
   /** The schema of the Avro data in the key to compare. */
diff --git 
a/lang/java/mapred/src/main/java/org/apache/avro/hadoop/io/AvroSequenceFile.java
 
b/lang/java/mapred/src/main/java/org/apache/avro/hadoop/io/AvroSequenceFile.java
index 4a2207b978..7bfcf9e06d 100644
--- 
a/lang/java/mapred/src/main/java/org/apache/avro/hadoop/io/AvroSequenceFile.java
+++ 
b/lang/java/mapred/src/main/java/org/apache/avro/hadoop/io/AvroSequenceFile.java
@@ -47,7 +47,7 @@ import static 
org.apache.hadoop.fs.CommonConfigurationKeysPublic.IO_FILE_BUFFER_
  * The vanilla Hadoop <code>SequenceFile</code> contains a <i>header</i>
  * followed by a sequence of <i>records</i>. A <i>record</i> consists of a
  * <i>key</i> and a <i>value</i>. The <i>key</i> and <i>value</i> must either:
- * </p>
+ * <p>
  *
  * <ul>
  * <li>implement the <code>Writable</code> interface, or</li>
@@ -62,11 +62,11 @@ import static 
org.apache.hadoop.fs.CommonConfigurationKeysPublic.IO_FILE_BUFFER_
  * implementation cannot determine whether an object instance of type
  * <code>CharSequence</code> that also implements <code>Writable</code> should
  * be serialized using Avro or WritableSerialization.
- * </p>
+ * <p>
  *
  * <p>
  * The solution implemented in <code>AvroSequenceFile</code> is to:
- * </p>
+ * <p>
  *
  * <ul>
  * <li>wrap Avro key data in an <code>AvroKey</code> object,</li>
@@ -98,7 +98,7 @@ public class AvroSequenceFile {
    * Since there are different implementations of <code>Writer</code> 
depending on
    * the compression type, this method constructs the appropriate subclass
    * depending on the compression type given in the <code>options</code>.
-   * </p>
+   * <p>
    *
    * @param options The options for the writer.
    * @return A new writer instance.
@@ -202,7 +202,7 @@ public class AvroSequenceFile {
        * {@link #withKeySchema(org.apache.avro.Schema)} to specify the writer 
schema.
        * The key class will be automatically set to
        * {@link org.apache.avro.mapred.AvroKey}.
-       * </p>
+       * <p>
        *
        * @param keyClass The key class.
        * @return This options instance.
@@ -222,7 +222,7 @@ public class AvroSequenceFile {
        * The key class will automatically be set to
        * {@link org.apache.avro.mapred.AvroKey}, so there is no need to call
        * {@link #withKeyClass(Class)} when using this method.
-       * </p>
+       * <p>
        *
        * @param keyWriterSchema The writer schema for the keys.
        * @return This options instance.
@@ -244,7 +244,7 @@ public class AvroSequenceFile {
        * {@link #withValueSchema(org.apache.avro.Schema)} to specify the writer
        * schema. The value class will be automatically set to
        * {@link org.apache.avro.mapred.AvroValue}.
-       * </p>
+       * <p>
        *
        * @param valueClass The value class.
        * @return This options instance.
@@ -264,7 +264,7 @@ public class AvroSequenceFile {
        * The value class will automatically be set to
        * {@link org.apache.avro.mapred.AvroValue}, so there is no need to call
        * {@link #withValueClass(Class)} when using this method.
-       * </p>
+       * <p>
        *
        * @param valueWriterSchema The writer schema for the values.
        * @return This options instance.
@@ -614,7 +614,7 @@ public class AvroSequenceFile {
        *
        * <p>
        * If not set, the writer schema will be used as the reader schema.
-       * </p>
+       * <p>
        *
        * @param keyReaderSchema The reader schema for the keys.
        * @return This options instance.
@@ -629,7 +629,7 @@ public class AvroSequenceFile {
        *
        * <p>
        * If not set, the writer schema will be used as the reader schema.
-       * </p>
+       * <p>
        *
        * @param valueReaderSchema The reader schema for the values.
        * @return This options instance.
diff --git 
a/lang/java/mapred/src/main/java/org/apache/avro/hadoop/io/AvroSerializer.java 
b/lang/java/mapred/src/main/java/org/apache/avro/hadoop/io/AvroSerializer.java
index f30626c91c..9e938445e9 100644
--- 
a/lang/java/mapred/src/main/java/org/apache/avro/hadoop/io/AvroSerializer.java
+++ 
b/lang/java/mapred/src/main/java/org/apache/avro/hadoop/io/AvroSerializer.java
@@ -37,13 +37,13 @@ import org.apache.hadoop.io.serializer.Serializer;
  * of the WritableSerialization model, so they are wrapped in
  * {@link org.apache.avro.mapred.AvroWrapper} objects and serialization is
  * handled by this class.
- * </p>
+ * <p>
  *
  * <p>
  * MapReduce jobs that use AvroWrapper objects as keys or values need to be
  * configured with {@link AvroSerialization}. Use
  * {@link org.apache.avro.mapreduce.AvroJob} to help with Job configuration.
- * </p>
+ * <p>
  *
  * @param <T> The Java type of the Avro data.
  */
diff --git 
a/lang/java/mapred/src/main/java/org/apache/avro/hadoop/util/AvroCharSequenceComparator.java
 
b/lang/java/mapred/src/main/java/org/apache/avro/hadoop/util/AvroCharSequenceComparator.java
index 2c97334d09..ce5fca3615 100644
--- 
a/lang/java/mapred/src/main/java/org/apache/avro/hadoop/util/AvroCharSequenceComparator.java
+++ 
b/lang/java/mapred/src/main/java/org/apache/avro/hadoop/util/AvroCharSequenceComparator.java
@@ -28,12 +28,12 @@ import java.util.Comparator;
  * order is when the schema is <i>"string"</i>. The Avro string schema maps to
  * the Java <code>CharSequence</code> interface, which does not define
  * <code>equals</code>, <code>hashCode</code>, or <code>compareTo</code>.
- * </p>
+ * <p>
  *
  * <p>
  * Using this comparator enables comparisons between <code>String</code> and
  * <code>Utf8</code> objects that are both valid when working with Avro 
strings.
- * </p>
+ * <p>
  *
  * @param <T> The type of object to compare.
  */
diff --git 
a/lang/java/mapred/src/main/java/org/apache/avro/mapred/AvroMultipleInputs.java 
b/lang/java/mapred/src/main/java/org/apache/avro/mapred/AvroMultipleInputs.java
index 5d6884413a..59e53f8772 100644
--- 
a/lang/java/mapred/src/main/java/org/apache/avro/mapred/AvroMultipleInputs.java
+++ 
b/lang/java/mapred/src/main/java/org/apache/avro/mapred/AvroMultipleInputs.java
@@ -38,10 +38,10 @@ import org.slf4j.LoggerFactory;
  *
  * <p>
  * Usage:
- * </p>
+ * <p>
  * <p>
  * <strong>Case 1: (ReflectData based inputs)</strong>
- * </p>
+ * <p>
  *
  * <pre>
  * // Enable ReflectData usage across job.
@@ -70,7 +70,7 @@ import org.slf4j.LoggerFactory;
  *
  * <p>
  * <strong>Case 2: (SpecificData based inputs)</strong>
- * </p>
+ * <p>
  *
  * <pre>
  * Schema type1Schema = Type1Record.SCHEMA$;
@@ -97,14 +97,14 @@ import org.slf4j.LoggerFactory;
  * <p>
  * <strong>Note on InputFormat:</strong> The InputFormat used will always be
  * {@link AvroInputFormat} when using this class.
- * </p>
+ * <p>
  * <p>
  * <strong>Note on collector outputs:</strong> When using this class, you will
  * need to ensure that the mapper implementations involved must all emit the
  * same Key type and Value record types, as set by
  * {@link AvroJob#setOutputSchema(JobConf, Schema)} or
  * {@link AvroJob#setMapOutputSchema(JobConf, Schema)}.
- * </p>
+ * <p>
  */
 public class AvroMultipleInputs {
 
diff --git 
a/lang/java/mapred/src/main/java/org/apache/avro/mapred/AvroMultipleOutputs.java
 
b/lang/java/mapred/src/main/java/org/apache/avro/mapred/AvroMultipleOutputs.java
index 20bd29c216..5735a66320 100644
--- 
a/lang/java/mapred/src/main/java/org/apache/avro/mapred/AvroMultipleOutputs.java
+++ 
b/lang/java/mapred/src/main/java/org/apache/avro/mapred/AvroMultipleOutputs.java
@@ -50,10 +50,10 @@ import org.apache.hadoop.io.NullWritable;
  * <code>Schema</code> and <code>OutputFormat</code>. A named output can be a
  * single file or a multi file. The later is refered as a multi named output
  * which is an unbound set of files all sharing the same <code>Schema</code>.
- * </p>
+ * <p>
  * <p>
  * Case two: to write data to different files provided by user
- * </p>
+ * <p>
  *
  * <p>
  * AvroMultipleOutputs supports counters, by default they are disabled. The
@@ -62,7 +62,7 @@ import org.apache.hadoop.io.NullWritable;
  * records written to each output name. For multi named outputs the name of the
  * counter is the concatenation of the named output, and underscore '_' and the
  * multiname.
- * </p>
+ * <p>
  *
  * Usage pattern for job submission:
  * 
@@ -246,7 +246,7 @@ public class AvroMultipleOutputs {
 
   /**
    * Adds a named output for the job.
-   * <p/>
+   * <p>
    *
    * @param conf              job conf to add the named output
    * @param namedOutput       named output name, it has to be a word, letters 
and
@@ -262,7 +262,7 @@ public class AvroMultipleOutputs {
 
   /**
    * Adds a multi named output for the job.
-   * <p/>
+   * <p>
    *
    * @param conf              job conf to add the named output
    * @param namedOutput       named output name, it has to be a word, letters 
and
@@ -278,7 +278,7 @@ public class AvroMultipleOutputs {
 
   /**
    * Adds a named output for the job.
-   * <p/>
+   * <p>
    *
    * @param conf              job conf to add the named output
    * @param namedOutput       named output name, it has to be a word, letters 
and
@@ -301,12 +301,12 @@ public class AvroMultipleOutputs {
 
   /**
    * Enables or disables counters for the named outputs.
-   * <p/>
+   * <p>
    * By default these counters are disabled.
-   * <p/>
+   * <p>
    * MultipleOutputs supports counters, by default the are disabled. The 
counters
    * group is the {@link AvroMultipleOutputs} class name.
-   * </p>
+   * <p>
    * The names of the counters are the same as the named outputs. For multi 
named
    * outputs the name of the counter is the concatenation of the named output, 
and
    * underscore '_' and the multiname.
@@ -320,12 +320,12 @@ public class AvroMultipleOutputs {
 
   /**
    * Returns if the counters for the named outputs are enabled or not.
-   * <p/>
+   * <p>
    * By default these counters are disabled.
-   * <p/>
+   * <p>
    * MultipleOutputs supports counters, by default the are disabled. The 
counters
    * group is the {@link AvroMultipleOutputs} class name.
-   * </p>
+   * <p>
    * The names of the counters are the same as the named outputs. For multi 
named
    * outputs the name of the counter is the concatenation of the named output, 
and
    * underscore '_' and the multiname.
@@ -422,7 +422,7 @@ public class AvroMultipleOutputs {
 
   /**
    * Output Collector for the default schema.
-   * <p/>
+   * <p>
    *
    * @param namedOutput the named output name
    * @param reporter    the reporter
@@ -435,7 +435,7 @@ public class AvroMultipleOutputs {
 
   /**
    * OutputCollector with custom schema.
-   * <p/>
+   * <p>
    *
    * @param namedOutput the named output name (this will the output file name)
    * @param reporter    the reporter
@@ -449,7 +449,7 @@ public class AvroMultipleOutputs {
 
   /**
    * OutputCollector with custom schema and file name.
-   * <p/>
+   * <p>
    *
    * @param namedOutput    the named output name
    * @param reporter       the reporter
@@ -465,7 +465,7 @@ public class AvroMultipleOutputs {
 
   /**
    * Gets the output collector for a named output.
-   * <p/>
+   * <p>
    *
    * @param namedOutput the named output name
    * @param reporter    the reporter
@@ -485,7 +485,7 @@ public class AvroMultipleOutputs {
 
   /**
    * Gets the output collector for a named output.
-   * <p/>
+   * <p>
    *
    * @param namedOutput the named output name
    * @param reporter    the reporter
@@ -500,7 +500,7 @@ public class AvroMultipleOutputs {
 
   /**
    * Gets the output collector for a multi named output.
-   * <p/>
+   * <p>
    *
    * @param namedOutput the named output name
    * @param multiName   the multi name part
@@ -543,7 +543,7 @@ public class AvroMultipleOutputs {
 
   /**
    * Closes all the opened named outputs.
-   * <p/>
+   * <p>
    * If overriden subclasses must invoke <code>super.close()</code> at the end 
of
    * their <code>close()</code>
    *
diff --git 
a/lang/java/mapred/src/main/java/org/apache/avro/mapred/AvroOutputFormat.java 
b/lang/java/mapred/src/main/java/org/apache/avro/mapred/AvroOutputFormat.java
index 88ac1cd73f..abefef9ecc 100644
--- 
a/lang/java/mapred/src/main/java/org/apache/avro/mapred/AvroOutputFormat.java
+++ 
b/lang/java/mapred/src/main/java/org/apache/avro/mapred/AvroOutputFormat.java
@@ -50,7 +50,7 @@ import static 
org.apache.avro.file.CodecFactory.DEFAULT_ZSTANDARD_BUFFERPOOL;
 
 /**
  * An {@link org.apache.hadoop.mapred.OutputFormat} for Avro data files.
- * <p/>
+ * <p>
  * You can specify various options using Job Configuration properties. Look at
  * the fields in {@link AvroJob} as well as this class to get an overview of 
the
  * supported options.
diff --git 
a/lang/java/mapred/src/main/java/org/apache/avro/mapred/DelegatingMapper.java 
b/lang/java/mapred/src/main/java/org/apache/avro/mapred/DelegatingMapper.java
index 47abf38c9c..b1bcac1c96 100644
--- 
a/lang/java/mapred/src/main/java/org/apache/avro/mapred/DelegatingMapper.java
+++ 
b/lang/java/mapred/src/main/java/org/apache/avro/mapred/DelegatingMapper.java
@@ -34,7 +34,8 @@ import org.apache.hadoop.util.ReflectionUtils;
  * map() call instead of during configure(), as we rely on the split object to
  * provide us that information.
  *
- * @see {@link AvroMultipleInputs#addInputPath(JobConf, Path, Class, Schema)}
+ * @see AvroMultipleInputs#addInputPath(org.apache.hadoop.mapred.JobConf,
+ *      org.apache.hadoop.fs.Path, Class, org.apache.avro.Schema)
  */
 class DelegatingMapper<IN, OUT, K, V, KO, VO> extends MapReduceBase
     implements Mapper<AvroWrapper<IN>, NullWritable, KO, VO> {
diff --git 
a/lang/java/mapred/src/main/java/org/apache/avro/mapred/tether/TetheredProcess.java
 
b/lang/java/mapred/src/main/java/org/apache/avro/mapred/tether/TetheredProcess.java
index cce9bfab95..5907dcd9c5 100644
--- 
a/lang/java/mapred/src/main/java/org/apache/avro/mapred/tether/TetheredProcess.java
+++ 
b/lang/java/mapred/src/main/java/org/apache/avro/mapred/tether/TetheredProcess.java
@@ -68,7 +68,7 @@ class TetheredProcess {
    */
   public enum Protocol {
     HTTP, SASL, NONE
-  };
+  }
 
   // which protocol we are using
   Protocol proto;
diff --git 
a/lang/java/mapred/src/main/java/org/apache/avro/mapreduce/AvroJob.java 
b/lang/java/mapred/src/main/java/org/apache/avro/mapreduce/AvroJob.java
index 03429d9c75..ac6c5271b3 100644
--- a/lang/java/mapred/src/main/java/org/apache/avro/mapreduce/AvroJob.java
+++ b/lang/java/mapred/src/main/java/org/apache/avro/mapreduce/AvroJob.java
@@ -35,7 +35,7 @@ import org.apache.hadoop.mapreduce.Job;
  * When using Avro data as MapReduce keys and values, data must be wrapped in a
  * suitable AvroWrapper implementation. MapReduce keys must be wrapped in an
  * AvroKey object, and MapReduce values must be wrapped in an AvroValue object.
- * </p>
+ * <p>
  *
  * <p>
  * Suppose you would like to write a line count mapper that reads from a text
@@ -46,7 +46,7 @@ import org.apache.hadoop.mapreduce.Job;
  * the <code>setMapOutputKeySchema()</code> and
  * <code>setMapOutputValueSchema()</code> methods to set writer schemas for the
  * records you will generate.
- * </p>
+ * <p>
  */
 public final class AvroJob {
   /** Disable the constructor for this utility class. */
diff --git 
a/lang/java/mapred/src/main/java/org/apache/avro/mapreduce/AvroKeyInputFormat.java
 
b/lang/java/mapred/src/main/java/org/apache/avro/mapreduce/AvroKeyInputFormat.java
index 5323361d75..4f901bbdf8 100644
--- 
a/lang/java/mapred/src/main/java/org/apache/avro/mapreduce/AvroKeyInputFormat.java
+++ 
b/lang/java/mapred/src/main/java/org/apache/avro/mapreduce/AvroKeyInputFormat.java
@@ -37,7 +37,7 @@ import org.slf4j.LoggerFactory;
  * Keys are AvroKey wrapper objects that contain the Avro data. Since Avro
  * container files store only records (not key/value pairs), the value from 
this
  * InputFormat is a NullWritable.
- * </p>
+ * <p>
  */
 public class AvroKeyInputFormat<T> extends FileInputFormat<AvroKey<T>, 
NullWritable> {
   private static final Logger LOG = 
LoggerFactory.getLogger(AvroKeyInputFormat.class);
diff --git 
a/lang/java/mapred/src/main/java/org/apache/avro/mapreduce/AvroKeyOutputFormat.java
 
b/lang/java/mapred/src/main/java/org/apache/avro/mapreduce/AvroKeyOutputFormat.java
index 0bb2b1d678..dd3fd039a9 100644
--- 
a/lang/java/mapred/src/main/java/org/apache/avro/mapreduce/AvroKeyOutputFormat.java
+++ 
b/lang/java/mapred/src/main/java/org/apache/avro/mapreduce/AvroKeyOutputFormat.java
@@ -37,7 +37,7 @@ import org.apache.hadoop.mapreduce.TaskAttemptContext;
  * <p>
  * Since Avro container files only contain records (not key/value pairs), this
  * output format ignores the value.
- * </p>
+ * <p>
  *
  * @param <T> The (java) type of the Avro data to write.
  */
diff --git 
a/lang/java/mapred/src/main/java/org/apache/avro/mapreduce/AvroKeyValueInputFormat.java
 
b/lang/java/mapred/src/main/java/org/apache/avro/mapreduce/AvroKeyValueInputFormat.java
index 1f2129576a..7ef91753e9 100644
--- 
a/lang/java/mapred/src/main/java/org/apache/avro/mapreduce/AvroKeyValueInputFormat.java
+++ 
b/lang/java/mapred/src/main/java/org/apache/avro/mapreduce/AvroKeyValueInputFormat.java
@@ -39,7 +39,7 @@ import org.slf4j.LoggerFactory;
  * and 'value' are expected. The contents of the 'key' field will be used as 
the
  * job input key, and the contents of the 'value' field will be used as the job
  * output value.
- * </p>
+ * <p>
  *
  * @param <K> The type of the Avro key to read.
  * @param <V> The type of the Avro value to read.
diff --git 
a/lang/java/mapred/src/main/java/org/apache/avro/mapreduce/AvroKeyValueOutputFormat.java
 
b/lang/java/mapred/src/main/java/org/apache/avro/mapreduce/AvroKeyValueOutputFormat.java
index 5c0894c5df..cf4bdcfe52 100644
--- 
a/lang/java/mapred/src/main/java/org/apache/avro/mapreduce/AvroKeyValueOutputFormat.java
+++ 
b/lang/java/mapred/src/main/java/org/apache/avro/mapreduce/AvroKeyValueOutputFormat.java
@@ -36,14 +36,14 @@ import org.apache.hadoop.mapreduce.TaskAttemptContext;
  * Since Avro container files can only contain records (not key/value pairs),
  * this output format puts the key and value into an Avro generic record with
  * two fields, named 'key' and 'value'.
- * </p>
+ * <p>
  *
  * <p>
  * The keys and values given to this output format may be Avro objects wrapped
  * in <code>AvroKey</code> or <code>AvroValue</code> objects. The basic 
Writable
  * types are also supported (e.g., IntWritable, Text); they will be converted 
to
  * their corresponding Avro types.
- * </p>
+ * <p>
  *
  * @param <K> The type of key. If an Avro type, it must be wrapped in an
  *            <code>AvroKey</code>.
diff --git 
a/lang/java/mapred/src/main/java/org/apache/avro/mapreduce/AvroKeyValueRecordReader.java
 
b/lang/java/mapred/src/main/java/org/apache/avro/mapreduce/AvroKeyValueRecordReader.java
index a6b7f7aaa3..785e1e4ac9 100644
--- 
a/lang/java/mapred/src/main/java/org/apache/avro/mapreduce/AvroKeyValueRecordReader.java
+++ 
b/lang/java/mapred/src/main/java/org/apache/avro/mapreduce/AvroKeyValueRecordReader.java
@@ -33,7 +33,7 @@ import org.apache.avro.mapred.AvroValue;
  * <p>
  * The contents of the 'key' field will be parsed into an AvroKey object. The
  * contents of the 'value' field will be parsed into an AvroValue object.
- * </p>
+ * <p>
  *
  * @param <K> The type of the Avro key to read.
  * @param <V> The type of the Avro value to read.
diff --git 
a/lang/java/mapred/src/main/java/org/apache/avro/mapreduce/AvroKeyValueRecordWriter.java
 
b/lang/java/mapred/src/main/java/org/apache/avro/mapreduce/AvroKeyValueRecordWriter.java
index 8fa3ed78cd..ebd6b78703 100644
--- 
a/lang/java/mapred/src/main/java/org/apache/avro/mapreduce/AvroKeyValueRecordWriter.java
+++ 
b/lang/java/mapred/src/main/java/org/apache/avro/mapreduce/AvroKeyValueRecordWriter.java
@@ -41,7 +41,7 @@ import org.apache.hadoop.mapreduce.TaskAttemptContext;
  * objects like Text or IntWritable, or they may be AvroWrapper subclasses
  * (AvroKey or AvroValue). Writable objects will be converted to their
  * corresponding Avro types when written to the generic record key/value pair.
- * </p>
+ * <p>
  *
  * @param <K> The type of key to write.
  * @param <V> The type of value to write.
diff --git 
a/lang/java/mapred/src/main/java/org/apache/avro/mapreduce/AvroMultipleOutputs.java
 
b/lang/java/mapred/src/main/java/org/apache/avro/mapreduce/AvroMultipleOutputs.java
index 68d44149ba..39d3762b15 100644
--- 
a/lang/java/mapred/src/main/java/org/apache/avro/mapreduce/AvroMultipleOutputs.java
+++ 
b/lang/java/mapred/src/main/java/org/apache/avro/mapreduce/AvroMultipleOutputs.java
@@ -49,17 +49,17 @@ import org.apache.hadoop.util.ReflectionUtils;
  *
  * Each additional output, or named output, may be configured with its own
  * <code>Schema</code> and <code>OutputFormat</code>.
- * </p>
+ * <p>
  * <p>
  * Case two: to write data to different files provided by user
- * </p>
+ * <p>
  *
  * <p>
  * AvroMultipleOutputs supports counters, by default they are disabled. The
  * counters group is the {@link AvroMultipleOutputs} class name. The names of
  * the counters are the same as the output name. These count the number of
  * records written to each output name.
- * </p>
+ * <p>
  *
  * Usage pattern for job submission:
  * 
@@ -216,7 +216,7 @@ public class AvroMultipleOutputs {
 
   /**
    * Adds a named output for the job.
-   * <p/>
+   * <p>
    *
    * @param job               job to add the named output
    * @param namedOutput       named output name, it has to be a word, letters 
and
@@ -233,7 +233,7 @@ public class AvroMultipleOutputs {
 
   /**
    * Adds a named output for the job.
-   * <p/>
+   * <p>
    *
    * @param job               job to add the named output
    * @param namedOutput       named output name, it has to be a word, letters 
and
diff --git 
a/lang/java/mapred/src/main/java/org/apache/avro/mapreduce/AvroRecordReaderBase.java
 
b/lang/java/mapred/src/main/java/org/apache/avro/mapreduce/AvroRecordReaderBase.java
index 551216d50c..6941444740 100644
--- 
a/lang/java/mapred/src/main/java/org/apache/avro/mapreduce/AvroRecordReaderBase.java
+++ 
b/lang/java/mapred/src/main/java/org/apache/avro/mapreduce/AvroRecordReaderBase.java
@@ -161,7 +161,7 @@ public abstract class AvroRecordReaderBase<K, V, T> extends 
RecordReader<K, V> {
    *
    * <p>
    * Calling <code>nextKeyValue()</code> moves this to the next record.
-   * </p>
+   * <p>
    *
    * @return The current Avro record (may be null if no record has been read).
    */
diff --git 
a/lang/java/mapred/src/main/java/org/apache/avro/mapreduce/AvroSequenceFileInputFormat.java
 
b/lang/java/mapred/src/main/java/org/apache/avro/mapreduce/AvroSequenceFileInputFormat.java
index c10487ff9e..cabee8d7de 100644
--- 
a/lang/java/mapred/src/main/java/org/apache/avro/mapreduce/AvroSequenceFileInputFormat.java
+++ 
b/lang/java/mapred/src/main/java/org/apache/avro/mapreduce/AvroSequenceFileInputFormat.java
@@ -52,7 +52,7 @@ public class AvroSequenceFileInputFormat<K, V> extends 
SequenceFileInputFormat<K
    * <p>
    * This class is based on Hadoop's SequenceFileRecordReader, modified to
    * construct an AvroSequenceFile.Reader instead of a SequenceFile.Reader.
-   * </p>
+   * <p>
    */
   protected class AvroSequenceFileRecordReader extends RecordReader<K, V> {
     private SequenceFile.Reader mReader;
diff --git 
a/lang/java/maven-plugin/src/main/java/org/apache/avro/mojo/AbstractAvroMojo.java
 
b/lang/java/maven-plugin/src/main/java/org/apache/avro/mojo/AbstractAvroMojo.java
index 5615df36e3..93a3b69269 100644
--- 
a/lang/java/maven-plugin/src/main/java/org/apache/avro/mojo/AbstractAvroMojo.java
+++ 
b/lang/java/maven-plugin/src/main/java/org/apache/avro/mojo/AbstractAvroMojo.java
@@ -410,7 +410,7 @@ public abstract class AbstractAvroMojo extends AbstractMojo 
{
   protected void doCompile(String filename, File sourceDirectory, File 
outputDirectory) throws IOException {
     throw new UnsupportedOperationException(
         "Programmer error: AbstractAvroMojo.doCompile(String, java.io.File, 
java.io.File) called directly");
-  };
+  }
 
   protected void doCompile(File sourceFileForModificationDetection, 
Collection<Schema> schemas, File outputDirectory)
       throws IOException {
diff --git 
a/lang/java/protobuf/src/main/java/org/apache/avro/protobuf/ProtoConversions.java
 
b/lang/java/protobuf/src/main/java/org/apache/avro/protobuf/ProtoConversions.java
index c65d0eb573..84f2dc7331 100644
--- 
a/lang/java/protobuf/src/main/java/org/apache/avro/protobuf/ProtoConversions.java
+++ 
b/lang/java/protobuf/src/main/java/org/apache/avro/protobuf/ProtoConversions.java
@@ -41,7 +41,7 @@ public class ProtoConversions {
   // timestamp precise of conversion from long
   private enum TimestampPrecise {
     Millis, Micros, Nanos
-  };
+  }
 
   public static class TimestampMillisConversion extends Conversion<Timestamp> {
     @Override
diff --git 
a/lang/java/trevni/avro/src/main/java/org/apache/trevni/avro/mapreduce/AvroTrevniKeyInputFormat.java
 
b/lang/java/trevni/avro/src/main/java/org/apache/trevni/avro/mapreduce/AvroTrevniKeyInputFormat.java
index 086187bef3..4f9cc204ea 100644
--- 
a/lang/java/trevni/avro/src/main/java/org/apache/trevni/avro/mapreduce/AvroTrevniKeyInputFormat.java
+++ 
b/lang/java/trevni/avro/src/main/java/org/apache/trevni/avro/mapreduce/AvroTrevniKeyInputFormat.java
@@ -40,7 +40,7 @@ import org.apache.hadoop.mapreduce.lib.input.FileInputFormat;
  * Keys are AvroKey wrapper objects that contain the Trevni data. Since Trevni
  * container files store only records (not key/value pairs), the value from 
this
  * InputFormat is a NullWritable.
- * </p>
+ * <p>
  *
  * <p>
  * A subset schema to be read may be specified with
diff --git 
a/lang/java/trevni/avro/src/main/java/org/apache/trevni/avro/mapreduce/AvroTrevniKeyOutputFormat.java
 
b/lang/java/trevni/avro/src/main/java/org/apache/trevni/avro/mapreduce/AvroTrevniKeyOutputFormat.java
index 8079b80109..15c2d24a7a 100644
--- 
a/lang/java/trevni/avro/src/main/java/org/apache/trevni/avro/mapreduce/AvroTrevniKeyOutputFormat.java
+++ 
b/lang/java/trevni/avro/src/main/java/org/apache/trevni/avro/mapreduce/AvroTrevniKeyOutputFormat.java
@@ -39,7 +39,7 @@ import 
org.apache.hadoop.mapreduce.lib.output.FileOutputFormat;
  * <p>
  * Since Trevni container files only contain records (not key/value pairs), 
this
  * output format ignores the value.
- * </p>
+ * <p>
  *
  * @param <T> The (java) type of the Trevni data to write.
  *
diff --git 
a/lang/java/trevni/avro/src/main/java/org/apache/trevni/avro/mapreduce/AvroTrevniKeyValueInputFormat.java
 
b/lang/java/trevni/avro/src/main/java/org/apache/trevni/avro/mapreduce/AvroTrevniKeyValueInputFormat.java
index 33329cc526..f66d3f9819 100644
--- 
a/lang/java/trevni/avro/src/main/java/org/apache/trevni/avro/mapreduce/AvroTrevniKeyValueInputFormat.java
+++ 
b/lang/java/trevni/avro/src/main/java/org/apache/trevni/avro/mapreduce/AvroTrevniKeyValueInputFormat.java
@@ -42,7 +42,7 @@ import org.apache.hadoop.mapreduce.lib.input.FileInputFormat;
  * 'key' and 'value' are expected. The contents of the 'key' field will be used
  * as the job input key, and the contents of the 'value' field will be used as
  * the job output value.
- * </p>
+ * <p>
  *
  * @param <K> The type of the Trevni key to read.
  * @param <V> The type of the Trevni value to read.
diff --git 
a/lang/java/trevni/avro/src/main/java/org/apache/trevni/avro/mapreduce/AvroTrevniKeyValueOutputFormat.java
 
b/lang/java/trevni/avro/src/main/java/org/apache/trevni/avro/mapreduce/AvroTrevniKeyValueOutputFormat.java
index a56400b2b3..fe3e45b8d0 100644
--- 
a/lang/java/trevni/avro/src/main/java/org/apache/trevni/avro/mapreduce/AvroTrevniKeyValueOutputFormat.java
+++ 
b/lang/java/trevni/avro/src/main/java/org/apache/trevni/avro/mapreduce/AvroTrevniKeyValueOutputFormat.java
@@ -40,14 +40,14 @@ import 
org.apache.hadoop.mapreduce.lib.output.FileOutputFormat;
  * Since Trevni container files can only contain records (not key/value pairs),
  * this output format puts the key and value into an Avro generic record with
  * two fields, named 'key' and 'value'.
- * </p>
+ * <p>
  *
  * <p>
  * The keys and values given to this output format may be Avro objects wrapped
  * in <code>AvroKey</code> or <code>AvroValue</code> objects. The basic 
Writable
  * types are also supported (e.g., IntWritable, Text); they will be converted 
to
  * their corresponding Avro types.
- * </p>
+ * <p>
  *
  * @param <K> The type of key. If an Avro type, it must be wrapped in an
  *            <code>AvroKey</code>.
diff --git 
a/lang/java/trevni/avro/src/main/java/org/apache/trevni/avro/mapreduce/AvroTrevniKeyValueRecordReader.java
 
b/lang/java/trevni/avro/src/main/java/org/apache/trevni/avro/mapreduce/AvroTrevniKeyValueRecordReader.java
index 128fa3370d..8f8f7af158 100644
--- 
a/lang/java/trevni/avro/src/main/java/org/apache/trevni/avro/mapreduce/AvroTrevniKeyValueRecordReader.java
+++ 
b/lang/java/trevni/avro/src/main/java/org/apache/trevni/avro/mapreduce/AvroTrevniKeyValueRecordReader.java
@@ -32,7 +32,7 @@ import org.apache.avro.mapred.AvroValue;
  * <p>
  * The contents of the 'key' field will be parsed into an AvroKey object. The
  * contents of the 'value' field will be parsed into an AvroValue object.
- * </p>
+ * <p>
  *
  * @param <K> The type of the Avro key to read.
  * @param <V> The type of the Avro value to read.
diff --git 
a/lang/java/trevni/avro/src/main/java/org/apache/trevni/avro/mapreduce/AvroTrevniKeyValueRecordWriter.java
 
b/lang/java/trevni/avro/src/main/java/org/apache/trevni/avro/mapreduce/AvroTrevniKeyValueRecordWriter.java
index 34d23a3c67..96f456b850 100644
--- 
a/lang/java/trevni/avro/src/main/java/org/apache/trevni/avro/mapreduce/AvroTrevniKeyValueRecordWriter.java
+++ 
b/lang/java/trevni/avro/src/main/java/org/apache/trevni/avro/mapreduce/AvroTrevniKeyValueRecordWriter.java
@@ -39,7 +39,7 @@ import org.apache.hadoop.mapreduce.TaskAttemptContext;
  * objects like Text or IntWritable, or they may be AvroWrapper subclasses
  * (AvroKey or AvroValue). Writable objects will be converted to their
  * corresponding Avro types when written to the generic record key/value pair.
- * </p>
+ * <p>
  *
  * @param <K> The type of key to write.
  * @param <V> The type of value to write.
diff --git 
a/lang/java/trevni/avro/src/main/java/org/apache/trevni/avro/mapreduce/AvroTrevniRecordReaderBase.java
 
b/lang/java/trevni/avro/src/main/java/org/apache/trevni/avro/mapreduce/AvroTrevniRecordReaderBase.java
index 3e862c67f4..316ccaeaf6 100644
--- 
a/lang/java/trevni/avro/src/main/java/org/apache/trevni/avro/mapreduce/AvroTrevniRecordReaderBase.java
+++ 
b/lang/java/trevni/avro/src/main/java/org/apache/trevni/avro/mapreduce/AvroTrevniRecordReaderBase.java
@@ -85,7 +85,7 @@ public abstract class AvroTrevniRecordReaderBase<K, V, T> 
extends RecordReader<K
    *
    * <p>
    * Calling <code>nextKeyValue()</code> moves this to the next record.
-   * </p>
+   * <p>
    *
    * @return The current Trevni record (may be null if no record has been 
read).
    */
diff --git a/pom.xml b/pom.xml
index 6693fc4cdf..14ea4497ac 100644
--- a/pom.xml
+++ b/pom.xml
@@ -49,7 +49,7 @@
     <!-- plugin versions -->
     <apache-rat-plugin.version>0.18</apache-rat-plugin.version>
     <checkstyle-plugin.version>3.6.0</checkstyle-plugin.version>
-    <checkstyle.version>13.3.0</checkstyle.version>
+    <checkstyle.version>14.4.0</checkstyle.version>
     <enforcer-plugin.version>3.7.0</enforcer-plugin.version>
     <extra-enforcer-rules.version>1.12.1</extra-enforcer-rules.version>
     <maven-antrun-plugin.version>3.2.0</maven-antrun-plugin.version>

Reply via email to