diff --git a/dbws/org.eclipse.persistence.dbws/src/main/java/org/eclipse/persistence/internal/dbws/ProviderHelper.java b/dbws/org.eclipse.persistence.dbws/src/main/java/org/eclipse/persistence/internal/dbws/ProviderHelper.java
index 13a573c..172bbe3 100644
--- a/dbws/org.eclipse.persistence.dbws/src/main/java/org/eclipse/persistence/internal/dbws/ProviderHelper.java
+++ b/dbws/org.eclipse.persistence.dbws/src/main/java/org/eclipse/persistence/internal/dbws/ProviderHelper.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 1998, 2020 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1998, 2021 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0 which is available at
@@ -99,7 +99,6 @@
 /**
  * <p>
  * <b>INTERNAL:</b> ProviderHelper bridges between {@link DBWSAdapter}'s and JAX-WS {@link Provider}'s
- * <p>
  *
  * @author Mike Norman - michael.norman@oracle.com
  * @since EclipseLink 1.1
diff --git a/foundation/eclipselink.core.test/src/it/java/org/eclipse/persistence/testing/tests/identitymaps/DeleteFromIdentityMapTest.java b/foundation/eclipselink.core.test/src/it/java/org/eclipse/persistence/testing/tests/identitymaps/DeleteFromIdentityMapTest.java
index 08e2b73..c780868 100644
--- a/foundation/eclipselink.core.test/src/it/java/org/eclipse/persistence/testing/tests/identitymaps/DeleteFromIdentityMapTest.java
+++ b/foundation/eclipselink.core.test/src/it/java/org/eclipse/persistence/testing/tests/identitymaps/DeleteFromIdentityMapTest.java
@@ -27,7 +27,7 @@
  * For NoIdentityMap, the return value of the delete operation should be null.
  * For all other identity maps, the return value of the delete operation should be
  * identical to the original value. For all identity maps, the return value of the
- * subsequent get operation should be null. <p>
+ * subsequent get operation should be null.
  */
 public class DeleteFromIdentityMapTest extends RegisterInIdentityMapTest {
     protected Object deletionResult;
diff --git a/foundation/eclipselink.core.test/src/it/java/org/eclipse/persistence/testing/tests/identitymaps/RegisterInIdentityMapTest.java b/foundation/eclipselink.core.test/src/it/java/org/eclipse/persistence/testing/tests/identitymaps/RegisterInIdentityMapTest.java
index 8271898..3cf2989 100644
--- a/foundation/eclipselink.core.test/src/it/java/org/eclipse/persistence/testing/tests/identitymaps/RegisterInIdentityMapTest.java
+++ b/foundation/eclipselink.core.test/src/it/java/org/eclipse/persistence/testing/tests/identitymaps/RegisterInIdentityMapTest.java
@@ -21,7 +21,7 @@
 
 /**
  * Register an object in an identity map by the primary key of that object. <p>
- * No exceptions should be thrown when registering an object in an identity map. <p>
+ * No exceptions should be thrown when registering an object in an identity map.
  */
 public class RegisterInIdentityMapTest extends TestCase {
     protected Class identityMapClass;
diff --git a/foundation/eclipselink.core.test/src/it/java/org/eclipse/persistence/testing/tests/identitymaps/SetWriteLockInIdentityMapTest.java b/foundation/eclipselink.core.test/src/it/java/org/eclipse/persistence/testing/tests/identitymaps/SetWriteLockInIdentityMapTest.java
index e9e2e42..8c323c9 100644
--- a/foundation/eclipselink.core.test/src/it/java/org/eclipse/persistence/testing/tests/identitymaps/SetWriteLockInIdentityMapTest.java
+++ b/foundation/eclipselink.core.test/src/it/java/org/eclipse/persistence/testing/tests/identitymaps/SetWriteLockInIdentityMapTest.java
@@ -19,7 +19,7 @@
 /**
  * Register a single object in the identity map with a write lock value. <p>
  * The identity map method setWriteLockValue(Vector, Object) sets the lock
- * value of the object whose primary key is in Vector. This class tests this method.<p>
+ * value of the object whose primary key is in Vector. This class tests this method.
  */
 public class SetWriteLockInIdentityMapTest extends RegisterInIdentityMapTest {
     protected Object originalWriteLockValue;
diff --git a/foundation/eclipselink.core.test/src/it/java/org/eclipse/persistence/testing/tests/inheritance/UnitOfWorkIdentityMapAccessorTest.java b/foundation/eclipselink.core.test/src/it/java/org/eclipse/persistence/testing/tests/inheritance/UnitOfWorkIdentityMapAccessorTest.java
index 7ab663f..b8e0dad 100644
--- a/foundation/eclipselink.core.test/src/it/java/org/eclipse/persistence/testing/tests/inheritance/UnitOfWorkIdentityMapAccessorTest.java
+++ b/foundation/eclipselink.core.test/src/it/java/org/eclipse/persistence/testing/tests/inheritance/UnitOfWorkIdentityMapAccessorTest.java
@@ -28,13 +28,10 @@
  * <p>
  * <b>Purpose</b>: This test checks to see if the Unit of Work Identity Map functions with the Inheritance mappings.
  * <p>
- * <p>
  * <b>Motivation </b>: This test was written to test inheritance using UnitOfWorkIdentityMapAccessor.
  * <p>
  * <b>Responsibilities</b>: Check if the unit of work identity map works correctly with inheritance.
- * <p>
- * <p>
- * */
+ */
 public class UnitOfWorkIdentityMapAccessorTest extends AutoVerifyTestCase {
 
     private UnitOfWork unitOfWork;
diff --git a/foundation/eclipselink.core.test/src/it/java/org/eclipse/persistence/testing/tests/ownership/UnitOfWorkTest.java b/foundation/eclipselink.core.test/src/it/java/org/eclipse/persistence/testing/tests/ownership/UnitOfWorkTest.java
index 1c74279..11fa4d2 100644
--- a/foundation/eclipselink.core.test/src/it/java/org/eclipse/persistence/testing/tests/ownership/UnitOfWorkTest.java
+++ b/foundation/eclipselink.core.test/src/it/java/org/eclipse/persistence/testing/tests/ownership/UnitOfWorkTest.java
@@ -24,7 +24,7 @@
  * <b>Purpose</b>: This test checks to see if the Unit of Work functions with the private-owned mappings
  * <p>
  * <b>Motivation </b>: This test was written to test a new feature: the UOW.
- * <p>
+ *
  */
 public class UnitOfWorkTest extends WriteObjectTest {
     public Object unitOfWorkWorkingCopy;
diff --git a/foundation/eclipselink.core.test/src/it/java/org/eclipse/persistence/testing/tests/queries/PessimisticLockRefreshTest.java b/foundation/eclipselink.core.test/src/it/java/org/eclipse/persistence/testing/tests/queries/PessimisticLockRefreshTest.java
index 4ac2982..6d7c6d9 100644
--- a/foundation/eclipselink.core.test/src/it/java/org/eclipse/persistence/testing/tests/queries/PessimisticLockRefreshTest.java
+++ b/foundation/eclipselink.core.test/src/it/java/org/eclipse/persistence/testing/tests/queries/PessimisticLockRefreshTest.java
@@ -19,7 +19,6 @@
 
 /**
  * Tests the decoupling of bean-level pessimistic locking and refresh queries.
- * <p>
  *
  * @author  smcritch
  */
diff --git a/foundation/eclipselink.core.test/src/it/java/org/eclipse/persistence/testing/tests/unitofwork/writechanges/WriteChanges_ReportQuery_TestCase.java b/foundation/eclipselink.core.test/src/it/java/org/eclipse/persistence/testing/tests/unitofwork/writechanges/WriteChanges_ReportQuery_TestCase.java
index 88098c7..7713326 100644
--- a/foundation/eclipselink.core.test/src/it/java/org/eclipse/persistence/testing/tests/unitofwork/writechanges/WriteChanges_ReportQuery_TestCase.java
+++ b/foundation/eclipselink.core.test/src/it/java/org/eclipse/persistence/testing/tests/unitofwork/writechanges/WriteChanges_ReportQuery_TestCase.java
@@ -29,7 +29,7 @@
  * This test case is basically subsumed under WriteChanges_IssueSQL_TestCase.
  * Executing a ReportQuery after writeChanges must work for other tests that
  * need to verify database state.
- * <p>
+ *
  * @author  smcritch
  */
 public class WriteChanges_ReportQuery_TestCase extends AutoVerifyTestCase {
diff --git a/foundation/org.eclipse.persistence.corba/src/main/java/org/eclipse/persistence/internal/sessions/coordination/rmi/iiop/_RMIRemoteCommandConnectionImpl_Tie.java b/foundation/org.eclipse.persistence.corba/src/main/java/org/eclipse/persistence/internal/sessions/coordination/rmi/iiop/_RMIRemoteCommandConnectionImpl_Tie.java
index f9ce184..57cda14 100644
--- a/foundation/org.eclipse.persistence.corba/src/main/java/org/eclipse/persistence/internal/sessions/coordination/rmi/iiop/_RMIRemoteCommandConnectionImpl_Tie.java
+++ b/foundation/org.eclipse.persistence.corba/src/main/java/org/eclipse/persistence/internal/sessions/coordination/rmi/iiop/_RMIRemoteCommandConnectionImpl_Tie.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 1998, 2020 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1998, 2021 Oracle and/or its affiliates. All rights reserved.
  * Copyright (c) 1998, 2018 IBM Corporation and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
@@ -42,6 +42,13 @@
         "RMI:org.eclipse.persistence.internal.sessions.coordination.rmi.RMIRemoteCommandConnection:0000000000000000"
     };
 
+    /**
+     * Default constructor.
+     */
+    public _RMIRemoteCommandConnectionImpl_Tie() {
+        super();
+    }
+
     @Override
     public void setTarget(Remote target) {
         this.target = (RMIRemoteCommandConnectionImpl) target;
@@ -99,10 +106,14 @@
                     if (method.equals("executeCommand__org_omg_boxedRMI_seq1_octet")) {
                         return executeCommand__org_omg_boxedRMI_seq1_octet(in, reply);
                     }
+                    break;
                 case 69: 
                     if (method.equals("executeCommand__org_eclipse_persistence_sessions_coordination_Command")) {
                         return executeCommand__org_eclipse_persistence_sessions_coordination_Command(in, reply);
                     }
+                    break;
+                default:
+                    throw new BAD_OPERATION();
             }
             throw new BAD_OPERATION();
         } catch (SystemException ex) {
diff --git a/foundation/org.eclipse.persistence.corba/src/main/java/org/eclipse/persistence/sessions/remote/corba/sun/CORBARemoteSessionControllerHelper.java b/foundation/org.eclipse.persistence.corba/src/main/java/org/eclipse/persistence/sessions/remote/corba/sun/CORBARemoteSessionControllerHelper.java
index 3ebed7e..9b3a065 100644
--- a/foundation/org.eclipse.persistence.corba/src/main/java/org/eclipse/persistence/sessions/remote/corba/sun/CORBARemoteSessionControllerHelper.java
+++ b/foundation/org.eclipse.persistence.corba/src/main/java/org/eclipse/persistence/sessions/remote/corba/sun/CORBARemoteSessionControllerHelper.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 1998, 2020 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1998, 2021 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0 which is available at
@@ -25,6 +25,12 @@
 abstract public class CORBARemoteSessionControllerHelper {
     private static String _id = "IDL:org/eclipse/persistence/remote/corba/sun/CORBARemoteSessionController:1.0";
 
+    /**
+     * Default constructor.
+     */
+    public CORBARemoteSessionControllerHelper() {
+    }
+
     public static void insert(org.omg.CORBA.Any a, org.eclipse.persistence.sessions.remote.corba.sun.CORBARemoteSessionController that) {
         org.omg.CORBA.portable.OutputStream out = a.create_output_stream();
         a.type(type());
diff --git a/foundation/org.eclipse.persistence.corba/src/main/java/org/eclipse/persistence/sessions/remote/corba/sun/TransporterDefaultFactory.java b/foundation/org.eclipse.persistence.corba/src/main/java/org/eclipse/persistence/sessions/remote/corba/sun/TransporterDefaultFactory.java
index 818b5b3..1586cb0 100644
--- a/foundation/org.eclipse.persistence.corba/src/main/java/org/eclipse/persistence/sessions/remote/corba/sun/TransporterDefaultFactory.java
+++ b/foundation/org.eclipse.persistence.corba/src/main/java/org/eclipse/persistence/sessions/remote/corba/sun/TransporterDefaultFactory.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 1998, 2020 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1998, 2021 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0 which is available at
@@ -24,6 +24,13 @@
 * Thursday, May 3, 2001 1:36:59 PM EDT
 */
 public class TransporterDefaultFactory implements org.omg.CORBA.portable.ValueFactory {
+
+    /**
+     * Default constructor.
+     */
+    public TransporterDefaultFactory() {
+    }
+
     @Override
     public java.io.Serializable read_value(org.omg.CORBA_2_3.portable.InputStream is) {
         return is.read_value(new Transporter());
diff --git a/foundation/org.eclipse.persistence.corba/src/main/java/org/eclipse/persistence/sessions/remote/corba/sun/TransporterHelper.java b/foundation/org.eclipse.persistence.corba/src/main/java/org/eclipse/persistence/sessions/remote/corba/sun/TransporterHelper.java
index eb13935..b7cbf19 100644
--- a/foundation/org.eclipse.persistence.corba/src/main/java/org/eclipse/persistence/sessions/remote/corba/sun/TransporterHelper.java
+++ b/foundation/org.eclipse.persistence.corba/src/main/java/org/eclipse/persistence/sessions/remote/corba/sun/TransporterHelper.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 1998, 2020 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1998, 2021 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0 which is available at
@@ -28,6 +28,12 @@
 abstract public class TransporterHelper {
     private static final String _id = "IDL:org/eclipse/persistence/internal/remote/Transporter:1.0";
 
+    /**
+     * Default constructor.
+     */
+    public TransporterHelper() {
+    }
+
     public static void insert(org.omg.CORBA.Any a, org.eclipse.persistence.internal.sessions.remote.Transporter that) {
         org.omg.CORBA.portable.OutputStream out = a.create_output_stream();
         a.type(type());
diff --git a/foundation/org.eclipse.persistence.corba/src/main/java/org/eclipse/persistence/sessions/remote/rmi/iiop/_RMIRemoteSessionControllerDispatcher_Tie.java b/foundation/org.eclipse.persistence.corba/src/main/java/org/eclipse/persistence/sessions/remote/rmi/iiop/_RMIRemoteSessionControllerDispatcher_Tie.java
index b05781e..51d9292 100644
--- a/foundation/org.eclipse.persistence.corba/src/main/java/org/eclipse/persistence/sessions/remote/rmi/iiop/_RMIRemoteSessionControllerDispatcher_Tie.java
+++ b/foundation/org.eclipse.persistence.corba/src/main/java/org/eclipse/persistence/sessions/remote/rmi/iiop/_RMIRemoteSessionControllerDispatcher_Tie.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 1998, 2020 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1998, 2021 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0 which is available at
@@ -38,12 +38,19 @@
     private RMIRemoteSessionControllerDispatcher target = null;
     private static final String[] _type_ids = { "RMI:org.eclipse.persistence.sessions.remote.rmi.iiop.RMIRemoteSessionController:0000000000000000" };
 
+    /**
+     * Default constructor.
+     */
+    public _RMIRemoteSessionControllerDispatcher_Tie() {
+    }
+
     @Override
     public String[] _ids() {
         return _type_ids;
     }
 
     @Override
+    @SuppressWarnings({"fallthrough"})
     public OutputStream _invoke(String method, InputStream _in, ResponseHandler reply) throws SystemException {
         try {
             org.omg.CORBA_2_3.portable.InputStream in = (org.omg.CORBA_2_3.portable.InputStream)_in;
diff --git a/foundation/org.eclipse.persistence.corba/src/main/java/org/eclipse/persistence/sessions/remote/rmi/iiop/_RMIRemoteSessionController_Stub.java b/foundation/org.eclipse.persistence.corba/src/main/java/org/eclipse/persistence/sessions/remote/rmi/iiop/_RMIRemoteSessionController_Stub.java
index c377e27..1a2fbb8 100644
--- a/foundation/org.eclipse.persistence.corba/src/main/java/org/eclipse/persistence/sessions/remote/rmi/iiop/_RMIRemoteSessionController_Stub.java
+++ b/foundation/org.eclipse.persistence.corba/src/main/java/org/eclipse/persistence/sessions/remote/rmi/iiop/_RMIRemoteSessionController_Stub.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 1998, 2020 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1998, 2021 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0 which is available at
@@ -34,6 +34,12 @@
 public class _RMIRemoteSessionController_Stub extends Stub implements RMIRemoteSessionController {
     private static final String[] _type_ids = { "RMI:org.eclipse.persistence.sessions.remote.rmi.iiop.RMIRemoteSessionController:0000000000000000" };
 
+    /**
+     * Default constructor.
+     */
+    public _RMIRemoteSessionController_Stub() {
+    }
+
     @Override
     public String[] _ids() {
         return _type_ids;
diff --git a/foundation/org.eclipse.persistence.core.test.framework/src/main/java/org/eclipse/persistence/testing/framework/DriverWrapper.java b/foundation/org.eclipse.persistence.core.test.framework/src/main/java/org/eclipse/persistence/testing/framework/DriverWrapper.java
index 6666739..d144c55 100644
--- a/foundation/org.eclipse.persistence.core.test.framework/src/main/java/org/eclipse/persistence/testing/framework/DriverWrapper.java
+++ b/foundation/org.eclipse.persistence.core.test.framework/src/main/java/org/eclipse/persistence/testing/framework/DriverWrapper.java
@@ -188,7 +188,7 @@
     static Driver getDriver() {
         if(driver == null) {
             try {
-                driver = (Driver)Class.forName(driverName, true, Thread.currentThread().getContextClassLoader()).newInstance();
+                driver = (Driver)Class.forName(driverName, true, Thread.currentThread().getContextClassLoader()).getConstructor().newInstance();
             } catch (Exception ex) {
                 throw new TestProblemException("DriverWrapper: failed to instantiate " + driverName, ex);
             }
diff --git a/foundation/org.eclipse.persistence.core.test.framework/src/main/java/org/eclipse/persistence/testing/framework/PromptTestRunner.java b/foundation/org.eclipse.persistence.core.test.framework/src/main/java/org/eclipse/persistence/testing/framework/PromptTestRunner.java
index 525a69a..6ffca62 100644
--- a/foundation/org.eclipse.persistence.core.test.framework/src/main/java/org/eclipse/persistence/testing/framework/PromptTestRunner.java
+++ b/foundation/org.eclipse.persistence.core.test.framework/src/main/java/org/eclipse/persistence/testing/framework/PromptTestRunner.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 1998, 2020 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1998, 2021 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0 which is available at
@@ -76,7 +76,7 @@
         getLoginProperties();
         DatabaseLogin login = new org.eclipse.persistence.sessions.DatabaseLogin();
         try {
-            login.usePlatform((DatabasePlatform)Class.forName(this.databasePlatform).newInstance());
+            login.usePlatform((DatabasePlatform)Class.forName(this.databasePlatform).getConstructor().newInstance());
         } catch (Exception e) {
             e.printStackTrace();
             printUsageAndExit();
@@ -165,7 +165,7 @@
                 this.testModel = TestRunModel.buildLRGTestModel();
             } else {
                 try {
-                    this.testModel = (TestModel)(Class.forName(testModelName).newInstance());
+                    this.testModel = (TestModel)(Class.forName(testModelName).getConstructor().newInstance());
                 } catch (Exception e) {
                     e.printStackTrace();
                     printUsageAndExit();
@@ -174,7 +174,7 @@
         } else if (arg.startsWith(TEST_ENTITY_FLAG)) {
             String testEntityName = arg.substring(TEST_ENTITY_FLAG.length());
             try {
-                this.testEntity = (TestEntity)Class.forName(testEntityName).newInstance();
+                this.testEntity = (TestEntity)Class.forName(testEntityName).getConstructor().newInstance();
             } catch (Exception e) {
                 e.printStackTrace();
                 printUsageAndExit();
diff --git a/foundation/org.eclipse.persistence.core.test.framework/src/main/java/org/eclipse/persistence/testing/framework/TestExecutor.java b/foundation/org.eclipse.persistence.core.test.framework/src/main/java/org/eclipse/persistence/testing/framework/TestExecutor.java
index e52bd29..30c0f7a 100644
--- a/foundation/org.eclipse.persistence.core.test.framework/src/main/java/org/eclipse/persistence/testing/framework/TestExecutor.java
+++ b/foundation/org.eclipse.persistence.core.test.framework/src/main/java/org/eclipse/persistence/testing/framework/TestExecutor.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 1998, 2020 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1998, 2021 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0 which is available at
@@ -616,7 +616,7 @@
 
             //        executor.handleErrors();
             //        executor.doNotLogResults();
-            executor.execute((TestEntity)Class.forName(arguments[0]).newInstance());
+            executor.execute((TestEntity)Class.forName(arguments[0]).getConstructor().newInstance());
         } catch (Throwable exception) {
             System.out.println(exception.toString());
         }
diff --git a/foundation/org.eclipse.persistence.core.test.framework/src/main/java/org/eclipse/persistence/testing/framework/TestSystem.java b/foundation/org.eclipse.persistence.core.test.framework/src/main/java/org/eclipse/persistence/testing/framework/TestSystem.java
index 2cc1293..4d6f772 100644
--- a/foundation/org.eclipse.persistence.core.test.framework/src/main/java/org/eclipse/persistence/testing/framework/TestSystem.java
+++ b/foundation/org.eclipse.persistence.core.test.framework/src/main/java/org/eclipse/persistence/testing/framework/TestSystem.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 1998, 2020 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1998, 2021 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0 which is available at
@@ -496,7 +496,7 @@
         DatabasePlatform platform = null;
         try{
             Class platformClass = Class.forName("org.eclipse.persistence.platform.database.oracle.Oracle9Platform");
-            platform = (DatabasePlatform)platformClass.newInstance();
+            platform = (DatabasePlatform)platformClass.getConstructor().newInstance();
         } catch (Exception e){
             platform = new org.eclipse.persistence.platform.database.OraclePlatform();
         }
@@ -520,7 +520,7 @@
         DatabasePlatform platform = null;
         try{
             Class platformClass = Class.forName("org.eclipse.persistence.platform.database.oracle.Oracle8Platform");
-            platform = (DatabasePlatform)platformClass.newInstance();
+            platform = (DatabasePlatform)platformClass.getConstructor().newInstance();
         } catch (Exception e){
             platform = new org.eclipse.persistence.platform.database.OraclePlatform();
         }
@@ -628,7 +628,7 @@
     public void useTimesTen(String userName) {
         DatabaseLogin login = new DatabaseLogin();
         try {
-            login.usePlatform((org.eclipse.persistence.internal.databaseaccess.DatabasePlatform)Class.forName("org.eclipse.persistence.platform.database.TimesTenPlatform").newInstance());
+            login.usePlatform((org.eclipse.persistence.internal.databaseaccess.DatabasePlatform)Class.forName("org.eclipse.persistence.platform.database.TimesTenPlatform").getConstructor().newInstance());
         } catch (Exception e) {}
         login.setDriverClassName("com.timesten.jdbc.TimesTenDriver");
         login.setDriverURLHeader("jdbc:timesten:client:");
@@ -647,7 +647,7 @@
     public void useSymfowareRDB2_TCP() {
         DatabaseLogin login = new DatabaseLogin();
         try {
-            login.usePlatform((org.eclipse.persistence.internal.databaseaccess.DatabasePlatform)Class.forName("org.eclipse.persistence.platform.database.SymfowarePlatform").newInstance());
+            login.usePlatform((org.eclipse.persistence.internal.databaseaccess.DatabasePlatform)Class.forName("org.eclipse.persistence.platform.database.SymfowarePlatform").getConstructor().newInstance());
         } catch (Exception e) {
             e.printStackTrace();
         }
diff --git a/foundation/org.eclipse.persistence.core.test.framework/src/main/java/org/eclipse/persistence/testing/tests/TestRunModel.java b/foundation/org.eclipse.persistence.core.test.framework/src/main/java/org/eclipse/persistence/testing/tests/TestRunModel.java
index b3fb3b7..63fe1f5 100644
--- a/foundation/org.eclipse.persistence.core.test.framework/src/main/java/org/eclipse/persistence/testing/tests/TestRunModel.java
+++ b/foundation/org.eclipse.persistence.core.test.framework/src/main/java/org/eclipse/persistence/testing/tests/TestRunModel.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 1998, 2020 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1998, 2021 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0 which is available at
@@ -159,7 +159,7 @@
 
         for (int index = 0; index < tests.size(); ++index) {
             try {
-                addTest((TestModel)Class.forName((String)tests.elementAt(index)).newInstance());
+                addTest((TestModel)Class.forName((String)tests.elementAt(index)).getConstructor().newInstance());
             } catch (Throwable exception) {
                 System.out.println("Failed to set up " + tests.elementAt(index) + " \n" + exception);
                 //exception.printStackTrace();
@@ -186,7 +186,7 @@
         Vector models = new Vector();
 
         try {
-            models.add(Class.forName("org.eclipse.persistence.testing.tests.SRGTestModel").newInstance());
+            models.add(Class.forName("org.eclipse.persistence.testing.tests.SRGTestModel").getConstructor().newInstance());
         } catch (Exception exception) {
             System.out.println("Failed to set up org.eclipse.persistence.testing.tests.SRGTestModel" + " \n" + exception);
         }
@@ -207,7 +207,7 @@
         manual.setName("Manual Tests");
         for (int index = 0; index < manualTest.size(); ++index) {
             try {
-                manual.addTest((TestModel)Class.forName((String)manualTest.elementAt(index)).newInstance());
+                manual.addTest((TestModel)Class.forName((String)manualTest.elementAt(index)).getConstructor().newInstance());
             } catch (Exception exception) {
                 System.out.println("Failed to set up " + manualTest.elementAt(index) + " \n" + exception);
             }
@@ -228,7 +228,7 @@
         model.setName("JPA Tests");
         for (int index = 0; index < tests.size(); ++index) {
             try {
-                model.addTest((TestModel)Class.forName((String)tests.get(index)).newInstance());
+                model.addTest((TestModel)Class.forName((String)tests.get(index)).getConstructor().newInstance());
             } catch (Throwable exception) {
                 System.out.println("Failed to set up " + tests.get(index) + " \n" + exception);
             }
@@ -255,7 +255,7 @@
             try {
                 cls = Class.forName((String)tests.get(index));
                 if(TestModel.class.isAssignableFrom(cls)) {
-                    model.addTest((TestModel)cls.newInstance());
+                    model.addTest((TestModel)cls.getConstructor().newInstance());
                 } else {
                     Method suite = cls.getDeclaredMethod("suite", new Class[]{});
                     model.addTest((Test)suite.invoke(null, new Object[]{}));
@@ -284,7 +284,7 @@
             try {
                 cls = Class.forName((String)tests.get(index));
                 if(TestModel.class.isAssignableFrom(cls)) {
-                    model.addTest((TestModel)cls.newInstance());
+                    model.addTest((TestModel)cls.getConstructor().newInstance());
                 } else {
                     Method suite = cls.getDeclaredMethod("suite", new Class[]{});
                     model.addTest((Test)suite.invoke(null, new Object[]{}));
@@ -312,7 +312,7 @@
             try {
                 cls = Class.forName((String)tests.get(index));
                 if(TestModel.class.isAssignableFrom(cls)) {
-                    model.addTest((TestModel)cls.newInstance());
+                    model.addTest((TestModel)cls.getConstructor().newInstance());
                 } else {
                     Method suite = cls.getDeclaredMethod("suite", new Class[]{});
                     model.addTest((Test)suite.invoke(null, new Object[]{}));
@@ -411,7 +411,7 @@
         performanceModel.setName("Performance Tests");
         for (int index = 0; index < performanceTests.size(); ++index) {
             try {
-                performanceModel.addTest((TestModel)Class.forName((String)performanceTests.elementAt(index)).newInstance());
+                performanceModel.addTest((TestModel)Class.forName((String)performanceTests.elementAt(index)).getConstructor().newInstance());
             } catch (Exception exception) {
                 System.out.println("Failed to set up " + performanceTests.elementAt(index) + " \n" + exception);
             }
@@ -431,7 +431,7 @@
         performanceModel.setName("JPA Performance Tests");
         for (int index = 0; index < performanceTests.size(); ++index) {
             try {
-                performanceModel.addTest((TestModel)Class.forName((String)performanceTests.elementAt(index)).newInstance());
+                performanceModel.addTest((TestModel)Class.forName((String)performanceTests.elementAt(index)).getConstructor().newInstance());
             } catch (Exception exception) {
                 System.out.println("Failed to set up " + performanceTests.elementAt(index) + " \n" + exception);
             }
diff --git a/foundation/org.eclipse.persistence.core.test.framework/src/main/java/org/eclipse/persistence/testing/tests/performance/emulateddb/EmulatedResultSet.java b/foundation/org.eclipse.persistence.core.test.framework/src/main/java/org/eclipse/persistence/testing/tests/performance/emulateddb/EmulatedResultSet.java
index 9d80c13..75970e2 100644
--- a/foundation/org.eclipse.persistence.core.test.framework/src/main/java/org/eclipse/persistence/testing/tests/performance/emulateddb/EmulatedResultSet.java
+++ b/foundation/org.eclipse.persistence.core.test.framework/src/main/java/org/eclipse/persistence/testing/tests/performance/emulateddb/EmulatedResultSet.java
@@ -256,6 +256,7 @@
      * @deprecated
      */
     @Override
+    @Deprecated
     public BigDecimal getBigDecimal(int columnIndex, int scale)throws SQLException {
         return (BigDecimal)getObject(columnIndex);
     }
@@ -383,6 +384,7 @@
      *              <code>getUnicodeStream</code>
      */
     @Override
+    @Deprecated
     public java.io.InputStream getUnicodeStream(int columnIndex) throws SQLException {
         return (java.io.InputStream)getObject(columnIndex);
     }
@@ -570,6 +572,7 @@
      * @deprecated
      */
     @Override
+    @Deprecated
     public BigDecimal getBigDecimal(String columnName, int scale) throws SQLException {
         return (BigDecimal)getObject(columnName);
     }
@@ -695,6 +698,7 @@
      * @deprecated use <code>getCharacterStream</code> instead
      */
     @Override
+    @Deprecated
     public java.io.InputStream getUnicodeStream(String columnName) throws SQLException {
         return (java.io.InputStream)getObject(columnName);
     }
diff --git a/foundation/org.eclipse.persistence.core.test.framework/src/main/java/org/eclipse/persistence/testing/tests/performance/emulateddb/EmulatedStatement.java b/foundation/org.eclipse.persistence.core.test.framework/src/main/java/org/eclipse/persistence/testing/tests/performance/emulateddb/EmulatedStatement.java
index df45aeb..7d597d7 100644
--- a/foundation/org.eclipse.persistence.core.test.framework/src/main/java/org/eclipse/persistence/testing/tests/performance/emulateddb/EmulatedStatement.java
+++ b/foundation/org.eclipse.persistence.core.test.framework/src/main/java/org/eclipse/persistence/testing/tests/performance/emulateddb/EmulatedStatement.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 1998, 2020 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1998, 2021 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0 which is available at
@@ -344,6 +344,7 @@
      * @deprecated
      */
     @Override
+    @Deprecated
     public void setUnicodeStream(int parameterIndex, java.io.InputStream x, int length) throws SQLException {
     }
 
@@ -1266,7 +1267,6 @@
      * <code>BatchUpdateException.getUpdateCounts</code>
      * will contain as many elements as there are commands in the batch, and
      * at least one of the elements will be the following:
-     * <P>
      * <LI>A value of <code>EXECUTE_FAILED</code> -- indicates that the command failed
      * to execute successfully and occurs only if a driver continues to
      * process commands after a command fails
diff --git a/foundation/org.eclipse.persistence.core.test.framework/src/main/java/org/eclipse/persistence/tools/history/HistoryFacade.java b/foundation/org.eclipse.persistence.core.test.framework/src/main/java/org/eclipse/persistence/tools/history/HistoryFacade.java
index d5272fe..4117833 100644
--- a/foundation/org.eclipse.persistence.core.test.framework/src/main/java/org/eclipse/persistence/tools/history/HistoryFacade.java
+++ b/foundation/org.eclipse.persistence.core.test.framework/src/main/java/org/eclipse/persistence/tools/history/HistoryFacade.java
@@ -30,7 +30,7 @@
 
 /**
  * <b>Purpose:</b>One stop shopping for all your history needs.
- * <p>
+ *
  * @author Stephen McRitchie
  * @since Oracle 10g AS
  */
diff --git a/foundation/org.eclipse.persistence.core.test.framework/src/main/java/org/eclipse/persistence/tools/sessionconsole/SessionConsolePanel.java b/foundation/org.eclipse.persistence.core.test.framework/src/main/java/org/eclipse/persistence/tools/sessionconsole/SessionConsolePanel.java
index ea75786..73915a3 100644
--- a/foundation/org.eclipse.persistence.core.test.framework/src/main/java/org/eclipse/persistence/tools/sessionconsole/SessionConsolePanel.java
+++ b/foundation/org.eclipse.persistence.core.test.framework/src/main/java/org/eclipse/persistence/tools/sessionconsole/SessionConsolePanel.java
@@ -781,7 +781,7 @@
                                     + "failure, or could result if you do not have the tools.jar from your JDK on the classpath.");
                 }
                 Class newClass = Class.forName(className);
-                Object newInstance = newClass.newInstance();
+                Object newInstance = newClass.getConstructor().newInstance();
                 newClass.getField("session").set(newInstance, getSession());
                 Object value;
                 try {
diff --git a/foundation/org.eclipse.persistence.core/pom.xml b/foundation/org.eclipse.persistence.core/pom.xml
index 8479fc0..c547a21 100644
--- a/foundation/org.eclipse.persistence.core/pom.xml
+++ b/foundation/org.eclipse.persistence.core/pom.xml
@@ -32,7 +32,6 @@
 
     <properties>
         <!-- Too many to fix -->
-        <jdoc.doclint>-missing</jdoc.doclint>
         <comp.xlint>-Xlint:all,-rawtypes,-unchecked,-serial,-exports</comp.xlint>
     </properties>
     <dependencies>
diff --git a/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/config/DescriptorCustomizer.java b/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/config/DescriptorCustomizer.java
index a86786d..5af13e3 100644
--- a/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/config/DescriptorCustomizer.java
+++ b/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/config/DescriptorCustomizer.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 1998, 2019 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1998, 2021 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0 which is available at
@@ -25,7 +25,7 @@
  * or XML.
  *
  * @see Customizer @Customizer to configure using annotations on an entity class
- * @see ClassDescriptor {@link ClassDescriptor} for available customization API
+ * @see ClassDescriptor for available customization API
  */
 public interface DescriptorCustomizer {
 
diff --git a/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/core/queries/CoreAttributeGroup.java b/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/core/queries/CoreAttributeGroup.java
index 43ee796..606a071 100644
--- a/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/core/queries/CoreAttributeGroup.java
+++ b/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/core/queries/CoreAttributeGroup.java
@@ -117,8 +117,6 @@
     /**
      * INTERNAL:
      * This constructer is to only be used by EclipseLink internally
-     * @param name
-     * @param type
      */
     public CoreAttributeGroup(String name, Class type, boolean isValidated) {
         this(name);
@@ -225,8 +223,6 @@
     /**
      * INTERNAL:
      *    This method is used internally in the clone processing.
-     * @param cloneMap
-     * @return
      */
     public CoreAttributeGroup clone(Map<CoreAttributeGroup<ATTRIBUTE_ITEM, DESCRIPTOR>, CoreAttributeGroup<ATTRIBUTE_ITEM, DESCRIPTOR>> cloneMap){
         CoreAttributeGroup clone = cloneMap.get(this);
@@ -314,7 +310,6 @@
      * Convert all the class-name-based settings in this Descriptor to actual class-based
      * settings. This method is used when converting a project that has been built
      * with class names to a project with classes.
-     * @param classLoader
      */
     public void convertClassNamesToClasses(ClassLoader classLoader){
         if (this.type == null){
@@ -574,7 +569,6 @@
     /**
      * INTERNAL:
      * This method will insert the group into the entity hierarchy just below this AttributeGroup.
-     * @param group
      */
     public void insertSubClass(CoreAttributeGroup group){
         if (this == group){
@@ -607,7 +601,6 @@
     /**
      * INTERNAL:
      *    This method is used internally when converting to a copy group.
-     * @return
      */
     public boolean isCopyGroup() {
         return false;
diff --git a/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/core/queries/CoreAttributeItem.java b/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/core/queries/CoreAttributeItem.java
index 66faa12..7fdde4d 100644
--- a/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/core/queries/CoreAttributeItem.java
+++ b/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/core/queries/CoreAttributeItem.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2011, 2019 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2011, 2021 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0 which is available at
@@ -157,7 +157,6 @@
      * Convert all the class-name-based settings in this Descriptor to actual class-based
      * settings. This method is used when converting a project that has been built
      * with class names to a project with classes.
-     * @param classLoader
      */
     public void convertClassNamesToClasses(ClassLoader classLoader){
         Map<Object, ATTRIBUTE_GROUP> newMap = new HashMap<>();
@@ -319,8 +318,6 @@
 
     /**
      * Will order the subGroups based on hierarchy.  Returns true if the group is the new root.
-     * @param group
-     * @param subGroups
      * @return true if the group is the new root.
      */
     protected static boolean orderInheritance(CoreAttributeGroup group, Map<Object, ? extends CoreAttributeGroup> subGroups) {
diff --git a/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/descriptors/CMPPolicy.java b/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/descriptors/CMPPolicy.java
index 23f7748..6b1622b 100644
--- a/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/descriptors/CMPPolicy.java
+++ b/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/descriptors/CMPPolicy.java
@@ -127,7 +127,6 @@
      * PUBLIC:
      * Define the mapped class. This is the class which was originally mapped in the MW
      *
-     * @param newMappedClass
      */
     public void setMappedClass(Class newMappedClass) {
         mappedClass = newMappedClass;
@@ -156,7 +155,6 @@
      * PUBLIC:
      * Configure bean pessimistic locking
      *
-     * @param policy
      * @see org.eclipse.persistence.descriptors.PessimisticLockingPolicy
      */
     public void setPessimisticLockingPolicy(PessimisticLockingPolicy policy) {
@@ -196,7 +194,6 @@
      * this type.  NOTE: if set to true, then updateAllFields must also be set
      * to true
      *
-     * @param shouldForceUpdate
      */
     public void setForceUpdate(boolean shouldForceUpdate) {
         this.forceUpdate = shouldForceUpdate;
@@ -217,7 +214,6 @@
      * Configure whether TopLink should update all fields for an object of this
      * type when an update occurs.
      *
-     * @param shouldUpdatAllFields
      */
     public void setUpdateAllFields(boolean shouldUpdatAllFields) {
         this.updateAllFields = shouldUpdatAllFields;
@@ -356,7 +352,6 @@
      * Convert all the class-name-based settings in this object to actual class-based
      * settings. This method is used when converting a project that has been built
      * with class names to a project with classes.
-     * @param classLoader
      */
     public void convertClassNamesToClasses(ClassLoader classLoader){
     }
@@ -594,8 +589,6 @@
      * Check to see if there is a single key element.  Iterate through the list of primary key elements
      * and count only keys that are not part of the Multitenant identifier.
      *
-     * @param pkElementArray
-     * @return
      */
     protected boolean isSingleKey(KeyElementAccessor[] pkElementArray){
         if ((pkElementArray.length == 1) && (pkElementArray[0] instanceof KeyIsElementAccessor)) {
diff --git a/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/descriptors/CachePolicy.java b/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/descriptors/CachePolicy.java
index e9d9008..9e89c0f 100644
--- a/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/descriptors/CachePolicy.java
+++ b/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/descriptors/CachePolicy.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2011, 2019 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2011, 2021 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0 which is available at
@@ -352,7 +352,6 @@
      * Convert all the class-name-based settings in this Descriptor to actual class-based
      * settings. This method is used when converting a project that has been built
      * with class names to a project with classes.
-     * @param classLoader
      */
     public void convertClassNamesToClasses(ClassLoader classLoader) {
         try {
diff --git a/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/descriptors/ClassDescriptor.java b/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/descriptors/ClassDescriptor.java
index 186db18..34afb9b 100644
--- a/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/descriptors/ClassDescriptor.java
+++ b/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/descriptors/ClassDescriptor.java
@@ -1478,7 +1478,6 @@
      * Convert all the class-name-based settings in this Descriptor to actual class-based
      * settings. This method is used when converting a project that has been built
      * with class names to a project with classes.
-     * @param classLoader
      */
     public void convertClassNamesToClasses(ClassLoader classLoader){
         Class redirectorClass = null;
@@ -1992,7 +1991,6 @@
      * additionalAggregateCollectionKeyFields are used by aggregate descriptors to hold additional fields needed when they are stored in an AggregatateCollection
      * These fields are generally foreign key fields that are required in addition to the fields in the descriptor's
      *  mappings to uniquely identify the Aggregate
-     * @return
      */
     public List<DatabaseField> getAdditionalAggregateCollectionKeyFields(){
         if (additionalAggregateCollectionKeyFields == null){
@@ -2016,7 +2014,6 @@
      * INTERNAL:
      * Return a list of fields that are written by map keys
      * Used to determine if there is a multiple writable mappings issue
-     * @return
      */
     public List<DatabaseField> getAdditionalWritableMapKeyFields() {
         if (additionalWritableMapKeyFields == null) {
@@ -3118,7 +3115,6 @@
     /**
      * INTERNAL:
      *  return whether this descriptor has any relationships through its mappings, through inheritance, or through aggregates
-     * @return
      */
     public boolean hasRelationships() {
         return hasRelationships;
@@ -3130,8 +3126,6 @@
      * an object aside from the one described by descriptor or more than one ForeignReferenceMapping
      * to descriptor.  (i.e. It determines if there is any mapping aside from a backpointer to a mapping
      * defined in descriptor)
-     * @param descriptor
-     * @return
      */
     public boolean hasRelationshipsExceptBackpointer(ClassDescriptor descriptor){
         Iterator<DatabaseMapping> i = mappings.iterator();
@@ -5030,7 +5024,6 @@
     /**
      * INTERNAL:
      * set whether this descriptor has any relationships through its mappings, through inheritance, or through aggregates
-     * @param hasRelationships
      */
     public void setHasRelationships(boolean hasRelationships) {
         this.hasRelationships = hasRelationships;
diff --git a/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/descriptors/DescriptorEventManager.java b/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/descriptors/DescriptorEventManager.java
index 7b4963c..ff68440 100644
--- a/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/descriptors/DescriptorEventManager.java
+++ b/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/descriptors/DescriptorEventManager.java
@@ -189,7 +189,6 @@
      * INTERNAL:
      * This method was added to allow JPA project caching so that DescriptorEventListeners could be
      * serialized and re-added to the EventManager using a SerializableDescriptorEventHolder.
-     * @param classLoader
      */
     public void processDescriptorEventHolders(AbstractSession session, ClassLoader classLoader) {
         if (this.descriptorEventHolders != null) {
diff --git a/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/descriptors/DescriptorQueryManager.java b/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/descriptors/DescriptorQueryManager.java
index 646d7a9..86ee179 100644
--- a/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/descriptors/DescriptorQueryManager.java
+++ b/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/descriptors/DescriptorQueryManager.java
@@ -1,6 +1,6 @@
 /*
- * Copyright (c) 1998, 2019 Oracle and/or its affiliates. All rights reserved.
- * Copyright (c) 1998, 2019 IBM Corporation. All rights reserved.
+ * Copyright (c) 1998, 2021 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1998, 2021 IBM Corporation. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0 which is available at
@@ -325,7 +325,6 @@
      * Convert all the class-name-based settings in this Query Manager to actual class-based
      * settings
      * This method is implemented by subclasses as necessary.
-     * @param classLoader
      */
     public void convertClassNamesToClasses(ClassLoader classLoader){
         Iterator queryVectors = getQueries().values().iterator();
diff --git a/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/descriptors/InheritancePolicy.java b/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/descriptors/InheritancePolicy.java
index 9575551..3bc1912 100644
--- a/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/descriptors/InheritancePolicy.java
+++ b/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/descriptors/InheritancePolicy.java
@@ -1646,7 +1646,6 @@
      * not have a descriptor, if describesNonPersistenceSubclasses is true
      * Employee's descriptor will be used as the descriptor for Employee
      *
-     * @param describesNonPersistentSubclasses
      */
     public void setDescribesNonPersistentSubclasses(boolean describesNonPersistentSubclasses){
         this.describesNonPersistentSubclasses = describesNonPersistentSubclasses;
diff --git a/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/dynamic/DynamicClassLoader.java b/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/dynamic/DynamicClassLoader.java
index 43493b3..afb7415 100644
--- a/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/dynamic/DynamicClassLoader.java
+++ b/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/dynamic/DynamicClassLoader.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 1998, 2019 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1998, 2021 Oracle and/or its affiliates. All rights reserved.
  * Copyright (c) 1998, 2018 IBM Corporation. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
@@ -204,7 +204,6 @@
     /**
      * Create an adapter for given {@code className}
      *
-     * @param className
      */
     public void createDynamicAdapter(String className) {
         // default no-op
@@ -213,7 +212,6 @@
     /**
      * Create a collection adapter for given {@code className}
      *
-     * @param className
      */
     public void createDynamicCollectionAdapter(String className) {
         // default no-op
@@ -222,7 +220,6 @@
     /**
      * Create a reference for given {@code className}
      *
-     * @param className
      */
     public void createDynamicReferenceAdapter(String className) {
         // default no-op
@@ -263,9 +260,6 @@
      * Converts an array of bytes into an instance of class <code>Class</code>.
      * Before the <code>Class</code> can be used it must be resolved.
      *
-     * @param name
-     * @param b
-     * @throws ClassFormatError
      */
     protected Class<?> defineDynamicClass(String name, byte[] b)  {
         return defineClass(name, b, 0, b.length);
@@ -276,8 +270,6 @@
      * existing ConversionManager is not an instance of DynamicConversionManager
      * then create a new one and replace the existing one.
      *
-     * @param session
-     * @return
      */
     public static DynamicClassLoader lookup(Session session) {
         ConversionManager cm = null;
diff --git a/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/dynamic/DynamicClassWriter.java b/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/dynamic/DynamicClassWriter.java
index c317c94..21c164d 100644
--- a/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/dynamic/DynamicClassWriter.java
+++ b/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/dynamic/DynamicClassWriter.java
@@ -237,8 +237,6 @@
     /**
      * Allow subclasses to add additional state to the dynamic entity.
      *
-     * @param cw
-     * @param parentClassType
      */
     protected void addFields(ClassWriter cw, String parentClassType) {
     }
@@ -246,8 +244,6 @@
     /**
      * Allow subclasses to add additional methods to the dynamic entity.
      *
-     * @param cw
-     * @param parentClassType
      */
     protected void addMethods(ClassWriter cw, String parentClassType) {
     }
@@ -355,8 +351,6 @@
      * the case of {@link DynamicClassWriter} this will ensure that the class is
      * a subclass of the {@link #parentClass}
      *
-     * @param dynamicClass
-     * @throws ClassNotFoundException
      */
     protected boolean verify(Class<?> dynamicClass, ClassLoader loader) throws ClassNotFoundException {
         Class<?> parent = getParentClass(loader);
diff --git a/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/dynamic/DynamicEntity.java b/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/dynamic/DynamicEntity.java
index 85f721a..37ce71a 100644
--- a/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/dynamic/DynamicEntity.java
+++ b/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/dynamic/DynamicEntity.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 1998, 2019 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1998, 2021 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0 which is available at
@@ -58,8 +58,6 @@
      * @param
      *      propertyName the name of a mapped property
      *      If the property cannot be found, a {@link DynamicException} will be thrown.
-     * @throws
-     *      DynamicException
      * @return
      *      persistent value or relationship container of the specified type
      */
@@ -73,8 +71,6 @@
      *      If the property cannot be found, a {@link DynamicException} will be thrown.
      * @param
      *      value the specified object
-     * @throws
-     *      DynamicException
      * @return
      *      the same DynamicEntity instance
      */
@@ -88,8 +84,6 @@
      *      If the property cannot be found, a {@link DynamicException} will be thrown.
      * @return
      *      true if the property has been set
-     * @throws
-     *      DynamicException
      */
     boolean isSet(String propertyName) throws DynamicException;
 
diff --git a/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/dynamic/DynamicHelper.java b/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/dynamic/DynamicHelper.java
index 77d1e13..7174d37 100644
--- a/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/dynamic/DynamicHelper.java
+++ b/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/dynamic/DynamicHelper.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 1998, 2019 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1998, 2021 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0 which is available at
@@ -95,8 +95,6 @@
     /**
      * Provide access to the entity's type.
      *
-     * @param entity
-     * @return
      * @throws ClassCastException
      *             if entity is not an instance of {@link DynamicEntityImpl}
      */
@@ -112,7 +110,6 @@
      * are concurrent processes using this type when it is removed some
      * exceptions may occur.
      *
-     * @param typeName
      */
     public void removeType(String typeName) {
         DynamicType type = getType(typeName);
@@ -193,9 +190,6 @@
      * Add one or more EntityType instances to a session and optionally generate
      * needed tables with or without FK constraints.
      *
-     * @param createMissingTables
-     * @param generateFKConstraints
-     * @param types
      */
     public void addTypes(boolean createMissingTables, boolean generateFKConstraints, DynamicType... types) {
         if (types == null || types.length == 0) {
diff --git a/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/dynamic/DynamicTypeBuilder.java b/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/dynamic/DynamicTypeBuilder.java
index c460d85..2a85d03 100644
--- a/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/dynamic/DynamicTypeBuilder.java
+++ b/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/dynamic/DynamicTypeBuilder.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2011, 2020 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2011, 2021 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0 which is available at
@@ -98,9 +98,6 @@
      *  helper.addTypes(true, true, typeBuilder.getType());<br>
      * </code>
      *
-     * @param dynamicClass
-     * @param parentType
-     * @param tableNames
      */
     public DynamicTypeBuilder(Class<?> dynamicClass, DynamicType parentType, String... tableNames) {
         RelationalDescriptor descriptor = new RelationalDescriptor();
@@ -126,8 +123,6 @@
     /**
      * Create an EntityTypeBuilder for an existing descriptor. This is used
      *
-     * @param dcl
-     * @param descriptor
      * @param parentType
      *            provided since the InheritancePolicy on the descriptor may not
      *            have its parent descriptor initialized.
@@ -317,7 +312,6 @@
      * @param name
      *            attribute name to use in the dynamic entity. Also the property
      *            name used to access the state of the entity
-     * @param refType
      * @param fkFieldNames
      *            the FK field names specified in the same order to match the PK
      *            field names of the target class
@@ -368,7 +362,6 @@
      *            match the PK field names on the source.
      * @return the new mapping configured and initialized (if the descriptor is
      *         already initialized.
-     * @throws IllegalArgumentException
      */
     public DirectCollectionMapping addDirectCollectionMapping(String name, String targetTable, String valueColumn, Class<?> valueType, String... fkFieldNames) throws IllegalArgumentException {
         if (fkFieldNames == null) {
@@ -430,7 +423,6 @@
      *            name used to access the state of the entity
      * @param refType
      *            target dynamic entity
-     * @param relationshipTableName
      */
     public void addManyToManyMapping(String name, DynamicType refType, String relationshipTableName) {
         ManyToManyMapping mapping = new ManyToManyMapping();
@@ -537,9 +529,6 @@
      * Load a dynamic project from deployment XML creating dynamic types for all
      * descriptors where the provided class name does not exist.
      *
-     * @param resourcePath
-     * @param login
-     * @param dynamicClassLoader
      * @return a Project with {@link DynamicClassLoader} and associated
      *         {@link DynamicClassWriter} configured. Ensure if a new
      *         Login/Platform is being configured that the
@@ -547,7 +536,6 @@
      *         <p>
      *         <code>null</code> is returned if the resourcePath cannot locate a
      *         deployment XML
-     * @throws IOException
      */
     public static Project loadDynamicProject(String resourcePath, DatabaseLogin login, DynamicClassLoader dynamicClassLoader) throws IOException {
 
@@ -566,9 +554,6 @@
      * Load a dynamic project from deployment XML creating dynamic types for all
      * descriptors where the provided class name does not exist.
      *
-     * @param resourceStream
-     * @param login
-     * @param dynamicClassLoader
      * @return a Project with {@link DynamicClassLoader} and associated
      *         {@link DynamicClassWriter} configured. Ensure if a new
      *         Login/Platform is being configured that the
@@ -576,7 +561,6 @@
      *         <p>
      *         <code>null</code> is returned if the resourcePath cannot locate a
      *         deployment XML
-     * @throws IOException
      */
     public static Project loadDynamicProject(InputStream resourceStream, DatabaseLogin login, DynamicClassLoader dynamicClassLoader) throws IOException {
 
diff --git a/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/exceptions/DatabaseException.java b/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/exceptions/DatabaseException.java
index 11e1598..3c5f73e 100644
--- a/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/exceptions/DatabaseException.java
+++ b/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/exceptions/DatabaseException.java
@@ -377,8 +377,6 @@
      * The connection returned from this driver was null, the driver may be
      * missing(using the default) or the wrong one for the database.
      *
-     * @param driver
-     * @return
      */
     public static DatabaseException unableToAcquireConnectionFromDriverException(
             String driver, String user, String url) {
@@ -394,9 +392,6 @@
      * The connection returned from this driver was null, the driver may be
      * missing(using the default) or the wrong one for the database.
      *
-     * @param exception
-     * @param driver
-     * @return
      */
     public static DatabaseException unableToAcquireConnectionFromDriverException(SQLException exception,
             String driver, String user, String url) {
diff --git a/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/exceptions/DynamicException.java b/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/exceptions/DynamicException.java
index 3772339..71b93af 100644
--- a/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/exceptions/DynamicException.java
+++ b/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/exceptions/DynamicException.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 1998, 2020 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1998, 2021 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0 which is available at
@@ -96,9 +96,6 @@
      * configured classification
      * </ul>
      *
-     * @param mapping
-     * @param value
-     * @return
      */
     public static DynamicException invalidSetPropertyType(DatabaseMapping mapping, Object value) {
         DynamicException de = new DynamicException("DynamicEntity:: Cannot set: " + mapping + " with: " + value);
diff --git a/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/exceptions/EntityManagerSetupException.java b/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/exceptions/EntityManagerSetupException.java
index 69e31f2..2a12ef0 100644
--- a/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/exceptions/EntityManagerSetupException.java
+++ b/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/exceptions/EntityManagerSetupException.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 1998, 2020 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1998, 2021 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0 which is available at
@@ -286,8 +286,6 @@
     /**
      * INTERNAL:
      * The implementation of getNewTempClassLoader is returning null instead of a temporary ClassLoader instance.<br>
-     * @param PUName
-     * @return
      */
     public static EntityManagerSetupException noTemporaryClassLoaderAvailable(String PUName) {
         Object[] args = { PUName };
@@ -300,7 +298,6 @@
     /**
      * INTERNAL:
      * Our OSGI persistence provider does not support a JavaEE-type deployment
-     * @return
      */
     public static EntityManagerSetupException createContainerEntityManagerFactoryNotSupportedInOSGi() {
         EntityManagerSetupException setupException = new EntityManagerSetupException(ExceptionMessageGenerator.buildMessage(//
@@ -312,8 +309,6 @@
     /**
      * INTERNAL:
      * An OSGi application is trying to instantiate a persistence unit for which a bundle does not exist
-     * @param persistenceUnitName
-     * @return
      */
     public static EntityManagerSetupException couldNotFindPersistenceUnitBundle(String persistenceUnitName) {
         Object[] args = { persistenceUnitName };
@@ -326,8 +321,6 @@
     /**
      * INTERNAL:
      * Persistence unit tries to use sessions.xml and to be a composite.
-     * @param persistenceUnitName
-     * @return
      */
     public static EntityManagerSetupException compositeIncompatibleWithSessionsXml(String persistenceUnitName) {
         Object[] args = { persistenceUnitName };
@@ -340,8 +333,6 @@
     /**
      * INTERNAL:
      * Persistence unit tries to use sessions.xml and to be a composite.
-     * @param persistenceUnitName
-     * @return
      */
     public static EntityManagerSetupException compositeMemberCannotBeUsedStandalone(String persistenceUnitName) {
         Object[] args = { persistenceUnitName };
@@ -354,7 +345,6 @@
     /**
      * INTERNAL:
      * Reflective call with doPrivileged to create temporary classloader instance failed.<br>
-     * @return
      */
     public static EntityManagerSetupException failedToInstantiateTemporaryClassLoader(Exception exception) {
         Object[] args = {  };
diff --git a/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/exceptions/JAXBException.java b/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/exceptions/JAXBException.java
index 23f1747..8f74218 100644
--- a/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/exceptions/JAXBException.java
+++ b/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/exceptions/JAXBException.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 1998, 2020 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1998, 2021 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0 which is available at
@@ -284,7 +284,6 @@
      * eclipselink-oxm.xml).  This exception applies to the case where the Key parameter type of the package name to
      * metadata source map is something other than String.  We require {@literal Map<String, Source>}.
      *
-     * @return
      */
     public static JAXBException incorrectKeyParameterType() {
         Object[] args = {};
@@ -298,7 +297,6 @@
      * eclipselink-oxm.xml).  This exception applies to the case where the Value parameter type (of the package
      * name to metadata source map) is something other than Source.  We require {@literal Map<String, Source>}.
      *
-     * @return
      */
     public static JAXBException incorrectValueParameterType() {
         Object[] args = {};
@@ -312,7 +310,6 @@
      * eclipselink-oxm.xml).  This exception applies to the case where the Value parameter type associated with
      * the 'eclipselink-oxm-xml' Key (in the properties map) is something other than {@literal Map<String, Source>}.
      *
-     * @return
      */
     public static JAXBException incorrectValueParameterTypeForOxmXmlKey() {
         Object[] args = {};
@@ -326,8 +323,6 @@
      * eclipselink-oxm.xml).  This exception applies to the case where the Value (in the package name
      * to metadata source map) is null.
      *
-     * @param key
-     * @return
      */
     public static JAXBException nullMetadataSource(String key) {
         Object[] args = { key };
@@ -341,7 +336,6 @@
      * eclipselink-oxm.xml).  This exception applies to the case where the handle to the OXM metadata file is
      * null.
      *
-     * @return
      */
     public static JAXBException nullMetadataSource() {
         Object[] args = { };
@@ -356,7 +350,6 @@
      * not been passes in with an associated String (for package name) and the unmarshalled XmlBindings object
      * does not have a package-name set.
      *
-     * @return
      */
     public static JAXBException packageNotSetForBindingException() {
         Object[] args = { };
@@ -370,7 +363,6 @@
      * eclipselink-oxm.xml).  This exception applies to the case where the Key (in the package name
      * to metadata source map) is null.
      *
-     * @return
      */
     public static JAXBException nullMapKey() {
         Object[] args = {};
@@ -384,8 +376,6 @@
      * eclipselink-oxm.xml).  This exception applies to the case where a class that is declared in the metadata
      * file cannot be loaded by the classloader.
      *
-     * @param classname
-     * @return
      */
     public static JAXBException couldNotLoadClassFromMetadata(String classname) {
         Object[] args = { classname };
@@ -399,7 +389,6 @@
      * eclipselink-oxm.xml).  This exception applies to the case where JAXBContext creation fails for our
      * XmlModel.
      *
-     * @return
      */
     public static JAXBException couldNotCreateContextForXmlModel() {
         Object[] args = {};
@@ -413,8 +402,6 @@
      * eclipselink-oxm.xml).  This exception applies to the case where JAXBContext creation fails for our
      * XmlModel.
      *
-     * @param ex
-     * @return
      */
     public static JAXBException couldNotCreateContextForXmlModel(Exception ex) {
         Object[] args = { ex };
@@ -428,8 +415,6 @@
      * eclipselink-oxm.xml).  This exception applies to the case where an exception occurs while unmarshalling
      * the eclipselink metadata file.
      *
-     * @param e
-     * @return
      */
     public static JAXBException couldNotUnmarshalMetadata(Exception e) {
         Object[] args = {};
@@ -441,9 +426,6 @@
     /**
      * This exception should be used when a descriptor customizer instance cannot be created.
      *
-     * @param e
-     * @param customizerClassName
-     * @return
      */
     public static JAXBException couldNotCreateCustomizerInstance(Exception e, String customizerClassName) {
         Object[] args = { customizerClassName };
@@ -456,9 +438,6 @@
      * This exception would typically be thrown when a customizer class is set
      * that is not an instance of DescriptorCustomizer.
      *
-     * @param e
-     * @param customizerClassName
-     * @return
      */
     public static JAXBException invalidCustomizerClass(Exception e, String customizerClassName) {
         Object[] args = { customizerClassName };
@@ -474,7 +453,6 @@
      * @param propertyName attempting to set this property as ID
      * @param idPropertyName existing ID property
      * @param className class in question
-     * @return
      */
     public static JAXBException idAlreadySet(String propertyName, String idPropertyName, String className) {
         Object[] args = { propertyName, className, idPropertyName };
@@ -490,7 +468,6 @@
      * @param propertyName attempting to set this property as XmlValue
      * @param xmlValuePropertyName existing XmlValue property
      * @param className class in question
-     * @return
      */
     public static JAXBException xmlValueAlreadySet(String propertyName, String xmlValuePropertyName, String className) {
         Object[] args = { className, propertyName, xmlValuePropertyName };
@@ -506,7 +483,6 @@
      * @param propertyName attempting to set this property as XmlAnyElement
      * @param xmlAnyElementPropertyName existing XmlAnyElement property
      * @param className class in question
-     * @return
      */
     public static JAXBException xmlAnyElementAlreadySet(String propertyName, String xmlAnyElementPropertyName, String className) {
         Object[] args = { className, propertyName, xmlAnyElementPropertyName };
@@ -518,10 +494,6 @@
     /**
      * This exception should be used when DomHandlerConverter initialization fails.
      *
-     * @param nestedException
-     * @param domHandlerClassName
-     * @param propertyName
-     * @return
      */
     public static JAXBException couldNotInitializeDomHandlerConverter(Exception nestedException, String domHandlerClassName, String propertyName) {
         Object[] args = { domHandlerClassName, propertyName };
@@ -534,9 +506,6 @@
      * This exception should be used when an @XmlAttributeRef or xml-attribute-ref appears
      * on a non-DataHandler property.
      *
-     * @param propertyName
-     * @param className
-     * @return
      */
     public static JAXBException invalidAttributeRef(String propertyName, String className) {
         Object[] args = { propertyName, className };
@@ -550,9 +519,6 @@
      * but one or more of the XmlElement entries in the list has a type that does not
      * have an XmlID property.
      *
-     * @param propertyName
-     * @param elementName
-     * @return
      */
     public static JAXBException invalidXmlElementInXmlElementsList(String propertyName, String elementName) {
         Object[] args = { propertyName, elementName };
@@ -563,8 +529,6 @@
 
     /**
      * This exception should be used when a TypeMappingInfo is specified but the Type is not set on it.
-     * @param tagName
-     * @return
      */
     public static JAXBException nullTypeOnTypeMappingInfo(QName tagName) {
         Object[] args = { tagName };
@@ -575,9 +539,6 @@
 
     /**
      * This exception should be used when a TypeMappingInfo is specified but the Type is not set on it.
-     * @param javaTypePackage
-     * @param bindingsPackage
-     * @return
      */
     public static JAXBException javaTypeNotAllowedInBindingsFile(String javaTypePackage, String bindingsPackage) {
         Object[] args = { javaTypePackage, bindingsPackage };
@@ -943,7 +904,6 @@
      *
      * @param propertyName name of the Property containing the XmlElementsJoinNodes
      * @param className name of the owning class
-     * @return
      */
     public static JAXBException incorrectNumberOfXmlJoinNodesOnXmlElements(String propertyName, String className) {
         Object[] args = { propertyName, className };
@@ -959,7 +919,6 @@
      * @param propertyName name of the Property containing the XmlPaths
      * @param className name of the owning class
      * @param xpath the offending XmlPath
-     * @return
      */
     public static JAXBException invalidXmlPathWithAttribute(String propertyName, String className, String xpath) {
         Object[] args = { propertyName, className, xpath };
diff --git a/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/expressions/Expression.java b/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/expressions/Expression.java
index 0a1fb4b..3ff87166 100644
--- a/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/expressions/Expression.java
+++ b/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/expressions/Expression.java
@@ -3178,7 +3178,6 @@
      * the WHERE clause in any query
      *
      * EclipseLink: eb.get("mapAttribute").mapEntry()
-     * @return
      */
     public Expression mapEntry(){
         MapEntryExpression expression = new MapEntryExpression(this);
@@ -3192,7 +3191,6 @@
      * This expression can be used either in as a return value in a ReportQuery or in the WHERE clause in a query
      *
      * EclipseLink: eb.get("mapAttribute").mapKey()
-     * @return
      */
     public Expression mapKey(){
         return new MapEntryExpression(this);
@@ -4071,7 +4069,6 @@
      * Set whether this expression should be included in the SELECT clause of a query
      * that uses it in the ORDER BY clause.
      *
-     * @param selectIfOrderedBy
      */
     public void setSelectIfOrderedBy(boolean selectIfOrderedBy) {
         this.selectIfOrderedBy = selectIfOrderedBy;
diff --git a/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/expressions/ExpressionOperator.java b/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/expressions/ExpressionOperator.java
index 413cf69..c2873b1 100644
--- a/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/expressions/ExpressionOperator.java
+++ b/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/expressions/ExpressionOperator.java
@@ -716,7 +716,6 @@
      * INTERNAL:
      * Compare like in memory.
      * This only works for % not _.
-     * @author Christian Weeks aka ChristianLink
      */
     public boolean conformLike(Object left, Object right) {
         if ((right == null) && (left == null)) {
diff --git a/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/expressions/spatial/SpatialExpressionFactory.java b/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/expressions/spatial/SpatialExpressionFactory.java
index e5aa4b8..02f752a 100644
--- a/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/expressions/spatial/SpatialExpressionFactory.java
+++ b/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/expressions/spatial/SpatialExpressionFactory.java
@@ -131,10 +131,6 @@
      * A utility method to build a SpatialExpression
      *
      * @param operator the ordinal of the operator
-     * @param geom1
-     * @param geom2
-     * @param params
-     * @return
      */
     public static Expression getSpatialExpression(int operator, Expression geom1, Object geom2, String params) {
         Vector vParameters = new Vector(2);
diff --git a/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/expressions/spatial/SpatialParameters.java b/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/expressions/spatial/SpatialParameters.java
index 12dc44e..d139208 100644
--- a/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/expressions/spatial/SpatialParameters.java
+++ b/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/expressions/spatial/SpatialParameters.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 1998, 2020 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1998, 2021 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0 which is available at
@@ -62,7 +62,6 @@
      * PUBLIC:
      * Set the PARAMS (String) value. If this value is set then no other param
      * values will be used.
-     * @param params
      * @return this instance of SpatialParameters
      */
     public SpatialParameters setParams(String params) {
@@ -77,7 +76,6 @@
     /**
      * PUBLIC:
      * Set the MIN_RESOLUTION parameter
-     * @param minResolution
      * @return this instance of SpatialParameters
      */
     public SpatialParameters setMinResolution(Number minResolution) {
@@ -92,7 +90,6 @@
     /**
      * PUBLIC:
      * Set the MAX_RESOLUTION parameter
-     * @param maxResolution
      * @return this instance of SpatialParameters
      */
     public SpatialParameters setMaxResolution(Number maxResolution) {
@@ -122,7 +119,6 @@
     /**
      * PUBLIC:
      * Set the DISTANCE parameter
-     * @param distance
      * @return this instance of SpatialParameters
      */
     public SpatialParameters setDistance(Number distance) {
@@ -178,7 +174,6 @@
     /**
      * PUBLIC:
      * build a String describing this set of parameters that can be used in conjunction with an Oracle Spatial function
-     * @return
      */
     public String getParameterString() {
         if (getParams() != null) {
diff --git a/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/indirection/IndirectList.java b/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/indirection/IndirectList.java
index e61117d..74b8cf5 100644
--- a/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/indirection/IndirectList.java
+++ b/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/indirection/IndirectList.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 1998, 2019 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1998, 2021 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0 which is available at
@@ -842,7 +842,6 @@
     /**
      * Return whether this collection should attempt do deal with adds and removes without retrieving the
      * collection from the dB
-     * @return
      */
     protected boolean shouldUseLazyInstantiation(){
         return useLazyInstantiation;
diff --git a/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/indirection/IndirectSet.java b/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/indirection/IndirectSet.java
index 3cb18c5..e8f5077 100644
--- a/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/indirection/IndirectSet.java
+++ b/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/indirection/IndirectSet.java
@@ -630,7 +630,6 @@
     /**
      * Return whether this collection should attempt do deal with adds and removes without retrieving the
      * collection from the dB
-     * @return
      */
     protected boolean shouldUseLazyInstantiation(){
         return useLazyInstantiation;
diff --git a/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/indirection/WeavedAttributeValueHolderInterface.java b/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/indirection/WeavedAttributeValueHolderInterface.java
index 819e358..0ce6ede 100644
--- a/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/indirection/WeavedAttributeValueHolderInterface.java
+++ b/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/indirection/WeavedAttributeValueHolderInterface.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 1998, 2019 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1998, 2021 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0 which is available at
@@ -31,7 +31,6 @@
      * When a valueholder is triggered, the weaved code will ensure its value is
      * coordinated with the underlying property.  This method allows TopLink to determine
      * if that has happened.
-     * @return
      */
     boolean isCoordinatedWithProperty();
 
@@ -43,7 +42,6 @@
 
     /**
      * This method returns whether this valueholder has been newly instantiated by weaved code.
-     * @return
      */
     boolean isNewlyWeavedValueHolder();
 
@@ -51,7 +49,6 @@
      * TopLink weaving calls this method on any valueholder it weaves into a class to indicate
      * that it is new and it's value should not be considered.  The method is also called when coordination
      * with the underlying value occurs to indicate the value can now be trusted.
-     * @param isNew
      */
     void setIsNewlyWeavedValueHolder(boolean isNew);
 
diff --git a/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/internal/databaseaccess/BatchWritingMechanism.java b/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/internal/databaseaccess/BatchWritingMechanism.java
index 6ed8fc6..b1f5ce1 100644
--- a/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/internal/databaseaccess/BatchWritingMechanism.java
+++ b/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/internal/databaseaccess/BatchWritingMechanism.java
@@ -67,8 +67,6 @@
      * INTERNAL:
      * This function caches the largest query timeout encountered within all the calls in this batch,
      * or uses the parent timeout if one of the calls references the parent.
-     * @param session
-     * @param dbCall
      */
     protected void cacheQueryTimeout(AbstractSession session, DatabaseCall dbCall) {
         int callTimeout = dbCall.getQueryTimeout();
diff --git a/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/internal/databaseaccess/DatabaseCall.java b/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/internal/databaseaccess/DatabaseCall.java
index dbbf03e..9a870ad 100644
--- a/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/internal/databaseaccess/DatabaseCall.java
+++ b/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/internal/databaseaccess/DatabaseCall.java
@@ -1427,7 +1427,6 @@
      * @param statement SQL/JDBC statement to call stored procedure/function
      * @param index 0-based index in the argument list
      * @param session Active database session (in connected state).
-     * @return
      */
     public Object getOutputParameterValue(CallableStatement statement, int index, AbstractSession session) throws SQLException {
         return session.getPlatform().getParameterValueFromDatabaseCall(statement, index + 1, session);
@@ -1441,7 +1440,6 @@
      * @param statement SQL/JDBC statement to call stored procedure/function
      * @param name parameter name
      * @param session Active database session (in connected state).
-     * @return
      */
     public Object getOutputParameterValue(CallableStatement statement, String name, AbstractSession session) throws SQLException {
         return session.getPlatform().getParameterValueFromDatabaseCall(statement, name, session);
diff --git a/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/internal/databaseaccess/DatabasePlatform.java b/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/internal/databaseaccess/DatabasePlatform.java
index ec1c0b4..8f11c43 100644
--- a/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/internal/databaseaccess/DatabasePlatform.java
+++ b/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/internal/databaseaccess/DatabasePlatform.java
@@ -381,7 +381,6 @@
      * This StructConverter will be invoked for all writes to the database for the class returned
      * by its getJavaType() method and for all reads from the database for the Structs described
      * by its getStructName() method
-     * @param converter
      */
     public void addStructConverter(StructConverter converter) {
         if (structConverters == null){
@@ -888,9 +887,6 @@
      * By default, we assume case 1 and simply return the value of maxResults.  Subclasses
      * may provide an override
      *
-     * @param firstResultIndex
-     * @param maxResults
-     *
      * @see org.eclipse.persistence.platform.database.MySQLPlatform
      */
     public int computeMaxRowsForSQL(int firstResultIndex, int maxResults){
@@ -1451,8 +1447,6 @@
 
     /**
      * Used to allow platforms to define their own index prefixes
-     * @param isUniqueSetOnField
-     * @return
      */
     public String getIndexNamePrefix(boolean isUniqueSetOnField){
         return "IX_";
@@ -1885,8 +1879,6 @@
      *
      * On databases where, for some reason we cannot select one of the key fields
      * this method can be overridden
-     * @param subselect
-     *
      * @see SymfowarePlatform
      */
     public void retrieveFirstPrimaryKeyOrOne(ReportQuery subselect){
@@ -2972,7 +2964,6 @@
      * Precondition: pkFields contained in usedFields contained in allFields
      * @param writer for writing the sql
      * @param table is original table for which temp table is created.
-     * @param session.
      * @param pkFields primary key fields for the original table.
      * @param usedFields fields that will be used by operation for which temp table is created.
      * @param allFields all mapped fields for the original table.
diff --git a/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/internal/databaseaccess/DatasourceCall.java b/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/internal/databaseaccess/DatasourceCall.java
index c5969ae..c9a2502 100644
--- a/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/internal/databaseaccess/DatasourceCall.java
+++ b/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/internal/databaseaccess/DatasourceCall.java
@@ -947,9 +947,6 @@
      * INTERNAL:
      * This method is used to correct parameterTypes which are compared to static values using == equality, which changes
      * during serialization/deserialization.
-     * @param in
-     * @throws IOException
-     * @throws ClassNotFoundException
      */
     private void readObject(ObjectInputStream in) throws IOException, ClassNotFoundException {
         in.defaultReadObject();
diff --git a/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/internal/descriptors/CascadeLockingPolicy.java b/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/internal/descriptors/CascadeLockingPolicy.java
index 0b8702b..05bc945 100644
--- a/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/internal/descriptors/CascadeLockingPolicy.java
+++ b/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/internal/descriptors/CascadeLockingPolicy.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 1998, 2019 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1998, 2021 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0 which is available at
@@ -134,8 +134,6 @@
       * If there is no InheritancePolicy, we return our parentDescriptor
       * If there is inheritance we will search for a descriptor that represents parentObj and
       * return that descriptor
-      * @param parentObj
-      * @return
       */
      protected ClassDescriptor getParentDescriptorFromInheritancePolicy(Object parentObj){
          ClassDescriptor realParentDescriptor = m_parentDescriptor;
diff --git a/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/internal/descriptors/ClassNameConversionRequired.java b/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/internal/descriptors/ClassNameConversionRequired.java
index 05858e2..f5d6cdd 100644
--- a/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/internal/descriptors/ClassNameConversionRequired.java
+++ b/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/internal/descriptors/ClassNameConversionRequired.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2013, 2020 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2013, 2021 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0 which is available at
@@ -28,7 +28,6 @@
      * settings. This method is used when converting a project that has been built
      * with class names to a project with classes.
      * This method is implemented by subclasses as necessary.
-     * @param classLoader
      */
     void convertClassNamesToClasses(ClassLoader classLoader);
 }
diff --git a/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/internal/descriptors/InstantiationPolicy.java b/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/internal/descriptors/InstantiationPolicy.java
index 0169764..188cccc 100644
--- a/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/internal/descriptors/InstantiationPolicy.java
+++ b/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/internal/descriptors/InstantiationPolicy.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 1998, 2020 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1998, 2021 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0 which is available at
@@ -459,7 +459,6 @@
      * Convert all the class-name-based settings in this InstantiationPolicy to actual class-based
      * settings.  This method is used when converting a project that has been built
      * with class names to a project with classes.
-     * @param classLoader
      */
     public void convertClassNamesToClasses(ClassLoader classLoader){
         if (factoryClassName == null){
diff --git a/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/internal/descriptors/MethodAttributeAccessor.java b/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/internal/descriptors/MethodAttributeAccessor.java
index 8b0cc1b..760983d 100644
--- a/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/internal/descriptors/MethodAttributeAccessor.java
+++ b/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/internal/descriptors/MethodAttributeAccessor.java
@@ -121,7 +121,6 @@
      * INTERNAL:
      * Return the GetMethod return type for this MethodAttributeAccessor.
      * A special check is made to determine if a missing method is a result of failed weaving.
-     * @return
      */
     // Note: SDO overrides this method and will handle a null GetMethod
     public Class getGetMethodReturnType() throws DescriptorException {
diff --git a/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/internal/dynamic/DynamicPropertiesInitializatonPolicy.java b/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/internal/dynamic/DynamicPropertiesInitializatonPolicy.java
index 2d375ff..dc69f12 100644
--- a/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/internal/dynamic/DynamicPropertiesInitializatonPolicy.java
+++ b/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/internal/dynamic/DynamicPropertiesInitializatonPolicy.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2011, 2019 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2011, 2021 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0 which is available at
@@ -29,8 +29,6 @@
 
     /**
      * After entity is created, initialize all required attributes.
-     * @param type
-     * @param entity
      */
     public void initializeProperties(DynamicTypeImpl type, DynamicEntityImpl entity) {
         if (type != null) {
@@ -44,8 +42,6 @@
      * Initialize the default value handling primitives, collections and
      * indirection.
      *
-     * @param mapping
-     * @param entity
      */
     private void initializeDefaultValue(DatabaseMapping mapping, DynamicEntityImpl entity) {
         Object value = null;
diff --git a/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/internal/dynamic/DynamicTypeImpl.java b/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/internal/dynamic/DynamicTypeImpl.java
index e61e2db..1d780ec 100644
--- a/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/internal/dynamic/DynamicTypeImpl.java
+++ b/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/internal/dynamic/DynamicTypeImpl.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 1998, 2019 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1998, 2021 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0 which is available at
@@ -61,7 +61,6 @@
     /**
      * Creation of an EntityTypeImpl for an existing Descriptor with mappings.
      *
-     * @param descriptor
      */
     public DynamicTypeImpl(ClassDescriptor descriptor, DynamicType parentType) {
         this();
diff --git a/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/internal/expressions/ArgumentListFunctionExpression.java b/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/internal/expressions/ArgumentListFunctionExpression.java
index da46162..e91fff9 100644
--- a/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/internal/expressions/ArgumentListFunctionExpression.java
+++ b/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/internal/expressions/ArgumentListFunctionExpression.java
@@ -47,7 +47,6 @@
      * Add a new Expression to the list of arguments.
      * This method will update the list of arguments and any constant strings that are required
      * to be printed with the arguments
-     * @param argument
      */
     @Override
     public synchronized void addChild(Expression argument){
@@ -65,7 +64,6 @@
      * Add a child and ensure it is the rightmost in the tree as long as it
      * is in the tree
      * If there is already a node that is set as therightmost node, replace it
-     * @param argument
      */
     public synchronized void addRightMostChild(Expression argument){
         if (hasLastChild != null && hasLastChild){
diff --git a/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/internal/expressions/ExpressionNormalizer.java b/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/internal/expressions/ExpressionNormalizer.java
index d79d7c0..6ba58c4 100644
--- a/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/internal/expressions/ExpressionNormalizer.java
+++ b/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/internal/expressions/ExpressionNormalizer.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 1998, 2020 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1998, 2021 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0 which is available at
@@ -133,7 +133,6 @@
      * Similar to addAdditionalExpression, this keeps a running expression used for joins so that they can be added locally within 'OR'
      * predicates rather than to the entire where clause.  If addAdditionalExpressionsWithinCurrrentExpressionContext is false, it will work
      * the same as addAdditionalExpression
-     * @param theExpression
      */
     public void addAdditionalLocalExpression(Expression theExpression) {
         // This change puts a null check into every call, but is printing additional
@@ -149,9 +148,6 @@
      * INTERNAL
      * This will return the localExpression if isLogicalExpression is false, otherwise it will check the addAdditionalExpressionsWithinCurrrentExpressionContext
      * flag and clear additionalLocalExpression once adding it to the localExpression.
-     * @param localExpression
-     * @param isLogicalExpression
-     * @return
      */
     public Expression processAdditionalLocalExpressions(Expression localExpression, boolean isLogicalExpression) {
         if (!isLogicalExpression || !addAdditionalExpressionsWithinCurrrentExpressionContext) {
@@ -171,7 +167,6 @@
      * INTERNAL:
      * Allows keeping track when the normalizer is within a logical OR statement, where additionalExpressions might need to be added to the local
      * expression instead of at the end of the where clause.
-     * @param addAdditionalExpressionsWithinCurrrentExpressionContext
      */
     public void setAddAdditionalExpressionsWithinCurrrentExpressionContext(
             boolean addAdditionalExpressionsWithinCurrrentExpressionContext) {
diff --git a/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/internal/expressions/SQLSelectStatement.java b/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/internal/expressions/SQLSelectStatement.java
index f802b2e..b295963 100644
--- a/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/internal/expressions/SQLSelectStatement.java
+++ b/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/internal/expressions/SQLSelectStatement.java
@@ -1179,7 +1179,6 @@
     /**
      * INTERNAL:
      * returns outerJoinExpressionHolders representing outerjoin expressions.
-     * @return
      */
     public List<OuterJoinExpressionHolder> getOuterJoinExpressionsHolders() {
         if (outerJoinExpressionHolders == null) {
@@ -1196,7 +1195,6 @@
      * @param outerJoinedMappingCriteria - used for querykey mapping expressions
      * @param outerJoinedAdditionalJoinCriteria - additional tables/expressions to join.  Usually for multitableInheritance join expressions
      * @param descriptor - descriptor to use if this is for reading in subclasses in one query.
-     * @return
      */
     public Integer addOuterJoinExpressionsHolders(ObjectExpression joinExpression, Expression outerJoinedMappingCriteria,
             Map<DatabaseTable, Expression> outerJoinedAdditionalJoinCriteria, ClassDescriptor descriptor) {
diff --git a/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/internal/expressions/SpatialExpressionOperators.java b/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/internal/expressions/SpatialExpressionOperators.java
index 1c880f8..7cd695f 100644
--- a/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/internal/expressions/SpatialExpressionOperators.java
+++ b/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/internal/expressions/SpatialExpressionOperators.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 1998, 2019 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1998, 2021 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0 which is available at
@@ -35,7 +35,6 @@
     /**
      * ExpressionOperator for the MDSYS.SDO_WITHIN_DISTANCE Spatial Operator on the Oracle Database
      * Use of this operator requires the Java spatial classes
-     * @return
      */
     public static ExpressionOperator withinDistance() {
         ExpressionOperator operator = ExpressionOperator.simpleThreeArgumentFunction(SDO_WITHIN_DISTANCE, "MDSYS.SDO_WITHIN_DISTANCE");
@@ -46,7 +45,6 @@
     /**
      * ExpressionOperator for the MDSYS.MDSYS.SDO_RELATE Spatial Operator on the Oracle Database
      * Use of this operator requires the Java spatial classes
-     * @return
      */
     public static ExpressionOperator relate() {
         ExpressionOperator operator = ExpressionOperator.simpleThreeArgumentFunction(SDO_RELATE, "MDSYS.SDO_RELATE");
@@ -57,7 +55,6 @@
     /**
      * ExpressionOperator for the MDSYS.SDO_FILTER Spatial Operator on the Oracle Database
      * Use of this operator requires the Java spatial classes
-     * @return
      */
     public static ExpressionOperator filter() {
         ExpressionOperator operator = ExpressionOperator.simpleThreeArgumentFunction(SDO_FILTER, "MDSYS.SDO_FILTER");
@@ -68,7 +65,6 @@
     /**
      * ExpressionOperator for the MDSYS.SDO_NN Spatial Operator on the Oracle Database
      * Use of this operator requires the Java spatial classes
-     * @return
      */
     public static ExpressionOperator nearestNeighbor() {
         ExpressionOperator operator = ExpressionOperator.simpleThreeArgumentFunction(SDO_NN, "MDSYS.SDO_NN");
diff --git a/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/internal/helper/ConcurrencyManager.java b/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/internal/helper/ConcurrencyManager.java
index 18e1e4b..b09cc54 100644
--- a/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/internal/helper/ConcurrencyManager.java
+++ b/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/internal/helper/ConcurrencyManager.java
@@ -835,7 +835,6 @@
      * this flag may inadvertently remove the deadlock because of the change in timings.
      *
      * There is also a system level property for this setting. "eclipselink.cache.record-stack-on-lock"
-     * @param shouldTrackStack
      */
     public static void setShouldTrackStack(boolean shouldTrackStack) {
         ConcurrencyManager.shouldTrackStack = shouldTrackStack;
diff --git a/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/internal/helper/ConcurrencySemaphore.java b/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/internal/helper/ConcurrencySemaphore.java
index ed93360..7423140 100644
--- a/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/internal/helper/ConcurrencySemaphore.java
+++ b/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/internal/helper/ConcurrencySemaphore.java
@@ -34,7 +34,7 @@
     private Object outerObject;
 
     /**
-     * Constructor to create {@link #ConcurrencySemaphore}
+     * Constructor to create {@code ConcurrencySemaphore}
      * @param threadLocalVarControlIfCurrentThreadHasAcquiredSemaphore
      *          Thread local variable that the code to acquire a semaphore can check to make sure it does not try to acquire
      *          twice the same semaphore (e.g. in case the object building algorithm is recursive).
diff --git a/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/internal/helper/ConcurrencyUtil.java b/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/internal/helper/ConcurrencyUtil.java
index dca5307..5ae4f25 100644
--- a/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/internal/helper/ConcurrencyUtil.java
+++ b/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/internal/helper/ConcurrencyUtil.java
@@ -775,7 +775,6 @@
      *
      * @param lockManager
      *            the deferred lock manager of the current thread
-     * @return
      */
     private String createStringWithSummaryOfDeferredLocksOnThread(DeferredLockManager lockManager, String threadName) {
         // (a) Make sure the lock manager being passed is not null
diff --git a/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/internal/helper/ConversionManager.java b/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/internal/helper/ConversionManager.java
index 2d62a8c..f783fd4 100644
--- a/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/internal/helper/ConversionManager.java
+++ b/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/internal/helper/ConversionManager.java
@@ -1298,7 +1298,6 @@
 
     /**
      * INTERNAL:
-     * @param classLoader
      */
     public void setLoader(ClassLoader classLoader) {
         shouldUseClassLoaderFromCurrentThread = false;
@@ -1308,7 +1307,6 @@
     /**
      * INTERNAL:
      * Set the default class loader to use if no instance-level loader is set
-     * @param classLoader
      */
     public static void setDefaultLoader(ClassLoader classLoader) {
         defaultLoader = classLoader;
diff --git a/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/internal/helper/DBPlatformHelper.java b/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/internal/helper/DBPlatformHelper.java
index 8a5420b..3120e79 100644
--- a/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/internal/helper/DBPlatformHelper.java
+++ b/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/internal/helper/DBPlatformHelper.java
@@ -1,6 +1,6 @@
 /*
- * Copyright (c) 1998, 2019 Oracle and/or its affiliates. All rights reserved.
- * Copyright (c) 1998, 2019 IBM Corporation. All rights reserved.
+ * Copyright (c) 1998, 2021 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1998, 2021 IBM Corporation. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0 which is available at
@@ -125,7 +125,6 @@
     * any error compiling regExp.
     * @param regExp The regular expression.
     * @param target The target against which we are trying to match regExp.
-    * @param logger
     * @return false if there is error compiling regExp or target does not
     * match regExp. true if regExp matches pattern.
     */
diff --git a/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/internal/helper/DatabaseTable.java b/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/internal/helper/DatabaseTable.java
index 0531c53..ca5a286 100644
--- a/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/internal/helper/DatabaseTable.java
+++ b/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/internal/helper/DatabaseTable.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 1998, 2019 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1998, 2021 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0 which is available at
@@ -335,7 +335,6 @@
     /**
      * Set the table name.
      * Used when aliasing table names.
-     * @param name
      */
     public void setName(String name) {
         setName(name, null, null);
@@ -348,7 +347,6 @@
      * If the name contains database delimiters, they will be stripped and a flag will be set to have them
      * added when the DatabaseTable is written to SQL
      *
-     * @param name
      */
     public void setName(String name, String startDelimiter, String endDelimiter) {
         if (name != null && (startDelimiter != null) && (endDelimiter != null) && !startDelimiter.equals("")&& !endDelimiter.equals("") && name.startsWith(startDelimiter) && name.endsWith(endDelimiter)){
@@ -365,7 +363,6 @@
      * project xml, we must check if it is fully qualified and split the
      * actual name from the qualifier.
      *
-     * @param possiblyQualifiedName
      */
     public void setPossiblyQualifiedName(String possiblyQualifiedName) {
         setPossiblyQualifiedName(possiblyQualifiedName, null, null);
diff --git a/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/internal/helper/ExplainDeadLockUtil.java b/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/internal/helper/ExplainDeadLockUtil.java
index a4ff18c..b36b7cf 100644
--- a/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/internal/helper/ExplainDeadLockUtil.java
+++ b/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/internal/helper/ExplainDeadLockUtil.java
@@ -534,13 +534,6 @@
      * Expand the recursion exploring the possibility that the reason the current thread cannot acquire the cache key is
      * because there are readers on the cache key.
      *
-     * @param concurrencyManagerState
-     * @param recursionMaxDepth
-     * @param currentRecursionDepth
-     * @param currentCandidateThreadPartOfTheDeadLock
-     * @param threadPartOfCurrentDeadLockExpansion
-     * @param threadsAlreadyExpandedInThePastThatWeDoNotWantToExpandAgain
-     * @param cacheKeyCurrentThreadWantsForWritingButCannotGet
      * @return NULL if dead lock not discovered. Otherwise dead lock component justifying the deadlock.
      */
     protected DeadLockComponent recursiveExplainPossibleDeadLockStep03Scenario02CurrentWriterVsOtherReader(
@@ -602,13 +595,6 @@
      * basket of writers or in our basket of readers, we are stuck.
      *
      *
-     * @param concurrencyManagerStateDto
-     * @param recursionMaxDepth
-     * @param currentRecursionDepth
-     * @param currentCandidateThreadPartOfTheDeadLock
-     * @param threadPartOfCurrentDeadLockExpansion
-     * @param threadsAlreadyExpandedInThePastThatWeDoNotWantToExpandAgain
-     * @param cacheKeyCurrentThreadWantsForWritingButCannotGet
      * @return NULL if looking at the active thread of the wanted cache key does not bare any fruits, otherwise the dead
      *         lock component object are returned.
      */
@@ -631,14 +617,6 @@
      * but in this case our candidate thread is trying to get the cache key with the purpose of READING and not for
      * writing.
      *
-     * @param concurrencyManagerStateDto
-     * @param recursionMaxDepth
-     * @param currentRecursionDepth
-     * @param currentCandidateThreadPartOfTheDeadLock
-     * @param threadPartOfCurrentDeadLockExpansion
-     * @param threadsAlreadyExpandedInThePastThatWeDoNotWantToExpandAgain
-     * @param cacheKeyCurrentThreadWantsForWritingButCannotGet
-     * @return
      */
     protected DeadLockComponent recursiveExplainPossibleDeadLockStep05Scenario02CurrentReaderVsCacheKeyActiveThread(
             final ConcurrencyManagerState concurrencyManagerStateDto,
@@ -783,12 +761,6 @@
      * as it wanted during object building and hda to defer making some parts of the object. The thread is stuck because
      * the parts of the object it could not build are apparently not finished either.
      *
-     * @param concurrencyManagerStateDto
-     * @param recursionMaxDepth
-     * @param currentRecursionDepth
-     * @param currentCandidateThreadPartOfTheDeadLock
-     * @param threadPartOfCurrentDeadLockExpansion
-     * @param threadsAlreadyExpandedInThePastThatWeDoNotWantToExpandAgain
      * @return NULL if we are able to explain a dead lock via expanding this the current candidate thread Otherwiser a
      *         DTO component that explains the the dad lock
      */
@@ -849,14 +821,6 @@
      * because the cache key is being owned by somebody else. So we need to see what the writer of this cache key is
      * doing.
      *
-     * @param concurrencyManagerStateDto
-     * @param recursionMaxDepth
-     * @param currentRecursionDepth
-     * @param currentCandidateThreadPartOfTheDeadLock
-     * @param threadPartOfCurrentDeadLockExpansion
-     * @param threadsAlreadyExpandedInThePastThatWeDoNotWantToExpandAgain
-     * @param cacheKeyCurrentThreadWantsForReadingButCannotGet
-     * @return
      */
     protected DeadLockComponent recursiveExplainPossibleDeadLockStep05ExpandBasedOnCacheKeyWantedForReading(
             final ConcurrencyManagerState concurrencyManagerStateDto,
diff --git a/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/internal/helper/Helper.java b/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/internal/helper/Helper.java
index 196f44f..a0c526b 100644
--- a/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/internal/helper/Helper.java
+++ b/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/internal/helper/Helper.java
@@ -782,7 +782,6 @@
      *  @param originalVector - original vector
      *  @param startIndex - starting position in vector
      *  @param stopIndex - ending position in vector
-     *  @exception EclipseLinkException
      */
     public static Vector copyVector(List originalVector, int startIndex, int stopIndex) throws ValidationException {
         Vector newVector;
@@ -802,8 +801,6 @@
 
     /**
      * Copy an array of strings to a new array
-     * @param original
-     * @return
      */
     public static String[] copyStringArray(String[] original){
         if (original == null){
@@ -818,8 +815,6 @@
 
     /**
      * Copy an array of int to a new array
-     * @param original
-     * @return
      */
     public static int[] copyIntArray(int[] original){
         if (original == null){
@@ -1227,9 +1222,6 @@
      * Used by our byte code weaving to enable users who are debugging to output
      * the generated class to a file
      *
-     * @param className
-     * @param classBytes
-     * @param outputPath
      */
     public static void outputClassFile(String className, byte[] classBytes,
             String outputPath) {
@@ -2114,7 +2106,6 @@
 
     /**
      * Convert dotted format class name to slashed format class name.
-     * @param dottedClassName
      * @return String
      */
     public static String toSlashedClassName(String dottedClassName){
diff --git a/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/internal/helper/JPAClassLoaderHolder.java b/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/internal/helper/JPAClassLoaderHolder.java
index 5d75f80..034af73 100644
--- a/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/internal/helper/JPAClassLoaderHolder.java
+++ b/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/internal/helper/JPAClassLoaderHolder.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 1998, 2019 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1998, 2021 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0 which is available at
@@ -29,7 +29,6 @@
         /**
          * INTERNAL:
          * Create an instance of JPAClassLoaderHolder that wraps aClassLoader that is an original call to get*ClassLoader().
-         * @param aClassLoader
          */
         public JPAClassLoaderHolder(ClassLoader aClassLoader) {
             this(aClassLoader, true);
@@ -38,8 +37,6 @@
         /**
          * INTERNAL:
          * Create an instance of JPAClassLoaderHolder that wraps aClassLoader and the inUse boolean.
-         * @param aClassLoader
-         * @param isThisTempClassLoader
          */
         public JPAClassLoaderHolder(ClassLoader aClassLoader, boolean isThisTempClassLoader) {
             classLoader = aClassLoader;
diff --git a/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/internal/helper/SerializationHelper.java b/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/internal/helper/SerializationHelper.java
index 1861d0d..5c8c99d 100644
--- a/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/internal/helper/SerializationHelper.java
+++ b/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/internal/helper/SerializationHelper.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 1998, 2019 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1998, 2021 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0 which is available at
@@ -41,8 +41,6 @@
      * <p>Deep clone a Serializable object using serialization.
      * @param object the serializable object
      * @return the deep cloned object
-     * @throws IOException
-     * @throws ClassNotFoundException
      */
     public static Object clone(Serializable object) throws IOException, ClassNotFoundException {
         return deserialize(serialize(object));
@@ -53,7 +51,6 @@
      *
      * @param obj  the object to serialize to bytes
      * @param outputStream  the stream to write to, can not be null
-     * @throws IOException
      */
     public static void serialize(Serializable obj, OutputStream outputStream) throws IOException {
         if (outputStream == null) {
@@ -81,7 +78,6 @@
      *
      * @param obj  the object to serialize to bytes
      * @return a byte[] of the obj
-     * @throws IOException
      */
     public static byte[] serialize(Serializable obj) throws IOException {
         ByteArrayOutputStream outStream = new ByteArrayOutputStream(512);
@@ -94,8 +90,6 @@
      *
      * @param inputStream  the serialized object input stream, must not be null
      * @return the deserialized object
-     * @throws IOException
-     * @throws ClassNotFoundException
      */
     public static Object deserialize(InputStream inputStream) throws IOException, ClassNotFoundException {
         if (inputStream == null) {
@@ -123,8 +117,6 @@
      *
      * @param objectBytes  the serialized object, can not be null
      * @return the deserialized object
-     * @throws IOException
-     * @throws ClassNotFoundException
      */
     public static Object deserialize(byte[] objectBytes) throws IOException, ClassNotFoundException {
         if (objectBytes == null) {
diff --git a/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/internal/helper/type/CacheKeyToThreadRelationships.java b/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/internal/helper/type/CacheKeyToThreadRelationships.java
index e2733e3..ca1e28d 100644
--- a/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/internal/helper/type/CacheKeyToThreadRelationships.java
+++ b/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/internal/helper/type/CacheKeyToThreadRelationships.java
@@ -77,7 +77,6 @@
     /**
      * Create a new CacheKeyToThreadRelationships.
      *
-     * @param cacheKeyBeingDescribed
      */
     public CacheKeyToThreadRelationships(ConcurrencyManager cacheKeyBeingDescribed) {
         super();
diff --git a/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/internal/helper/type/ConcurrencyManagerState.java b/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/internal/helper/type/ConcurrencyManagerState.java
index 6921847..854b21e 100644
--- a/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/internal/helper/type/ConcurrencyManagerState.java
+++ b/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/internal/helper/type/ConcurrencyManagerState.java
@@ -85,16 +85,6 @@
     /**
      * Create a new ConcurrencyManagerState.
      *
-     * @param readLockManagerMapClone
-     * @param deferredLockManagerMapClone
-     * @param unifiedMapOfThreadsStuckTryingToAcquireWriteLock
-     * @param unifiedMapOfThreadsStuckTryingToAcquireWriteLockMethodName
-     * @param mapThreadToWaitOnAcquireReadLockClone
-     * @param mapThreadToWaitOnAcquireReadLockCloneMethodName
-     * @param setThreadWaitingToReleaseDeferredLocksClone
-     * @param mapThreadsThatAreCurrentlyWaitingToReleaseDeferredLocksJustificationClone
-     * @param mapOfCacheKeyToDtosExplainingThreadExpectationsOnCacheKey
-     * @param mapThreadToObjectIdWithWriteLockManagerChangesClone
      */
     public ConcurrencyManagerState(
             Map<Thread, ReadLockManager> readLockManagerMapClone,
diff --git a/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/internal/helper/type/DeadLockComponent.java b/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/internal/helper/type/DeadLockComponent.java
index a6b6f5e..44ae512 100644
--- a/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/internal/helper/type/DeadLockComponent.java
+++ b/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/internal/helper/type/DeadLockComponent.java
@@ -93,14 +93,6 @@
     /**
      * Create a new DeadLockComponent.
      *
-     * @param threadNotAbleToAccessResource
-     * @param stuckOnReleaseDeferredLock
-     * @param stuckThreadAcquiringLockForWriting
-     * @param stuckThreadAcquiringLockForReading
-     * @param cacheKeyThreadWantsToAcquireButCannotGet
-     * @param deadLockPotentiallyCausedByCacheKeyWithCorruptedActiveThread
-     * @param deadLockPotentiallyCausedByCacheKeyWithCorruptedNumberOfReaders
-     * @param nextThreadPartOfDeadLock
      */
     public DeadLockComponent(Thread threadNotAbleToAccessResource, boolean stuckOnReleaseDeferredLock,
                                               boolean stuckThreadAcquiringLockForWriting, boolean stuckThreadAcquiringLockForReading,
@@ -126,7 +118,6 @@
      *
      * Create a new DeadLockComponent.
      *
-     * @param threadNotAbleToAccessResource
      */
     public DeadLockComponent(Thread threadNotAbleToAccessResource) {
         // our deadlock has been found
diff --git a/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/internal/helper/type/ReadLockAcquisitionMetadata.java b/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/internal/helper/type/ReadLockAcquisitionMetadata.java
index 2637174..fdac621 100644
--- a/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/internal/helper/type/ReadLockAcquisitionMetadata.java
+++ b/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/internal/helper/type/ReadLockAcquisitionMetadata.java
@@ -58,9 +58,6 @@
     /**
      * Create a new ReadLockAcquisitionMetadata.
      *
-     * @param cacheKeyWhoseNumberOfReadersThreadIsIncrementing
-     * @param numberOfReadersOnCacheKeyBeforeIncrementingByOne
-     * @param currentThreadStackTraceInformation
      */
     public ReadLockAcquisitionMetadata(
             ConcurrencyManager cacheKeyWhoseNumberOfReadersThreadIsIncrementing,
diff --git a/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/internal/identitymaps/AbstractIdentityMap.java b/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/internal/identitymaps/AbstractIdentityMap.java
index 5ef2b92..6c5ac35 100644
--- a/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/internal/identitymaps/AbstractIdentityMap.java
+++ b/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/internal/identitymaps/AbstractIdentityMap.java
@@ -282,7 +282,6 @@
      * @param pkList List of Entity PKs to extract from the cache
      * @param descriptor Descriptor type to be retrieved.
      * @return Map of Entity PKs associated to the Entities that were retrieved
-     * @throws QueryException
      */
     @Override
     public Map<Object, Object> getAllFromIdentityMapWithEntityPK(Object[] pkList, ClassDescriptor descriptor, AbstractSession session){
@@ -305,7 +304,6 @@
      * @param pkList List of Entity PKs to extract from the cache
      * @param descriptor Descriptor type to be retrieved.
      * @return Map of Entity PKs associated to the Entities that were retrieved
-     * @throws QueryException
      */
     @Override
     public Map<Object, CacheKey> getAllCacheKeysFromIdentityMapWithEntityPK(Object[] pkList, ClassDescriptor descriptor, AbstractSession session){
diff --git a/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/internal/identitymaps/CacheKey.java b/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/internal/identitymaps/CacheKey.java
index 3001c04..8e7c76b 100644
--- a/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/internal/identitymaps/CacheKey.java
+++ b/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/internal/identitymaps/CacheKey.java
@@ -405,7 +405,6 @@
 
     /**
      * If a Wrapper subclasses this CacheKey this method will be used to unwrap the cache key.
-     * @return
      */
     public CacheKey getWrappedCacheKey(){
         return this;
diff --git a/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/internal/identitymaps/IdentityMap.java b/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/internal/identitymaps/IdentityMap.java
index b6d77e3..5864381 100644
--- a/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/internal/identitymaps/IdentityMap.java
+++ b/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/internal/identitymaps/IdentityMap.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 1998, 2019 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1998, 2021 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0 which is available at
@@ -117,7 +117,6 @@
      * @param pkList List of Entity PKs to extract from the cache
      * @param descriptor Descriptor type to be retrieved.
      * @return Map of Entity PKs associated to the Entities that were retrieved
-     * @throws QueryException
      */
     Map<Object, Object> getAllFromIdentityMapWithEntityPK(Object[] pkList, ClassDescriptor descriptor, AbstractSession session);
 
@@ -128,7 +127,6 @@
      * @param pkList List of Entity PKs to extract from the cache
      * @param descriptor Descriptor type to be retrieved.
      * @return Map of Entity PKs associated to the Entities that were retrieved
-     * @throws QueryException
      */
     Map<Object, CacheKey> getAllCacheKeysFromIdentityMapWithEntityPK(Object[] pkList, ClassDescriptor descriptor, AbstractSession session);
 
diff --git a/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/internal/identitymaps/IdentityMapManager.java b/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/internal/identitymaps/IdentityMapManager.java
index 7a02858..adcf2e3 100644
--- a/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/internal/identitymaps/IdentityMapManager.java
+++ b/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/internal/identitymaps/IdentityMapManager.java
@@ -602,7 +602,6 @@
      * @param pkList List of Entity PKs to extract from the cache
      * @param descriptor Descriptor type to be retrieved.
      * @return Map of Entity PKs associated to the Entities that were retrieved
-     * @throws QueryException
      */
     public Map<Object, Object> getAllFromIdentityMapWithEntityPK(Object[] pkList, ClassDescriptor descriptor, AbstractSession session){
         return getIdentityMap(descriptor).getAllFromIdentityMapWithEntityPK(pkList, descriptor, session);
@@ -615,7 +614,6 @@
      * @param pkList List of Entity PKs to extract from the cache
      * @param descriptor Descriptor type to be retrieved.
      * @return Map of Entity PKs associated to the Entities that were retrieved
-     * @throws QueryException
      */
     public Map<Object, CacheKey> getAllCacheKeysFromIdentityMapWithEntityPK(Object[] pkList, ClassDescriptor descriptor, AbstractSession session){
         return getIdentityMap(descriptor).getAllCacheKeysFromIdentityMapWithEntityPK(pkList, descriptor, session);
diff --git a/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/internal/indirection/BasicIndirectionPolicy.java b/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/internal/indirection/BasicIndirectionPolicy.java
index 4147150..adeacde 100644
--- a/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/internal/indirection/BasicIndirectionPolicy.java
+++ b/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/internal/indirection/BasicIndirectionPolicy.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 1998, 2019 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1998, 2021 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0 which is available at
@@ -313,8 +313,6 @@
      * The method validateAttributeOfInstantiatedObject(Object attributeValue) fixes the value of the attributeValue
      * in cases where it is null and indirection requires that it contain some specific data structure.  Return whether this will happen.
      * This method is used to help determine if indirection has been triggered
-     * @param attributeValue
-     * @return
      * @see validateAttributeOfInstantiatedObject(Object attributeValue)
      */
     @Override
diff --git a/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/internal/indirection/ContainerIndirectionPolicy.java b/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/internal/indirection/ContainerIndirectionPolicy.java
index 0b8c2d7..c70645f 100644
--- a/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/internal/indirection/ContainerIndirectionPolicy.java
+++ b/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/internal/indirection/ContainerIndirectionPolicy.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 1998, 2019 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1998, 2021 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0 which is available at
@@ -268,8 +268,6 @@
      * The method validateAttributeOfInstantiatedObject(Object attributeValue) fixes the value of the attributeValue
      * in cases where it is null and indirection requires that it contain some specific data structure.  Return whether this will happen.
      * This method is used to help determine if indirection has been triggered
-     * @param attributeValue
-     * @return
      * @see validateAttributeOfInstantiatedObject(Object attributeValue)
      */
     @Override
diff --git a/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/internal/indirection/IndirectionPolicy.java b/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/internal/indirection/IndirectionPolicy.java
index abfd13e..3f745a5 100644
--- a/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/internal/indirection/IndirectionPolicy.java
+++ b/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/internal/indirection/IndirectionPolicy.java
@@ -250,8 +250,6 @@
      * The method validateAttributeOfInstantiatedObject(Object attributeValue) fixes the value of the attributeValue
      * in cases where it is null and indirection requires that it contain some specific data structure.  Return whether this will happen.
      * This method is used to help determine if indirection has been triggered
-     * @param attributeValue
-     * @return
      * @see validateAttributeOfInstantiatedObject(Object attributeValue)
      */
     public boolean isAttributeValueFullyBuilt(Object attributeValue){
@@ -354,9 +352,6 @@
      * INTERNAL:
      * Same functionality as setRealAttributeValueInObject(Object target, Object attributeValue) but allows
      * overridden behavior for IndirectionPolicies that track changes
-     * @param target
-     * @param attributeValue
-     * @param allowChangeTracking
      */
     public void setRealAttributeValueInObject(Object target, Object attributeValue, boolean allowChangeTracking) {
         setRealAttributeValueInObject(target, attributeValue);
diff --git a/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/internal/indirection/ProxyIndirectionPolicy.java b/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/internal/indirection/ProxyIndirectionPolicy.java
index 9036570..0ff6a5e 100644
--- a/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/internal/indirection/ProxyIndirectionPolicy.java
+++ b/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/internal/indirection/ProxyIndirectionPolicy.java
@@ -449,8 +449,6 @@
      * The method validateAttributeOfInstantiatedObject(Object attributeValue) fixes the value of the attributeValue
      * in cases where it is null and indirection requires that it contain some specific data structure.  Return whether this will happen.
      * This method is used to help determine if indirection has been triggered
-     * @param attributeValue
-     * @return
      * @see validateAttributeOfInstantiatedObject(Object attributeValue)
      */
     @Override
diff --git a/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/internal/indirection/QueryBasedValueHolder.java b/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/internal/indirection/QueryBasedValueHolder.java
index ddca3ae..f2b9876 100644
--- a/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/internal/indirection/QueryBasedValueHolder.java
+++ b/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/internal/indirection/QueryBasedValueHolder.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 1998, 2019 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1998, 2021 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0 which is available at
@@ -263,7 +263,6 @@
 
     /**
      * INTERNAL:
-     * @param refreshCascadePolicy
      */
     public void setRefreshCascadePolicy(Integer refreshCascadePolicy) {
         this.refreshCascade = refreshCascadePolicy;
diff --git a/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/internal/indirection/TransparentIndirectionPolicy.java b/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/internal/indirection/TransparentIndirectionPolicy.java
index 34648af..8276453 100644
--- a/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/internal/indirection/TransparentIndirectionPolicy.java
+++ b/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/internal/indirection/TransparentIndirectionPolicy.java
@@ -404,8 +404,6 @@
      * The method validateAttributeOfInstantiatedObject(Object attributeValue) fixes the value of the attributeValue
      * in cases where it is null and indirection requires that it contain some specific data structure.  Return whether this will happen.
      * This method is used to help determine if indirection has been triggered
-     * @param attributeValue
-     * @return
      * @see validateAttributeOfInstantiatedObject(Object attributeValue)
      */
     @Override
diff --git a/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/internal/jpa/parsing/InNode.java b/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/internal/jpa/parsing/InNode.java
index 50326b4..8076d44 100644
--- a/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/internal/jpa/parsing/InNode.java
+++ b/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/internal/jpa/parsing/InNode.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 1998, 2020 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1998, 2021 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0 which is available at
@@ -144,7 +144,6 @@
      * INTERNAL:
      * This method is called to indicate that the inNode has a single argument.  This will be either a
      * subquery or a single parameter that contains the list of items to test
-     * @param isListParameterOrSubquery
      */
     public void setIsListParameterOrSubquery(boolean isListParameterOrSubquery){
         this.isListParameterOrSubquery = isListParameterOrSubquery;
diff --git a/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/internal/jpa/parsing/ParseTree.java b/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/internal/jpa/parsing/ParseTree.java
index ea6058b..e2f889a 100644
--- a/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/internal/jpa/parsing/ParseTree.java
+++ b/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/internal/jpa/parsing/ParseTree.java
@@ -497,7 +497,6 @@
     /**
      * INTERNAL:
      * Set the class loader for this parse tree
-     * @param loader
      */
     public void setClassLoader(ClassLoader loader){
         this.classLoader = loader;
diff --git a/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/internal/jpa/parsing/QueryNode.java b/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/internal/jpa/parsing/QueryNode.java
index b77fe14..6873a0a 100644
--- a/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/internal/jpa/parsing/QueryNode.java
+++ b/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/internal/jpa/parsing/QueryNode.java
@@ -53,7 +53,6 @@
 
   /**
    * Compute the Reference class for this query
-   * @param genContext
    * @return the class this query is querying for
    */
     public Class getReferenceClass(GenerationContext genContext) {
diff --git a/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/internal/localization/EclipseLinkLocalization.java b/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/internal/localization/EclipseLinkLocalization.java
index ef3a742..637c4c2 100644
--- a/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/internal/localization/EclipseLinkLocalization.java
+++ b/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/internal/localization/EclipseLinkLocalization.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 1998, 2019 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1998, 2021 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0 which is available at
@@ -40,11 +40,6 @@
      * INTERNAL:
      * Return the message for the given exception class and error number.
      * Based on the state of the translate flag - look up translation for the key:value message
-     * @param localizationClassName
-     * @param key
-     * @param arguments
-     * @param translate
-     * @return
      */
     public static String buildMessage(String localizationClassName, String key, Object[] arguments, boolean translate) {
         String message = key;
diff --git a/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/internal/oxm/ContainerValue.java b/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/internal/oxm/ContainerValue.java
index 9b738fa..249259e 100644
--- a/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/internal/oxm/ContainerValue.java
+++ b/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/internal/oxm/ContainerValue.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 1998, 2019 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1998, 2021 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0 which is available at
@@ -36,13 +36,6 @@
 
     /**
      * Marshal only one of the values from the collection.
-     * @param xPathFragment
-     * @param marshalRecord
-     * @param object
-     * @param value
-     * @param session
-     * @param namespaceResolver
-     * @param marshalContext
      */
     boolean marshalSingleValue(XPathFragment xPathFragment, MarshalRecord marshalRecord, Object object, Object value, CoreAbstractSession session, NamespaceResolver namespaceResolver, MarshalContext marshalContext);
 
diff --git a/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/internal/oxm/IDResolver.java b/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/internal/oxm/IDResolver.java
index 4bd07e8..9d35310 100644
--- a/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/internal/oxm/IDResolver.java
+++ b/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/internal/oxm/IDResolver.java
@@ -52,7 +52,6 @@
      *
      * @return a <code>Callable</code> that will return the resolved object.
      *
-     * @throws SAXException
      */
     public abstract Callable<?> resolve(Object id, Class type) throws SAXException;
 
@@ -66,7 +65,6 @@
      *
      * @return a <code>Callable</code> that will return the resolved object.
      *
-     * @throws SAXException
      */
     public abstract Callable<?> resolve(Map<String, Object> id, Class type) throws SAXException;
 
@@ -78,7 +76,6 @@
      * @param id The id <code>Object</code> that uniquely identifies the object to be bound.
      * @param obj The object that will be bound to this id.
      *
-     * @throws SAXException
      */
     public abstract void bind(Object id, Object obj) throws SAXException;
 
@@ -90,7 +87,6 @@
      * @param id A <code>Map</code> of id values, keyed on attribute name.
      * @param obj The object that will be bound to this id.
      *
-     * @throws SAXException
      */
     public abstract void bind(Map<String, Object> id, Object obj) throws SAXException;
 
@@ -101,7 +97,6 @@
      *
      * @param errorHandler Any errors encountered during the unmarshal process should be reported to this handler.
      *
-     * @throws SAXException
      */
     public void startDocument(ErrorHandler errorHandler) throws SAXException {}
 
@@ -110,7 +105,6 @@
      * Called when unmarshalling ends.
      * </p>
      *
-     * @throws SAXException
      */
     public void endDocument() throws SAXException {}
 
diff --git a/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/internal/oxm/NamespacePrefixMapper.java b/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/internal/oxm/NamespacePrefixMapper.java
index 426c2e3..18ad774 100644
--- a/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/internal/oxm/NamespacePrefixMapper.java
+++ b/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/internal/oxm/NamespacePrefixMapper.java
@@ -31,7 +31,6 @@
      * Returns a string array of prefixes and namespace uris that are already available in
      * this context. Only required when marshalling to an output stream or a writer, since
      * it's not possible to determine which namespaces are already in scope.
-     * @return
      */
     public String[] getContextualNamespaceDecls() {
         return new String[0];
@@ -49,7 +48,6 @@
      * Returns a string array of prefixes and namespace uris to be declared at the root of
      * the document. This eliminates the need of implementing both getPredeclaredNamespaceUris
      * and getPreferredPrefix since the prefix and uri can be associated here.
-     * @return
      */
     public String[] getPreDeclaredNamespaceUris2() {
         return new String[0];
diff --git a/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/internal/oxm/NodeValue.java b/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/internal/oxm/NodeValue.java
index 62699f5..5f1b3e7 100644
--- a/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/internal/oxm/NodeValue.java
+++ b/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/internal/oxm/NodeValue.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 1998, 2019 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1998, 2021 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0 which is available at
@@ -48,7 +48,6 @@
     /**
      * INTERNAL:
      * Return whether we ignore this node value when marshalling its parent
-     * @return
      */
     public boolean isMarshalOnlyNodeValue() {
         return false;
@@ -56,8 +55,6 @@
 
     /**
      * INTERNAL:
-     * @param xPathFragment
-     * @return
      */
     public boolean isOwningNode(XPathFragment xPathFragment) {
         return null == xPathFragment.getNextFragment();
@@ -65,12 +62,6 @@
 
     /**
      * INTERNAL:
-     * @param xPathFragment
-     * @param marshalRecord
-     * @param object
-     * @param session
-     * @param namespaceResolver
-     * @return
      */
     public abstract boolean marshal(XPathFragment xPathFragment, MarshalRecord marshalRecord, Object object, CoreAbstractSession session, NamespaceResolver namespaceResolver);
 
@@ -78,13 +69,6 @@
      * INTERNAL:
      * This method is no longer required as now MarshalRecord maintains a
      * reference to the XMLMarshaller.
-     * @param xPathFragment
-     * @param marshalRecord
-     * @param object
-     * @param session
-     * @param namespaceResolver
-     * @param marshaller
-     * @return
      */
     public boolean marshal(XPathFragment xPathFragment, MarshalRecord marshalRecord, Object object, CoreAbstractSession session, NamespaceResolver namespaceResolver, Marshaller marshaller) {
         marshalRecord.setMarshaller(marshaller);
@@ -93,12 +77,6 @@
 
     /**
      * INTERNAL:
-     * @param xPathFragment
-     * @param marshalRecord
-     * @param object
-     * @param session
-     * @param namespaceResolver
-     * @return
      */
     public boolean marshal(XPathFragment xPathFragment, MarshalRecord marshalRecord, Object object, CoreAbstractSession session, NamespaceResolver namespaceResolver, MarshalContext marshalContext, XPathFragment rootFragment) {
         return this.marshal(xPathFragment, marshalRecord, object, session, namespaceResolver, marshalContext);
@@ -108,14 +86,6 @@
      * INTERNAL:
      * This method provides an optimization in cases where the value has already
      * been calculated.
-     * @param xPathFragment
-     * @param marshalRecord
-     * @param object
-     * @param objectValue
-     * @param session
-     * @param namespaceResolver
-     * @param marshalContext
-     * @return
      */
     public abstract boolean marshalSingleValue(XPathFragment xPathFragment, MarshalRecord marshalRecord, Object object, Object objectValue, CoreAbstractSession session, NamespaceResolver namespaceResolver, MarshalContext marshalContext);
 
@@ -123,14 +93,6 @@
      * INTERNAL:
      * This method provides an optimization in cases where the value has already
      * been calculated.
-     * @param xPathFragment
-     * @param marshalRecord
-     * @param object
-     * @param objectValue
-     * @param session
-     * @param namespaceResolver
-     * @param marshalContext
-     * @return
      */
     public boolean marshalSingleValue(XPathFragment xPathFragment, MarshalRecord marshalRecord, Object object, Object objectValue, CoreAbstractSession session, NamespaceResolver namespaceResolver, MarshalContext marshalContext, XPathFragment rootFragment) {
         return this.marshalSingleValue(xPathFragment, marshalRecord, object, objectValue, session, namespaceResolver, marshalContext);
@@ -139,24 +101,13 @@
 /**
      * INTERNAL:
      * Override this method if the NodeValue is applicable to sequenced objects.
-     * @param xPathFragment
-     * @param marshalRecord
-     * @param object
-     * @param session
-     * @param namespaceResolver
-     * @param marshalContext
-     * @return
-     */
+ */
     public boolean marshal(XPathFragment xPathFragment, MarshalRecord marshalRecord, Object object, CoreAbstractSession session, NamespaceResolver namespaceResolver, MarshalContext marshalContext) {
         return this.marshal(xPathFragment, marshalRecord, object, session, namespaceResolver);
     }
 
     /**
      * INTERNAL:
-     * @param xPathFragment
-     * @param unmarshalRecord
-     * @param atts
-     * @return
      */
     public boolean startElement(XPathFragment xPathFragment, UnmarshalRecord unmarshalRecord, Attributes atts) {
         return true;
@@ -164,10 +115,6 @@
 
     /**
      * INTERNAL:
-     * @param unmarshalRecord
-     * @param URI
-     * @param localName
-     * @param value
      */
     public void attribute(UnmarshalRecord unmarshalRecord, String URI, String localName, String value) {
         // No operation for parent
@@ -175,17 +122,12 @@
 
     /**
      * INTERNAL:
-     * @param xPathFragment
-     * @param unmarshalRecord
      */
     public void endElement(XPathFragment xPathFragment, UnmarshalRecord unmarshalRecord) {
     }
 
     /**
      * INTERNAL:
-     * @param unmarshalRecord
-     * @param atts
-     * @return
      */
     public UnmarshalRecord buildSelfRecord(UnmarshalRecord unmarshalRecord, Attributes atts) {
         return null;
@@ -229,13 +171,6 @@
      * INTERNAL:
      * Marshal any 'self' mapped attributes.
      *
-     * @param xPathFragment
-     * @param marshalRecord
-     * @param object
-     * @param session
-     * @param namespaceResolver
-     * @param marshaller
-     * @return
      */
     public boolean marshalSelfAttributes(XPathFragment xPathFragment, MarshalRecord marshalRecord, Object object, CoreAbstractSession session, NamespaceResolver namespaceResolver, Marshaller marshaller) {
         return false;
@@ -256,7 +191,6 @@
     /**
      * INTERNAL:
      * Return true if this is the node value representing mixed content.
-     * @return
      */
     public boolean isMixedContentNodeValue() {
         return false;
diff --git a/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/internal/oxm/NullCapableValue.java b/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/internal/oxm/NullCapableValue.java
index d124918..631847f 100644
--- a/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/internal/oxm/NullCapableValue.java
+++ b/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/internal/oxm/NullCapableValue.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 1998, 2019 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1998, 2021 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0 which is available at
@@ -27,8 +27,6 @@
     /**
      * INTERNAL:
      * Set the null representation of the (object).
-     * @param object
-     * @param session
      */
     void setNullValue(Object object, CoreSession session);
 }
diff --git a/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/internal/oxm/Reference.java b/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/internal/oxm/Reference.java
index cb2c4fa..7dd1f1d 100644
--- a/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/internal/oxm/Reference.java
+++ b/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/internal/oxm/Reference.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 1998, 2020 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1998, 2021 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0 which is available at
@@ -38,7 +38,6 @@
 
     /**
      * Get the container this reference should be added to if it was from a collection mapping
-     * @return
      */
     public Object getContainer() {
         return container;
@@ -76,7 +75,6 @@
     /**
      * Return the XMLMapping associated with this reference.
      *
-     * @return
      */
     public Mapping getMapping() {
         return mapping;
@@ -86,7 +84,6 @@
      * Return the map of primary key/values required to lookup
      * the reference class in the cache.
      *
-     * @return
      */
     public HashMap getPrimaryKeyMap() {
         return primaryKeyMap;
@@ -96,7 +93,6 @@
      * Return the list of primary key values required to lookup
      * the reference class in the cache.
      *
-     * @return
      */
     public Object getPrimaryKey() {
         return primaryKey;
@@ -105,7 +101,6 @@
     /**
      * Return the source object for this reference.
      *
-     * @return
      */
     public Object getSourceObject() {
         return sourceObject;
@@ -114,7 +109,6 @@
     /**
      * Return the target (reference) class for this reference.
      *
-     * @return
      */
     public Class getTargetClass() {
         return targetClass;
diff --git a/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/internal/oxm/Root.java b/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/internal/oxm/Root.java
index 8101696..35a4cb4 100644
--- a/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/internal/oxm/Root.java
+++ b/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/internal/oxm/Root.java
@@ -238,7 +238,6 @@
      * Sets that this XMLRoot object is nil.  If setNil(true) is explicitly called then isNil() will
      * return true even if rootObject is not null.
      *
-     * @param nil
      */
     public void setNil(boolean nil) {
         this.nil = nil;
diff --git a/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/internal/oxm/SAXFragmentBuilder.java b/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/internal/oxm/SAXFragmentBuilder.java
index f292c82..0cae9c2 100644
--- a/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/internal/oxm/SAXFragmentBuilder.java
+++ b/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/internal/oxm/SAXFragmentBuilder.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 1998, 2020 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1998, 2021 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0 which is available at
@@ -209,8 +209,6 @@
      * prefixed qualified name. The determination of a qname is based on the existance of a
      * colon character and the ability to resolve the characters before the colon to a
      * namespace uri.
-     * @param textValue
-     * @param parentNode
      */
     private void processNamespacesForText(String textValue, Element parentNode) {
         //If the text value is a qname, we may need to do namespace processing
diff --git a/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/internal/oxm/UnmarshalXPathEngine.java b/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/internal/oxm/UnmarshalXPathEngine.java
index 024d2f9..29fb44b 100644
--- a/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/internal/oxm/UnmarshalXPathEngine.java
+++ b/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/internal/oxm/UnmarshalXPathEngine.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 1998, 2019 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1998, 2021 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0 which is available at
@@ -71,7 +71,6 @@
      * @param xmlField the field containing the XPath statement to be executed
      * @param xmlNamespaceResolver used to resolve namespace prefixes to the corresponding namespace URI
      * @return the first node located matching the XPath statement
-     * @throws XMLPlatformException
      */
     public Object selectSingleNode(Node contextNode, XML_FIELD xmlField, XMLNamespaceResolver xmlNamespaceResolver, boolean checkForXsiNil) throws XMLMarshalException {
         try {
@@ -136,7 +135,6 @@
      * @param xmlField the field containing the XPath statement to be executed
      * @param xmlNamespaceResolver used to resolve namespace prefixes to the corresponding namespace URI
      * @return a list of nodes matching the XPath statement
-     * @throws XMLPlatformException
      */
     public NodeList selectNodes(Node contextNode, XML_FIELD xmlField, XMLNamespaceResolver xmlNamespaceResolver) throws XMLMarshalException {
         return this.selectNodes(contextNode, xmlField, xmlNamespaceResolver, null);
diff --git a/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/internal/oxm/Unmarshaller.java b/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/internal/oxm/Unmarshaller.java
index ec67720..50fabae 100644
--- a/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/internal/oxm/Unmarshaller.java
+++ b/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/internal/oxm/Unmarshaller.java
@@ -68,7 +68,6 @@
     /**
      * Value that will be used to prefix attributes.
      * Ignored unmarshalling XML.
-     * @return
      */
     public abstract String getAttributePrefix();
 
@@ -117,8 +116,6 @@
     /**
      * Return the property for a given key, if one exists.
      *
-     * @param key
-     * @return
      */
     public abstract Object getProperty(Object key);
 
@@ -184,7 +181,6 @@
     /**
      * Determine if the @XMLRootElement should be marshalled when present.
      * Ignored unmarshalling XML.
-     * @return
      */
     public abstract boolean isIncludeRoot();
 
diff --git a/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/internal/oxm/XMLCollectionReferenceMappingNodeValue.java b/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/internal/oxm/XMLCollectionReferenceMappingNodeValue.java
index 73a0fd2..9a2d5ca 100644
--- a/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/internal/oxm/XMLCollectionReferenceMappingNodeValue.java
+++ b/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/internal/oxm/XMLCollectionReferenceMappingNodeValue.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 1998, 2019 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1998, 2021 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0 which is available at
@@ -61,7 +61,6 @@
      * This constructor sets the XMLCollectionReferenceMapping and XMLField members to
      * the provided values.
      *
-     * @param xmlCollectionReferenceMapping
      */
     public XMLCollectionReferenceMappingNodeValue(CollectionReferenceMapping xmlCollectionReferenceMapping, Field xmlField) {
         super();
@@ -233,9 +232,6 @@
     }
 
     /**
-     * @param xPathFragment
-     * @param unmarshalRecord
-     * @param atts
      */
     @Override
     public boolean startElement(XPathFragment xPathFragment, UnmarshalRecord unmarshalRecord, Attributes atts) {
diff --git a/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/internal/oxm/XMLCompositeObjectMappingNodeValue.java b/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/internal/oxm/XMLCompositeObjectMappingNodeValue.java
index d385653..aad7708 100644
--- a/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/internal/oxm/XMLCompositeObjectMappingNodeValue.java
+++ b/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/internal/oxm/XMLCompositeObjectMappingNodeValue.java
@@ -98,13 +98,6 @@
     /**
      * Marshal any 'self' mapped attributes.
      *
-     * @param xPathFragment
-     * @param marshalRecord
-     * @param object
-     * @param session
-     * @param namespaceResolver
-     * @param marshaller
-     * @return
      */
     @Override
     public boolean marshalSelfAttributes(XPathFragment xPathFragment, MarshalRecord marshalRecord, Object object, CoreAbstractSession session, NamespaceResolver namespaceResolver, Marshaller marshaller) {
diff --git a/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/internal/oxm/XMLConversionManager.java b/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/internal/oxm/XMLConversionManager.java
index 784bcf8..e48c7c9 100644
--- a/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/internal/oxm/XMLConversionManager.java
+++ b/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/internal/oxm/XMLConversionManager.java
@@ -87,7 +87,6 @@
      *
      * Return the DatatypeFactory instance.
      *
-     * @return
      */
     protected DatatypeFactory getDatatypeFactory() {
         if (datatypeFactory == null) {
@@ -295,8 +294,6 @@
     /**
      * Build a valid instance of XMLGregorianCalendar from the provided sourceObject.
      *
-     * @param sourceObject
-     * @param schemaTypeQName
      */
     protected XMLGregorianCalendar convertObjectToXMLGregorianCalendar(Object sourceObject, QName schemaTypeQName) throws ConversionException {
         if (sourceObject instanceof XMLGregorianCalendar) {
@@ -312,7 +309,6 @@
     /**
      * Build a valid instance of XMLGregorianCalendar from the provided sourceObject.
      *
-     * @param sourceObject
      */
     protected XMLGregorianCalendar convertObjectToXMLGregorianCalendar(Object sourceObject) throws ConversionException {
         if (sourceObject instanceof XMLGregorianCalendar) {
@@ -328,7 +324,6 @@
     /**
      * Build a valid instance of Duration from the provided sourceObject.
      *
-     * @param sourceObject
      */
     protected Duration convertObjectToDuration(Object sourceObject) throws ConversionException {
         if (sourceObject instanceof Duration) {
@@ -343,7 +338,6 @@
     /**
      * Build a valid instance of Character from the provided sourceObject.
      *
-     * @param sourceObject
      */
     protected Character convertObjectToChar(Object sourceObject, QName schemaTypeQName) throws ConversionException {
 
@@ -365,7 +359,6 @@
     /**
      * Build a valid instance of Character from the provided sourceObject.
      *
-     * @param sourceObject
      */
     @Override
     protected Character convertObjectToChar(Object sourceObject) throws ConversionException {
@@ -379,9 +372,6 @@
     /**
      * Convert a String to a URI.
      *
-     * @param sourceObject
-     * @return
-     * @throws ConversionException
      */
     protected java.net.URI convertObjectToURI(Object sourceObject) throws ConversionException {
         if (sourceObject instanceof String) {
@@ -823,8 +813,6 @@
     /**
      * Return an XMLGregorianCalander created with a given date string
      *
-     * @param sourceString
-     * @return
      */
     public XMLGregorianCalendar convertStringToXMLGregorianCalendar(String sourceString) {
         // Trim in case of leading or trailing whitespace
@@ -874,8 +862,6 @@
     /**
      * Return a Duration created with a given date string.
      *
-     * @param sourceString
-     * @return
      */
     public Duration convertStringToDuration(String sourceString) {
         if(sourceString == null || sourceString.length() == 0) {
@@ -1155,8 +1141,6 @@
      * The string is assumed to be in dateTime or time format, as returned by
      * XMLGregorianCalendar.toXMLFormat().
      *
-     * @param xmlFormat
-     * @return
      */
     private String truncateMillis(String xmlFormat) {
         String result = xmlFormat;
@@ -1257,8 +1241,6 @@
      * BC dates {@code (sourceDate.getTime() < YEAR_ONE_AD_TIME)} are handled
      * as follows: {@code '2007 BC' --> '-2006 AD'}
      *
-     * @param sourceDate
-     * @return
      */
     private String stringFromDate(java.util.Date sourceDate) {
         GregorianCalendar cal = new GregorianCalendar(getTimeZone());
@@ -1277,9 +1259,6 @@
      * BC dates (sourceDate.getTime() &lt; YEAR_ONE_AD_TIME) are handled
      * as follows: '2007 BC' --&gt; '-2006 AD'.
      *
-     * @param sourceDate
-     * @param schemaType
-     * @return
      */
     public String stringFromDate(java.util.Date sourceDate, QName schemaType) {
 
@@ -1422,8 +1401,6 @@
      * BC dates {@code (sourceDate.getTime() < YEAR_ONE_AD_TIME)} are handled
      * as follows: {@code '2007 BC' --> '-2006 AD'}
      *
-     * @param sourceDate
-     * @return
      */
     private String stringFromTimestamp(Timestamp sourceDate) {
         Calendar cal = Calendar.getInstance(getTimeZone());
@@ -1454,9 +1431,6 @@
      * BC dates {@code (sourceDate.getTime() < YEAR_ONE_AD_TIME)} are handled
      * as follows: {@code '2007 BC' --> '-2006 AD'}.
      *
-     * @param sourceDate
-     * @param schemaType
-     * @return
      */
     private String stringFromTimestamp(Timestamp sourceDate, QName schemaType) {
 
@@ -1893,9 +1867,6 @@
      * Convenience method that appends nanosecond values from a given
      * time to a given string.
      *
-     * @param string
-     * @param ts
-     * @return
      */
     private String appendNanos(String string, Timestamp ts) {
         StringBuilder strBldr = new StringBuilder(string);
@@ -1908,9 +1879,6 @@
      * Convenience method that appends millisecond values from a given
      * time to a given string.
      *
-     * @param string
-     * @param time
-     * @return
      */
     private String appendMillis(String string, long time) {
         StringBuilder strBldr = new StringBuilder(string);
diff --git a/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/internal/oxm/XMLMarshaller.java b/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/internal/oxm/XMLMarshaller.java
index ba4e7fb..5554797 100644
--- a/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/internal/oxm/XMLMarshaller.java
+++ b/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/internal/oxm/XMLMarshaller.java
@@ -444,7 +444,6 @@
     /**
      * Determine if the @XMLRootElement should be marshalled when present.
      * Ignored marshalling XML.
-     * @return
      * @since 2.4
      */
     @Override
@@ -1327,7 +1326,6 @@
     /**
      * Set the MediaType for this xmlMarshaller.
      * See org.eclipse.persistence.oxm.MediaType for the media types supported by EclipseLink MOXy
-     * @param mediaType
      */
     public void setMediaType(MEDIA_TYPE mediaType) {
         this.mediaType = mediaType;
diff --git a/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/internal/oxm/XMLObjectBuilder.java b/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/internal/oxm/XMLObjectBuilder.java
index 4f1af81..86ce2a7 100644
--- a/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/internal/oxm/XMLObjectBuilder.java
+++ b/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/internal/oxm/XMLObjectBuilder.java
@@ -493,7 +493,6 @@
      * Indicates if the object builder's descriptor is an XMLDescriptor.
      * The value is lazily initialized.
      *
-     * @return
      */
     protected boolean isXmlDescriptor() {
         if (isXMLDescriptor == null) {
diff --git a/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/internal/oxm/XMLObjectReferenceMappingNodeValue.java b/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/internal/oxm/XMLObjectReferenceMappingNodeValue.java
index d793b57..067bfbb 100644
--- a/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/internal/oxm/XMLObjectReferenceMappingNodeValue.java
+++ b/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/internal/oxm/XMLObjectReferenceMappingNodeValue.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 1998, 2020 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1998, 2021 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0 which is available at
@@ -56,7 +56,6 @@
      * This constructor sets the XMLObjectReferenceMapping member to the provided
      * value.
      *
-     * @param xmlObjectReferenceMapping
      */
     public XMLObjectReferenceMappingNodeValue(ObjectReferenceMapping xmlObjectReferenceMapping) {
         super();
@@ -67,8 +66,6 @@
      * This constructor sets the XMLObjectReferenceMapping and XMLField members to
      * the provided values.
      *
-     * @param xmlObjectReferenceMapping
-     * @param xmlField
      */
     public XMLObjectReferenceMappingNodeValue(ObjectReferenceMapping xmlObjectReferenceMapping, Field xmlField) {
         super();
diff --git a/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/internal/oxm/XMLUnmarshaller.java b/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/internal/oxm/XMLUnmarshaller.java
index 53e6a50..48f4d24 100644
--- a/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/internal/oxm/XMLUnmarshaller.java
+++ b/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/internal/oxm/XMLUnmarshaller.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2013, 2019 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2013, 2021 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0 which is available at
@@ -239,7 +239,6 @@
      * Set the MediaType for this xmlUnmarshaller.
      * See org.eclipse.persistence.oxm.MediaType for the media types supported by EclipseLink MOXy
      * @since 2.4
-     * @param mediaType
      */
     public void setMediaType(MEDIA_TYPE mediaType) {
         if(this.mediaType != mediaType){
@@ -335,7 +334,6 @@
     /**
      * Set the class that will be instantiated to handled unmapped content
      * Class must implement the org.eclipse.persistence.oxm.unmapped.UnmappedContentHandler interface
-     * @param aClass
      */
     public void setUnmappedContentHandlerClass(Class aClass) {
         this.unmappedContentHandlerClass = aClass;
@@ -625,7 +623,6 @@
      * Return a properties object for a given instance of the
      * XMLUnmarshaller.
      *
-     * @return
      */
     public Properties getProperties() {
         if(null == unmarshalProperties) {
@@ -637,8 +634,6 @@
     /**
      * Return the property for a given key, if one exists.
      *
-     * @param key
-     * @return
      */
     @Override
     public Object getProperty(Object key) {
@@ -738,7 +733,6 @@
     /**
      * Value that will be used to prefix attributes.
      * Ignored unmarshalling XML.
-     * @return
      * @since 2.4
      */
     @Override
@@ -798,7 +792,6 @@
     /**
      * Determine if the @XMLRootElement should be marshalled when present.
      * Ignored unmarshalling XML.
-     * @return
      * @since 2.4
      */
     @Override
diff --git a/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/internal/oxm/XMLVariableXPathMappingNodeValue.java b/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/internal/oxm/XMLVariableXPathMappingNodeValue.java
index 91b80c3..d8822fb 100644
--- a/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/internal/oxm/XMLVariableXPathMappingNodeValue.java
+++ b/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/internal/oxm/XMLVariableXPathMappingNodeValue.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 1998, 2020 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1998, 2021 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0 which is available at
@@ -40,8 +40,6 @@
 
     /**
      * INTERNAL:
-     * @param xPathFragment
-     * @return
      */
      @Override
     public boolean isOwningNode(XPathFragment xPathFragment) {
diff --git a/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/internal/oxm/XPathNode.java b/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/internal/oxm/XPathNode.java
index b282e99..a025d2d 100644
--- a/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/internal/oxm/XPathNode.java
+++ b/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/internal/oxm/XPathNode.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 1998, 2019 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1998, 2021 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0 which is available at
@@ -483,12 +483,6 @@
     /**
      * Marshal any 'self' mapped attributes.
      *
-     * @param marshalRecord
-     * @param object
-     * @param session
-     * @param namespaceResolver
-     * @param marshaller
-     * @return
      */
     public boolean marshalSelfAttributes(MarshalRecord marshalRecord, Object object, CoreAbstractSession session, NamespaceResolver namespaceResolver, Marshaller marshaller) {
         if (marshalNodeValue == null) {
diff --git a/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/internal/oxm/mappings/AnyAttributeMapping.java b/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/internal/oxm/mappings/AnyAttributeMapping.java
index 9c6c78c..d8a17d8 100644
--- a/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/internal/oxm/mappings/AnyAttributeMapping.java
+++ b/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/internal/oxm/mappings/AnyAttributeMapping.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2012, 2019 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2012, 2021 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0 which is available at
@@ -45,7 +45,6 @@
      * INTERNAL:
      * Indicates the name of the Map class to be used.
      *
-     * @param concreteMapClassName
      */
     void useMapClassName(String concreteMapClassName);
 }
diff --git a/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/internal/oxm/mappings/BinaryDataCollectionMapping.java b/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/internal/oxm/mappings/BinaryDataCollectionMapping.java
index 346f86d..ff2db7c 100644
--- a/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/internal/oxm/mappings/BinaryDataCollectionMapping.java
+++ b/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/internal/oxm/mappings/BinaryDataCollectionMapping.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2012, 2019 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2012, 2021 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0 which is available at
@@ -86,7 +86,6 @@
      * Set the AbstractNullPolicy on the mapping<br>
      * The default policy is NullPolicy.<br>
      *
-     * @param aNullPolicy
      */
     void setNullPolicy(AbstractNullPolicy aNullPolicy);
 
diff --git a/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/internal/oxm/mappings/BinaryDataMapping.java b/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/internal/oxm/mappings/BinaryDataMapping.java
index 402bf3a..da7681a 100644
--- a/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/internal/oxm/mappings/BinaryDataMapping.java
+++ b/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/internal/oxm/mappings/BinaryDataMapping.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2012, 2019 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2012, 2021 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0 which is available at
@@ -89,7 +89,6 @@
 
     /**
      * Force mapping to set default FixedMimeTypePolicy using the MimeType string as argument
-     * @param mimeTypeString
      */
     void setMimeType(String mimeTypeString);
 
@@ -103,7 +102,6 @@
      * Set the AbstractNullPolicy on the mapping<br>
      * The default policy is NullPolicy.<br>
      *
-     * @param aNullPolicy
      */
     void setNullPolicy(AbstractNullPolicy aNullPolicy);
 
diff --git a/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/internal/oxm/mappings/CompositeObjectMapping.java b/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/internal/oxm/mappings/CompositeObjectMapping.java
index 63baa17..33aac75 100644
--- a/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/internal/oxm/mappings/CompositeObjectMapping.java
+++ b/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/internal/oxm/mappings/CompositeObjectMapping.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2012, 2019 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2012, 2021 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0 which is available at
@@ -65,7 +65,6 @@
      * Set the AbstractNullPolicy on the mapping<br>
      * The default policy is NullPolicy.<br>
      *
-     * @param aNullPolicy
      */
     void setNullPolicy(AbstractNullPolicy aNullPolicy);
 
diff --git a/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/internal/oxm/mappings/Descriptor.java b/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/internal/oxm/mappings/Descriptor.java
index 7dd31d1..9340d59 100644
--- a/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/internal/oxm/mappings/Descriptor.java
+++ b/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/internal/oxm/mappings/Descriptor.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2012, 2019 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2012, 2021 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0 which is available at
@@ -276,10 +276,6 @@
           * unmarshalled does not equal the descriptor's default root
           * element.
           *
-          * @param object
-          * @param elementNamespaceUri
-          * @param elementLocalName
-          * @param elementPrefix
           * @return object
           */
         Object wrapObjectInXMLRoot(Object object, String elementNamespaceUri, String elementLocalName, String elementPrefix, boolean forceWrap, boolean isNamespaceAware, UNMARSHALLER xmlUnmarshaller);
@@ -298,7 +294,6 @@
           * unmarshalled does not equal the descriptor's default root
           * element.
           *
-          * @param unmarshalRecord
           * @return object
           */
          Object wrapObjectInXMLRoot(UNMARSHAL_RECORD unmarshalRecord, boolean forceWrap);
diff --git a/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/internal/oxm/mappings/DirectCollectionMapping.java b/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/internal/oxm/mappings/DirectCollectionMapping.java
index d05e7bb..0fde017 100644
--- a/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/internal/oxm/mappings/DirectCollectionMapping.java
+++ b/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/internal/oxm/mappings/DirectCollectionMapping.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2012, 2019 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2012, 2021 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0 which is available at
@@ -74,7 +74,6 @@
      * Indicates that this mapping should collapse all string values before adding them
      * to the collection on unmarshal. Collapse removes leading and trailing whitespaces, and replaces
      * any sequence of whitespace characters with a single space.
-     * @param collapse
      */
     void setCollapsingStringValues(boolean collapse);
 
@@ -101,7 +100,6 @@
      * Indicates that this mapping should normalize all string values before adding them
      * to the collection on unmarshal. Normalize replaces any CR, LF or Tab characters with a
      * single space character.
-     * @param normalize
      */
     void setNormalizingStringValues(boolean normalize);
 
diff --git a/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/internal/oxm/mappings/DirectMapping.java b/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/internal/oxm/mappings/DirectMapping.java
index b6aa21a..a932ca5 100644
--- a/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/internal/oxm/mappings/DirectMapping.java
+++ b/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/internal/oxm/mappings/DirectMapping.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2012, 2019 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2012, 2021 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0 which is available at
@@ -84,7 +84,6 @@
      * Indicates that this mapping should collapse all string values before setting them
      * in the object on unmarshal. Collapse removes leading and trailing whitespaces, and replaces
      * any sequence of whitepsace characters with a single space.
-     * @param collapse
      */
     void setCollapsingStringValues(boolean collapse);
 
@@ -110,7 +109,6 @@
      * Indicates that this mapping should normalize all string values before setting them
      * in the object on unmarshal. Normalize replaces any CR, LF or Tab characters with a
      * single space character.
-     * @param normalize
      */
     void setNormalizingStringValues(boolean normalize);
 
@@ -118,7 +116,6 @@
      * Set the AbstractNullPolicy on the mapping<br>
      * The default policy is NullPolicy.<br>
      *
-     * @param aNullPolicy
      */
     void setNullPolicy(AbstractNullPolicy aNullPolicy);
 
diff --git a/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/internal/oxm/mappings/Field.java b/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/internal/oxm/mappings/Field.java
index fb96401..02655e9 100644
--- a/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/internal/oxm/mappings/Field.java
+++ b/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/internal/oxm/mappings/Field.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2012, 2019 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2012, 2021 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0 which is available at
@@ -95,7 +95,6 @@
 
      /**
       * INTERNAL:
-      * @return
       */
      boolean hasLastXPathFragment();
 
@@ -104,8 +103,7 @@
 
      /**
      * INTERNAL:
-     * @return
-     */
+      */
     boolean isCDATA();
 
      /**
@@ -146,8 +144,7 @@
 
   /**
     * INTERNAL:
-    *@param CDATA
-    */
+   */
     void setIsCDATA(boolean CDATA);
 
     /**
diff --git a/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/internal/oxm/mappings/ObjectReferenceMapping.java b/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/internal/oxm/mappings/ObjectReferenceMapping.java
index aa5f2c2..c0082ae 100644
--- a/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/internal/oxm/mappings/ObjectReferenceMapping.java
+++ b/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/internal/oxm/mappings/ObjectReferenceMapping.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2012, 2019 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2012, 2021 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0 which is available at
@@ -38,8 +38,6 @@
     /**
      * Add a source-target xpath pair to the map.
      *
-     * @param srcXPath
-     * @param tgtXPath
      */
     void addSourceToTargetKeyFieldAssociation(String srcXPath, String tgtXPath);
 
diff --git a/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/internal/oxm/mappings/TransformationMapping.java b/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/internal/oxm/mappings/TransformationMapping.java
index 2da4bef..6c25a94 100644
--- a/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/internal/oxm/mappings/TransformationMapping.java
+++ b/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/internal/oxm/mappings/TransformationMapping.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2012, 2019 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2012, 2021 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0 which is available at
@@ -76,7 +76,6 @@
     /**
      * INTERNAL:
      * Set the Attribute Transformer Class Name
-     * @param className
      */
     void setAttributeTransformerClassName(String className);
 
diff --git a/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/internal/oxm/record/DOMReader.java b/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/internal/oxm/record/DOMReader.java
index 147d0be..e8e4862 100644
--- a/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/internal/oxm/record/DOMReader.java
+++ b/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/internal/oxm/record/DOMReader.java
@@ -108,7 +108,6 @@
      * attribute.  Using a stack ensures that the parent nodes are
      * processed top down.
      *
-     * @param element
      */
     protected void processParentNamespaces(Element element) throws SAXException {
         Node parent = element.getParentNode();
diff --git a/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/internal/oxm/record/ExtendedContentHandler.java b/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/internal/oxm/record/ExtendedContentHandler.java
index ed23d95..2e9e799 100644
--- a/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/internal/oxm/record/ExtendedContentHandler.java
+++ b/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/internal/oxm/record/ExtendedContentHandler.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2011, 2020 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2011, 2021 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0 which is available at
@@ -31,7 +31,6 @@
 
     /**
      * This method can be used to track that the current element is nil
-     * @param isNil
      */
     void setNil(boolean isNil);
 
diff --git a/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/internal/oxm/record/UnmarshalContext.java b/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/internal/oxm/record/UnmarshalContext.java
index 92638ec..5df064a 100644
--- a/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/internal/oxm/record/UnmarshalContext.java
+++ b/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/internal/oxm/record/UnmarshalContext.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 1998, 2019 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1998, 2021 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0 which is available at
@@ -46,16 +46,12 @@
     /**
      * The UnmarshalContext is responsible for assigning values to the object being
      * built.
-     * @param unmarshalRecord
-     * @param value
-     * @param mapping
      */
     void setAttributeValue(UnmarshalRecord unmarshalRecord, Object value, Mapping mapping);
 
     /**
      * When a collection mapping is processed the UnmarshalContext is responsible for
      * handling the values one at a time.
-     * @param unmarshalRecord
      * @param containerValue A container object such as a java.util.ArrayList, to which
      * the value will be added.
      * @param value The value to be added to the container,
@@ -65,11 +61,9 @@
     /**
      * When a collection mapping is processed the UnmarshalContext is responsible for
      * handling the values one at a time.
-     * @param unmarshalRecord
      * @param containerValue A container object such as a java.util.ArrayList, to which
      * the value will be added.
      * @param value The value to be added to the container,
-     * @param collection
      */
     void addAttributeValue(UnmarshalRecord unmarshalRecord, ContainerValue containerValue, Object value, Object collection);
 
diff --git a/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/internal/oxm/record/XMLFragmentReader.java b/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/internal/oxm/record/XMLFragmentReader.java
index 6de1654..bbbe73c 100644
--- a/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/internal/oxm/record/XMLFragmentReader.java
+++ b/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/internal/oxm/record/XMLFragmentReader.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 1998, 2019 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1998, 2021 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0 which is available at
@@ -179,7 +179,6 @@
      * Returns the namespace resolver in the map of temporary namespace
      * resolvers for a given element
      *
-     * @param elem
      * @return the namespace resolver in the map for elem, or a new
      * resolver if none exists
      */
@@ -196,7 +195,6 @@
      * Remove any temporary namespace resolvers created while processing
      * a given element.
      *
-     * @param elem
      */
     protected void cleanupNamespaceResolvers(Element elem) {
         NamespaceResolver tmpresolver = tmpresolverMap.get(elem);
@@ -210,7 +208,6 @@
      * Convenience method that iterates over each namespace resolver
      * in the resolver list until it locates a uri for 'prefix' or
      * the final resolver is reached w/o success.
-     * @param prefix
      * @return true if a URI exists in one of the resolvers in the
      * list, false otherwise
      */
@@ -242,7 +239,6 @@
      * XMLNS attribute.  Using a stack ensures that the parent nodes are
      * processed top down.
      *
-     * @param element
      */
     @Override
     protected void processParentNamespaces(Element element) throws SAXException {
diff --git a/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/internal/oxm/record/deferred/CompositeCollectionMappingContentHandler.java b/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/internal/oxm/record/deferred/CompositeCollectionMappingContentHandler.java
index e9e5a07..a6e71ac 100644
--- a/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/internal/oxm/record/deferred/CompositeCollectionMappingContentHandler.java
+++ b/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/internal/oxm/record/deferred/CompositeCollectionMappingContentHandler.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2011, 2019 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2011, 2021 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0 which is available at
@@ -28,8 +28,6 @@
     private XMLCompositeCollectionMappingNodeValue nodeValue;
 
     /**
-     * @param parentRecord
-     * @param aNodeValue
      */
     public CompositeCollectionMappingContentHandler(UnmarshalRecord parentRecord, //
             XMLCompositeCollectionMappingNodeValue aNodeValue, CompositeCollectionMapping aMapping, //
diff --git a/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/internal/oxm/schema/SchemaModelGenerator.java b/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/internal/oxm/schema/SchemaModelGenerator.java
index 888af48..5f54411 100644
--- a/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/internal/oxm/schema/SchemaModelGenerator.java
+++ b/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/internal/oxm/schema/SchemaModelGenerator.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 1998, 2019 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1998, 2021 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0 which is available at
@@ -288,11 +288,6 @@
      * Process a given descriptor.  Global complex types will be generated for based on
      * schema context, and global elements based on default root element.
      *
-     * @param desc
-     * @param schemaForNamespace
-     * @param workingSchema
-     * @param properties
-     * @param descriptors
      */
     protected void processDescriptor(Descriptor desc, HashMap<String, Schema> schemaForNamespace, Schema workingSchema, SchemaModelGeneratorProperties properties, List<Descriptor> descriptors) {
         // determine if a simple type (or complex type with simple content) or complex type is required
@@ -356,11 +351,6 @@
      * Return the Schema for a given namespace.  If one doesn't exist, a new one will
      * be created and returned.
      *
-     * @param uri
-     * @param nr
-     * @param schemaForNamespace
-     * @param properties
-     * @return
      * @see Schema
      */
     protected Schema getSchema(String uri, NamespaceResolver nr, HashMap<String, Schema> schemaForNamespace, SchemaModelGeneratorProperties properties) {
@@ -375,13 +365,6 @@
     /**
      * Create and return an Element for a given XMLDescriptor.
      *
-     * @param desc
-     * @param schemaForNamespace
-     * @param workingSchema
-     * @param properties
-     * @param descriptors
-     * @param simple
-     * @return
      */
     protected Element buildElement(Descriptor desc,  HashMap<String, Schema> schemaForNamespace, Schema workingSchema, SchemaModelGeneratorProperties properties, List<Descriptor> descriptors, boolean simple) {
         Element element = new Element();
@@ -402,9 +385,6 @@
     /**
      * Create and return a SimpleType for a given XMLDescriptor.
      *
-     * @param desc
-     * @param workingSchema
-     * @return
      */
     protected SimpleType buildSimpleType(Descriptor desc, Schema workingSchema, boolean global) {
         SimpleType st;
@@ -436,8 +416,6 @@
     /**
      * Create and return a SimpleType with name set to the given name.
      *
-     * @param name
-     * @return
      */
     protected SimpleType buildNewSimpleType(String name) {
         SimpleType st = new SimpleType();
@@ -449,13 +427,6 @@
      * Create and return a ComplexType for a given XMLDescriptor.  Assumes that the descriptor has a schema context
      * set.
      *
-     * @param anonymous
-     * @param desc
-     * @param schemaForNamespace
-     * @param workingSchema
-     * @param properties
-     * @param descriptors
-     * @return
      */
     protected ComplexType buildComplexType(boolean anonymous, Descriptor desc,  HashMap<String, Schema> schemaForNamespace, Schema workingSchema, SchemaModelGeneratorProperties properties, List<Descriptor> descriptors) {
         ComplexType ct = new ComplexType();
@@ -488,12 +459,6 @@
      * Create and return a ComplexType containing simple content for a given XMLDescriptor.  Assumes
      * that the descriptor has a schema context set.
      *
-     * @param desc
-     * @param schemaForNamespace
-     * @param workingSchema
-     * @param properties
-     * @param descriptors
-     * @return
      */
     private ComplexType buildComplexTypeWithSimpleContent(Descriptor desc,  HashMap<String, Schema> schemaForNamespace, Schema workingSchema, SchemaModelGeneratorProperties properties, List<Descriptor> descriptors) {
         ComplexType ct = new ComplexType();
@@ -519,9 +484,6 @@
      * set, the attribute classification will be used if non-null.  Otherwise, ClassConstants.STRING
      * will be returned.
      *
-     * @param mapping
-     * @param workingSchema
-     * @return
      */
     protected String getSchemaTypeForDirectMapping(DirectMapping mapping, Schema workingSchema) {
         return getSchemaTypeForElement((Field) mapping.getField(), mapping.getAttributeClassification(), workingSchema);
@@ -532,10 +494,6 @@
      * the attribute classification will be used if non-null.  Otherwise, ClassConstants.STRING
      * will be returned.
      *
-     * @param xmlField
-     * @param attrClass
-     * @param workingSchema
-     * @return
      */
     protected String getSchemaTypeForElement(Field xmlField, Class attrClass, Schema workingSchema) {
         String schemaTypeString = null;
@@ -560,9 +518,6 @@
      * Return the descriptor from the list whose java class name matches
      * javaClassName.  If none exists null will be returned.
      *
-     * @param javaClassName
-     * @param descriptors
-     * @return
      */
     protected Descriptor getDescriptorByName(String javaClassName, List<Descriptor> descriptors) {
         for (Descriptor xDesc : descriptors) {
@@ -577,9 +532,6 @@
      * Return the descriptor from the list whose java class matches
      * javaClass.  If none exists null will be returned.
      *
-     * @param javaClass
-     * @param descriptors
-     * @return
      */
     protected Descriptor getDescriptorByClass(Class javaClass, List<Descriptor> descriptors) {
         for (Descriptor xDesc : descriptors) {
@@ -594,8 +546,6 @@
      * Adds an Any to a given sequence.  If isCollection is true, maxOccurs will
      * be set to unbounded.
      *
-     * @param seq
-     * @param isCollection
      * @see Any
      * @see Occurs#UNBOUNDED
      */
@@ -612,10 +562,6 @@
     /**
      * Process a given XMLBinaryDataMapping.
      *
-     * @param mapping
-     * @param seq
-     * @param ct
-     * @param workingSchema
      */
     protected void processXMLBinaryDataMapping(BinaryDataMapping mapping, Sequence seq, ComplexType ct, HashMap<String, Schema> schemaForNamespace, Schema workingSchema, SchemaModelGeneratorProperties properties) {
         Field xmlField = (Field) mapping.getField();
@@ -658,10 +604,6 @@
     /**
      * Process a given XMLBinaryDataCollectionMapping.
      *
-     * @param mapping
-     * @param seq
-     * @param ct
-     * @param workingSchema
      */
     protected void processXMLBinaryDataCollectionMapping(BinaryDataCollectionMapping mapping, Sequence seq, ComplexType ct, HashMap<String, Schema> schemaForNamespace, Schema workingSchema, SchemaModelGeneratorProperties properties) {
         Field xmlField = (Field) mapping.getField();
@@ -701,10 +643,6 @@
     /**
      * Process a given XMLDirectMapping.
      *
-     * @param mapping
-     * @param seq
-     * @param ct
-     * @param workingSchema
      */
     protected void processXMLDirectMapping(DirectMapping mapping, Sequence seq, ComplexType ct, HashMap<String, Schema> schemaForNamespace, Schema workingSchema, SchemaModelGeneratorProperties properties) {
         Field xmlField = (Field) mapping.getField();
@@ -765,10 +703,6 @@
     /**
      * Process a given XMLCompositeDirectCollectionMapping.
      *
-     * @param mapping
-     * @param seq
-     * @param ct
-     * @param workingSchema
      */
     protected void processXMLCompositeDirectCollectionMapping(DirectCollectionMapping mapping, Sequence seq, ComplexType ct, HashMap<String, Schema> schemaForNamespace, Schema workingSchema, SchemaModelGeneratorProperties properties) {
         Field xmlField = ((Field) (mapping).getField());
@@ -816,14 +750,6 @@
      * XMLCompositeCollectionMapping.  For XMLCompositeDirectCollectionMappings the
      * processXMLCompositeDirectCollectionMapping method should be used.
      *
-     * @param mapping
-     * @param seq
-     * @param ct
-     * @param schemaForNamespace
-     * @param workingSchema
-     * @param properties
-     * @param descriptors
-     * @param collection
      */
     protected void processXMLCompositeMapping(CompositeObjectMapping mapping, Sequence seq, ComplexType ct, HashMap<String, Schema> schemaForNamespace, Schema workingSchema, SchemaModelGeneratorProperties properties, List<Descriptor> descriptors, boolean collection) {
         Field xmlField = (Field) mapping.getField();
@@ -874,13 +800,6 @@
     /**
      * Process a given XMLChoiceCollectionMapping.
      *
-     * @param mapping
-     * @param seq
-     * @param ct
-     * @param schemaForNamespace
-     * @param workingSchema
-     * @param properties
-     * @param descriptors
      */
     protected void processXMLChoiceCollectionMapping(ChoiceCollectionMapping mapping, Sequence seq, ComplexType ct, HashMap<String, Schema> schemaForNamespace, Schema workingSchema, SchemaModelGeneratorProperties properties, List<Descriptor> descriptors) {
         Map<Field, Class> fieldToClassMap = mapping.getFieldToClassMappings();
@@ -890,13 +809,6 @@
 
     /**
      *
-     * @param mapping
-     * @param seq
-     * @param ct
-     * @param schemaForNamespace
-     * @param workingSchema
-     * @param properties
-     * @param descriptors
      */
     protected void processXMLChoiceObjectMapping(ChoiceObjectMapping mapping, Sequence seq, ComplexType ct, HashMap<String, Schema> schemaForNamespace, Schema workingSchema, SchemaModelGeneratorProperties properties, List<Descriptor> descriptors) {
         Map<Field, Class> fieldToClassMap =mapping.getFieldToClassMappings();
@@ -907,15 +819,6 @@
     /**
      * Process a given XMLChoiceMapping.
      *
-     * @param fieldToClassMap
-     * @param choiceFieldToClassList
-     * @param seq
-     * @param ct
-     * @param schemaForNamespace
-     * @param workingSchema
-     * @param properties
-     * @param descriptors
-     * @param isCollection
      */
     protected void processChoiceMapping(Map<Field, Class> fieldToClassMap, List<XMLChoiceFieldToClassAssociation> choiceFieldToClassList, Sequence seq, ComplexType ct, HashMap<String, Schema> schemaForNamespace, Schema workingSchema, SchemaModelGeneratorProperties properties, List<Descriptor> descriptors, boolean isCollection) {
         Choice theChoice = new Choice();
@@ -942,14 +845,6 @@
      * i.e. the isCollection flag is set to true, maxOccurs will be set to 'unbounded' on any
      * source elements
      *
-     * @param mapping
-     * @param seq
-     * @param ct
-     * @param schemaForNamespace
-     * @param workingSchema
-     * @param properties
-     * @param descriptors
-     * @param isCollection
      */
     protected void processXMLObjectReferenceMapping(ObjectReferenceMapping mapping, Sequence seq, ComplexType ct, HashMap<String, Schema> schemaForNamespace, Schema workingSchema, SchemaModelGeneratorProperties properties, List<Descriptor> descriptors, boolean isCollection) {
         String tgtClassName = mapping.getReferenceClassName();
@@ -996,13 +891,6 @@
     /**
      * Process a given mapping.
      *
-     * @param mapping
-     * @param seq
-     * @param ct
-     * @param schemaForNamespace
-     * @param workingSchema
-     * @param properties
-     * @param descriptors
      */
     protected void processMapping(CoreMapping mapping, Sequence seq, ComplexType ct, HashMap<String, Schema> schemaForNamespace, Schema workingSchema, SchemaModelGeneratorProperties properties, List<Descriptor> descriptors) {
         if (mapping instanceof BinaryDataMapping) {
@@ -1041,13 +929,6 @@
      * set a reference to it on a given element accordingly.  This method will typically be used for
      * direct mappings.
      *
-     * @param frag
-     * @param schemaForNamespace
-     * @param workingSchema
-     * @param properties
-     * @param element
-     * @param schemaTypeString
-     * @return
      */
     protected Element handleFragNamespace(XPathFragment frag, HashMap<String, Schema> schemaForNamespace, Schema workingSchema, SchemaModelGeneratorProperties properties, Element element, String schemaTypeString) {
         String fragUri = frag.getNamespaceURI();
@@ -1074,13 +955,6 @@
      * set a reference to it on a given element accordingly, or set an anonymous complex type on a given
      * element.  This method will typically be used by composite mappings.
      *
-     * @param frag
-     * @param schemaForNamespace
-     * @param workingSchema
-     * @param properties
-     * @param element
-     * @param ctype
-     * @param refDesc
      */
     protected Element handleFragNamespace(XPathFragment frag, HashMap<String, Schema> schemaForNamespace, Schema workingSchema, SchemaModelGeneratorProperties properties, Element element, ComplexType ctype, Descriptor refDesc) {
         String fragUri = frag.getNamespaceURI();
@@ -1115,8 +989,6 @@
      * Return the last fragment before text() in the XPath that a given XPathFragment
      * is part of.
      *
-     * @param frag
-     * @return
      */
     protected XPathFragment getTargetXPathFragment(XPathFragment frag) {
         if (frag.isAttribute() || frag.isSelfFragment()) {
@@ -1139,9 +1011,6 @@
      * to the calling method, allowing for differences in handling, such as direct
      * mappings versus composite mappings, etc.
      *
-     * @param frag
-     * @param seq
-     * @return
      */
     protected Sequence buildSchemaComponentsForXPath(XPathFragment frag, Sequence seq, HashMap<String, Schema> schemaForNamespace, Schema workingSchema, SchemaModelGeneratorProperties properties) {
         // the mapping will handle processing of the target fragment; return the sequence it will be added to
@@ -1214,9 +1083,6 @@
     /**
      * Build and return an Attribute for a given XMLDirectMapping.
      *
-     * @param mapping
-     * @param schemaType
-     * @return
      */
     protected Attribute buildAttribute(DirectMapping mapping, String schemaType) {
         XPathFragment frag = ((Field) mapping.getField()).getXPathFragment();
@@ -1229,9 +1095,6 @@
     /**
      * Build and return an Attribute for a given XPathFragment.
      *
-     * @param frag
-     * @param schemaType
-     * @return
      */
     protected Attribute buildAttribute(XPathFragment frag, String schemaType) {
         Attribute attr = new Attribute();
@@ -1243,11 +1106,6 @@
     /**
      * Build and return an Element for a given XPathFragment.
      *
-     * @param frag
-     * @param schemaType
-     * @param minOccurs
-     * @param maxOccurs
-     * @return
      */
     protected Element buildElement(XPathFragment frag, String schemaType, String minOccurs, String maxOccurs) {
         Element element = new Element();
@@ -1264,10 +1122,6 @@
      * Build and return an Element based on a given name, minOccurs and
      * maxOccurs.
      *
-     * @param name
-     * @param minOccurs
-     * @param maxOccurs
-     * @return
      */
     protected Element buildElement(String name, String minOccurs, String maxOccurs) {
         Element element = new Element();
@@ -1282,9 +1136,6 @@
      * equal according to the equals() method, if one is null and the other is "", or
      * both are null.
      *
-     * @param ns1
-     * @param ns2
-     * @return
      */
     public boolean areNamespacesEqual(String ns1, String ns2) {
         if (ns1 == null) {
@@ -1297,9 +1148,6 @@
      * Return the schema type as a string for a given QName and Schema.  The schema's
      * namespace resolver will be used to determine the prefix (if any) to use.
      *
-     * @param schemaType
-     * @param workingSchema
-     * @return
      */
     protected String getSchemaTypeString(QName schemaType, Schema workingSchema) {
         String schemaTypeString = schemaType.getLocalPart();
@@ -1326,8 +1174,6 @@
     /**
      * Adds each namespace in the given resolver to the schema.
      *
-     * @param nr
-     * @param workingSchema
      */
     protected void addNamespacesToWorkingSchema(NamespaceResolver nr, Schema workingSchema) {
         if (nr != null) {
@@ -1343,11 +1189,6 @@
      * AttributeFormDefault can be set via SchemaModelGeneratorProperties object.  The
      * namespace resolver's default namespace will be set if non-null.
      *
-     * @param uri
-     * @param nr
-     * @param schemaCount
-     * @param properties
-     * @return
      */
     protected Schema buildNewSchema(String uri, NamespaceResolver nr, int schemaCount, SchemaModelGeneratorProperties properties) {
         Schema schema = new Schema();
@@ -1393,9 +1234,6 @@
     /**
      * Determines if a given schema contains an import for a given schema name.
      *
-     * @param schema
-     * @param schemaName
-     * @return
      */
     protected boolean importExists(Schema schema, String schemaName) {
         java.util.List<Import> imports = schema.getImports();
@@ -1412,9 +1250,6 @@
      * given descriptor's namespace resolver will be used to determine the correct prefix - if
      * any - to be used.
      *
-     * @param desc
-     * @param qualifiedTableName
-     * @return
      */
     protected QName getDefaultRootElementAsQName(Descriptor desc, String qualifiedTableName) {
         QName qName = null;
@@ -1439,15 +1274,6 @@
 
     /**
      *
-     * @param element
-     * @param refDesc
-     * @param schemaForNamespace
-     * @param workingSchema
-     * @param properties
-     * @param descriptors
-     * @param field
-     * @param isCollection
-     * @return
      */
     protected Element processReferenceDescriptor(Element element, Descriptor refDesc, HashMap<String, Schema> schemaForNamespace, Schema workingSchema, SchemaModelGeneratorProperties properties, List<Descriptor> descriptors, Field field, boolean isCollection) {
         ComplexType ctype = null;
@@ -1495,9 +1321,6 @@
      * sequence.  If an element exists whose name is equal to 'elementName' true
      * is returned.  False otherwise.
      *
-     * @param elementName
-     * @param seq
-     * @return
      */
     protected Element elementExistsInSequence(String elementName, String refString, Sequence seq) {
         if (seq.isEmpty()) {
@@ -1527,8 +1350,6 @@
      * simple mapping.  In this case, a simple type or complex type with simple content
      * will be generated
      *
-     * @param desc
-     * @return
      */
     protected boolean isSimple(Descriptor desc) {
         boolean isSimple = false;
@@ -1552,8 +1373,6 @@
      * will return true for the given descriptor, and that the descriptor will contain at most
      * one direct with a 'text()' xpath, and any additional mappings are attribute mappings.
      *
-     * @param desc
-     * @return
      */
     protected boolean isComplexTypeWithSimpleContentRequired(Descriptor desc) {
         return desc.getMappings().size() > 1 ? true : false;
@@ -1563,13 +1382,6 @@
      * Process information contained within an EnumTypeConverter.  This will generate a simple
      * type containing enumeration info.
      *
-     * @param schemaTypeString
-     * @param frag
-     * @param mapping
-     * @param seq
-     * @param ct
-     * @param workingSchema
-     * @param converter
      */
     protected void processEnumeration(String schemaTypeString, XPathFragment frag, DirectMapping mapping, Sequence seq, ComplexType ct, Schema workingSchema, CoreConverter converter) {
         Element elem = null;
@@ -1603,9 +1415,6 @@
     /**
      * Indicates if a given fragment is a primary key.
      *
-     * @param frag
-     * @param mapping
-     * @return
      */
     protected boolean isFragPrimaryKey(XPathFragment frag, DirectMapping mapping) {
         /* Uncomment the following when ID support is needed
diff --git a/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/internal/oxm/schema/SchemaModelGeneratorProperties.java b/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/internal/oxm/schema/SchemaModelGeneratorProperties.java
index 00c7ee3..7cdac66 100644
--- a/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/internal/oxm/schema/SchemaModelGeneratorProperties.java
+++ b/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/internal/oxm/schema/SchemaModelGeneratorProperties.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 1998, 2019 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1998, 2021 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0 which is available at
@@ -47,7 +47,6 @@
 
     /**
      * Lazily initialize the URI-&gt;Properties map
-     * @return
      */
     public Map<String, Properties> getPropertiesMap() {
         if (propMap == null) {
@@ -61,9 +60,6 @@
      * namespace URI.  If no entry exists for the given URI, a Properties object
      * will be created.
      *
-     * @param uri
-     * @param key
-     * @param value
      */
     public void addProperty(String uri, String key, Object value) {
         if (uri == null || key == null || value == null) {
@@ -81,9 +77,6 @@
     /**
      * Return the property value for a given namespace/key pair.
      *
-     * @param uri
-     * @param key
-     * @return
      */
     public Object getProperty(String uri, String key) {
         if (uri == null || key == null) {
@@ -101,7 +94,6 @@
      * Return the Properties object for the given namespace uri.
      * If none exists a new Properties is created and returned.
      *
-     * @return
      */
     public Properties getProperties(String uri) {
         return getPropertiesMap().get(uri);
diff --git a/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/internal/oxm/schema/SchemaModelOutputResolver.java b/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/internal/oxm/schema/SchemaModelOutputResolver.java
index 3660982..e441c72 100644
--- a/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/internal/oxm/schema/SchemaModelOutputResolver.java
+++ b/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/internal/oxm/schema/SchemaModelOutputResolver.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 1998, 2020 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1998, 2021 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0 which is available at
@@ -25,10 +25,7 @@
      * Determines the location where a given schema file (of the given namespace URI)
      * will be generated, and return it as a Result object.
      *
-     * @param namespaceURI
-     * @param suggestedFileName
      * @return schema file as a Result object
-     * @throws java.io.IOException
      */
     Result createOutput(String namespaceURI, String suggestedFileName) throws java.io.IOException;
 }
diff --git a/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/internal/oxm/schema/model/Restriction.java b/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/internal/oxm/schema/model/Restriction.java
index 65deda0..2aac77d 100644
--- a/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/internal/oxm/schema/model/Restriction.java
+++ b/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/internal/oxm/schema/model/Restriction.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 1998, 2019 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1998, 2021 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0 which is available at
@@ -257,7 +257,6 @@
      * Overwrites attributes of this restriction with attributes of the argument,
      * if they are not null.
      *
-     * @param restriction
      */
     public void mergeWith(Restriction restriction) {
         if (restriction.getAll() != null) this.setAll(restriction.getAll());
diff --git a/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/internal/oxm/schema/model/Schema.java b/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/internal/oxm/schema/model/Schema.java
index 90cd5ec..0a9d4c9 100644
--- a/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/internal/oxm/schema/model/Schema.java
+++ b/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/internal/oxm/schema/model/Schema.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 1998, 2020 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1998, 2021 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0 which is available at
@@ -281,7 +281,6 @@
      * Set the Result for this Schema.  This method will typically be
      * called after a call to SchemaOutputResolver.createOutput().
      *
-     * @param result
      */
     public void setResult(Result result) {
         this.result = result;
diff --git a/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/internal/oxm/unmapped/UnmappedContentHandler.java b/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/internal/oxm/unmapped/UnmappedContentHandler.java
index a703547..c8722ef 100644
--- a/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/internal/oxm/unmapped/UnmappedContentHandler.java
+++ b/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/internal/oxm/unmapped/UnmappedContentHandler.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2012, 2020 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2012, 2021 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0 which is available at
@@ -28,7 +28,6 @@
     /**
      * Set the UnmarshalRecord which gives access to mechanisms used during the
      * unmarshal process such as an Unmarshaller and a Session.
-     * @param unmarshalRecord
      */
     void setUnmarshalRecord(UNMARSHAL_RECORD unmarshalRecord);
 }
diff --git a/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/internal/queries/CollectionContainerPolicy.java b/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/internal/queries/CollectionContainerPolicy.java
index 70b5161..5e0cc47 100644
--- a/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/internal/queries/CollectionContainerPolicy.java
+++ b/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/internal/queries/CollectionContainerPolicy.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 1998, 2019 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1998, 2021 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0 which is available at
@@ -205,7 +205,6 @@
      * INTERNAL:
      * Return the size of container.
      *
-     * @param container
      * @return int The size of the container.
      */
     @Override
diff --git a/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/internal/queries/ContainerPolicy.java b/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/internal/queries/ContainerPolicy.java
index d6c12aa..536c970 100644
--- a/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/internal/queries/ContainerPolicy.java
+++ b/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/internal/queries/ContainerPolicy.java
@@ -230,10 +230,6 @@
      *
      * @see MappedKeyMapContainerPolicy
      *
-     * @param valuesIterator
-     * @param toCollection
-     * @param mapping
-     * @param isExisting
      */
     public void addNextValueFromIteratorInto(Object valuesIterator, Object parent, CacheKey parentCacheKey, Object toCollection, CollectionMapping mapping, Integer refreshCascade, AbstractSession cloningSession, boolean isExisting, boolean isFromSharedCache){
         Object cloneValue = mapping.buildElementClone(next(valuesIterator, cloningSession), parent, parentCacheKey, refreshCascade, cloningSession, isExisting, isFromSharedCache);
@@ -249,10 +245,6 @@
      * Build a clone for the key of a Map represented by this container policy if necessary.
      * By default, the key is not cloned since in standard EclipseLink Mappings it will not be
      * an Entity
-     * @param key
-     * @param cloningSession
-     * @param isExisting
-     * @return
      */
     public Object buildCloneForKey(Object key, Object parent , CacheKey parentCacheKey, Integer refreshCascade, AbstractSession cloningSession, boolean isExisting, boolean isCacheCheckComplete){
         return key;
@@ -266,9 +258,6 @@
      * contains the key and the value
      *
      * @see MappedKeyMapContainerPolicy
-     * @param objectAdded
-     * @param changeSet
-     * @return
      */
     public Object buildCollectionEntry(Object objectAdded, ObjectChangeSet changeSet){
         return objectAdded;
@@ -290,10 +279,6 @@
     /**
      * Extract the key for the map from the provided row
      * overridden by subclasses that deal with map keys
-     * @param row
-     * @param query
-     * @param session
-     * @return
      */
     public Object buildKey(AbstractRecord row, ObjectBuildingQuery query, CacheKey parentCacheKey, AbstractSession session, boolean isTargetProtected){
         return null;
@@ -325,10 +310,6 @@
     /**
      * Extract the key for the map from the provided row
      * overridden by subclasses that deal with map keys
-     * @param row
-     * @param query
-     * @param session
-     * @return
      */
     public Object buildKeyFromJoinedRow(AbstractRecord row, JoinedAttributeManager joinManager, ObjectBuildingQuery query, CacheKey parentCacheKey, AbstractSession session, boolean isTargetProtected){
         return null;
@@ -389,7 +370,6 @@
      * This
      * Certain key mappings favor different types of selection query.  Return the appropriate
      * type of selectionQuery
-     * @return
      */
     public ReadQuery buildSelectionQueryForDirectCollectionMapping(){
         DirectReadQuery query = new DirectReadQuery();
@@ -480,10 +460,6 @@
      * INTERNAL:
      * Create change sets that contain map keys.
      * This method will be overridden by subclasses that handle map keys
-     * @param originalKeyValues
-     * @param changeRecord
-     * @param session
-     * @param referenceDescriptor
      */
     protected void createChangeSetForKeys(Map originalKeyValues, CollectionChangeRecord changeRecord, AbstractSession session, ClassDescriptor referenceDescriptor){
     }
@@ -492,12 +468,6 @@
      * INTERNAL:
      * Iterate over the list of new objects and create change sets for them
      * This method is overridden by subclasses to handle map keys
-     * @param originalKeyValues
-     * @param cloneKeyValues
-     * @param newCollection
-     * @param changeRecord
-     * @param session
-     * @param referenceDescriptor
      */
     protected void collectObjectForNewCollection(Map originalKeyValues, Map cloneKeyValues, Object newCollection, CollectionChangeRecord changeRecord, AbstractSession session, ClassDescriptor referenceDescriptor){
         Object cloneIter = iteratorFor(newCollection);
@@ -745,7 +715,6 @@
      * Convert all the class-name-based settings in this ContainerPolicy to actual class-based
      * settings
      * This method is implemented by subclasses as necessary.
-     * @param classLoader
      */
     public void convertClassNamesToClasses(ClassLoader classLoader){}
 
@@ -756,11 +725,7 @@
      * on what is required by the container policy.
      *
      * @see MappedKeyMapContainerPolicy
-     * @param wrappedObject
      * @param parent if this is an aggregate, the owner of the aggregate
-     * @param referenceDescriptor
-     * @param mergeManager
-     * @return
      */
     public Object createWrappedObjectFromExistingWrappedObject(Object wrappedObject, Object parent, ClassDescriptor referenceDescriptor, MergeManager mergeManager, AbstractSession targetSession){
         return referenceDescriptor.getObjectBuilder().wrapObject(mergeManager.getTargetVersionOfSourceObject(unwrapIteratorResult(wrappedObject), referenceDescriptor, targetSession), mergeManager.getSession());
@@ -772,8 +737,6 @@
      * This may be overridden by subclasses to deal with composite objects
      *
      * @see MappedKeyMapContainerPolicy
-     * @param objectDeleted
-     * @param session
      */
     public void deleteWrappedObject(Object objectDeleted, AbstractSession session){
         session.deleteObject(objectDeleted);
@@ -1476,7 +1439,6 @@
      * INTERNAL:
      * Returns whether this ContainerPolicy should requires data modification events when
      * objects are added or deleted during update
-     * @return
      */
     public boolean requiresDataModificationEvents(){
         return false;
@@ -1541,7 +1503,6 @@
      * INTERNAL:
      * Indicates whether addAll method should be called to add entire collection,
      * or it's possible to call addInto multiple times instead.
-     * @return
      */
     public boolean shouldAddAll(){
         return false;
@@ -1720,7 +1681,6 @@
      * INTERNAL:
      * convenience method to copy the keys and values from a Map into an AbstractRecord
      * @param mappingData a Map containing a database field as the key and the value of that field as the value
-     * @param databaseRow
      */
     public static void copyMapDataToRow(Map mappingData, AbstractRecord databaseRow){
         if (mappingData != null){
diff --git a/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/internal/queries/DatabaseQueryMechanism.java b/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/internal/queries/DatabaseQueryMechanism.java
index 88b9536..5e28a7b 100644
--- a/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/internal/queries/DatabaseQueryMechanism.java
+++ b/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/internal/queries/DatabaseQueryMechanism.java
@@ -197,7 +197,6 @@
     /**
      * Delete an object
      * This should be overridden by subclasses.
-     * @exception DatabaseException
      * @return the row count.
      */
     public abstract Integer deleteObject() throws DatabaseException;
@@ -205,7 +204,6 @@
     /**
      * Execute a execute SQL call.
      * This should be overridden by subclasses.
-     * @exception DatabaseException
      * @return true if the first result is a result set and false if it is an
      *   update count or there are no results other than through INOUT and OUT
      *   parameterts, if any.
@@ -215,7 +213,6 @@
     /**
      * Execute a non selecting SQL call
      * This should be overridden by subclasses.
-     * @exception DatabaseException
      * @return the row count.
      */
     public abstract Integer executeNoSelect() throws DatabaseException;
@@ -223,7 +220,6 @@
     /**
      * Execute a select SQL call and return the rows.
      * This should be overriden by subclasses.
-     * @exception DatabaseException
      */
     public abstract Vector executeSelect() throws DatabaseException;
 
diff --git a/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/internal/queries/InterfaceContainerPolicy.java b/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/internal/queries/InterfaceContainerPolicy.java
index f22d869..e242265 100644
--- a/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/internal/queries/InterfaceContainerPolicy.java
+++ b/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/internal/queries/InterfaceContainerPolicy.java
@@ -124,7 +124,6 @@
      * Convert all the class-name-based settings in this ContainerPolicy to actual class-based
      * settings. This method is used when converting a project that has been built
      * with class names to a project with classes.
-     * @param classLoader
      */
     @Override
     public void convertClassNamesToClasses(ClassLoader classLoader){
diff --git a/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/internal/queries/JoinedAttributeManager.java b/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/internal/queries/JoinedAttributeManager.java
index 4dc54d1..150be19 100644
--- a/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/internal/queries/JoinedAttributeManager.java
+++ b/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/internal/queries/JoinedAttributeManager.java
@@ -559,10 +559,6 @@
      *  all intermediate steps.
      *  Example expression "emp.project.pk" with a clone Employee will trigger indirection and return
      *  the project pk value.
-     * @param session
-     * @param clone
-     * @param expression
-     * @return
      */
     public Object getValueFromObjectForExpression(AbstractSession session, Object clone, ObjectExpression expression){
         if (!expression.isExpressionBuilder()){
@@ -791,10 +787,6 @@
     /**
      * adds expression and its base expressions recursively to the expressionList in groups, so that an expression is never listed before
      * its base expression
-     * @param expression
-     * @param expressionlist
-     * @param lastJoinedAttributeBaseExpression
-     * @return
      */
     protected Expression addExpressionAndBaseToGroupedList(Expression expression, List expressionlist, Expression lastJoinedAttributeBaseExpression){
         if(!expressionlist.contains(expression)) {
diff --git a/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/internal/queries/MapContainerPolicy.java b/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/internal/queries/MapContainerPolicy.java
index 520e4d0..f825467 100644
--- a/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/internal/queries/MapContainerPolicy.java
+++ b/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/internal/queries/MapContainerPolicy.java
@@ -339,7 +339,6 @@
      * Convert all the class-name-based settings in this ContainerPolicy to
      * actual class-based settings. This method is used when converting a
      * project that has been built with class names to a project with classes.
-     * @param classLoader
      */
     @Override
     public void convertClassNamesToClasses(ClassLoader classLoader){
diff --git a/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/internal/queries/MappedKeyMapContainerPolicy.java b/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/internal/queries/MappedKeyMapContainerPolicy.java
index 066d919..35c06f3 100644
--- a/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/internal/queries/MappedKeyMapContainerPolicy.java
+++ b/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/internal/queries/MappedKeyMapContainerPolicy.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 1998, 2019 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1998, 2021 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0 which is available at
@@ -421,7 +421,6 @@
      * INTERNAL:
      * Convert all the class-name-based settings in this ContainerPolicy to actual class-based
      * settings
-     * @param classLoader
      */
     @Override
     public void convertClassNamesToClasses(ClassLoader classLoader) {
@@ -846,7 +845,6 @@
     /**
      * INTERNAL:
      * Some map keys must be obtained from the database.  This query is used to obtain the key
-     * @param keyQuery
      */
     public void setKeyQuery(DatabaseQuery keyQuery) {
         this.keyQuery = keyQuery;
diff --git a/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/internal/queries/SortedCollectionContainerPolicy.java b/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/internal/queries/SortedCollectionContainerPolicy.java
index 7916145..305cb76 100644
--- a/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/internal/queries/SortedCollectionContainerPolicy.java
+++ b/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/internal/queries/SortedCollectionContainerPolicy.java
@@ -184,7 +184,6 @@
      * Convert all the class-name-based settings in this SortedCollectionContainerPolicy to actual class-based
      * settings. This method is used when converting a project that has been built
      * with class names to a project with classes.
-     * @param classLoader
      */
     @Override
     public void convertClassNamesToClasses(ClassLoader classLoader){
diff --git a/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/internal/security/PrivilegedAccessHelper.java b/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/internal/security/PrivilegedAccessHelper.java
index 26bf1ed..8761dd5 100644
--- a/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/internal/security/PrivilegedAccessHelper.java
+++ b/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/internal/security/PrivilegedAccessHelper.java
@@ -148,7 +148,6 @@
 
     /**
      * Execute a java Class.forName().  Wrap the call in a doPrivileged block if necessary.
-     * @param className
      */
     public static Class getClassForName(final String className) throws ClassNotFoundException {
         // Check for primitive types.
@@ -185,7 +184,6 @@
      * @param javaClass The class to get the Constructor for
      * @param args An array of classes representing the argument types of the constructor
      * @param shouldSetAccessible whether or not to call the setAccessible API
-     * @throws java.lang.NoSuchMethodException
      */
     public static Constructor getConstructorFor(final Class javaClass, final Class[] args, final boolean shouldSetAccessible) throws NoSuchMethodException {
         Constructor result = null;
@@ -239,7 +237,6 @@
      * @param javaClass The class to get the Constructor for
      * @param args An array of classes representing the argument types of the constructor
      * @param shouldSetAccessible whether or not to call the setAccessible API
-     * @throws java.lang.NoSuchMethodException
      */
     public static Constructor getDeclaredConstructorFor(final Class javaClass, final Class[] args, final boolean shouldSetAccessible) throws NoSuchMethodException {
         Constructor result = javaClass.getDeclaredConstructor(args);
@@ -259,7 +256,6 @@
      * @param javaClass The class to get the field from
      * @param fieldName The name of the field
      * @param shouldSetAccessible whether or not to call the setAccessible API
-     * @throws java.lang.NoSuchFieldException
      */
     public static Field getField(final Class javaClass, final String fieldName, final boolean shouldSetAccessible) throws NoSuchFieldException {
         Field field = findDeclaredField(javaClass, fieldName);
@@ -279,7 +275,6 @@
      * @param javaClass The class to get the field from
      * @param fieldName The name of the field
      * @param shouldSetAccessible whether or not to call the setAccessible API
-     * @throws java.lang.NoSuchFieldException
      */
     public static Field getDeclaredField(final Class javaClass, final String fieldName, final boolean shouldSetAccessible) throws NoSuchFieldException {
         Field field = javaClass.getDeclaredField(fieldName);
@@ -332,7 +327,6 @@
      * @param methodName The name of the method to get
      * @param methodParameterTypes A list of classes representing the classes of the parameters of the mthod
      * @param shouldSetAccessible whether or not to call the setAccessible API
-     * @throws java.lang.NoSuchMethodException
      */
     public static Method getMethod(final Class javaClass, final String methodName, final Class[] methodParameterTypes, final boolean shouldSetAccessible) throws NoSuchMethodException {
         Method method = findMethod(javaClass, methodName, methodParameterTypes);
@@ -355,7 +349,6 @@
      * @param methodName The name of the method to get
      * @param methodParameterTypes A list of classes representing the classes of the parameters of the method
      * @param shouldSetAccessible whether or not to call the setAccessible API
-     * @throws java.lang.NoSuchMethodException
      */
     public static Method getPublicMethod(final Class javaClass, final String methodName, final Class[] methodParameterTypes, final boolean shouldSetAccessible) throws NoSuchMethodException {
         // Return the (public) method - will traverse superclass(es) if necessary
@@ -380,7 +373,6 @@
 
     /**
      * Get the return type for a given method. Wrap the call in doPrivileged if necessary.
-     * @param field
      */
     public static Class getFieldType(final Field field) {
         return field.getType();
@@ -485,7 +477,6 @@
 
     /**
      * Get the return type for a given method. Wrap the call in doPrivileged if necessary.
-     * @param method
      */
     public static Class getMethodReturnType(final Method method) {
         // 323148: a null method as a possible problem with module ordering breaking weaving - has been trapped by implementors of this method.
diff --git a/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/internal/sessions/AbstractRecord.java b/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/internal/sessions/AbstractRecord.java
index b234382..b4274ba 100644
--- a/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/internal/sessions/AbstractRecord.java
+++ b/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/internal/sessions/AbstractRecord.java
@@ -266,8 +266,6 @@
     /**
      * Internal: factored out of getIndicatingNoEntry(String) to reduce complexity and have
      * get(string) use get(DatabaseField) instead of getIndicatingNoEntry and then doing an extra check
-     * @param fieldName
-     * @return
      */
     protected DatabaseField getLookupField(String fieldName){
         if (this.lookupField == null) {
diff --git a/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/internal/sessions/AbstractSession.java b/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/internal/sessions/AbstractSession.java
index 5c794b4..bc45c40 100644
--- a/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/internal/sessions/AbstractSession.java
+++ b/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/internal/sessions/AbstractSession.java
@@ -922,7 +922,6 @@
     /**
      * Check to see if the descriptor of a superclass can be used to describe this class
      *
-     * @param theClass
      * @return ClassDescriptor
      */
     protected ClassDescriptor checkHierarchyForDescriptor(Class theClass){
@@ -1510,7 +1509,6 @@
     /**
      * INTERNAL:
      * Release (if required) connection after call.
-     * @param query
      */
     public void releaseConnectionAfterCall(DatabaseQuery query) {
     }
@@ -4127,7 +4125,6 @@
     /**
      * INTERNAL:
      * Set the user defined properties by shallow copying the propertiesMap.
-     * @param propertiesMap
      */
     public void setProperties(Map<String, Object> propertiesMap) {
         if (null == propertiesMap) {
@@ -5128,7 +5125,6 @@
     * or have a common inheritance hierarchy mapped root class.
     * The AttributeGroup should correspond to the object type.
     *
-    * @param objectOrCollection
     */
    public void load(Object objectOrCollection, AttributeGroup group) {
        if (objectOrCollection == null || group == null) {
@@ -5152,7 +5148,6 @@
     * or have a common inheritance hierarchy mapped root class.
     * The AttributeGroup should correspond to the object type.
     *
-    * @param objectOrCollection
     */
    public void load(Object objectOrCollection, AttributeGroup group, ClassDescriptor referenceDescriptor, boolean fromFetchGroup) {
        if (objectOrCollection == null || group == null) {
diff --git a/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/internal/sessions/IdentityMapAccessor.java b/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/internal/sessions/IdentityMapAccessor.java
index dd01e56..83584e3 100644
--- a/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/internal/sessions/IdentityMapAccessor.java
+++ b/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/internal/sessions/IdentityMapAccessor.java
@@ -319,7 +319,6 @@
      * @param pkList List of Entity PKs to extract from the cache
      * @param descriptor Descriptor type to be retrieved.
      * @return Map of Entity PKs associated to the Entities that were retrieved
-     * @throws QueryException
      */
     public Map<Object, Object> getAllFromIdentityMapWithEntityPK(Object[] pkList, ClassDescriptor descriptor){
         return getIdentityMapManager().getAllFromIdentityMapWithEntityPK(pkList, descriptor, getSession());
@@ -332,7 +331,6 @@
      * @param pkList List of Entity PKs to extract from the cache
      * @param descriptor Descriptor type to be retrieved.
      * @return Map of Entity PKs associated to the Entities that were retrieved
-     * @throws QueryException
      */
     public Map<Object, CacheKey> getAllCacheKeysFromIdentityMapWithEntityPK(Object[] pkList, ClassDescriptor descriptor){
         return getIdentityMapManager().getAllCacheKeysFromIdentityMapWithEntityPK(pkList, descriptor, getSession());
diff --git a/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/internal/sessions/MergeManager.java b/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/internal/sessions/MergeManager.java
index b1b73c1..5c955e3 100644
--- a/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/internal/sessions/MergeManager.java
+++ b/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/internal/sessions/MergeManager.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 1998, 2020 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1998, 2021 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0 which is available at
@@ -1348,7 +1348,6 @@
     /**
      * INTERNAL:
      * Save the currentThread for later comparison to the activeThread in case they don't match
-     * @param lockThread
      */
     public void setLockThread(Thread lockThread) {
         this.lockThread = lockThread;
diff --git a/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/internal/sessions/ObjectChangeSet.java b/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/internal/sessions/ObjectChangeSet.java
index b25ebdf..b069f27 100644
--- a/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/internal/sessions/ObjectChangeSet.java
+++ b/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/internal/sessions/ObjectChangeSet.java
@@ -1282,7 +1282,6 @@
     /**
      * ADVANCED
      * Returns true if this ObjectChangeSet should be recalculated after changes in event
-     * @return
      */
     @Override
     public boolean shouldRecalculateAfterUpdateEvent() {
diff --git a/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/internal/sessions/RepeatableWriteUnitOfWork.java b/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/internal/sessions/RepeatableWriteUnitOfWork.java
index 9eded9d..f1ca712 100644
--- a/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/internal/sessions/RepeatableWriteUnitOfWork.java
+++ b/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/internal/sessions/RepeatableWriteUnitOfWork.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 1998, 2019 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1998, 2021 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0 which is available at
@@ -267,7 +267,6 @@
      * In this implementation, we check whether the inheritance policy has been configured to allow
      * superclass descriptors to describe subclasses that do not have a descriptor themselves
      *
-     * @param theClass
      * @return ClassDescriptor
      */
     @Override
@@ -712,7 +711,6 @@
 
     /**
      * Return whether we are already performing a flush() call
-     * @return
      */
     public boolean isWithinFlush() {
         return isWithinFlush;
diff --git a/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/internal/sessions/ResultSetRecord.java b/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/internal/sessions/ResultSetRecord.java
index ee1fe48..d68e786 100644
--- a/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/internal/sessions/ResultSetRecord.java
+++ b/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/internal/sessions/ResultSetRecord.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2013, 2020 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2013, 2021 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0 which is available at
@@ -106,7 +106,6 @@
 
     /**
      * Indicates whether resultSet is still here.
-     * @return
      */
     public boolean hasResultSet() {
         return this.resultSet != null;
diff --git a/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/internal/sessions/UnitOfWorkImpl.java b/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/internal/sessions/UnitOfWorkImpl.java
index a771be7..b28d29a 100644
--- a/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/internal/sessions/UnitOfWorkImpl.java
+++ b/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/internal/sessions/UnitOfWorkImpl.java
@@ -4905,7 +4905,6 @@
     /**
      * INTERNAL:
      * Used to set the collections of all objects in the UnitOfWork.
-     * @param objects
      */
     protected void setAllClonesCollection(Map objects) {
         this.allClones = objects;
@@ -6010,7 +6009,6 @@
     /**
      * This method is used internally to create a map to hold the persistenceContexts.  A weak map is returned if ReferenceMode is weak.
      *
-     *  @param size
      */
     protected Map createMap(int size){
         if (this.referenceMode != null && this.referenceMode != ReferenceMode.HARD) return new IdentityWeakHashMap(size);
diff --git a/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/internal/sessions/coordination/jms/JMSTopicRemoteConnection.java b/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/internal/sessions/coordination/jms/JMSTopicRemoteConnection.java
index 56b9976..42751cc 100644
--- a/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/internal/sessions/coordination/jms/JMSTopicRemoteConnection.java
+++ b/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/internal/sessions/coordination/jms/JMSTopicRemoteConnection.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 1998, 2020 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1998, 2021 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0 which is available at
@@ -89,7 +89,6 @@
      * INTERNAL:
      * Constructor creating either a local or external connection.  Local connections created this way connect to the topicSession and cache
      * the session and subscriber.  External connections cache only the topicConnection and will obtain the session/publisher when needed.
-     * @param rcm
      */
     public JMSTopicRemoteConnection(RemoteCommandManager rcm, TopicConnectionFactory topicConnectionFactory, Topic topic, boolean isLocalConnectionBeingCreated, boolean reuseJMSTopicPublisher) throws JMSException {
         super(rcm);
@@ -123,7 +122,6 @@
     /**
      * Creates local connections that do not use a TopicConnection or TopicSession,
      * useful only for processing already received JMS messages
-     * @param rcm
      * @see onMessage
      */
     public JMSTopicRemoteConnection(RemoteCommandManager rcm){
diff --git a/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/internal/sessions/factories/model/login/LoginConfig.java b/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/internal/sessions/factories/model/login/LoginConfig.java
index 6cd0048..9066360 100644
--- a/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/internal/sessions/factories/model/login/LoginConfig.java
+++ b/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/internal/sessions/factories/model/login/LoginConfig.java
@@ -69,7 +69,6 @@
      * securable object initialization remains in the constructor with default
      * to JCE and changes only if an encryption class is set.
      *
-     * @param password
      */
     public void setPassword(String password) {
         setEncryptedPassword(password);
@@ -81,7 +80,6 @@
      * assumes the password is encrypted. If it is not we will make sure it is
      * encrypted.
      *
-     * @param encryptedPassword
      */
     public void setEncryptedPassword(String encryptedPassword) {
         // Bug 4117441 - Secure programming practices, store password in char[]
diff --git a/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/internal/sessions/factories/model/transport/naming/JNDINamingServiceConfig.java b/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/internal/sessions/factories/model/transport/naming/JNDINamingServiceConfig.java
index f2ef526..98cc179 100644
--- a/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/internal/sessions/factories/model/transport/naming/JNDINamingServiceConfig.java
+++ b/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/internal/sessions/factories/model/transport/naming/JNDINamingServiceConfig.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 1998, 2020 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1998, 2021 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0 which is available at
@@ -65,7 +65,6 @@
      * securable object initialization remains in the constructor with default
      * to JCE and changes only if an encryption class is set.
      *
-     * @param password
      */
     public void setPassword(String password) {
         setEncryptedPassword(password);
@@ -76,7 +75,6 @@
      * is called only at load time of a schema formatted sessions.xml file. It
      * assumes the password is encrypted.
      *
-     * @param encryptedPassword
      */
     public void setEncryptedPassword(String encryptedPassword) {
         // Bug 4117441 - Secure programming practices, store password in char[]
diff --git a/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/internal/sessions/remote/Transporter.java b/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/internal/sessions/remote/Transporter.java
index 3cafa62..ae6400c 100644
--- a/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/internal/sessions/remote/Transporter.java
+++ b/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/internal/sessions/remote/Transporter.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 1998, 2019 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1998, 2021 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0 which is available at
@@ -99,7 +99,6 @@
 
     /**
      *  Set the exception associated with this Transporter
-     *  @param exception
      */
     public void setException(RuntimeException exception) {
         setObject(exception);
@@ -122,7 +121,6 @@
 
     /**
      *  Set the query associated with this transporter
-     *  @param query
      */
     public void setQuery(DatabaseQuery query) {
         this.query = query;
@@ -130,7 +128,6 @@
 
     /**
      *  Set whether the operation which caused this transporter to be returned was successful.
-     *  @param wasOperationSuccessful
      */
     public void setWasOperationSuccessful(boolean wasOperationSuccessful) {
         this.wasOperationSuccessful = wasOperationSuccessful;
diff --git a/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/mappings/AggregateMapping.java b/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/mappings/AggregateMapping.java
index f253db1..828d56c 100644
--- a/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/mappings/AggregateMapping.java
+++ b/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/mappings/AggregateMapping.java
@@ -368,7 +368,6 @@
      * Convert all the class-name-based settings in this mapping to actual class-based
      * settings. This method is used when converting a project that has been built
      * with class names to a project with classes.
-     * @param classLoader
      */
     @Override
     public void convertClassNamesToClasses(ClassLoader classLoader) {
diff --git a/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/mappings/AggregateObjectMapping.java b/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/mappings/AggregateObjectMapping.java
index bffbb2d..5de646f 100644
--- a/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/mappings/AggregateObjectMapping.java
+++ b/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/mappings/AggregateObjectMapping.java
@@ -1,6 +1,6 @@
 /*
- * Copyright (c) 1998, 2020 Oracle and/or its affiliates. All rights reserved.
- * Copyright (c) 1998, 2020 IBM Corporation. All rights reserved.
+ * Copyright (c) 1998, 2021 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1998, 2021 IBM Corporation. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0 which is available at
@@ -295,8 +295,6 @@
      * This method is used for removal of private owned relationships.
      * AggregateObjectMappings are dealt with in their parent delete, so this is a no-op.
      *
-     * @param object
-     * @param deletedObjects
      */
     @Override
     public void addKeyToDeletedObjectsList(Object object, Map deletedObjects){
@@ -495,7 +493,6 @@
      * Wrap the aggregate represented by this mapping in a cachekey so it can be processed my
      * methods down the stack.
      * @param owningCacheKey - the cache key holding the object to extract the aggregate from
-     * @return
      */
     protected CacheKey buildWrapperCacheKeyForAggregate(CacheKey owningCacheKey, boolean targetIsProtected) {
         if (!this.descriptor.getCachePolicy().isProtectedIsolation()) {
@@ -740,14 +737,6 @@
     /**
      * INTERNAL:
      * Build a clone of the given element in a unitOfWork
-     * @param attributeValue
-     * @param parent
-     * @param parentCacheKey
-     * @param refreshCascade
-     * @param cloningSession
-     * @param isExisting
-     * @param isFromSharedCache
-     * @return
      */
     @Override
     public Object buildElementClone(Object attributeValue, Object parent, CacheKey parentCacheKey, Integer refreshCascade, AbstractSession cloningSession, boolean isExisting, boolean isFromSharedCache){
@@ -819,7 +808,6 @@
      * INTERNAL:
      * Certain key mappings favor different types of selection query.  Return the appropriate
      * type of selectionQuery
-     * @return
      */
     @Override
     public ReadQuery buildSelectionQueryForDirectCollectionKeyMapping(ContainerPolicy containerPolicy){
@@ -1008,7 +996,6 @@
      * Convert all the class-name-based settings in this mapping to actual
      * class-based settings. This method is used when converting a project that
      * has been built with class names to a project with classes.
-     * @param classLoader
      */
     @Override
     public void convertClassNamesToClasses(ClassLoader classLoader) {
@@ -1071,7 +1058,6 @@
     /**
      * INTERNAL:
      * Create a query key that links to the map key
-     * @return
      */
     @Override
     public QueryKey createQueryKeyForMapKey(){
@@ -1085,8 +1071,6 @@
      * This method is used for removal of private owned relationships.
      * AggregateObjectMappings are dealt with in their parent delete, so this is a no-op.
      *
-     * @param objectDeleted
-     * @param session
      */
     @Override
     public void deleteMapKey(Object objectDeleted, AbstractSession session){
@@ -1158,7 +1142,6 @@
     /**
      * INTERNAL:
      * Return any tables that will be required when this mapping is used as part of a join query
-     * @return
      */
     @Override
     public List<DatabaseTable> getAdditionalTablesForJoinQuery(){
@@ -1171,7 +1154,6 @@
      * is a map key.
      *
      * AggregateObjectMappings do not need any additional selection criteria when they are map keys
-     * @return
      */
     @Override
     public Expression getAdditionalSelectionCriteriaForMapKey(){
@@ -1237,7 +1219,6 @@
      * Return the fields that make up the identity of the mapped object.  For mappings with
      * a primary key, it will be the set of fields in the primary key.  For mappings without
      * a primary key it will likely be all the fields
-     * @return
      */
     @Override
     public List<DatabaseField> getIdentityFieldsForMapKey(){
@@ -1262,7 +1243,6 @@
     /**
      * INTERNAL:
      * Return a Map of any foreign keys defined within the the MapKey
-     * @return
      */
     @Override
     public Map<DatabaseField, DatabaseField> getForeignKeyFieldsForMapKey(){
@@ -1294,7 +1274,6 @@
      * Return the query that is used when this mapping is part of a joined relationship
      *
      * This method is used when this mapping is used to map the key in a Map
-     * @return
      */
     @Override
     public ObjectLevelReadQuery getNestedJoinQuery(JoinedAttributeManager joinManager, ObjectLevelReadQuery query, AbstractSession session){
@@ -1332,7 +1311,6 @@
      * If required, get the targetVersion of the source object from the merge manager.
      *
      * Used with MapKeyContainerPolicy to abstract getting the target version of a source key
-     * @return
      */
     @Override
     public Object getTargetVersionOfSourceObject(Object object, Object parent, MergeManager mergeManager, AbstractSession targetSession){
@@ -1347,7 +1325,6 @@
     /**
      * INTERNAL:
      * Return the class this key mapping maps or the descriptor for it
-     * @return
      */
     @Override
     public Object getMapKeyTargetType(){
@@ -1602,8 +1579,6 @@
     /**
      * INTERNAL:
      * Called when iterating through descriptors to handle iteration on this mapping when it is used as a MapKey
-     * @param iterator
-     * @param element
      */
     @Override
     public void iterateOnMapKey(DescriptorIterator iterator, Object element){
@@ -1613,7 +1588,6 @@
     /**
      * INTERNAL:
      * Return whether this mapping should be traversed when we are locking
-     * @return
      */
     @Override
     public boolean isLockableMapping(){
diff --git a/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/mappings/AttributeAccessor.java b/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/mappings/AttributeAccessor.java
index 1ae5014..588af27 100644
--- a/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/mappings/AttributeAccessor.java
+++ b/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/mappings/AttributeAccessor.java
@@ -122,7 +122,6 @@
 
     /**
      * INTERNAL:
-     * @return
      */
     @Override
     public boolean isWriteOnly() {
@@ -131,7 +130,6 @@
 
     /**
      * INTERNAL:
-     * @param aBoolean
      */
     @Override
     public void setIsWriteOnly(boolean aBoolean) {
@@ -140,14 +138,12 @@
 
     /**
      * INTERNAL
-     * @return
      */
     public boolean isReadOnly() {
         return isReadOnly;
     }
     /**
      * INTERNAL
-     * @param aBoolean
      */
     @Override
     public void setIsReadOnly(boolean aBoolean) {
diff --git a/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/mappings/CollectionMapping.java b/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/mappings/CollectionMapping.java
index a9a3bae..71e13a7 100644
--- a/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/mappings/CollectionMapping.java
+++ b/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/mappings/CollectionMapping.java
@@ -945,7 +945,6 @@
      * Convert all the class-name-based settings in this mapping to actual class-based
      * settings
      * This method is implemented by subclasses as necessary.
-     * @param classLoader
      */
     @Override
     public void convertClassNamesToClasses(ClassLoader classLoader){
diff --git a/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/mappings/DatabaseMapping.java b/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/mappings/DatabaseMapping.java
index dc269c0..63be30f 100644
--- a/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/mappings/DatabaseMapping.java
+++ b/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/mappings/DatabaseMapping.java
@@ -1254,7 +1254,6 @@
     /**
      * INTERNAL:
      * Return whether this mapping should be traversed when we are locking
-     * @return
      */
     public boolean isLockableMapping(){
         return false;
diff --git a/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/mappings/DirectCollectionMapping.java b/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/mappings/DirectCollectionMapping.java
index e4cc44b..d2c24fe 100644
--- a/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/mappings/DirectCollectionMapping.java
+++ b/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/mappings/DirectCollectionMapping.java
@@ -936,7 +936,6 @@
      * Convert all the class-name-based settings in this mapping to actual class-based
      * settings
      * This method is implemented by subclasses as necessary.
-     * @param classLoader
      */
     @Override
     public void convertClassNamesToClasses(ClassLoader classLoader) {
@@ -1929,7 +1928,6 @@
     /**
      * INTERNAL:
      * Return whether this mapping should be traversed when we are locking
-     * @return
      */
     @Override
     public boolean isLockableMapping(){
diff --git a/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/mappings/ForeignReferenceMapping.java b/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/mappings/ForeignReferenceMapping.java
index 29630e9..06cdb86 100644
--- a/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/mappings/ForeignReferenceMapping.java
+++ b/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/mappings/ForeignReferenceMapping.java
@@ -203,7 +203,6 @@
      * ADVANCED: Allows the retrieval of the owning mapping for a particular
      * mapping. Note: This will only be set for JPA models
      *
-     * @return
      */
     public String getMappedBy() {
         return mappedBy;
@@ -1338,8 +1337,6 @@
      * The method validateAttributeOfInstantiatedObject(Object attributeValue) fixes the value of the attributeValue
      * in cases where it is null and indirection requires that it contain some specific data structure.  Return whether this will happen.
      * This method is used to help determine if indirection has been triggered
-     * @param object
-     * @return
      * @see org.eclipse.persistence.internal.indirection.IndirectionPolicy#validateAttributeOfInstantiatedObject(Object)
      */
     public boolean isAttributeValueFullyBuilt(Object object){
@@ -2026,7 +2023,6 @@
      * INTERNAL: Called by JPA metadata processing to store the owning mapping
      * for this mapping
      *
-     * @param mappedBy
      */
     public void setMappedBy(String mappedBy) {
         this.mappedBy = mappedBy;
diff --git a/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/mappings/ManyToManyMapping.java b/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/mappings/ManyToManyMapping.java
index db7f05f..a4e8682 100644
--- a/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/mappings/ManyToManyMapping.java
+++ b/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/mappings/ManyToManyMapping.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 1998, 2020 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1998, 2021 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0 which is available at
@@ -1003,7 +1003,6 @@
     /**
      * INTERNAL:
      * Set whether this mapping was originally defined as a OneToMany
-     * @param isDefinedAsOneToManyMapping
      */
     public void setDefinedAsOneToManyMapping(boolean isDefinedAsOneToManyMapping) {
         this.isDefinedAsOneToManyMapping = isDefinedAsOneToManyMapping;
diff --git a/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/mappings/OneToOneMapping.java b/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/mappings/OneToOneMapping.java
index 1a00c37..9e13492 100644
--- a/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/mappings/OneToOneMapping.java
+++ b/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/mappings/OneToOneMapping.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 1998, 2020 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1998, 2021 Oracle and/or its affiliates. All rights reserved.
  * Copyright (c) 2020 IBM Corporation. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
@@ -427,7 +427,6 @@
      * INTERNAL:
      * Certain key mappings favor different types of selection query.  Return the appropriate
      * type of selectionQuery
-     * @return
      */
     @Override
     public ReadQuery buildSelectionQueryForDirectCollectionKeyMapping(ContainerPolicy containerPolicy){
@@ -604,7 +603,6 @@
     /**
      * INTERNAL:
      * Create a query key that links to the map key
-     * @return
      */
     @Override
     public QueryKey createQueryKeyForMapKey(){
@@ -621,8 +619,6 @@
      *
      * This method is used for removal of private owned relationships
      *
-     * @param objectDeleted
-     * @param session
      */
     @Override
     public void deleteMapKey(Object objectDeleted, AbstractSession session){
@@ -864,7 +860,6 @@
      * INTERNAL:
      * Return the selection criteria necessary to select the target object when this mapping
      * is a map key.
-     * @return
      */
     @Override
     public Expression getAdditionalSelectionCriteriaForMapKey(){
@@ -957,7 +952,6 @@
     /**
      * INTERNAL:
      * Return a Map of any foreign keys defined within the the MapKey
-     * @return
      */
     @Override
     public Map<DatabaseField, DatabaseField> getForeignKeyFieldsForMapKey(){
@@ -969,7 +963,6 @@
      * Return the fields that make up the identity of the mapped object.  For mappings with
      * a primary key, it will be the set of fields in the primary key.  For mappings without
      * a primary key it will likely be all the fields
-     * @return
      */
     @Override
     public List<DatabaseField> getIdentityFieldsForMapKey(){
@@ -1090,7 +1083,6 @@
      * If required, get the targetVersion of the source object from the merge manager
      *
      * Used with MapKeyContainerPolicy to abstract getting the target version of a source key
-     * @return
      */
     @Override
     public Object getTargetVersionOfSourceObject(Object object, Object parent, MergeManager mergeManager, AbstractSession targetSession){
@@ -1100,7 +1092,6 @@
     /**
      * INTERNAL:
      * Return the class this key mapping maps or the descriptor for it
-     * @return
      */
     @Override
     public Class getMapKeyTargetType(){
diff --git a/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/mappings/UnidirectionalOneToManyMapping.java b/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/mappings/UnidirectionalOneToManyMapping.java
index 7f1f0c1..5f3294e 100644
--- a/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/mappings/UnidirectionalOneToManyMapping.java
+++ b/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/mappings/UnidirectionalOneToManyMapping.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 1998, 2020 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1998, 2021 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0 which is available at
@@ -344,7 +344,6 @@
     /**
      * INTERNAL:
      * UnidirectionalOneToManyMapping performs some events after INSERT/UPDATE to maintain the keys
-     * @return
      */
     @Override
     public boolean requiresDataModificationEvents(){
diff --git a/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/mappings/converters/EnumTypeConverter.java b/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/mappings/converters/EnumTypeConverter.java
index dcbaff3..19f32b0 100644
--- a/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/mappings/converters/EnumTypeConverter.java
+++ b/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/mappings/converters/EnumTypeConverter.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 1998, 2020 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1998, 2021 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0 which is available at
@@ -106,7 +106,6 @@
      * Convert all the class-name-based settings in this converter to actual
      * class-based settings. This method is used when converting a project
      * that has been built with class names to a project with classes.
-     * @param classLoader
      */
     @Override
     public void convertClassNamesToClasses(ClassLoader classLoader) {
diff --git a/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/mappings/converters/ObjectTypeConverter.java b/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/mappings/converters/ObjectTypeConverter.java
index 0717048..eac8609 100644
--- a/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/mappings/converters/ObjectTypeConverter.java
+++ b/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/mappings/converters/ObjectTypeConverter.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 1998, 2019 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1998, 2021 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0 which is available at
@@ -157,7 +157,6 @@
      * Convert all the class-name-based settings in this converter to actual
      * class-based settings. This method is used when converting a project
      * that has been built with class names to a project with classes.
-     * @param classLoader
      */
     @Override
     public void convertClassNamesToClasses(ClassLoader classLoader){
diff --git a/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/mappings/converters/SerializedObjectConverter.java b/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/mappings/converters/SerializedObjectConverter.java
index 5ad8bce..34469b1 100644
--- a/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/mappings/converters/SerializedObjectConverter.java
+++ b/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/mappings/converters/SerializedObjectConverter.java
@@ -89,7 +89,6 @@
      * settings. This method is used when converting a project that has been built
      * with class names to a project with classes.
      * This method is implemented by subclasses as necessary.
-     * @param classLoader
      */
     @Override
     public void convertClassNamesToClasses(ClassLoader classLoader) {
diff --git a/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/mappings/converters/TypeConversionConverter.java b/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/mappings/converters/TypeConversionConverter.java
index c86fd13..7675482 100644
--- a/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/mappings/converters/TypeConversionConverter.java
+++ b/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/mappings/converters/TypeConversionConverter.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 1998, 2019 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1998, 2021 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0 which is available at
@@ -69,7 +69,6 @@
      * settings. This method is used when converting a project that has been built
      * with class names to a project with classes.
      * This method is implemented by subclasses as necessary.
-     * @param classLoader
      */
     @Override
     public void convertClassNamesToClasses(ClassLoader classLoader){
diff --git a/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/mappings/foundation/AbstractCompositeCollectionMapping.java b/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/mappings/foundation/AbstractCompositeCollectionMapping.java
index 08d01d6..e22a7c0 100644
--- a/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/mappings/foundation/AbstractCompositeCollectionMapping.java
+++ b/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/mappings/foundation/AbstractCompositeCollectionMapping.java
@@ -291,7 +291,6 @@
      * Convert all the class-name-based settings in this mapping to actual class-based
      * settings. This method is used when converting a project that has been built
      * with class names to a project with classes.
-     * @param classLoader
      */
     @Override
     public void convertClassNamesToClasses(ClassLoader classLoader){
diff --git a/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/mappings/foundation/AbstractDirectMapping.java b/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/mappings/foundation/AbstractDirectMapping.java
index d41eef2..7a68602 100644
--- a/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/mappings/foundation/AbstractDirectMapping.java
+++ b/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/mappings/foundation/AbstractDirectMapping.java
@@ -747,7 +747,6 @@
      * Used internally by JPA deployment.
      *
      * @see #setFieldClassification(Class fieldType)
-     * @param className
      */
     public void setFieldClassificationClassName(String className){
         this.fieldClassificationClassName = className;
@@ -884,7 +883,6 @@
     /**
      * INTERNAL:
      * Return the class this key mapping maps or the descriptor for it
-     * @return
      */
     @Override
     public Class getMapKeyTargetType() {
diff --git a/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/mappings/foundation/AbstractTransformationMapping.java b/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/mappings/foundation/AbstractTransformationMapping.java
index 577983e..1d207ee 100644
--- a/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/mappings/foundation/AbstractTransformationMapping.java
+++ b/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/mappings/foundation/AbstractTransformationMapping.java
@@ -549,7 +549,6 @@
      * INTERNAL:
      * Convert all the class-name-based settings in this mapping to actual class-based
      * settings
-     * @param classLoader
      */
     @Override
     public void convertClassNamesToClasses(ClassLoader classLoader){
@@ -1223,7 +1222,6 @@
     /**
      * INTERNAL:
      * Set the Attribute Transformer Class Name
-     * @param className
      */
     public void setAttributeTransformerClassName(String className) {
         attributeTransformerClassName = className;
diff --git a/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/mappings/foundation/MapKeyMapping.java b/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/mappings/foundation/MapKeyMapping.java
index 6cb4c66..c98a4e8 100644
--- a/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/mappings/foundation/MapKeyMapping.java
+++ b/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/mappings/foundation/MapKeyMapping.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 1998, 2019 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1998, 2021 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0 which is available at
@@ -73,17 +73,11 @@
      *
      * This method is used for removal of private owned relationships
      *
-     * @param object
-     * @param deletedObjects
      */
     void addKeyToDeletedObjectsList(Object object, Map deletedObjects);
 
     /**
      * Build a clone of the given element in a unitOfWork
-     * @param element
-     * @param cloningSession
-     * @param isExisting
-     * @return
      */
     Object buildElementClone(Object element, Object parent, CacheKey cacheKey, Integer refreshCascade, AbstractSession cloningSession, boolean isExisting, boolean isFromSharedCache);
 
@@ -91,7 +85,6 @@
      * INTERNAL:
      * Depending on the MapKeyMapping, a different selection query may be required to retrieve the
      * map when the map is based on a DirectCollectionMapping
-     * @return
      */
     ReadQuery buildSelectionQueryForDirectCollectionKeyMapping(ContainerPolicy containerPolicy);
 
@@ -123,7 +116,6 @@
     /**
      * INTERNAL:
      * Create a query key that links to the map key
-     * @return
      */
     QueryKey createQueryKeyForMapKey();
 
@@ -153,15 +145,12 @@
      *
      * This method is used for removal of private owned relationships
      *
-     * @param objectDeleted
-     * @param session
      */
     void deleteMapKey(Object objectDeleted, AbstractSession session);
 
     /**
      * INTERNAL:
      * Return any tables that will be required when this mapping is used as part of a join query
-     * @return
      */
     List<DatabaseTable> getAdditionalTablesForJoinQuery();
 
@@ -174,14 +163,12 @@
     /**
      * INTERNAL:
      * Return a Map of any foreign keys defined within the the MapKey
-     * @return
      */
     Map<DatabaseField, DatabaseField> getForeignKeyFieldsForMapKey();
 
     /**
      * INTERNAL:
      * Get the descriptor for the Map Key
-     * @return
      */
     ClassDescriptor getReferenceDescriptor();
 
@@ -190,50 +177,42 @@
      * Return the fields that make up the identity of the mapped object.  For mappings with
      * a primary key, it will be the set of fields in the primary key.  For mappings without
      * a primary key it will likely be all the fields
-     * @return
      */
     List<DatabaseField> getIdentityFieldsForMapKey();
 
     /**
      * INTERNAL:
      * Return the query that is used when this mapping is part of a joined relationship
-     * @return
      */
     ObjectLevelReadQuery getNestedJoinQuery(JoinedAttributeManager joinManager, ObjectLevelReadQuery query, AbstractSession session);
 
     /**
      * INTERNAL:
      * Return the selection criteria necessary to select the target object
-     * @return
      */
     Expression getAdditionalSelectionCriteriaForMapKey();
 
     /**
      * INTERNAL:
      * If required, get the targetVersion of the source object from the merge manager
-     * @return
      */
     Object getTargetVersionOfSourceObject(Object object, Object parent, MergeManager mergeManager, AbstractSession targetSession);
 
     /**
      * INTERNAL:
      * Return the class this key mapping maps or the descriptor for it
-     * @return
      */
     Object getMapKeyTargetType();
 
     /**
      * INTERNAL:
      * Called when iterating through descriptors to handle iteration on this mapping when it is used as a MapKey
-     * @param iterator
-     * @param element
      */
     void iterateOnMapKey(DescriptorIterator iterator, Object element);
 
     /**
      * INTERNAL:
      * Extract the fields for the Map key from the object to use in a query
-     * @return
      */
     Map extractIdentityFieldsForQuery(Object key, AbstractSession session);
 
@@ -260,9 +239,6 @@
     /**
      * INTERNAL:
      * Allow the key mapping to unwrap the object
-     * @param key
-     * @param session
-     * @return
      */
 
     Object unwrapKey(Object key, AbstractSession session);
@@ -270,9 +246,6 @@
     /**
      * INTERNAL:
      * Allow the key mapping to wrap the object
-     * @param key
-     * @param session
-     * @return
      */
     Object wrapKey(Object key, AbstractSession session);
 
diff --git a/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/mappings/querykeys/ForeignReferenceQueryKey.java b/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/mappings/querykeys/ForeignReferenceQueryKey.java
index 8de1183..7aef98a 100644
--- a/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/mappings/querykeys/ForeignReferenceQueryKey.java
+++ b/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/mappings/querykeys/ForeignReferenceQueryKey.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 1998, 2020 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1998, 2021 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0 which is available at
@@ -50,7 +50,6 @@
      * INTERNAL:
      * Convert all the class-name-based settings in this project to actual class-based
      * settings
-     * @param classLoader
      */
     @Override
     public void convertClassNamesToClasses(ClassLoader classLoader){
@@ -135,7 +134,6 @@
      * PUBLIC:
      * Set the reference class name for this relationship
      * This is used when projects are built without using classes
-     * @param referenceClassName
      */
     public void setReferenceClassName(String referenceClassName) {
         this.referenceClassName = referenceClassName;
diff --git a/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/mappings/querykeys/QueryKey.java b/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/mappings/querykeys/QueryKey.java
index af1cac8..cb9ff52 100644
--- a/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/mappings/querykeys/QueryKey.java
+++ b/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/mappings/querykeys/QueryKey.java
@@ -60,7 +60,6 @@
      * Convert all the class-name-based settings in this QueryKey to actual class-based
      * settings
      * Will be overridded by subclasses
-     * @param classLoader
      */
     public void convertClassNamesToClasses(ClassLoader classLoader){}
 
diff --git a/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/oxm/JSONWithPadding.java b/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/oxm/JSONWithPadding.java
index 432fb43..a94781b 100644
--- a/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/oxm/JSONWithPadding.java
+++ b/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/oxm/JSONWithPadding.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2012, 2020 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2012, 2021 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0 which is available at
@@ -43,7 +43,6 @@
 
     /**
      * The Object that will be marshalled
-     * @return
      */
     public T getObject() {
         return rootObject;
@@ -51,7 +50,6 @@
 
     /**
      * The Object to be marshalled
-     * @param rootObject
      */
     public void setObject(T rootObject) {
         this.rootObject = rootObject;
@@ -59,7 +57,6 @@
 
     /**
      * The callback name that should me marshalled with the object
-     * @return
      */
     public String getCallbackName() {
         return callbackName;
diff --git a/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/oxm/XMLBinder.java b/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/oxm/XMLBinder.java
index f72b912..17ef522 100644
--- a/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/oxm/XMLBinder.java
+++ b/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/oxm/XMLBinder.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 1998, 2020 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1998, 2021 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0 which is available at
@@ -87,7 +87,6 @@
     /**
      * This method will unmarshal the provided node into mapped java objects. The original node
      * will be cached rather than thrown away.
-     * @param node
      * @return The root object unmarshalled from the provided node.
      */
     public Object unmarshal(org.w3c.dom.Node node) {
@@ -119,7 +118,6 @@
     /**
      * This method will update the cached XML node for the provided object. If no node exists for this
      * object, then no operation is performed.
-     * @param obj
      */
     public void updateXML(Object obj) {
         if(obj instanceof Root) {
@@ -194,7 +192,6 @@
 
     /**
      * Gets the XML Node associated with the provided object.
-     * @param object
      * @return an XML Node used to construct the given object. Null if no node exists for this object.
      */
     public Node getXMLNode(Object object) {
@@ -203,7 +200,6 @@
 
     /**
      * Gets the Java Object associated with the provided XML Node.
-     * @param node
      * @return the Java Object associated with this node. If no object is associated then returns null
      */
     public Object getObject(Node node) {
@@ -213,7 +209,6 @@
     /**
      * Updates the object associated with the provided node to reflect any changed made to that node.
      * If this Binder has no object associated with the given node, then no operation is performed.
-     * @param node
      */
     public void updateObject(org.w3c.dom.Node node) {
         if (node.getNodeType() == Node.DOCUMENT_NODE) {
@@ -269,7 +264,6 @@
      * using the object's descriptor default root element - any prefixes
      * will be resolved - and the given object
      *
-     * @param obj
      * @return an XMLRoot instance encapsulating the given object
      */
     private XMLRoot buildXMLRootFromObject(Object obj) {
diff --git a/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/oxm/XMLContext.java b/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/oxm/XMLContext.java
index aa8c09c..2537d03 100644
--- a/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/oxm/XMLContext.java
+++ b/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/oxm/XMLContext.java
@@ -425,8 +425,6 @@
     /**
      * INTERNAL:
      * Return the DocumentPreservationPolicy associated with this session
-     * @param session
-     * @return
      */
     public DocumentPreservationPolicy getDocumentPreservationPolicy(AbstractSession session) {
         if (session == null) {
@@ -966,7 +964,6 @@
     /**
      * Returns descriptor for given object.
      *
-     * @param object
      * @return descriptor for given object
      */
     public Descriptor getDescriptorForObject(Object object) {
diff --git a/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/oxm/XMLDescriptor.java b/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/oxm/XMLDescriptor.java
index c38cd3e..d2d1013 100644
--- a/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/oxm/XMLDescriptor.java
+++ b/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/oxm/XMLDescriptor.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 1998, 2019 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1998, 2021 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0 which is available at
@@ -853,7 +853,6 @@
      * unmarshalled does not equal the descriptor's default root
      * element.
      *
-     * @param unmarshalRecord
      * @return object
      */
     @Override
@@ -886,10 +885,6 @@
       * unmarshalled does not equal the descriptor's default root
       * element.
       *
-      * @param object
-      * @param elementNamespaceUri
-      * @param elementLocalName
-      * @param elementPrefix
       * @return object
       */
     @Override
@@ -912,7 +907,6 @@
 
     /**
      * INTERNAL:
-     * @return
      */
     @Override
     public Object wrapObjectInXMLRoot(Object object, String elementNamespaceUri, String elementLocalName, String elementPrefix, String encoding, String version, boolean forceWrap, boolean isNamespaceAware, XMLUnmarshaller unmarshaller) {
@@ -943,7 +937,6 @@
 
     /**
      * INTERNAL:
-     * @return
      */
     public boolean shouldWrapObject(Object object, String elementNamespaceUri, String elementLocalName, String elementPrefix, boolean isNamespaceAware) {
         if(resultAlwaysXMLRoot){
@@ -1014,7 +1007,6 @@
      * initialization - a QName will be created and stored on the
      * default root element field during initialize.
      *
-     * @param type
      */
     public void setDefaultRootElementType(QName type) {
         if (defaultRootElementField != null) {
@@ -1144,7 +1136,6 @@
      * Convert all the class-name-based settings in this Descriptor to actual class-based
      * settings. This method is used when converting a project that has been built
      * with class names to a project with classes.
-     * @param classLoader
      */
     @Override
     public void convertClassNamesToClasses(ClassLoader classLoader){
diff --git a/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/oxm/XMLField.java b/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/oxm/XMLField.java
index 4dac300..fbc58ad 100644
--- a/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/oxm/XMLField.java
+++ b/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/oxm/XMLField.java
@@ -790,7 +790,6 @@
     /**
      * Add an entry for both an XML Conversion and a Java Conversion entry
      * @param qname The qualified name of the XML schema type
-     * @param javaClass
      */
     public void addConversion(QName qname, Class javaClass) {
         addJavaConversion(javaClass, qname);
@@ -799,7 +798,6 @@
 
     /**
      * Remove an XML to Java Conversion entry
-     * @param qname
      */
     public void removeXMLConversion(QName qname) {
         getUserXMLTypes().remove(qname);
@@ -808,7 +806,6 @@
     /**
      * Remove a Java to XML Conversion entry
      *
-     * @param javaClass
      */
     public void removeJavaConversion(Class javaClass) {
         getUserJavaTypes().remove(javaClass);
@@ -817,8 +814,6 @@
     /**
      * Remove both a Java to XML Conversion and the corresponding XML to Java Conversion entry
      *
-     * @param qname
-     * @param javaClass
      */
     public void removeConversion(QName qname, Class javaClass) {
         removeJavaConversion(javaClass);
@@ -828,7 +823,6 @@
     /**
      * Assumes type is in the format prefix:localPart, or localPart.
      *
-     * @param type
      */
     public void setLeafElementType(QName type) {
         leafElementType = type;
@@ -847,7 +841,6 @@
 
     /**
      * INTERNAL:
-     * @return
      */
     @Override
     public boolean hasLastXPathFragment() {
@@ -877,7 +870,6 @@
 
     /**
      * INTERNAL:
-     * @param CDATA
      */
     @Override
     public void setIsCDATA(boolean CDATA) {
@@ -886,7 +878,6 @@
 
     /**
      * INTERNAL:
-     * @return
      */
     @Override
     public boolean isCDATA() {
diff --git a/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/oxm/XMLMarshaller.java b/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/oxm/XMLMarshaller.java
index a49383e..caf8fa3 100644
--- a/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/oxm/XMLMarshaller.java
+++ b/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/oxm/XMLMarshaller.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 1998, 2019 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1998, 2021 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0 which is available at
@@ -106,7 +106,6 @@
      * Return a properties object for a given instance of the
      * XMLMarshaller.
      *
-     * @return
      */
     public Properties getProperties() {
         if(null == marshalProperties) {
@@ -530,7 +529,6 @@
     /**
      * NamespacePrefixMapper that can be used during marshal (instead of those set in the project meta data)
      * @since 2.3.3
-     * @return
      */
     @Override
     public NamespacePrefixMapper getNamespacePrefixMapper() {
@@ -558,7 +556,6 @@
     /**
      * Set the MediaType for this xmlMarshaller.
      * See org.eclipse.persistence.oxm.MediaType for the media types supported by EclipseLink MOXy
-     * @param mediaType
      * @since EclipseLink 2.4.0
      */
     @Override
diff --git a/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/oxm/XMLUnmarshaller.java b/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/oxm/XMLUnmarshaller.java
index e1a99a7..86f2aa6 100644
--- a/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/oxm/XMLUnmarshaller.java
+++ b/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/oxm/XMLUnmarshaller.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 1998, 2020 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1998, 2021 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0 which is available at
@@ -139,7 +139,6 @@
      * Set the MediaType for this xmlUnmarshaller.
      * See org.eclipse.persistence.oxm.MediaType for the media types supported by EclipseLink MOXy
      * @since 2.4
-     * @param mediaType
      */
     @Override
     public void setMediaType(MediaType mediaType) {
diff --git a/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/oxm/mappings/XMLAnyAttributeMapping.java b/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/oxm/mappings/XMLAnyAttributeMapping.java
index 208902a..971c289 100644
--- a/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/oxm/mappings/XMLAnyAttributeMapping.java
+++ b/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/oxm/mappings/XMLAnyAttributeMapping.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 1998, 2020 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1998, 2021 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0 which is available at
@@ -415,7 +415,6 @@
      * INTERNAL:
      * Indicates the name of the Map class to be used.
      *
-     * @param concreteMapClassName
      */
     @Override
     public void useMapClassName(String concreteMapClassName) {
diff --git a/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/oxm/mappings/XMLAnyCollectionMapping.java b/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/oxm/mappings/XMLAnyCollectionMapping.java
index 0a6bd2a..1866fc3 100644
--- a/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/oxm/mappings/XMLAnyCollectionMapping.java
+++ b/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/oxm/mappings/XMLAnyCollectionMapping.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 1998, 2019 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1998, 2021 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0 which is available at
@@ -842,7 +842,6 @@
      * added to the collection as strings for mixed content.
      *
      * If mixedContent is false, this setting has no effect.
-     * @return
      */
     @Override
     public boolean isWhitespacePreservedForMixedContent() {
diff --git a/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/oxm/mappings/XMLBinaryDataCollectionMapping.java b/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/oxm/mappings/XMLBinaryDataCollectionMapping.java
index 9c6b223..c7b7564 100644
--- a/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/oxm/mappings/XMLBinaryDataCollectionMapping.java
+++ b/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/oxm/mappings/XMLBinaryDataCollectionMapping.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 1998, 2020 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1998, 2021 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0 which is available at
@@ -141,7 +141,6 @@
 
     /**
      * Force mapping to set default FixedMimeTypePolicy using the MimeType string as argument
-     * @param mimeTypeString
      */
     public void setMimeType(String mimeTypeString) {
         // use the following to set dynamically - mapping.setMimeTypePolicy(new FixedMimeTypePolicy(property.getMimeType()));
diff --git a/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/oxm/mappings/XMLBinaryDataMapping.java b/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/oxm/mappings/XMLBinaryDataMapping.java
index 731e8f8..cd2417f 100644
--- a/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/oxm/mappings/XMLBinaryDataMapping.java
+++ b/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/oxm/mappings/XMLBinaryDataMapping.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 1998, 2020 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1998, 2021 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0 which is available at
@@ -137,7 +137,6 @@
 
     /**
      * Force mapping to set default FixedMimeTypePolicy using the MimeType string as argument
-     * @param mimeTypeString
      */
     @Override
     public void setMimeType(String mimeTypeString) {
diff --git a/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/oxm/mappings/XMLCollectionReferenceMapping.java b/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/oxm/mappings/XMLCollectionReferenceMapping.java
index a5c0fd2..596a6b9 100644
--- a/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/oxm/mappings/XMLCollectionReferenceMapping.java
+++ b/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/oxm/mappings/XMLCollectionReferenceMapping.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 1998, 2020 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1998, 2021 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0 which is available at
@@ -123,8 +123,6 @@
      * source xpath (in the source-target key field association list).
      *
      * @param targetObject - the reference class instance that holds the required pk value
-     * @param xmlFld
-     * @param session
      * @return null if the target object is null, the reference class is null, or
      * a primary key field name does not exist on the reference descriptor that
      * matches the target field name - otherwise, return the associated primary
diff --git a/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/oxm/mappings/XMLCompositeCollectionMapping.java b/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/oxm/mappings/XMLCompositeCollectionMapping.java
index 3858182..b1901cc 100644
--- a/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/oxm/mappings/XMLCompositeCollectionMapping.java
+++ b/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/oxm/mappings/XMLCompositeCollectionMapping.java
@@ -692,7 +692,6 @@
      * Set the AbstractNullPolicy on the mapping<br>
      * The default policy is NullPolicy.<br>
      *
-     * @param aNullPolicy
      */
     @Override
     public void setNullPolicy(AbstractNullPolicy aNullPolicy) {
@@ -703,7 +702,6 @@
      * INTERNAL:
      * Get the AbstractNullPolicy from the Mapping.<br>
      * The default policy is NullPolicy.<br>
-     * @return
      */
     @Override
     public AbstractNullPolicy getNullPolicy() {
diff --git a/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/oxm/mappings/XMLCompositeDirectCollectionMapping.java b/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/oxm/mappings/XMLCompositeDirectCollectionMapping.java
index 7f8a190..e3543e9 100644
--- a/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/oxm/mappings/XMLCompositeDirectCollectionMapping.java
+++ b/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/oxm/mappings/XMLCompositeDirectCollectionMapping.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 1998, 2019 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1998, 2021 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0 which is available at
@@ -508,7 +508,6 @@
      * Indicates that this mapping should normalize all string values before adding them
      * to the collection on unmarshal. Normalize replaces any CR, LF or Tab characters with a
      * single space character.
-     * @param normalize
      */
     @Override
     public void setNormalizingStringValues(boolean normalize) {
@@ -521,7 +520,6 @@
      * Indicates that this mapping should collapse all string values before adding them
      * to the collection on unmarshal. Collapse removes leading and trailing whitespaces, and replaces
      * any sequence of whitespace characters with a single space.
-     * @param collapse
      */
     @Override
     public void setCollapsingStringValues(boolean collapse) {
diff --git a/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/oxm/mappings/XMLCompositeObjectMapping.java b/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/oxm/mappings/XMLCompositeObjectMapping.java
index 2c47a84..fb9bb72 100644
--- a/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/oxm/mappings/XMLCompositeObjectMapping.java
+++ b/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/oxm/mappings/XMLCompositeObjectMapping.java
@@ -387,7 +387,6 @@
      * Set the AbstractNullPolicy on the mapping<br>
      * The default policy is NullPolicy.<br>
      *
-     * @param aNullPolicy
      */
     @Override
     public void setNullPolicy(AbstractNullPolicy aNullPolicy) {
@@ -398,7 +397,6 @@
      * INTERNAL:
      * Get the AbstractNullPolicy from the Mapping.<br>
      * The default policy is NullPolicy.<br>
-     * @return
      */
     @Override
     public AbstractNullPolicy getNullPolicy() {
diff --git a/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/oxm/mappings/XMLDirectMapping.java b/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/oxm/mappings/XMLDirectMapping.java
index b4d181f..c12b2be 100644
--- a/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/oxm/mappings/XMLDirectMapping.java
+++ b/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/oxm/mappings/XMLDirectMapping.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 1998, 2019 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1998, 2021 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0 which is available at
@@ -219,7 +219,6 @@
      * Set the AbstractNullPolicy on the mapping<br>
      * The default policy is NullPolicy.<br>
      *
-     * @param aNullPolicy
      */
     @Override
     public void setNullPolicy(AbstractNullPolicy aNullPolicy) {
@@ -230,7 +229,6 @@
      * INTERNAL:
      * Get the AbstractNullPolicy from the Mapping.<br>
      * The default policy is NullPolicy.<br>
-     * @return
      */
     @Override
     public AbstractNullPolicy getNullPolicy() {
@@ -475,7 +473,6 @@
      * Indicates that this mapping should normalize all string values before setting them
      * in the object on unmarshal. Normalize replaces any CR, LF or Tab characters with a
      * single space character.
-     * @param normalize
      */
     @Override
     public void setNormalizingStringValues(boolean normalize) {
@@ -488,7 +485,6 @@
      * Indicates that this mapping should collapse all string values before setting them
      * in the object on unmarshal. Collapse removes leading and trailing whitespaces, and replaces
      * any sequence of whitepsace characters with a single space.
-     * @param collapse
      */
     @Override
     public void setCollapsingStringValues(boolean collapse) {
diff --git a/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/oxm/mappings/XMLNillableMapping.java b/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/oxm/mappings/XMLNillableMapping.java
index faa59e4..0c75b97 100644
--- a/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/oxm/mappings/XMLNillableMapping.java
+++ b/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/oxm/mappings/XMLNillableMapping.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 1998, 2019 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1998, 2021 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0 which is available at
@@ -31,14 +31,12 @@
      * Set the AbstractNullPolicy on the mapping<br>
      * The default policy is NullPolicy.<br>
      *
-     * @param aNullPolicy
      */
     void setNullPolicy(AbstractNullPolicy aNullPolicy);
 
     /**
      * Get the AbstractNullPolicy from the Mapping.<br>
      * The default policy is NullPolicy.<br>
-     * @return
      */
     AbstractNullPolicy getNullPolicy();
 }
diff --git a/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/oxm/mappings/XMLObjectReferenceMapping.java b/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/oxm/mappings/XMLObjectReferenceMapping.java
index b18a6a3..17abadf 100644
--- a/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/oxm/mappings/XMLObjectReferenceMapping.java
+++ b/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/oxm/mappings/XMLObjectReferenceMapping.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 1998, 2020 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1998, 2021 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0 which is available at
@@ -78,8 +78,6 @@
      * PUBLIC:
      * Add a source-target xpath pair to the map.
      *
-     * @param srcXPath
-     * @param tgtXPath
      */
     @Override
     public void addSourceToTargetKeyFieldAssociation(String srcXPath, String tgtXPath) {
@@ -102,9 +100,6 @@
      * Retrieve the target object's primary key value that is mapped to a given
      * source xpath (in the source-target key field association list).
      *
-     * @param targetObject
-     * @param xmlFld
-     * @param session
      * @return null if the target object is null, the reference class is null, or
      * a primary key field name does not exist on the reference descriptor that
      * matches the target field name - otherwise, return the associated primary
@@ -141,10 +136,6 @@
      * during the mapping reference resolution phase after unmarshalling is
      * complete.
      *
-     * @param record
-     * @param xmlField
-     * @param object
-     * @param session
      */
     @Override
     public void buildReference(UnmarshalRecord record, XMLField xmlField, Object object, AbstractSession session) {
@@ -248,9 +239,6 @@
      * Note:  This method performs the same functionality as 'getSchemaType' in
      * org.eclipse.persistence.internal.oxm.XMLSimpleMappingNodeValue.
      *
-     * @param xmlField
-     * @param value
-     * @return
      */
     protected QName getSchemaType(XMLField xmlField, Object value, AbstractSession session) {
         QName schemaType = null;
@@ -271,9 +259,6 @@
      * Note:  This method performs the same functionality as 'getSingleValueToWriteForUnion'
      * in org.eclipse.persistence.internal.oxm.XMLSimpleMappingNodeValue.
      *
-     * @param xmlField
-     * @param value
-     * @return
      */
     protected QName getSingleValueToWriteForUnion(XMLUnionField xmlField, Object value, AbstractSession session) {
         ArrayList schemaTypes = xmlField.getSchemaTypes();
@@ -303,7 +288,6 @@
      * INTERNAL:
      * Return a list of source-target xmlfield pairs.
      *
-     * @return
      */
     @Override
     public HashMap getSourceToTargetKeyFieldAssociations() {
@@ -316,9 +300,6 @@
      * Note:  This method performs the same functionality as 'getValueToWrite'
      * in org.eclipse.persistence.internal.oxm.XMLSimpleMappingNodeValue.
      *
-     * @param schemaType
-     * @param value
-     * @return
      */
     protected String getValueToWrite(QName schemaType, Object value, AbstractSession session) {
         return (String) ((XMLConversionManager) session.getDatasourcePlatform().getConversionManager()).convertObject(value, ClassConstants.STRING, schemaType);
@@ -448,7 +429,6 @@
     }
 
     /**
-     * @param field
      */
     public void setField(DatabaseField field) {
         // do nothing.
diff --git a/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/oxm/mappings/nullpolicy/AbstractNullPolicy.java b/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/oxm/mappings/nullpolicy/AbstractNullPolicy.java
index 2209a84..da6f740 100644
--- a/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/oxm/mappings/nullpolicy/AbstractNullPolicy.java
+++ b/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/oxm/mappings/nullpolicy/AbstractNullPolicy.java
@@ -151,11 +151,6 @@
      * When using the SAX or DOM Platform, this method is responsible for
      * marshalling null values for the XML Direct Mapping.
      *
-     * @param xPathFragment
-     * @param marshalRecord
-     * @param object
-     * @param session
-     * @param namespaceResolver
      * @return true if this method caused any nodes to be marshaled, else false.
      */
     public boolean directMarshal(XPathFragment xPathFragment, MarshalRecord marshalRecord, //
@@ -193,11 +188,6 @@
      * INTERNAL: When using the SAX Platform, this method is responsible for
      * marshalling null values for the XML Composite Object Mapping.
      *
-     * @param xPathFragment
-     * @param marshalRecord
-     * @param object
-     * @param session
-     * @param namespaceResolver
      * @return true if this method caused any nodes to be marshaled, else false.
      */
     public boolean compositeObjectMarshal(XPathFragment xPathFragment, MarshalRecord marshalRecord, //
@@ -225,9 +215,6 @@
      * INTERNAL: When using the DOM Platform, this method is responsible for
      * marshalling null values for the XML Composite Object Mapping.
      *
-     * @param record
-     * @param object
-     * @param field
      * @return true if this method caused any objects to be marshaled, else false.
      */
     public boolean compositeObjectMarshal(AbstractMarshalRecord record, Object object, Field field, CoreAbstractSession session) {
@@ -251,7 +238,6 @@
      * INTERNAL: When using the SAX or DOM Platform during unmarshal operations.
      * Use the attributes to determine if the element represents a null value.
      *
-     * @param attributes
      * @return true if based on the attributes the corresponding element
      *         represents a null value, else false.
      */
@@ -277,7 +263,6 @@
      * INTERNAL: When using the DOM Platform during unmarshal operations.
      * Use the element to determine if the element represents a null value.
      *
-     * @param element
      * @return true if based on the element it represents a null value, else false.
      */
     public boolean valueIsNull(Element element) {
@@ -302,8 +287,6 @@
     /**
      * INTERNAL: When using the SAX Platform this allows a NodeValue to be
      * registered to receive events from the TreeObjectBuilder.
-     * @param xPathNode
-     * @param nullCapableValue
      */
     public abstract void xPathNode(XPathNode xPathNode, NullCapableValue nullCapableValue);
 
@@ -316,7 +299,6 @@
 
     /**
      *
-     * @return
      */
     public boolean isNullRepresentedByEmptyNode() {
         return isNullRepresentedByEmptyNode;
@@ -324,7 +306,6 @@
 
     /**
      *
-     * @param bIsNullRepresentedByEmptyNode
      */
     public void setNullRepresentedByEmptyNode(boolean bIsNullRepresentedByEmptyNode) {
         isNullRepresentedByEmptyNode = bIsNullRepresentedByEmptyNode;
@@ -332,7 +313,6 @@
 
     /**
      *
-     * @return
      */
     public boolean isNullRepresentedByXsiNil() {
         return isNullRepresentedByXsiNil;
@@ -340,7 +320,6 @@
 
     /**
      *
-     * @param bIsNullRepresentedByXsiNil
      */
     public void setNullRepresentedByXsiNil(boolean bIsNullRepresentedByXsiNil) {
         isNullRepresentedByXsiNil = bIsNullRepresentedByXsiNil;
@@ -348,7 +327,6 @@
 
     /**
      *
-     * @return
      */
     public boolean ignoreAttributesForNil() {
         return ignoreAttributesForNil;
@@ -356,7 +334,6 @@
 
     /**
      *
-     * @param ignoreAttributesForNil
      */
     public void setIgnoreAttributesForNil(boolean ignoreAttributesForNil) {
         this.ignoreAttributesForNil = ignoreAttributesForNil;
@@ -365,7 +342,6 @@
     /**
      * INTERNAL:
      * Private function to process or create an entry in the NamespaceResolver for the xsi prefix.
-     * @param namespaceResolver
      * @return xsi prefix
      */
     protected String processNamespaceResolverForXSIPrefix(NamespaceResolver namespaceResolver, MarshalRecord marshalRecord) {
diff --git a/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/oxm/mappings/nullpolicy/IsSetNullPolicy.java b/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/oxm/mappings/nullpolicy/IsSetNullPolicy.java
index 09903d5..edaf678 100644
--- a/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/oxm/mappings/nullpolicy/IsSetNullPolicy.java
+++ b/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/oxm/mappings/nullpolicy/IsSetNullPolicy.java
@@ -73,7 +73,6 @@
 
     /**
      * Specific Constructor to set the name for checking the isSet state of the mapping
-     * @param anIsSetMethodName
      */
     public IsSetNullPolicy(String anIsSetMethodName) {
         this();
@@ -82,10 +81,6 @@
 
     /**
      * Specific Constructor to set both the Marshal enum and the Unmarshal flags.
-     * @param anIsSetMethodName
-     * @param bIsNullRepresentedByEmptyNode
-     * @param bIsNullRepresentedByXsiNil
-     * @param aMarshalNullRepresentation
      */
     public IsSetNullPolicy(String anIsSetMethodName, //
             boolean bIsNullRepresentedByEmptyNode, boolean bIsNullRepresentedByXsiNil, //
@@ -162,7 +157,6 @@
     /**
      * INTERNAL:
      * Indicates if a null value has been set or not.
-     * @param object
      * @return boolean (isSet status)
      */
     private boolean isSet(Object object) {
@@ -176,7 +170,6 @@
 
     /**
      *
-     * @return
      */
     public String getIsSetMethodName() {
         return isSetMethodName;
@@ -184,7 +177,6 @@
 
     /**
      *
-     * @param anIsSetMethodName
      */
     public void setIsSetMethodName(String anIsSetMethodName) {
         isSetMethodName = anIsSetMethodName;
@@ -192,7 +184,6 @@
 
     /**
      *
-     * @return
      */
     public Class[] getIsSetParameterTypes() {
         return isSetParameterTypes;
@@ -200,7 +191,6 @@
 
     /**
      *
-     * @param parameterTypes
      */
     public void setIsSetParameterTypes(Class[] parameterTypes) {
         isSetParameterTypes = parameterTypes;
@@ -208,7 +198,6 @@
 
     /**
      *
-     * @return
      */
     public Object[] getIsSetParameters() {
         return isSetParameters;
@@ -216,7 +205,6 @@
 
     /**
      *
-     * @param parameters
      */
     public void setIsSetParameters(Object[] parameters) {
         isSetParameters = parameters;
diff --git a/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/oxm/mappings/nullpolicy/NullPolicy.java b/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/oxm/mappings/nullpolicy/NullPolicy.java
index b9eec39..371ff48 100644
--- a/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/oxm/mappings/nullpolicy/NullPolicy.java
+++ b/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/oxm/mappings/nullpolicy/NullPolicy.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 1998, 2020 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1998, 2021 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0 which is available at
@@ -102,10 +102,6 @@
 
     /**
      * Specific Constructor to set the Unmarshal flags
-     * @param anIsSetMethodName
-     * @param bIsSetPerformedForAbsentNode
-     * @param bIsNullRepresentedByEmptyNode
-     * @param bIsNullRepresentedByXsiNil
      */
     public NullPolicy(String anIsSetMethodName, //
             boolean bIsSetPerformedForAbsentNode, boolean bIsNullRepresentedByEmptyNode, boolean bIsNullRepresentedByXsiNil) {
@@ -117,11 +113,6 @@
 
     /**
      * Specific Constructor to set both the Marshal enum and the Unmarshal flags
-     * @param anIsSetMethodName
-     * @param bIsSetPerformedForAbsentNode
-     * @param bIsNullRepresentedByEmptyNode
-     * @param bIsNullRepresentedByXsiNil
-     * @param aMarshalNullRepresentation
      */
     public NullPolicy(String anIsSetMethodName, //
             boolean bIsSetPerformedForAbsentNode, boolean bIsNullRepresentedByEmptyNode, boolean bIsNullRepresentedByXsiNil, //
@@ -137,7 +128,6 @@
 
     /**
      * Set the isSetPerformedForAbsentNode flag
-     * @param performSet
      */
     public void setSetPerformedForAbsentNode(boolean performSet) {
         isSetPerformedForAbsentNode = performSet;
diff --git a/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/oxm/record/JSONWriterRecord.java b/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/oxm/record/JSONWriterRecord.java
index 6261ac4..03384f3 100644
--- a/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/oxm/record/JSONWriterRecord.java
+++ b/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/oxm/record/JSONWriterRecord.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2011, 2019 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2011, 2021 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0 which is available at
@@ -127,10 +127,7 @@
 
     /**
      * Handle marshal of an empty collection.
-     * @param xPathFragment
-     * @param namespaceResolver
      * @param openGrouping if grouping elements should be marshalled for empty collections
-     * @return
      */
     @Override
     public boolean emptyCollection(XPathFragment xPathFragment, NamespaceResolver namespaceResolver, boolean openGrouping) {
@@ -216,7 +213,6 @@
 
     /**
      * INTERNAL:
-     * @throws IOException
      */
     protected void startCallback() throws IOException{
        if(callbackName != null){
diff --git a/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/oxm/record/JsonRecord.java b/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/oxm/record/JsonRecord.java
index d8ce659..bc80787 100644
--- a/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/oxm/record/JsonRecord.java
+++ b/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/oxm/record/JsonRecord.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2013, 2019 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2013, 2021 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0 which is available at
@@ -146,10 +146,7 @@
     /**
      * Handle marshal of an empty collection.
      *
-     * @param xPathFragment
-     * @param namespaceResolver
      * @param openGrouping      if grouping elements should be marshalled for empty collections
-     * @return
      */
     @Override
     public boolean emptyCollection(XPathFragment xPathFragment, NamespaceResolver namespaceResolver, boolean openGrouping) {
diff --git a/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/oxm/record/MarshalRecord.java b/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/oxm/record/MarshalRecord.java
index d1faaa5..edcd3a0 100644
--- a/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/oxm/record/MarshalRecord.java
+++ b/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/oxm/record/MarshalRecord.java
@@ -118,7 +118,6 @@
      * INTERNAL:
      * If an XPathNode does not have an associated NodeValue then add it to the
      * MarshalRecord as a grouping element.
-     * @param xPathNode
      */
     @Override
     public void addGroupingElement(XPathNode xPathNode) {
@@ -131,7 +130,6 @@
     /**
      *
      * INTERNAL:
-     * @param xPathNode
      */
     @Override
     public void removeGroupingElement(XPathNode xPathNode) {
@@ -207,10 +205,7 @@
 
     /**
      * Handle marshal of an empty collection.
-     * @param xPathFragment
-     * @param namespaceResolver
      * @param openGrouping if grouping elements should be marshalled for empty collections
-     * @return
      */
     @Override
     public boolean emptyCollection(XPathFragment xPathFragment, NamespaceResolver namespaceResolver, boolean openGrouping) {
@@ -225,8 +220,6 @@
 
     /**
      * Add the specified namespace declaration
-     * @param prefix
-     * @param namespaceURI
      */
     @Override
     public void namespaceDeclaration(String prefix, String namespaceURI){
@@ -235,7 +228,6 @@
 
     /**
      * Add the defaultNamespace declaration
-     * @param defaultNamespace
      */
     public void defaultNamespaceDeclaration(String defaultNamespace){
         attribute(javax.xml.XMLConstants.XMLNS_ATTRIBUTE_NS_URI, javax.xml.XMLConstants.XMLNS_ATTRIBUTE, javax.xml.XMLConstants.XMLNS_ATTRIBUTE, defaultNamespace);
@@ -715,7 +707,6 @@
     /**
      * INTERNAL:
      * Private function to process or create an entry in the NamespaceResolver for the xsi prefix.
-     * @param namespaceResolver
      * @return xsi prefix
      * @since EclipseLink 2.4
 
diff --git a/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/oxm/record/XMLRecord.java b/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/oxm/record/XMLRecord.java
index 84dab0a..4f281a6 100644
--- a/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/oxm/record/XMLRecord.java
+++ b/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/oxm/record/XMLRecord.java
@@ -89,10 +89,6 @@
 
     /**
      * Marshal an attribute for the give namespaceURI, localName, preifx and value
-     * @param namespaceURI
-     * @param localName
-     * @param prefix
-     * @param value
      */
     @Override
     public void attributeWithoutQName(String namespaceURI, String localName, String prefix, String value){
@@ -105,10 +101,6 @@
 
     /**
      * Marshal an attribute for the give namespaceURI, localName, qualifiedName and value
-     * @param namespaceURI
-     * @param localName
-     * @param qName
-     * @param value
      */
     @Override
     public void attribute(String namespaceURI, String localName, String qName, String value){
@@ -120,8 +112,6 @@
 
     /**
      * Marshal a namespace declaration for the given prefix and url
-     * @param prefix
-     * @param namespaceURI
      */
     @Override
     public void namespaceDeclaration(String prefix, String namespaceURI){
diff --git a/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/oxm/schema/XMLSchemaReference.java b/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/oxm/schema/XMLSchemaReference.java
index 807cb02..fc0ce44 100644
--- a/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/oxm/schema/XMLSchemaReference.java
+++ b/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/oxm/schema/XMLSchemaReference.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 1998, 2020 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1998, 2021 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0 which is available at
@@ -139,8 +139,6 @@
 
     /**
      * INTERNAL:
-     * @param nsResolver
-     * @return
      */
     public QName getSchemaContextAsQName(NamespaceResolver nsResolver) {
         if (schemaContext == null) {
@@ -192,7 +190,6 @@
      * Allow subclasses to perform initialization if required.  This method will
      * typically be called during the owning descriptor's initialization phase.
      *
-     * @param session
      */
     public void initialize(CoreAbstractSession session) {
     }
diff --git a/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/oxm/sequenced/Setting.java b/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/oxm/sequenced/Setting.java
index eda3367..722ac8a 100644
--- a/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/oxm/sequenced/Setting.java
+++ b/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/oxm/sequenced/Setting.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 1998, 2019 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1998, 2021 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0 which is available at
@@ -155,7 +155,6 @@
     /**
      * Set the value on the Setting.  This method will also update the corresponding
      * domain object using the specified mapping.
-     * @param value
      */
     public void setValue(Object value) {
         setValue(value, true);
@@ -179,9 +178,6 @@
     }
 
     /**
-     * @param value
-     * @param updateObject
-     * @param container
      */
     public void addValue(Object value, boolean updateObject, Object container) {
         this.value = value;
diff --git a/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/platform/database/MySQLPlatform.java b/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/platform/database/MySQLPlatform.java
index 55c3a9a..4b64e49 100644
--- a/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/platform/database/MySQLPlatform.java
+++ b/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/platform/database/MySQLPlatform.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 1998, 2019 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1998, 2021 Oracle and/or its affiliates. All rights reserved.
  * Copyright (c) 1998, 2018 IBM Corporation. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
@@ -289,9 +289,6 @@
      *
      * MySQL uses case #2 and therefore the maxResults has to be altered based on the firstResultIndex
      *
-     * @param firstResultIndex
-     * @param maxResults
-     *
      * @see org.eclipse.persistence.platform.database.MySQLPlatform
      */
     @Override
diff --git a/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/platform/database/Oracle10Platform.java b/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/platform/database/Oracle10Platform.java
index 9240742..9ce54ca 100644
--- a/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/platform/database/Oracle10Platform.java
+++ b/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/platform/database/Oracle10Platform.java
@@ -31,8 +31,6 @@
      * Build the hint string used for first rows.
      * 
      * Allows it to be overridden
-     * @param max
-     * @return
      */
     @Override
     protected String buildFirstRowsHint(int max){
diff --git a/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/platform/database/Oracle9Platform.java b/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/platform/database/Oracle9Platform.java
index f235dd0..62fd944 100644
--- a/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/platform/database/Oracle9Platform.java
+++ b/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/platform/database/Oracle9Platform.java
@@ -30,8 +30,6 @@
      * Build the hint string used for first rows.
      * 
      * Allows it to be overridden
-     * @param max
-     * @return
      */
     @Override
     protected String buildFirstRowsHint(int max){
diff --git a/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/platform/database/OraclePlatform.java b/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/platform/database/OraclePlatform.java
index d5c899e..7b9dcbc 100644
--- a/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/platform/database/OraclePlatform.java
+++ b/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/platform/database/OraclePlatform.java
@@ -258,8 +258,6 @@
      * Build the hint string used for first rows.
      *
      * Allows it to be overridden
-     * @param max
-     * @return
      */
     protected String buildFirstRowsHint(int max){
         return HINT_START + HINT_END;
diff --git a/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/platform/database/PostgreSQLPlatform.java b/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/platform/database/PostgreSQLPlatform.java
index c989deb..8e6885a 100644
--- a/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/platform/database/PostgreSQLPlatform.java
+++ b/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/platform/database/PostgreSQLPlatform.java
@@ -111,9 +111,6 @@
      * PostGreSQL uses case #2 and therefore the maxResults has to be altered
      * based on the firstResultIndex
      *
-     * @param firstResultIndex
-     * @param maxResults
-     *
      * @see org.eclipse.persistence.platform.database.MySQLPlatform
      */
     @Override
diff --git a/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/platform/database/SymfowarePlatform.java b/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/platform/database/SymfowarePlatform.java
index e934574..c620bc4 100644
--- a/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/platform/database/SymfowarePlatform.java
+++ b/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/platform/database/SymfowarePlatform.java
@@ -973,8 +973,6 @@
 
     /**
      * Used to allow platforms to define their own index prefixes
-     * @param isUniqueSetOnField
-     * @return
      */
     @Override
     public String getIndexNamePrefix(boolean isUniqueSetOnField){
@@ -1150,8 +1148,6 @@
      * On Syfoware, there are situations where the key cannot be used.
      *
      * See: https://bugs.eclipse.org/bugs/show_bug.cgi?id=303396
-     * @param subselect
-     *
      * @see SymfowarePlatform
      */
     @Override
diff --git a/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/platform/database/converters/StructConverter.java b/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/platform/database/converters/StructConverter.java
index 3234194..ba71e6e 100644
--- a/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/platform/database/converters/StructConverter.java
+++ b/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/platform/database/converters/StructConverter.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 1998, 2019 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1998, 2021 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0 which is available at
@@ -57,7 +57,6 @@
      * Implementers should put any custom conversion logic in this method
      * @param struct the Struct that will be read
      * @return The Object converted back from the Struct
-     * @throws SQLException
      */
     Object convertToObject(Struct struct) throws SQLException;
 
@@ -68,7 +67,6 @@
      * @param struct The Object to convert
      * @param connection The JDBC connection
      * @return The Object as a Struct
-     * @throws SQLException
      */
     Struct convertToStruct(Object struct,
                            Connection connection) throws SQLException;
diff --git a/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/platform/database/oracle/plsql/PLSQLStoredProcedureCall.java b/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/platform/database/oracle/plsql/PLSQLStoredProcedureCall.java
index 0e29f37..8c02172 100644
--- a/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/platform/database/oracle/plsql/PLSQLStoredProcedureCall.java
+++ b/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/platform/database/oracle/plsql/PLSQLStoredProcedureCall.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 1998, 2020 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1998, 2021 Oracle and/or its affiliates. All rights reserved.
  * Copyright (c) 2019 IBM Corporation. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
@@ -1235,8 +1235,6 @@
     /**
      * INTERNAL
      *
-     * @param args
-     * @param direction
      * @return list of arguments with the specified direction
      */
     protected static List<PLSQLargument> getArguments(List<PLSQLargument> args, Integer direction) {
diff --git a/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/platform/server/JMXServerPlatformBase.java b/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/platform/server/JMXServerPlatformBase.java
index c054ff6..b1a0f8c 100644
--- a/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/platform/server/JMXServerPlatformBase.java
+++ b/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/platform/server/JMXServerPlatformBase.java
@@ -460,7 +460,6 @@
 
     /**
      * Remove JMX reserved characters from the session name
-     * @return
      */
     protected String getMBeanSessionName() {
         // Check for a valid session - should never occur though
@@ -484,7 +483,6 @@
     /**
      * INTERNAL:
      * Set the cached server specific services MBean
-     * @param runtimeServicesMBean
      */
     protected void setRuntimeServicesMBean(MBeanRuntimeServicesMBean runtimeServicesMBean) {
         this.runtimeServicesMBean = runtimeServicesMBean;
@@ -492,8 +490,6 @@
 
     /**
      * INTERNAL:
-     * @param enableDefault
-     * @return
      */
     protected String getModuleName(boolean enableDefault) {
         //Object substring = getModuleOrApplicationName();
@@ -529,7 +525,6 @@
 
     /**
      * INTERNAL;
-     * @param aName
      */
     protected void setModuleName(String aName) {
         this.moduleName = aName;
@@ -540,8 +535,6 @@
      * Lazy initialize the application name by
      * first checking for a persistence.xml property override and then
      * deferring to a default name in the absence of a platform override of this function
-     * @param enableDefault
-     * @return
      */
     protected String getApplicationName(boolean enableDefault) {
         //Object substring = getModuleOrApplicationName();
@@ -577,7 +570,6 @@
 
     /**
      * INTERNAL:
-     * @param aName
      */
     public void setApplicationName(String aName) {
         this.applicationName = aName;
diff --git a/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/platform/server/ServerPlatformUtils.java b/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/platform/server/ServerPlatformUtils.java
index 0d5cd16..38f1c86 100644
--- a/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/platform/server/ServerPlatformUtils.java
+++ b/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/platform/server/ServerPlatformUtils.java
@@ -59,7 +59,6 @@
     }
 
     /**
-     * @param session
      * @return The target-server class string that represents platform that is
      *         currently running. Return null if unknown.
      */
diff --git a/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/platform/xml/XMLPlatform.java b/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/platform/xml/XMLPlatform.java
index 4864b71..bffd24b 100644
--- a/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/platform/xml/XMLPlatform.java
+++ b/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/platform/xml/XMLPlatform.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 1998, 2019 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1998, 2021 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0 which is available at
@@ -30,7 +30,6 @@
     /**
      * Creates a new document.
      * @return the new document
-     * @throws XMLPlatformException
      */
     Document createDocument() throws XMLPlatformException;
 
@@ -42,7 +41,6 @@
      *         publicIdentifier the public identifier
      *         systemIdentifier the system identifier
      * @return the new document
-     * @throws XMLPlatformException
      */
     Document createDocumentWithPublicIdentifier(String name, String publicIdentifier, String systemIdentifier) throws XMLPlatformException;
 
@@ -52,7 +50,6 @@
      * @param  name the name of the root element
      *         systemIdentifier the system identifier
      * @return the new document
-     * @throws XMLPlatformException
      */
     Document createDocumentWithSystemIdentifier(String name, String systemIdentifier) throws XMLPlatformException;
 
@@ -70,7 +67,6 @@
      *         URI
      *         namespacePrefix the namespace prefix
      * @return the namespace URI for the specified prefix
-     * @throws XMLPlatformException
      */
     String resolveNamespacePrefix(Node contextNode, String namespacePrefix) throws XMLPlatformException;
 
@@ -82,17 +78,11 @@
      *         namespaceResolver used to resolve namespace prefixes
      *         to the corresponding namespace URI
      * @return the XPath result
-     * @throws XMLPlatformException
      */
     NodeList selectNodesAdvanced(Node contextNode, String xPath, XMLNamespaceResolver xmlNamespaceResolver) throws XMLPlatformException;
 
     /**
      * Execute advanced XPath statements that are required for TopLink EIS.
-     * @param contextNode
-     * @param xPath
-     * @param xmlNamespaceResolver
-     * @return
-     * @throws XMLPlatformException
      */
     Node selectSingleNodeAdvanced(Node contextNode, String xPath, XMLNamespaceResolver xmlNamespaceResolver) throws XMLPlatformException;
 
@@ -123,7 +113,6 @@
      * @param  xmlSchemaURL the XML Schema
      * @param  errorHandler a mechanism for selectively ignoring errors
      * @return true if the document is valid, else false
-     * @throws XMLPlatformException
      */
     boolean validateDocument(Document document, URL xmlSchemaURL, ErrorHandler errorHandler) throws XMLPlatformException;
 
diff --git a/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/platform/xml/XMLPlatformFactory.java b/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/platform/xml/XMLPlatformFactory.java
index 771fb31..c9f0740 100644
--- a/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/platform/xml/XMLPlatformFactory.java
+++ b/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/platform/xml/XMLPlatformFactory.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 1998, 2020 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1998, 2021 Oracle and/or its affiliates. All rights reserved.
  * Copyright (c) 1998, 2018 IBM Corporation. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
@@ -39,7 +39,6 @@
      * INTERNAL:
      * Return the singleton instance of XMLPlatformContext.
      * @return the the singleton instance of XMLPlatformContext.
-     * @throws XMLPlatformException
      */
     public static XMLPlatformFactory getInstance() throws XMLPlatformException {
         if (null == instance) {
@@ -52,7 +51,6 @@
      * INTERNAL:
      * Return the implementation class for the XMLPlatform.
      * @return the implementation class for the XMLPlatform.
-     * @throws XMLPlatformException
      */
     public Class getXMLPlatformClass() throws XMLPlatformException {
         if (null != xmlPlatformClass) {
@@ -102,7 +100,6 @@
      * INTERNAL:
      * Return the XMLPlatform based on the toplink.xml.platform System property.
      * @return an instance of XMLPlatform
-     * @throws XMLPlatformException
      */
     public XMLPlatform getXMLPlatform() throws XMLPlatformException {
         try {
diff --git a/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/platform/xml/jaxp/JAXPPlatform.java b/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/platform/xml/jaxp/JAXPPlatform.java
index 3747886..f54aa34 100644
--- a/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/platform/xml/jaxp/JAXPPlatform.java
+++ b/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/platform/xml/jaxp/JAXPPlatform.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 1998, 2020 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1998, 2021 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0 which is available at
@@ -96,7 +96,6 @@
      *         namespaceResolver used to resolve namespace prefixes
      *         to the corresponding namespace URI
      * @return the XPath result
-     * @throws XMLPlatformException
      */
     @Override
     public NodeList selectNodesAdvanced(Node contextNode, String xPathString, XMLNamespaceResolver xmlNamespaceResolver) throws XMLPlatformException {
@@ -115,11 +114,6 @@
 
     /**
      * Execute advanced XPath statements that are required for TopLink EIS.
-     * @param contextNode
-     * @param xPathString
-     * @param xmlNamespaceResolver
-     * @return
-     * @throws XMLPlatformException
      */
     @Override
     public Node selectSingleNodeAdvanced(Node contextNode, String xPathString, XMLNamespaceResolver xmlNamespaceResolver) throws XMLPlatformException {
diff --git a/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/queries/AttributeGroup.java b/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/queries/AttributeGroup.java
index 5f4833b..f53b24c 100644
--- a/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/queries/AttributeGroup.java
+++ b/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/queries/AttributeGroup.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2011, 2019 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2011, 2021 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0 which is available at
@@ -59,8 +59,6 @@
     /**
      * INTERNAL:
      * This constructer is to only be used by EclipseLink internally
-     * @param name
-     * @param type
      */
     public AttributeGroup(String name, Class type, boolean isValidated) {
         this(name);
@@ -159,8 +157,6 @@
     /**
      * INTERNAL:
      *    This method is used internally when converting to a copy group.
-     * @param cloneMap
-     * @return
      */
 
     public FetchGroup toFetchGroup(Map<AttributeGroup, FetchGroup> cloneMap){
@@ -202,7 +198,6 @@
     /**
      * INTERNAL:
      *    This method is used internally when converting to a copy group.
-     * @return
      */
 
     @Override
@@ -224,8 +219,6 @@
         /**
          * INTERNAL:
          *    This method is used internally when converting to a copy group.
-         * @param cloneMap
-         * @return
          */
 
         public CopyGroup toCopyGroup(Map<AttributeGroup, CopyGroup> cloneMap, Map copies){
diff --git a/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/queries/ColumnResult.java b/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/queries/ColumnResult.java
index fe2f283..b1b528e 100644
--- a/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/queries/ColumnResult.java
+++ b/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/queries/ColumnResult.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 1998, 2020 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1998, 2021 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0 which is available at
@@ -55,7 +55,6 @@
      * Convert all the class-name-based settings in this query to actual
      * class-based settings. This method is used when converting a project that
      * has been built with class names to a project with classes.
-     * @param classLoader
      */
     @Override
     public void convertClassNamesToClasses(ClassLoader classLoader){
diff --git a/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/queries/ConstructorResult.java b/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/queries/ConstructorResult.java
index 6a4405b..359013f 100644
--- a/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/queries/ConstructorResult.java
+++ b/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/queries/ConstructorResult.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2012, 2019 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2012, 2021 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0 which is available at
@@ -102,7 +102,6 @@
      * Convert all the class-name-based settings in this query to actual class-based
      * settings. This method is used when converting a project that has been built
      * with class names to a project with classes.
-     * @param classLoader
      */
     @Override
     public void convertClassNamesToClasses(ClassLoader classLoader){
diff --git a/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/queries/DatabaseQuery.java b/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/queries/DatabaseQuery.java
index 5b95dfe..0584e11 100644
--- a/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/queries/DatabaseQuery.java
+++ b/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/queries/DatabaseQuery.java
@@ -736,7 +736,6 @@
      * actual class-based settings This method is implemented by subclasses as
      * necessary.
      *
-     * @param classLoader
      */
     public void convertClassNamesToClasses(ClassLoader classLoader) {
         // note: normally we would fix the argument types here, but they are
@@ -957,7 +956,6 @@
     /**
      * INTERNAL:
      * Used to calculate parameter types in JPQL
-     * @return
      */
     public List<ParameterType> getArgumentParameterTypes(){
         if (argumentParameterTypes == null){
diff --git a/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/queries/DeleteObjectQuery.java b/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/queries/DeleteObjectQuery.java
index 51e4428..2a65e35 100644
--- a/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/queries/DeleteObjectQuery.java
+++ b/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/queries/DeleteObjectQuery.java
@@ -104,11 +104,6 @@
      * INTERNAL:
      * Code was moved from UnitOfWork.internalExecuteQuery
      *
-     * @param unitOfWork
-     * @param translationRow
-     * @return
-     * @throws org.eclipse.persistence.exceptions.DatabaseException
-     * @throws org.eclipse.persistence.exceptions.OptimisticLockException
      */
     @Override
     protected Object executeInUnitOfWorkObjectLevelModifyQuery(UnitOfWorkImpl unitOfWork, AbstractRecord translationRow) throws DatabaseException, OptimisticLockException {
diff --git a/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/queries/DoesExistQuery.java b/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/queries/DoesExistQuery.java
index db7e48e..d82646f 100644
--- a/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/queries/DoesExistQuery.java
+++ b/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/queries/DoesExistQuery.java
@@ -427,7 +427,6 @@
      * INTERNAL:
      * Sets checkCacheFirst flag.  If true, existence check will first go to the
      * cache.  It will then check other options if it is not found in the cache
-     * @param checkCacheFirst
      */
     public void setCheckCacheFirst(boolean checkCacheFirst){
         this.checkCacheFirst = checkCacheFirst;
@@ -444,7 +443,6 @@
      * Sets checkDatabaseIfInvalid flag.  If true, query will go to the
      * database when it finds the object in the cache and it is invalid.
      * This is only valid when it checks the cache, and is true by default
-     * @param checkCacheFirst
      */
     public void setCheckDatabaseIfInvalid(boolean checkCacheFirst){
         this.checkCacheFirst = checkCacheFirst;
diff --git a/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/queries/EntityResult.java b/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/queries/EntityResult.java
index 7f93a2f..0616dba 100644
--- a/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/queries/EntityResult.java
+++ b/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/queries/EntityResult.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 1998, 2019 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1998, 2021 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0 which is available at
@@ -89,7 +89,6 @@
      * Convert all the class-name-based settings in this query to actual class-based
      * settings. This method is used when converting a project that has been built
      * with class names to a project with classes.
-     * @param classLoader
      */
     @Override
     public void convertClassNamesToClasses(ClassLoader classLoader){
diff --git a/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/queries/FetchGroup.java b/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/queries/FetchGroup.java
index d674536..a734025 100644
--- a/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/queries/FetchGroup.java
+++ b/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/queries/FetchGroup.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 1998, 2020 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1998, 2021 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0 which is available at
@@ -213,7 +213,7 @@
      * populated. All subsequent attributes added to this group that create a
      * nested group will have this value applied to them.
      *
-     * @see #setShouldLoadAll(boolean) to configure {@link #shouldLoad()} on
+     * @see #setShouldLoadAll(boolean) to configure #shouldLoad() on
      *      nested groups
      */
     public void setShouldLoad(boolean shouldLoad) {
@@ -228,7 +228,7 @@
     /**
      * passes should load to subclasses.
      *
-     * @see #setShouldLoadAll(boolean) to configure {@link #shouldLoad()} on
+     * @see #setShouldLoadAll(boolean) to configure #shouldLoad() on
      *      nested groups
      */
     protected void setSubclassShouldLoad(boolean shouldLoad) {
diff --git a/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/queries/ObjectBuildingQuery.java b/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/queries/ObjectBuildingQuery.java
index 5f63d61..bf98c07 100644
--- a/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/queries/ObjectBuildingQuery.java
+++ b/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/queries/ObjectBuildingQuery.java
@@ -139,7 +139,6 @@
      * Convert all the class-name-based settings in this query to actual class-based
      * settings. This method is used when converting a project that has been built
      * with class names to a project with classes.
-     * @param classLoader
      */
     @Override
     public void convertClassNamesToClasses(ClassLoader classLoader){
@@ -324,8 +323,6 @@
      * Return the primary key stored in this query if there is one
      * This is overridden by subclasses that actually hold a primary key
      *
-     * @return
-     *
      * @see ReadObjectQuery
      */
     protected Object getQueryPrimaryKey(){
diff --git a/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/queries/ReportQuery.java b/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/queries/ReportQuery.java
index 91ed4f1..ec2432e 100644
--- a/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/queries/ReportQuery.java
+++ b/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/queries/ReportQuery.java
@@ -594,7 +594,6 @@
 
     /**
      * PUBLIC: Call a constructor for the given class with the results of this query.
-     * @param constructorClass
      */
     public ConstructorReportItem beginAddingConstructorArguments(Class constructorClass){
         ConstructorReportItem citem = new ConstructorReportItem(constructorClass.getName());
@@ -608,7 +607,6 @@
     }
     /**
      * PUBLIC: Call a constructor for the given class with the results of this query.
-     * @param constructorClass
      * @param constructorArgTypes - sets the argument types to be passed to the constructor.
      */
     public ConstructorReportItem beginAddingConstructorArguments(Class constructorClass, Class[] constructorArgTypes){
@@ -633,7 +631,6 @@
     /**
      * INTERNAL:
      * Construct a result from a row. Either return a ReportQueryResult or just the attribute.
-     * @param row
      * @param toManyJoinData All rows fetched by query.  It is required to be not null.
      */
     public Object buildObject(AbstractRecord row, Vector toManyJoinData) {
diff --git a/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/queries/ResultSetMappingQuery.java b/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/queries/ResultSetMappingQuery.java
index b6a7151..4d22b19 100644
--- a/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/queries/ResultSetMappingQuery.java
+++ b/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/queries/ResultSetMappingQuery.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 1998, 2019 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1998, 2021 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0 which is available at
@@ -184,7 +184,6 @@
     /**
      * PUBLIC:
      * This will be the SQLResult
-     * @param names
      */
     public void setSQLResultSetMappingNames(List<String> names) {
         if (names.isEmpty()) {
diff --git a/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/queries/SQLResult.java b/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/queries/SQLResult.java
index cd5dbd6..3c6176b 100644
--- a/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/queries/SQLResult.java
+++ b/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/queries/SQLResult.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 1998, 2019 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1998, 2021 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0 which is available at
@@ -39,7 +39,6 @@
      * Convert all the class-name-based settings in this SQLResult to actual class-based
      * settings. This method is used when converting a project that has been built
      * with class names to a project with classes.
-     * @param classLoader
      */
     public void convertClassNamesToClasses(ClassLoader classLoader){}
 
diff --git a/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/queries/SQLResultSetMapping.java b/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/queries/SQLResultSetMapping.java
index bcbd05c..83d88f7 100644
--- a/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/queries/SQLResultSetMapping.java
+++ b/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/queries/SQLResultSetMapping.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 1998, 2019 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1998, 2021 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0 which is available at
@@ -67,7 +67,6 @@
      * Convert all the class-name-based settings in this SQLResultSetMapping to actual class-based
      * settings. This method is used when converting a project that has been built
      * with class names to a project with classes.
-     * @param classLoader
      */
     public void convertClassNamesToClasses(ClassLoader classLoader){
         Iterator<SQLResult> iterator = getResults().iterator();
diff --git a/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/services/RuntimeServices.java b/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/services/RuntimeServices.java
index 7be75e0..e5d9850 100644
--- a/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/services/RuntimeServices.java
+++ b/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/services/RuntimeServices.java
@@ -424,7 +424,6 @@
 
     /**
      * Return the DMS sensor weight
-     * @return
      */
     public int getProfileWeight() {
         if (getSession().isInProfile()) {
@@ -700,7 +699,6 @@
       * Return whether this session is an EclipseLink JPA session.
       * The absence of this function or a value of false will signify that the session
       * belongs to a provider other than EclipseLink.
-      * @return
       */
      public boolean isJPASession() {
          return true;
@@ -1342,7 +1340,6 @@
       * @param tdata the TabularData to be converted
       * @param names the order of the columns
       * @return a two-dimensional array
-      * @throws Exception
       */
      private Object[][] tabularDataTo2DArray(TabularData tdata, String[] names) throws Exception {
          if(tdata==null){
diff --git a/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/services/mbean/MBeanRuntimeServicesMBean.java b/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/services/mbean/MBeanRuntimeServicesMBean.java
index 9d320ce..39abcf0 100644
--- a/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/services/mbean/MBeanRuntimeServicesMBean.java
+++ b/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/services/mbean/MBeanRuntimeServicesMBean.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 1998, 2019 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1998, 2021 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0 which is available at
@@ -53,7 +53,6 @@
 
     /**
      *     This method is used to determine if we should be logging when using the Performance Profiler
-     * @return
      */
     boolean getShouldLogPerformanceProfiler();
 
@@ -154,7 +153,6 @@
 
     /**
      * Return the DMS sensor weight
-     * @return
      */
     int getProfileWeight();
 
@@ -194,7 +192,6 @@
      * Return whether this session is an EclipseLink JPA session.
      * The absence of this function or a value of false will signify that the session
      * belongs to a provider other than EclipseLink.
-     * @return
      */
     boolean isJPASession();
 
diff --git a/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/sessions/DatabaseLogin.java b/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/sessions/DatabaseLogin.java
index 1ff7438..f5f26d8 100644
--- a/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/sessions/DatabaseLogin.java
+++ b/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/sessions/DatabaseLogin.java
@@ -124,7 +124,6 @@
      * ADVANCED:
      * Add a StructConverter
      * @see org.eclipse.persistence.platform.database.converters.StructConverter
-     * @param converter
      */
     public void addStructConverter(StructConverter converter){
         getPlatform().addStructConverter(converter);
diff --git a/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/sessions/DatabaseRecord.java b/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/sessions/DatabaseRecord.java
index da57e0a..3cec1a9 100644
--- a/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/sessions/DatabaseRecord.java
+++ b/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/sessions/DatabaseRecord.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 1998, 2020 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1998, 2021 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0 which is available at
@@ -46,7 +46,6 @@
     /**
      * INTERNAL:
      * Returns a record of the given initial capacity.
-     * @param initialCapacity
      */
     public DatabaseRecord(int initialCapacity) {
         super(initialCapacity);
diff --git a/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/sessions/IdentityMapAccessor.java b/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/sessions/IdentityMapAccessor.java
index b79a5a0..c581506 100644
--- a/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/sessions/IdentityMapAccessor.java
+++ b/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/sessions/IdentityMapAccessor.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 1998, 2019 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1998, 2021 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0 which is available at
@@ -105,7 +105,6 @@
      * {@link org.eclipse.persistence.queries.InMemoryQueryIndirectionPolicy InMemoryQueryIndirectionPolicy}
      * @param shouldReturnInvalidatedObjects boolean - true if only invalid Objects should be returned
      * @return Vector of Objects
-     * @throws QueryException
      */
     Vector getAllFromIdentityMap(Expression selectionCriteria, Class theClass, Record translationRow, InMemoryQueryIndirectionPolicy valueHolderPolicy, boolean shouldReturnInvalidatedObjects) throws QueryException;
 
@@ -122,7 +121,6 @@
      * {@link org.eclipse.persistence.queries.InMemoryQueryIndirectionPolicy InMemoryQueryIndirectionPolicy}
      * @param shouldReturnInvalidatedObjects boolean - true if only invalid Objects should be returned
      * @return Vector of Objects
-     * @throws QueryException
      */
     Vector getAllFromIdentityMap(Expression selectionCriteria, Class theClass, Record translationRow, int valueHolderPolicy, boolean shouldReturnInvalidatedObjects) throws QueryException;
 
@@ -136,7 +134,6 @@
      * @param valueHolderPolicy  see
      * {@link org.eclipse.persistence.queries.InMemoryQueryIndirectionPolicy InMemoryQueryIndirectionPolicy}
      * @return Vector of Objects with type theClass and matching the selectionCriteria
-     * @throws QueryException
      */
     Vector getAllFromIdentityMap(Expression selectionCriteria, Class theClass, Record translationRow, InMemoryQueryIndirectionPolicy valueHolderPolicy) throws QueryException;
 
@@ -150,7 +147,6 @@
      * @param valueHolderPolicy  see
      * {@link org.eclipse.persistence.queries.InMemoryQueryIndirectionPolicy InMemoryQueryIndirectionPolicy}
      * @return Vector of Objects with type theClass and matching the selectionCriteria
-     * @throws QueryException
      */
     Vector getAllFromIdentityMap(Expression selectionCriteria, Class theClass, Record translationRow, int valueHolderPolicy) throws QueryException;
 
@@ -212,7 +208,6 @@
      * @param theClass Class
      * @param translationRow Record
      * @return Object from identity map, may be null
-     * @throws QueryException
      */
     Object getFromIdentityMap(Expression selectionCriteria, Class theClass, Record translationRow) throws QueryException;
 
@@ -228,7 +223,6 @@
      * @param valueHolderPolicy
      * see {@link org.eclipse.persistence.queries.InMemoryQueryIndirectionPolicy InMemoryQueryIndirectionPolicy}
      * @return Object from identity map, may be null
-     * @throws QueryException
      */
     Object getFromIdentityMap(Expression selectionCriteria, Class theClass, Record translationRow, InMemoryQueryIndirectionPolicy valueHolderPolicy) throws QueryException;
 
@@ -244,7 +238,6 @@
      * @param valueHolderPolicy
      * see {@link org.eclipse.persistence.queries.InMemoryQueryIndirectionPolicy InMemoryQueryIndirectionPolicy}
      * @return Object from identity map, may be null
-     * @throws QueryException
      */
     Object getFromIdentityMap(Expression selectionCriteria, Class theClass, Record translationRow, int valueHolderPolicy) throws QueryException;
 
diff --git a/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/sessions/JNDIConnector.java b/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/sessions/JNDIConnector.java
index 0665531..95fd879 100644
--- a/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/sessions/JNDIConnector.java
+++ b/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/sessions/JNDIConnector.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 1998, 2019 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1998, 2021 Oracle and/or its affiliates. All rights reserved.
  * Copyright (c) 1998, 2018 IBM Corporation and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
@@ -222,7 +222,6 @@
     /**
      * @deprecated As of 2.6.0, replaced by configuration provided by
      *             {@link org.eclipse.persistence.platform.server.ServerPlatform#getJNDIConnectorLookupType()}
-     * @param lookupType
      */
     @Deprecated
     public void setLookupType(int lookupType) {
diff --git a/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/sessions/Project.java b/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/sessions/Project.java
index cf59736..8cd122f 100644
--- a/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/sessions/Project.java
+++ b/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/sessions/Project.java
@@ -369,7 +369,6 @@
     }
     /**
      * INTERNAL:
-     * @param queries
      */
     public void setQueries(List<DatabaseQuery> queries) {
         this.queries = queries;
@@ -984,7 +983,6 @@
      * INTERNAL:
      * Return whether this project has a descriptor that is both Isolated and
      * has a cache isolation level other than ISOLATE_CACHE_ALWAYS
-     * @return
      */
     public boolean hasIsolatedCacheClassWithoutUOWIsolation(){
         // checked cached boolean to avoid iteration
@@ -1451,7 +1449,6 @@
     /**
      * INTERNAL:
      * Return whether there any mappings that are mapped superclasses.
-     * @return
      * @since EclipseLink 1.2 for the JPA 2.0 Reference Implementation
      */
     public boolean hasMappedSuperclasses() {
@@ -1461,8 +1458,6 @@
     /**
      * INTERNAL:
      * Return whether the given class is mapped as superclass.
-     * @param className
-     * @return
      * @since EclipseLink 2.3 for the JPA 2.0 Reference Implementation
      */
     public boolean hasMappedSuperclass(String className) {
diff --git a/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/sessions/changesets/ObjectChangeSet.java b/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/sessions/changesets/ObjectChangeSet.java
index d2a5e29..beca072 100644
--- a/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/sessions/changesets/ObjectChangeSet.java
+++ b/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/sessions/changesets/ObjectChangeSet.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 1998, 2019 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1998, 2021 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0 which is available at
@@ -113,7 +113,6 @@
     /**
      * ADVANCED
      * Returns true if this ObjectChangeSet should be recalculated after changes in event
-     * @return
      */
     boolean shouldRecalculateAfterUpdateEvent();
 
diff --git a/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/sessions/coordination/jms/JMSPublishingHelper.java b/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/sessions/coordination/jms/JMSPublishingHelper.java
index bd23257..5046131 100644
--- a/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/sessions/coordination/jms/JMSPublishingHelper.java
+++ b/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/sessions/coordination/jms/JMSPublishingHelper.java
@@ -36,8 +36,6 @@
      * Processes the received RCM messaged from a JMS provider for cache coordination.
      * This will use the local connection from the configured TransportManager from the session's RemoteCommandManager.
      *
-     * @param message
-     * @param session
      *
      *
      */
diff --git a/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/sessions/coordination/jms/JMSPublishingTransportManager.java b/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/sessions/coordination/jms/JMSPublishingTransportManager.java
index 81f5567..1d5e12e 100644
--- a/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/sessions/coordination/jms/JMSPublishingTransportManager.java
+++ b/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/sessions/coordination/jms/JMSPublishingTransportManager.java
@@ -253,7 +253,6 @@
      *  every executeCommand call.  These objects can potentially used concurrently, which the JMS spec does not force
      *  providers to support.
      *
-     *  @param reuseJMSTopicPublisher
      */
     public void setShouldReuseJMSTopicPublisher(boolean reuseJMSTopicPublisher){
         this.reuseJMSTopicPublisher = reuseJMSTopicPublisher;
diff --git a/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/sessions/factories/XMLProjectReader.java b/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/sessions/factories/XMLProjectReader.java
index 734f755..319e434 100644
--- a/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/sessions/factories/XMLProjectReader.java
+++ b/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/sessions/factories/XMLProjectReader.java
@@ -274,10 +274,6 @@
     /**
      * Read a project in the format of an ObjectPersistenceRuntimeXMLProject.
      * This could include a TopLink 11.1.1 project or a TopLink 10.1.3 project
-     * @param document
-     * @param classLoader
-     * @param opmProject
-     * @return
      */
     public static Project readObjectPersistenceRuntimeFormat(Document document, ClassLoader classLoader, Project opmProject){
         XMLLogin xmlLogin = new XMLLogin();
diff --git a/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/sessions/interceptors/CacheInterceptor.java b/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/sessions/interceptors/CacheInterceptor.java
index 66d14a8..efdcef5 100644
--- a/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/sessions/interceptors/CacheInterceptor.java
+++ b/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/sessions/interceptors/CacheInterceptor.java
@@ -187,7 +187,6 @@
      * @param pkList List of Entity PKs to extract from the cache
      * @param descriptor Descriptor type to be retrieved.
      * @return Map of Entity PKs associated to the Entities that were retrieved
-     * @throws QueryException
      */
     @Override
     public abstract Map<Object, Object> getAllFromIdentityMapWithEntityPK(Object[] pkList, ClassDescriptor descriptor, AbstractSession session);
@@ -199,7 +198,6 @@
      * @param pkList List of Entity PKs to extract from the cache
      * @param descriptor Descriptor type to be retrieved.
      * @return Map of Entity PKs associated to the Entities that were retrieved
-     * @throws QueryException
      */
     @Override
     public abstract Map<Object, CacheKey> getAllCacheKeysFromIdentityMapWithEntityPK(Object[] pkList, ClassDescriptor descriptor, AbstractSession session);
diff --git a/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/sessions/interceptors/CacheKeyInterceptor.java b/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/sessions/interceptors/CacheKeyInterceptor.java
index 2edb126..14b558f 100644
--- a/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/sessions/interceptors/CacheKeyInterceptor.java
+++ b/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/sessions/interceptors/CacheKeyInterceptor.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 1998, 2020 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1998, 2021 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0 which is available at
@@ -173,7 +173,6 @@
 
         /**
          * If a Wrapper subclasses this CacheKey this method will be used to unwrap the cache key.
-         * @return
          */
         @Override
         public CacheKey getWrappedCacheKey(){
diff --git a/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/sessions/server/ClientSession.java b/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/sessions/server/ClientSession.java
index 573b891..aec4918 100644
--- a/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/sessions/server/ClientSession.java
+++ b/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/sessions/server/ClientSession.java
@@ -344,7 +344,6 @@
     /**
      * INTERNAL:
      * Release (if required) connection after call.
-     * @param query
      */
     @Override
     public void releaseConnectionAfterCall(DatabaseQuery query) {
diff --git a/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/sessions/server/ConnectionPool.java b/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/sessions/server/ConnectionPool.java
index 670b48b..c38d94f 100644
--- a/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/sessions/server/ConnectionPool.java
+++ b/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/sessions/server/ConnectionPool.java
@@ -376,7 +376,6 @@
     /**
      *  INTERNAL:
      *  Set this list of connections available
-     *  @param connectionsAvailable
      */
     protected void setConnectionsAvailable(Vector connectionsAvailable) {
         this.connectionsAvailable = connectionsAvailable;
@@ -385,7 +384,6 @@
     /**
      *  INTERNAL:
      *  Set the list of connections being used.
-     *  @param connectionsUsed
      */
     protected void setConnectionsUsed(Vector connectionsUsed) {
         this.connectionsUsed = connectionsUsed;
@@ -464,7 +462,6 @@
 
     /**
      *  Set the ServerSession that owns this connection pool
-     *  @param owner
      */
     protected void setOwner(ServerSession owner) {
         this.owner = owner;
diff --git a/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/sessions/server/ExternalConnectionPool.java b/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/sessions/server/ExternalConnectionPool.java
index 54e897a..ae96053 100644
--- a/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/sessions/server/ExternalConnectionPool.java
+++ b/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/sessions/server/ExternalConnectionPool.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 1998, 2020 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1998, 2021 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0 which is available at
@@ -120,7 +120,6 @@
 
     /**
      *  Set the currently cached connection to the external connection pool.
-     *  @param cachedConnection
      */
     protected void setCachedConnection(Accessor cachedConnection) {
         this.cachedConnection = cachedConnection;
diff --git a/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/sessions/server/Server.java b/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/sessions/server/Server.java
index 7e70ced..18d1317 100644
--- a/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/sessions/server/Server.java
+++ b/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/sessions/server/Server.java
@@ -233,7 +233,6 @@
      * <br>
      * Use this read connection pool to take advantage of concurrent reading.
      *
-     * @param minNumberOfConnections
      * @param maxNumberOfConnections As multiple readers can use the same connection
      * concurrently fewer connections are needed.
      * @see #getReadConnectionPool
diff --git a/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/sessions/server/ServerSession.java b/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/sessions/server/ServerSession.java
index dce5538..f496e86 100644
--- a/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/sessions/server/ServerSession.java
+++ b/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/sessions/server/ServerSession.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 1998, 2019 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1998, 2021 Oracle and/or its affiliates. All rights reserved.
  * Copyright (c) 1998, 2018 IBM Corporation and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
@@ -641,7 +641,6 @@
     /**
      * INTERNAL:
      * Release (if required) connection after call.
-     * @param query
      */
     @Override
     public void releaseConnectionAfterCall(DatabaseQuery query) {
@@ -958,7 +957,6 @@
     /**
      * INTERNAL:
      * Set the current number of connections being used that are not from a connection pool.
-     * @param numberOfNonPooledConnectionsUsed
      */
     public void setNumberOfNonPooledConnectionsUsed(int numberOfNonPooledConnectionsUsed) {
         this.numberOfNonPooledConnectionsUsed = numberOfNonPooledConnectionsUsed;
diff --git a/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/tools/schemaframework/DatabaseObjectDefinition.java b/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/tools/schemaframework/DatabaseObjectDefinition.java
index 4fbae15..e2b4037 100644
--- a/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/tools/schemaframework/DatabaseObjectDefinition.java
+++ b/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/tools/schemaframework/DatabaseObjectDefinition.java
@@ -326,16 +326,12 @@
 
     /**
      * Execute any statements required after the creation of the object
-     * @param session
-     * @param createSchemaWriter
      */
     public void postCreateObject(AbstractSession session, Writer createSchemaWriter, boolean createSQLFiles){
     }
 
     /**
      * Execute any statements required before the deletion of the object
-     * @param session
-     * @param dropSchemaWriter
      */
     public void preDropObject(AbstractSession session, Writer dropSchemaWriter, boolean createSQLFiles){
     }
diff --git a/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/tools/schemaframework/DynamicSchemaManager.java b/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/tools/schemaframework/DynamicSchemaManager.java
index a534471..72a7efa 100644
--- a/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/tools/schemaframework/DynamicSchemaManager.java
+++ b/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/tools/schemaframework/DynamicSchemaManager.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 1998, 2020 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1998, 2021 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0 which is available at
@@ -51,7 +51,6 @@
      * TODO: At present this method will create all tables that do not exist. It
      * needs to be made specific to the entityTypes.
      *
-     * @param entityTypes
      */
     public void createTables(DynamicType... entityTypes) {
         createTables(true, entityTypes);
diff --git a/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/tools/schemaframework/SchemaManager.java b/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/tools/schemaframework/SchemaManager.java
index 0f68f95..0118de9 100644
--- a/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/tools/schemaframework/SchemaManager.java
+++ b/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/tools/schemaframework/SchemaManager.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 1998, 2019 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1998, 2021 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0 which is available at
@@ -313,7 +313,6 @@
      * @param createSequences - true if the sequence definition should be created,
      *        false if it should be dropped.
      * @param replace - true if table definitions and sequence definitions should be replaced.
-     * @throws EclipseLinkException
      */
     protected void processSequenceDefinition(SequenceDefinition definition, final boolean createTables, final boolean createSequences, final boolean replace, HashSet<String> createdTableNames, HashSet<String> droppedTableNames) throws EclipseLinkException {
         try {
diff --git a/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/tools/schemaframework/TableCreator.java b/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/tools/schemaframework/TableCreator.java
index 9e87fc5..50af220 100644
--- a/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/tools/schemaframework/TableCreator.java
+++ b/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/tools/schemaframework/TableCreator.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 1998, 2020 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1998, 2021 Oracle and/or its affiliates. All rights reserved.
  * Copyright (c) 2020 IBM Corporation. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
@@ -409,7 +409,6 @@
 
     /**
      * This returns the Sequence Table's qualified name, without delimiting.
-     * @param session
      * @return the qualified table name
      */
     protected String getSequenceTableName(Session session) {
diff --git a/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/tools/schemaframework/TableDefinition.java b/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/tools/schemaframework/TableDefinition.java
index 40b1632..82d6dfc 100644
--- a/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/tools/schemaframework/TableDefinition.java
+++ b/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/tools/schemaframework/TableDefinition.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 1998, 2019 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1998, 2021 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0 which is available at
@@ -1309,8 +1309,6 @@
 
     /**
      * Execute any statements required after the creation of the object
-     * @param session
-     * @param createSchemaWriter
      */
     @Override
     public void postCreateObject(AbstractSession session, Writer createSchemaWriter, boolean createSQLFiles){
@@ -1321,8 +1319,6 @@
 
     /**
      * Execute any statements required before the deletion of the object
-     * @param session
-     * @param dropSchemaWriter
      */
     @Override
     public void preDropObject(AbstractSession session, Writer dropSchemaWriter, boolean createSQLFiles) {
diff --git a/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/tools/schemaframework/TableSequenceDefinition.java b/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/tools/schemaframework/TableSequenceDefinition.java
index 3c4bacb..0934517 100644
--- a/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/tools/schemaframework/TableSequenceDefinition.java
+++ b/foundation/org.eclipse.persistence.core/src/main/java/org/eclipse/persistence/tools/schemaframework/TableSequenceDefinition.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 1998, 2020 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1998, 2021 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0 which is available at
@@ -237,8 +237,6 @@
 
     /**
      * Execute any statements required before the deletion of the object
-     * @param session
-     * @param dropSchemaWriter
      */
     @Override
     public void preDropObject(AbstractSession session, Writer dropSchemaWriter, boolean createSQLFiles) {
diff --git a/foundation/org.eclipse.persistence.oracle.test/src/it/java/org/eclipse/persistence/testing/tests/OracleTestModel.java b/foundation/org.eclipse.persistence.oracle.test/src/it/java/org/eclipse/persistence/testing/tests/OracleTestModel.java
index f3a3fd1..5bda614 100644
--- a/foundation/org.eclipse.persistence.oracle.test/src/it/java/org/eclipse/persistence/testing/tests/OracleTestModel.java
+++ b/foundation/org.eclipse.persistence.oracle.test/src/it/java/org/eclipse/persistence/testing/tests/OracleTestModel.java
@@ -64,7 +64,7 @@
 
         for (int index = 0; index < tests.size(); ++index) {
             try {
-                addTest((TestModel)Class.forName((String)tests.get(index)).newInstance());
+                addTest((TestModel)Class.forName((String)tests.get(index)).getConstructor().newInstance());
             } catch (Throwable exception) {
                 System.out.println("Failed to set up " + tests.get(index) + " \n" + exception);
             }
diff --git a/foundation/org.eclipse.persistence.oracle.test/src/it/java/org/eclipse/persistence/testing/tests/conversion/ConversionManagerOracleTestModel.java b/foundation/org.eclipse.persistence.oracle.test/src/it/java/org/eclipse/persistence/testing/tests/conversion/ConversionManagerOracleTestModel.java
index 0c4aad7..e521a01 100644
--- a/foundation/org.eclipse.persistence.oracle.test/src/it/java/org/eclipse/persistence/testing/tests/conversion/ConversionManagerOracleTestModel.java
+++ b/foundation/org.eclipse.persistence.oracle.test/src/it/java/org/eclipse/persistence/testing/tests/conversion/ConversionManagerOracleTestModel.java
@@ -41,19 +41,19 @@
 
         try{
             Class testCaseClass = Class.forName("org.eclipse.persistence.testing.tests.conversion.DataTypesConvertedFromAClassTest");
-            junit.framework.Test testCase = (junit.framework.Test)testCaseClass.newInstance();
+            junit.framework.Test testCase = (junit.framework.Test)testCaseClass.getConstructor().newInstance();
             suite.addTest(testCase);
 
             testCaseClass = Class.forName("org.eclipse.persistence.testing.tests.conversion.DataTypesConvertedToAClassTest");
-            testCase = (junit.framework.Test)testCaseClass.newInstance();
+            testCase = (junit.framework.Test)testCaseClass.getConstructor().newInstance();
             suite.addTest(testCase);
 
             testCaseClass = Class.forName("org.eclipse.persistence.testing.tests.conversion.DataTypesConvertedFromAClassForOracle9Test");
-            testCase = (junit.framework.Test)testCaseClass.newInstance();
+            testCase = (junit.framework.Test)testCaseClass.getConstructor().newInstance();
             suite.addTest(testCase);
 
             testCaseClass = Class.forName("org.eclipse.persistence.testing.tests.conversion.DataTypesConvertedToAClassForOracle9Test");
-            testCase = (junit.framework.Test)testCaseClass.newInstance();
+            testCase = (junit.framework.Test)testCaseClass.getConstructor().newInstance();
             suite.addTest(testCase);
         } catch (Exception e){
             getSession().logMessage("Unable to load Oracle-specific conversion tests.  This usually occurs when the tests were compiled " +
diff --git a/foundation/org.eclipse.persistence.oracle.test/src/it/java/org/eclipse/persistence/testing/tests/proxyauthentication/oci/ProxyAuthenticationOCITestModel.java b/foundation/org.eclipse.persistence.oracle.test/src/it/java/org/eclipse/persistence/testing/tests/proxyauthentication/oci/ProxyAuthenticationOCITestModel.java
index b520826..de5fe64 100644
--- a/foundation/org.eclipse.persistence.oracle.test/src/it/java/org/eclipse/persistence/testing/tests/proxyauthentication/oci/ProxyAuthenticationOCITestModel.java
+++ b/foundation/org.eclipse.persistence.oracle.test/src/it/java/org/eclipse/persistence/testing/tests/proxyauthentication/oci/ProxyAuthenticationOCITestModel.java
@@ -105,7 +105,7 @@
                 proxyTestHelper = (ProxyTestHelper)proxyTestHelperMap.get(proxyTestHelperClassName);
                 if (proxyTestHelper == null) {
                     try {
-                        proxyTestHelper = (ProxyTestHelper)Class.forName(proxyTestHelperClassName).newInstance();
+                        proxyTestHelper = (ProxyTestHelper)Class.forName(proxyTestHelperClassName).getConstructor().newInstance();
                     } catch (Exception ex) {
                         throw new TestProblemException("Failed to instantiate proxyTestHelperClass " + proxyTestHelperClassName, ex);
                     }
diff --git a/foundation/org.eclipse.persistence.oracle.test/src/it/java/org/eclipse/persistence/testing/tests/xdb/StoredFunctionXMLTypeTest.java b/foundation/org.eclipse.persistence.oracle.test/src/it/java/org/eclipse/persistence/testing/tests/xdb/StoredFunctionXMLTypeTest.java
index 9247514..18c2749 100644
--- a/foundation/org.eclipse.persistence.oracle.test/src/it/java/org/eclipse/persistence/testing/tests/xdb/StoredFunctionXMLTypeTest.java
+++ b/foundation/org.eclipse.persistence.oracle.test/src/it/java/org/eclipse/persistence/testing/tests/xdb/StoredFunctionXMLTypeTest.java
@@ -51,7 +51,7 @@
 
             String str;
             if (xmlResult instanceof OPAQUE) {
-                str = ((XMLTypeFactory)Class.forName("org.eclipse.persistence.internal.platform.database.oracle.xdb.XMLTypeFactoryImpl").newInstance()).getString((OPAQUE)xmlResult);
+                str = ((XMLTypeFactory)Class.forName("org.eclipse.persistence.internal.platform.database.oracle.xdb.XMLTypeFactoryImpl").getConstructor().newInstance()).getString((OPAQUE)xmlResult);
             } else {
                 str = JavaPlatform.getStringAndFreeSQLXML(xmlResult);
             }
diff --git a/jpa/eclipselink.jpa.test.jse/src/it/java/org/eclipse/persistence/jpa/compositeid/TestCompositeId.java b/jpa/eclipselink.jpa.test.jse/src/it/java/org/eclipse/persistence/jpa/compositeid/TestCompositeId.java
index 1874106..a7f98b5 100644
--- a/jpa/eclipselink.jpa.test.jse/src/it/java/org/eclipse/persistence/jpa/compositeid/TestCompositeId.java
+++ b/jpa/eclipselink.jpa.test.jse/src/it/java/org/eclipse/persistence/jpa/compositeid/TestCompositeId.java
@@ -1,4 +1,5 @@
-/********************************************************************************
+/*
+ * Copyright (c) 2021 Oracle and/or its affiliates. All rights reserved.
  * Copyright (c) 2018, 2021 IBM Corporation. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
@@ -8,12 +9,11 @@
  * http://www.eclipse.org/org/documents/edl-v10.php.
  *
  * SPDX-License-Identifier: EPL-2.0 OR BSD-3-Clause
- ******************************************************************************/
+ */
 
 // Contributors:
 //     07/09/2018-2.6 Jody Grassel
 //        - 536853: MapsID processing sets up to fail validation
-
 package org.eclipse.persistence.jpa.compositeid;
 
 import static org.junit.Assert.assertEquals;
diff --git a/jpa/eclipselink.jpa.test.jse/src/it/java/org/eclipse/persistence/jpa/compositeid/model/AttributeOverridePaths.java b/jpa/eclipselink.jpa.test.jse/src/it/java/org/eclipse/persistence/jpa/compositeid/model/AttributeOverridePaths.java
index 492052b..44e3d8e 100644
--- a/jpa/eclipselink.jpa.test.jse/src/it/java/org/eclipse/persistence/jpa/compositeid/model/AttributeOverridePaths.java
+++ b/jpa/eclipselink.jpa.test.jse/src/it/java/org/eclipse/persistence/jpa/compositeid/model/AttributeOverridePaths.java
@@ -1,5 +1,6 @@
-/********************************************************************************
- * Copyright (c) 2018, 2020 IBM Corporation. All rights reserved.
+/*
+ * Copyright (c) 2021 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2018, 2021 IBM Corporation. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0 which is available at
@@ -8,12 +9,11 @@
  * http://www.eclipse.org/org/documents/edl-v10.php.
  *
  * SPDX-License-Identifier: EPL-2.0 OR BSD-3-Clause
- ******************************************************************************/
+ */
 
 // Contributors:
 //     07/09/2018-2.6 Jody Grassel
 //        - 536853: MapsID processing sets up to fail validation
-
 package org.eclipse.persistence.jpa.compositeid.model;
 
 public final class AttributeOverridePaths {
diff --git a/jpa/eclipselink.jpa.test.jse/src/it/java/org/eclipse/persistence/jpa/compositeid/model/BTI.java b/jpa/eclipselink.jpa.test.jse/src/it/java/org/eclipse/persistence/jpa/compositeid/model/BTI.java
index 52da870..8d60496 100644
--- a/jpa/eclipselink.jpa.test.jse/src/it/java/org/eclipse/persistence/jpa/compositeid/model/BTI.java
+++ b/jpa/eclipselink.jpa.test.jse/src/it/java/org/eclipse/persistence/jpa/compositeid/model/BTI.java
@@ -1,5 +1,6 @@
-/********************************************************************************
- * Copyright (c) 2018, 2020 IBM Corporation. All rights reserved.
+/*
+ * Copyright (c) 2021 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2018, 2021 IBM Corporation. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0 which is available at
@@ -8,12 +9,11 @@
  * http://www.eclipse.org/org/documents/edl-v10.php.
  *
  * SPDX-License-Identifier: EPL-2.0 OR BSD-3-Clause
- ******************************************************************************/
+ */
 
 // Contributors:
 //     07/09/2018-2.6 Jody Grassel
 //        - 536853: MapsID processing sets up to fail validation
-
 package org.eclipse.persistence.jpa.compositeid.model;
 
 import java.io.Serializable;
diff --git a/jpa/eclipselink.jpa.test.jse/src/it/java/org/eclipse/persistence/jpa/compositeid/model/ClientId.java b/jpa/eclipselink.jpa.test.jse/src/it/java/org/eclipse/persistence/jpa/compositeid/model/ClientId.java
index caaf81d..ac2516a 100644
--- a/jpa/eclipselink.jpa.test.jse/src/it/java/org/eclipse/persistence/jpa/compositeid/model/ClientId.java
+++ b/jpa/eclipselink.jpa.test.jse/src/it/java/org/eclipse/persistence/jpa/compositeid/model/ClientId.java
@@ -1,5 +1,6 @@
-/********************************************************************************
- * Copyright (c) 2018, 2020 IBM Corporation. All rights reserved.
+/*
+ * Copyright (c) 2021 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2018, 2021 IBM Corporation. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0 which is available at
@@ -8,12 +9,11 @@
  * http://www.eclipse.org/org/documents/edl-v10.php.
  *
  * SPDX-License-Identifier: EPL-2.0 OR BSD-3-Clause
- ******************************************************************************/
+ */
 
 // Contributors:
 //     07/09/2018-2.6 Jody Grassel
 //        - 536853: MapsID processing sets up to fail validation
-
 package org.eclipse.persistence.jpa.compositeid.model;
 
 import java.io.Serializable;
diff --git a/jpa/eclipselink.jpa.test.jse/src/it/java/org/eclipse/persistence/jpa/compositeid/model/ColumnNames.java b/jpa/eclipselink.jpa.test.jse/src/it/java/org/eclipse/persistence/jpa/compositeid/model/ColumnNames.java
index 4ac2f44..96c0376 100644
--- a/jpa/eclipselink.jpa.test.jse/src/it/java/org/eclipse/persistence/jpa/compositeid/model/ColumnNames.java
+++ b/jpa/eclipselink.jpa.test.jse/src/it/java/org/eclipse/persistence/jpa/compositeid/model/ColumnNames.java
@@ -1,5 +1,6 @@
-/********************************************************************************
- * Copyright (c) 2018, 2020 IBM Corporation. All rights reserved.
+/*
+ * Copyright (c) 2021 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2018, 2021 IBM Corporation. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0 which is available at
@@ -8,12 +9,11 @@
  * http://www.eclipse.org/org/documents/edl-v10.php.
  *
  * SPDX-License-Identifier: EPL-2.0 OR BSD-3-Clause
- ******************************************************************************/
+ */
 
 // Contributors:
 //     07/09/2018-2.6 Jody Grassel
 //        - 536853: MapsID processing sets up to fail validation
-
 package org.eclipse.persistence.jpa.compositeid.model;
 
 public final class ColumnNames {
diff --git a/jpa/eclipselink.jpa.test.jse/src/it/java/org/eclipse/persistence/jpa/compositeid/model/CompA.java b/jpa/eclipselink.jpa.test.jse/src/it/java/org/eclipse/persistence/jpa/compositeid/model/CompA.java
index f702967..cd03903 100644
--- a/jpa/eclipselink.jpa.test.jse/src/it/java/org/eclipse/persistence/jpa/compositeid/model/CompA.java
+++ b/jpa/eclipselink.jpa.test.jse/src/it/java/org/eclipse/persistence/jpa/compositeid/model/CompA.java
@@ -1,5 +1,6 @@
-/********************************************************************************
- * Copyright (c) 2018, 2020 IBM Corporation. All rights reserved.
+/*
+ * Copyright (c) 2021 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2018, 2021 IBM Corporation. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0 which is available at
@@ -8,12 +9,11 @@
  * http://www.eclipse.org/org/documents/edl-v10.php.
  *
  * SPDX-License-Identifier: EPL-2.0 OR BSD-3-Clause
- ******************************************************************************/
+ */
 
 // Contributors:
 //     07/09/2018-2.6 Jody Grassel
 //        - 536853: MapsID processing sets up to fail validation
-
 package org.eclipse.persistence.jpa.compositeid.model;
 
 import java.util.Set;
diff --git a/jpa/eclipselink.jpa.test.jse/src/it/java/org/eclipse/persistence/jpa/compositeid/model/CompAId.java b/jpa/eclipselink.jpa.test.jse/src/it/java/org/eclipse/persistence/jpa/compositeid/model/CompAId.java
index 62c0ccb..cd1d7e4 100644
--- a/jpa/eclipselink.jpa.test.jse/src/it/java/org/eclipse/persistence/jpa/compositeid/model/CompAId.java
+++ b/jpa/eclipselink.jpa.test.jse/src/it/java/org/eclipse/persistence/jpa/compositeid/model/CompAId.java
@@ -1,5 +1,6 @@
-/********************************************************************************
- * Copyright (c) 2018, 2020 IBM Corporation. All rights reserved.
+/*
+ * Copyright (c) 2021 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2018, 2021 IBM Corporation. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0 which is available at
@@ -8,12 +9,11 @@
  * http://www.eclipse.org/org/documents/edl-v10.php.
  *
  * SPDX-License-Identifier: EPL-2.0 OR BSD-3-Clause
- ******************************************************************************/
+ */
 
 // Contributors:
 //     07/09/2018-2.6 Jody Grassel
 //        - 536853: MapsID processing sets up to fail validation
-
 package org.eclipse.persistence.jpa.compositeid.model;
 
 import java.io.Serializable;
diff --git a/jpa/eclipselink.jpa.test.jse/src/it/java/org/eclipse/persistence/jpa/compositeid/model/CompAIdentifier.java b/jpa/eclipselink.jpa.test.jse/src/it/java/org/eclipse/persistence/jpa/compositeid/model/CompAIdentifier.java
index 382804f..d4c706e 100644
--- a/jpa/eclipselink.jpa.test.jse/src/it/java/org/eclipse/persistence/jpa/compositeid/model/CompAIdentifier.java
+++ b/jpa/eclipselink.jpa.test.jse/src/it/java/org/eclipse/persistence/jpa/compositeid/model/CompAIdentifier.java
@@ -1,5 +1,6 @@
-/********************************************************************************
- * Copyright (c) 2018, 2020 IBM Corporation. All rights reserved.
+/*
+ * Copyright (c) 2021 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2018, 2021 IBM Corporation. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0 which is available at
@@ -8,12 +9,11 @@
  * http://www.eclipse.org/org/documents/edl-v10.php.
  *
  * SPDX-License-Identifier: EPL-2.0 OR BSD-3-Clause
- ******************************************************************************/
+ */
 
 // Contributors:
 //     07/09/2018-2.6 Jody Grassel
 //        - 536853: MapsID processing sets up to fail validation
-
 package org.eclipse.persistence.jpa.compositeid.model;
 
 import java.io.Serializable;
diff --git a/jpa/eclipselink.jpa.test.jse/src/it/java/org/eclipse/persistence/jpa/compositeid/model/CompB.java b/jpa/eclipselink.jpa.test.jse/src/it/java/org/eclipse/persistence/jpa/compositeid/model/CompB.java
index 0e40a8f..fffe1c3 100644
--- a/jpa/eclipselink.jpa.test.jse/src/it/java/org/eclipse/persistence/jpa/compositeid/model/CompB.java
+++ b/jpa/eclipselink.jpa.test.jse/src/it/java/org/eclipse/persistence/jpa/compositeid/model/CompB.java
@@ -1,5 +1,6 @@
-/********************************************************************************
- * Copyright (c) 2018, 2020 IBM Corporation. All rights reserved.
+/*
+ * Copyright (c) 2021 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2018, 2021 IBM Corporation. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0 which is available at
@@ -8,12 +9,11 @@
  * http://www.eclipse.org/org/documents/edl-v10.php.
  *
  * SPDX-License-Identifier: EPL-2.0 OR BSD-3-Clause
- ******************************************************************************/
+ */
 
 // Contributors:
 //     07/09/2018-2.6 Jody Grassel
 //        - 536853: MapsID processing sets up to fail validation
-
 package org.eclipse.persistence.jpa.compositeid.model;
 
 import jakarta.persistence.AttributeOverride;
diff --git a/jpa/eclipselink.jpa.test.jse/src/it/java/org/eclipse/persistence/jpa/compositeid/model/CompBId.java b/jpa/eclipselink.jpa.test.jse/src/it/java/org/eclipse/persistence/jpa/compositeid/model/CompBId.java
index aba4266..b598e3b 100644
--- a/jpa/eclipselink.jpa.test.jse/src/it/java/org/eclipse/persistence/jpa/compositeid/model/CompBId.java
+++ b/jpa/eclipselink.jpa.test.jse/src/it/java/org/eclipse/persistence/jpa/compositeid/model/CompBId.java
@@ -1,5 +1,6 @@
-/********************************************************************************
- * Copyright (c) 2018, 2020 IBM Corporation. All rights reserved.
+/*
+ * Copyright (c) 2021 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2018, 2021 IBM Corporation. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0 which is available at
@@ -8,12 +9,11 @@
  * http://www.eclipse.org/org/documents/edl-v10.php.
  *
  * SPDX-License-Identifier: EPL-2.0 OR BSD-3-Clause
- ******************************************************************************/
+ */
 
 // Contributors:
 //     07/09/2018-2.6 Jody Grassel
 //        - 536853: MapsID processing sets up to fail validation
-
 package org.eclipse.persistence.jpa.compositeid.model;
 
 import java.io.Serializable;
diff --git a/jpa/eclipselink.jpa.test.jse/src/it/java/org/eclipse/persistence/jpa/compositeid/model/CompC.java b/jpa/eclipselink.jpa.test.jse/src/it/java/org/eclipse/persistence/jpa/compositeid/model/CompC.java
index fb1e396..39c7326 100644
--- a/jpa/eclipselink.jpa.test.jse/src/it/java/org/eclipse/persistence/jpa/compositeid/model/CompC.java
+++ b/jpa/eclipselink.jpa.test.jse/src/it/java/org/eclipse/persistence/jpa/compositeid/model/CompC.java
@@ -1,5 +1,6 @@
-/********************************************************************************
- * Copyright (c) 2018, 2020 IBM Corporation. All rights reserved.
+/*
+ * Copyright (c) 2021 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2018, 2021 IBM Corporation. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0 which is available at
@@ -8,12 +9,11 @@
  * http://www.eclipse.org/org/documents/edl-v10.php.
  *
  * SPDX-License-Identifier: EPL-2.0 OR BSD-3-Clause
- ******************************************************************************/
+ */
 
 // Contributors:
 //     07/09/2018-2.6 Jody Grassel
 //        - 536853: MapsID processing sets up to fail validation
-
 package org.eclipse.persistence.jpa.compositeid.model;
 
 import jakarta.persistence.AttributeOverride;
diff --git a/jpa/eclipselink.jpa.test.jse/src/it/java/org/eclipse/persistence/jpa/compositeid/model/CompCId.java b/jpa/eclipselink.jpa.test.jse/src/it/java/org/eclipse/persistence/jpa/compositeid/model/CompCId.java
index 1ab50d3..4177af1 100644
--- a/jpa/eclipselink.jpa.test.jse/src/it/java/org/eclipse/persistence/jpa/compositeid/model/CompCId.java
+++ b/jpa/eclipselink.jpa.test.jse/src/it/java/org/eclipse/persistence/jpa/compositeid/model/CompCId.java
@@ -1,5 +1,6 @@
-/********************************************************************************
- * Copyright (c) 2018, 2020 IBM Corporation. All rights reserved.
+/*
+ * Copyright (c) 2021 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2018, 2021 IBM Corporation. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0 which is available at
@@ -8,12 +9,11 @@
  * http://www.eclipse.org/org/documents/edl-v10.php.
  *
  * SPDX-License-Identifier: EPL-2.0 OR BSD-3-Clause
- ******************************************************************************/
+ */
 
 // Contributors:
 //     07/09/2018-2.6 Jody Grassel
 //        - 536853: MapsID processing sets up to fail validation
-
 package org.eclipse.persistence.jpa.compositeid.model;
 
 import java.io.Serializable;
diff --git a/jpa/eclipselink.jpa.test.jse/src/it/java/org/eclipse/persistence/jpa/compositeid/model/Environment.java b/jpa/eclipselink.jpa.test.jse/src/it/java/org/eclipse/persistence/jpa/compositeid/model/Environment.java
index 4e6c9d4..ca36112 100644
--- a/jpa/eclipselink.jpa.test.jse/src/it/java/org/eclipse/persistence/jpa/compositeid/model/Environment.java
+++ b/jpa/eclipselink.jpa.test.jse/src/it/java/org/eclipse/persistence/jpa/compositeid/model/Environment.java
@@ -1,5 +1,6 @@
-/********************************************************************************
- * Copyright (c) 2018, 2020 IBM Corporation. All rights reserved.
+/*
+ * Copyright (c) 2021 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2018, 2021 IBM Corporation. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0 which is available at
@@ -8,12 +9,11 @@
  * http://www.eclipse.org/org/documents/edl-v10.php.
  *
  * SPDX-License-Identifier: EPL-2.0 OR BSD-3-Clause
- ******************************************************************************/
+ */
 
 // Contributors:
 //     07/09/2018-2.6 Jody Grassel
 //        - 536853: MapsID processing sets up to fail validation
-
 package org.eclipse.persistence.jpa.compositeid.model;
 
 import java.io.Serializable;
diff --git a/jpa/eclipselink.jpa.test.jse/src/it/java/org/eclipse/persistence/jpa/compositeid/model/RN.java b/jpa/eclipselink.jpa.test.jse/src/it/java/org/eclipse/persistence/jpa/compositeid/model/RN.java
index dc6f493..d900abc 100644
--- a/jpa/eclipselink.jpa.test.jse/src/it/java/org/eclipse/persistence/jpa/compositeid/model/RN.java
+++ b/jpa/eclipselink.jpa.test.jse/src/it/java/org/eclipse/persistence/jpa/compositeid/model/RN.java
@@ -1,5 +1,6 @@
-/********************************************************************************
- * Copyright (c) 2018, 2020 IBM Corporation. All rights reserved.
+/*
+ * Copyright (c) 2021 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2018, 2021 IBM Corporation. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0 which is available at
@@ -8,12 +9,11 @@
  * http://www.eclipse.org/org/documents/edl-v10.php.
  *
  * SPDX-License-Identifier: EPL-2.0 OR BSD-3-Clause
- ******************************************************************************/
+ */
 
 // Contributors:
 //     07/09/2018-2.6 Jody Grassel
 //        - 536853: MapsID processing sets up to fail validation
-
 package org.eclipse.persistence.jpa.compositeid.model;
 
 import java.io.Serializable;
diff --git a/jpa/eclipselink.jpa.test.jse/src/it/java/org/eclipse/persistence/jpa/compositeid/model/UserId.java b/jpa/eclipselink.jpa.test.jse/src/it/java/org/eclipse/persistence/jpa/compositeid/model/UserId.java
index 4acb588..061d11a 100644
--- a/jpa/eclipselink.jpa.test.jse/src/it/java/org/eclipse/persistence/jpa/compositeid/model/UserId.java
+++ b/jpa/eclipselink.jpa.test.jse/src/it/java/org/eclipse/persistence/jpa/compositeid/model/UserId.java
@@ -1,5 +1,6 @@
-/********************************************************************************
- * Copyright (c) 2018, 2020 IBM Corporation. All rights reserved.
+/*
+ * Copyright (c) 2021 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2018, 2021 IBM Corporation. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0 which is available at
@@ -8,12 +9,11 @@
  * http://www.eclipse.org/org/documents/edl-v10.php.
  *
  * SPDX-License-Identifier: EPL-2.0 OR BSD-3-Clause
- ******************************************************************************/
+ */
 
 // Contributors:
 //     07/09/2018-2.6 Jody Grassel
 //        - 536853: MapsID processing sets up to fail validation
-
 package org.eclipse.persistence.jpa.compositeid.model;
 
 import java.io.Serializable;
diff --git a/jpa/eclipselink.jpa.test/src/it/java/org/eclipse/persistence/testing/tests/jpa/advanced/PessimisticLockingExtendedScopeTestSuite.java b/jpa/eclipselink.jpa.test/src/it/java/org/eclipse/persistence/testing/tests/jpa/advanced/PessimisticLockingExtendedScopeTestSuite.java
index 02fe663..238589c 100644
--- a/jpa/eclipselink.jpa.test/src/it/java/org/eclipse/persistence/testing/tests/jpa/advanced/PessimisticLockingExtendedScopeTestSuite.java
+++ b/jpa/eclipselink.jpa.test/src/it/java/org/eclipse/persistence/testing/tests/jpa/advanced/PessimisticLockingExtendedScopeTestSuite.java
@@ -53,7 +53,7 @@
  * <b>Purpose</b>: Test Pessimistic Locking Extended Scope functionality.
  * <p>
  * <b>Description</b>: Test the relationship will be locked or unlocked under different situations
- * <p>
+ *
  */
  public class PessimisticLockingExtendedScopeTestSuite extends JUnitTestCase {
 
diff --git a/jpa/eclipselink.jpa.test/src/it/java/org/eclipse/persistence/testing/tests/jpa/criteria/AdvancedCriteriaQueryTestSuite.java b/jpa/eclipselink.jpa.test/src/it/java/org/eclipse/persistence/testing/tests/jpa/criteria/AdvancedCriteriaQueryTestSuite.java
index 4dba003..6d237cc 100644
--- a/jpa/eclipselink.jpa.test/src/it/java/org/eclipse/persistence/testing/tests/jpa/criteria/AdvancedCriteriaQueryTestSuite.java
+++ b/jpa/eclipselink.jpa.test/src/it/java/org/eclipse/persistence/testing/tests/jpa/criteria/AdvancedCriteriaQueryTestSuite.java
@@ -88,7 +88,7 @@
  * <b>Purpose</b>: Test advanced JPA Query functionality.
  * <p>
  * <b>Description</b>: This tests query hints, caching and query optimization.
- * <p>
+ *
  */
 public class AdvancedCriteriaQueryTestSuite extends JUnitTestCase {
 
diff --git a/jpa/eclipselink.jpa.test/src/it/java/org/eclipse/persistence/testing/tests/jpa/criteria/AdvancedQueryTestSuite.java b/jpa/eclipselink.jpa.test/src/it/java/org/eclipse/persistence/testing/tests/jpa/criteria/AdvancedQueryTestSuite.java
index b7dcbb8..cedf268 100644
--- a/jpa/eclipselink.jpa.test/src/it/java/org/eclipse/persistence/testing/tests/jpa/criteria/AdvancedQueryTestSuite.java
+++ b/jpa/eclipselink.jpa.test/src/it/java/org/eclipse/persistence/testing/tests/jpa/criteria/AdvancedQueryTestSuite.java
@@ -56,7 +56,7 @@
  * <b>Purpose</b>: Test advanced JPA Query functionality.
  * <p>
  * <b>Description</b>: This tests query hints, caching and query optimization.
- * <p>
+ *
  */
 public class AdvancedQueryTestSuite extends JUnitTestCase {
 
diff --git a/jpa/eclipselink.jpa.test/src/it/java/org/eclipse/persistence/testing/tests/jpa/jpql/AdvancedQueryTestSuite.java b/jpa/eclipselink.jpa.test/src/it/java/org/eclipse/persistence/testing/tests/jpa/jpql/AdvancedQueryTestSuite.java
index fc08d0e..c5d08f5 100644
--- a/jpa/eclipselink.jpa.test/src/it/java/org/eclipse/persistence/testing/tests/jpa/jpql/AdvancedQueryTestSuite.java
+++ b/jpa/eclipselink.jpa.test/src/it/java/org/eclipse/persistence/testing/tests/jpa/jpql/AdvancedQueryTestSuite.java
@@ -78,7 +78,7 @@
  * <b>Purpose</b>: Test advanced JPA Query functionality.
  * <p>
  * <b>Description</b>: This tests query hints, caching and query optimization.
- * <p>
+ *
  */
 public class AdvancedQueryTestSuite extends JUnitTestCase {
 
diff --git a/jpa/eclipselink.jpa.test/src/it/java/org/eclipse/persistence/testing/tests/jpa/jpql/JUnitDomainObjectComparer.java b/jpa/eclipselink.jpa.test/src/it/java/org/eclipse/persistence/testing/tests/jpa/jpql/JUnitDomainObjectComparer.java
index 0bc4124..1359e8a 100644
--- a/jpa/eclipselink.jpa.test/src/it/java/org/eclipse/persistence/testing/tests/jpa/jpql/JUnitDomainObjectComparer.java
+++ b/jpa/eclipselink.jpa.test/src/it/java/org/eclipse/persistence/testing/tests/jpa/jpql/JUnitDomainObjectComparer.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 1998, 2020 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1998, 2021 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0 which is available at
@@ -13,21 +13,6 @@
 // Contributors:
 //     Oracle - initial API and implementation from Oracle TopLink
 
-
-
- /**
- * <p>
- * <b>Purpose</b>: Compare two objects
- * <p>
- * <b>Description</b>: This class compares the two objects passed. If they are
- * collections it Iterates through them and compares the elements.
- * <p>
- * <b>Responsibilities</b>:
- * <ul>
- * <li> Compare two objects and return true/false
- * </ul>
- */
-
 package org.eclipse.persistence.testing.tests.jpa.jpql;
 
 // Java imports
@@ -40,8 +25,20 @@
 import org.eclipse.persistence.testing.framework.junit.JUnitTestCase;
 import org.eclipse.persistence.testing.models.jpa.advanced.*;
 
-public class JUnitDomainObjectComparer
-{
+/**
+ * <p>
+ * <b>Purpose</b>: Compare two objects
+ * <p>
+ * <b>Description</b>: This class compares the two objects passed. If they are
+ * collections it Iterates through them and compares the elements.
+ * <p>
+ * <b>Responsibilities</b>:
+ * <ul>
+ * <li> Compare two objects and return true/false
+ * </ul>
+ */
+public class JUnitDomainObjectComparer  {
+
     AbstractSession theSession;
     public boolean compareObjects(Object obj1, Object obj2) {
         if((obj1 == null) && (obj2 == null)) {
diff --git a/jpa/org.eclipse.persistence.jpa.modelgen/src/main/java/org/eclipse/persistence/internal/jpa/modelgen/objects/PersistenceXML.java b/jpa/org.eclipse.persistence.jpa.modelgen/src/main/java/org/eclipse/persistence/internal/jpa/modelgen/objects/PersistenceXML.java
index eb26580..a1c0b52 100644
--- a/jpa/org.eclipse.persistence.jpa.modelgen/src/main/java/org/eclipse/persistence/internal/jpa/modelgen/objects/PersistenceXML.java
+++ b/jpa/org.eclipse.persistence.jpa.modelgen/src/main/java/org/eclipse/persistence/internal/jpa/modelgen/objects/PersistenceXML.java
@@ -30,6 +30,12 @@
     private List<SEPersistenceUnitInfo> persistenceUnitInfos = new ArrayList<>();
 
     /**
+     * Default constructor.
+     */
+    public PersistenceXML() {
+    }
+
+    /**
      * INTERNAL:
      */
     public List<SEPersistenceUnitInfo> getPersistenceUnitInfos() {
diff --git a/jpa/org.eclipse.persistence.jpa/src/main/java/org/eclipse/persistence/internal/jpa/StaticWeaveInfo.java b/jpa/org.eclipse.persistence.jpa/src/main/java/org/eclipse/persistence/internal/jpa/StaticWeaveInfo.java
index 24cc9e2..a044775 100644
--- a/jpa/org.eclipse.persistence.jpa/src/main/java/org/eclipse/persistence/internal/jpa/StaticWeaveInfo.java
+++ b/jpa/org.eclipse.persistence.jpa/src/main/java/org/eclipse/persistence/internal/jpa/StaticWeaveInfo.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2011, 2020 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2011, 2021 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0 which is available at
@@ -12,15 +12,15 @@
 
 // Contributors:
 //     05/09/2011  Andrei Ilitchev (Oracle) - initial API and implementation
+package org.eclipse.persistence.internal.jpa;
+
+import java.io.Writer;
+
 /**
  * A helper class used by EntityManagerSetupImpl class for static weaving.
  *
  * @since Elipselink 2.3
  */
-package org.eclipse.persistence.internal.jpa;
-
-import java.io.Writer;
-
 public class StaticWeaveInfo {
     private Writer logWriter;
     private int logLevel;
diff --git a/jpa/org.eclipse.persistence.jpa/src/main/java/org/eclipse/persistence/internal/jpa/metadata/MetadataConstants.java b/jpa/org.eclipse.persistence.jpa/src/main/java/org/eclipse/persistence/internal/jpa/metadata/MetadataConstants.java
index 2289987..bca6a31 100644
--- a/jpa/org.eclipse.persistence.jpa/src/main/java/org/eclipse/persistence/internal/jpa/metadata/MetadataConstants.java
+++ b/jpa/org.eclipse.persistence.jpa/src/main/java/org/eclipse/persistence/internal/jpa/metadata/MetadataConstants.java
@@ -182,7 +182,7 @@
     public static final String JPA_GENERATION_AUTO = "AUTO";
 
     /**
-     * Metamodel processing for MappedSuperclasses non-functional names.<p>
+     * Metamodel processing for MappedSuperclasses non-functional names.
      * @see MetadataProject#addMetamodelMappedSuperclass(org.eclipse.persistence.internal.jpa.metadata.accessors.classes.MappedSuperclassAccessor, MetadataDescriptor)
      **/
     public static final String MAPPED_SUPERCLASS_RESERVED_PK_NAME = "__PK_METAMODEL_RESERVED_IN_MEM_ONLY_FIELD_NAME";
diff --git a/jpa/org.eclipse.persistence.jpa/src/main/java/org/eclipse/persistence/internal/jpa/metadata/MetadataProject.java b/jpa/org.eclipse.persistence.jpa/src/main/java/org/eclipse/persistence/internal/jpa/metadata/MetadataProject.java
index 74ecf8a..74bfc5b 100644
--- a/jpa/org.eclipse.persistence.jpa/src/main/java/org/eclipse/persistence/internal/jpa/metadata/MetadataProject.java
+++ b/jpa/org.eclipse.persistence.jpa/src/main/java/org/eclipse/persistence/internal/jpa/metadata/MetadataProject.java
@@ -581,7 +581,7 @@
      *  This method is referenced by EntityAccessor.addPotentialMappedSuperclass()
      *  during an initial predeploy() and later during a deploy()
      *  </p>
-     * @param accessor - The mappedSuperclass accessor for the field on the mappedSuperclass<p>
+     * @param accessor - The mappedSuperclass accessor for the field on the mappedSuperclass
      * @since EclipseLink 1.2 for the JPA 2.0 Reference Implementation
      */
     public void addMetamodelMappedSuperclass(MappedSuperclassAccessor accessor, MetadataDescriptor childDescriptor) {
diff --git a/jpa/org.eclipse.persistence.jpa/src/main/java/org/eclipse/persistence/internal/jpa/querydef/AbstractQueryImpl.java b/jpa/org.eclipse.persistence.jpa/src/main/java/org/eclipse/persistence/internal/jpa/querydef/AbstractQueryImpl.java
index 815be78..0b74756 100644
--- a/jpa/org.eclipse.persistence.jpa/src/main/java/org/eclipse/persistence/internal/jpa/querydef/AbstractQueryImpl.java
+++ b/jpa/org.eclipse.persistence.jpa/src/main/java/org/eclipse/persistence/internal/jpa/querydef/AbstractQueryImpl.java
@@ -39,7 +39,6 @@
  * <b>Description</b>: This is the container class for the components that
  * define a query. This is the superclass of both the CriteriaQuery and the
  * SubQuery.
- * <p>
  *
  * @see jakarta.persistence.criteria CriteriaQuery
  *
diff --git a/jpa/org.eclipse.persistence.jpa/src/main/java/org/eclipse/persistence/internal/jpa/querydef/BasicCollectionJoinImpl.java b/jpa/org.eclipse.persistence.jpa/src/main/java/org/eclipse/persistence/internal/jpa/querydef/BasicCollectionJoinImpl.java
index c7ad22b..6f4eac6 100644
--- a/jpa/org.eclipse.persistence.jpa/src/main/java/org/eclipse/persistence/internal/jpa/querydef/BasicCollectionJoinImpl.java
+++ b/jpa/org.eclipse.persistence.jpa/src/main/java/org/eclipse/persistence/internal/jpa/querydef/BasicCollectionJoinImpl.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2011, 2020 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2011, 2021 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0 which is available at
@@ -39,7 +39,6 @@
  * <p>
  * <b>Description</b>: Represents a Join to a ElementCollection of basics.
  * Special type of Join that does not allow further joins.
- * <p>
  *
  * @see jakarta.persistence.criteria CollectionJoin
  *
diff --git a/jpa/org.eclipse.persistence.jpa/src/main/java/org/eclipse/persistence/internal/jpa/querydef/BasicListJoinImpl.java b/jpa/org.eclipse.persistence.jpa/src/main/java/org/eclipse/persistence/internal/jpa/querydef/BasicListJoinImpl.java
index 5e299cc..4d9d592 100644
--- a/jpa/org.eclipse.persistence.jpa/src/main/java/org/eclipse/persistence/internal/jpa/querydef/BasicListJoinImpl.java
+++ b/jpa/org.eclipse.persistence.jpa/src/main/java/org/eclipse/persistence/internal/jpa/querydef/BasicListJoinImpl.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2011, 2020 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2011, 2021 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0 which is available at
@@ -39,7 +39,6 @@
  * <p>
  * <b>Description</b>: Represents a Join to a ElementCollection of basics.
  * Special type of Join that does not allow further joins.
- * <p>
  *
  * @see jakarta.persistence.criteria ListJoin
  *
diff --git a/jpa/org.eclipse.persistence.jpa/src/main/java/org/eclipse/persistence/internal/jpa/querydef/BasicMapJoinImpl.java b/jpa/org.eclipse.persistence.jpa/src/main/java/org/eclipse/persistence/internal/jpa/querydef/BasicMapJoinImpl.java
index 8b378df..b4780fe 100644
--- a/jpa/org.eclipse.persistence.jpa/src/main/java/org/eclipse/persistence/internal/jpa/querydef/BasicMapJoinImpl.java
+++ b/jpa/org.eclipse.persistence.jpa/src/main/java/org/eclipse/persistence/internal/jpa/querydef/BasicMapJoinImpl.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2011, 2020 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2011, 2021 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0 which is available at
@@ -39,7 +39,6 @@
  * <p>
  * <b>Description</b>: Represents a Join to a ElementCollection of basics.
  * Special type of Join that does not allow further joins.
- * <p>
  *
  * @see jakarta.persistence.criteria MapJoin
  *
diff --git a/jpa/org.eclipse.persistence.jpa/src/main/java/org/eclipse/persistence/internal/jpa/querydef/BasicSetJoinImpl.java b/jpa/org.eclipse.persistence.jpa/src/main/java/org/eclipse/persistence/internal/jpa/querydef/BasicSetJoinImpl.java
index 0a45459..974d1d3 100644
--- a/jpa/org.eclipse.persistence.jpa/src/main/java/org/eclipse/persistence/internal/jpa/querydef/BasicSetJoinImpl.java
+++ b/jpa/org.eclipse.persistence.jpa/src/main/java/org/eclipse/persistence/internal/jpa/querydef/BasicSetJoinImpl.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2011, 2020 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2011, 2021 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0 which is available at
@@ -39,7 +39,6 @@
  * <p>
  * <b>Description</b>: Represents a Join to a ElementCollection of basics.
  * Special type of Join that does not allow further joins.
- * <p>
  *
  * @see jakarta.persistence.criteria SetJoin
  *
diff --git a/jpa/org.eclipse.persistence.jpa/src/main/java/org/eclipse/persistence/internal/jpa/querydef/CollectionJoinImpl.java b/jpa/org.eclipse.persistence.jpa/src/main/java/org/eclipse/persistence/internal/jpa/querydef/CollectionJoinImpl.java
index ccffdd3..bea3ad1 100644
--- a/jpa/org.eclipse.persistence.jpa/src/main/java/org/eclipse/persistence/internal/jpa/querydef/CollectionJoinImpl.java
+++ b/jpa/org.eclipse.persistence.jpa/src/main/java/org/eclipse/persistence/internal/jpa/querydef/CollectionJoinImpl.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2011, 2020 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2011, 2021 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0 which is available at
@@ -32,7 +32,6 @@
  * criteria API.
  * <p>
  * <b>Description</b>: This class represents a join of an attribute through a collection .
- * <p>
  *
  * @see jakarta.persistence.criteria From
  *
diff --git a/jpa/org.eclipse.persistence.jpa/src/main/java/org/eclipse/persistence/internal/jpa/querydef/CommonAbstractCriteriaImpl.java b/jpa/org.eclipse.persistence.jpa/src/main/java/org/eclipse/persistence/internal/jpa/querydef/CommonAbstractCriteriaImpl.java
index 9d01c0e..429d548 100644
--- a/jpa/org.eclipse.persistence.jpa/src/main/java/org/eclipse/persistence/internal/jpa/querydef/CommonAbstractCriteriaImpl.java
+++ b/jpa/org.eclipse.persistence.jpa/src/main/java/org/eclipse/persistence/internal/jpa/querydef/CommonAbstractCriteriaImpl.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2011, 2020 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2011, 2021 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0 which is available at
@@ -40,7 +40,6 @@
  * <b>Description</b>: This is the container class for the components that
  * define a query. This is the superclass of CriteriaQuery, SubQuery, CriteriaDelete
  * and CriteriaUpdate.
- * <p>
  *
  * @see jakarta.persistence.criteria CommonAbstractCriteria
  *
diff --git a/jpa/org.eclipse.persistence.jpa/src/main/java/org/eclipse/persistence/internal/jpa/querydef/CompoundExpressionImpl.java b/jpa/org.eclipse.persistence.jpa/src/main/java/org/eclipse/persistence/internal/jpa/querydef/CompoundExpressionImpl.java
index 9a4d7ba..9b20f57 100644
--- a/jpa/org.eclipse.persistence.jpa/src/main/java/org/eclipse/persistence/internal/jpa/querydef/CompoundExpressionImpl.java
+++ b/jpa/org.eclipse.persistence.jpa/src/main/java/org/eclipse/persistence/internal/jpa/querydef/CompoundExpressionImpl.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2011, 2020 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2011, 2021 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0 which is available at
@@ -31,7 +31,6 @@
  * <p>
  * <b>Description</b>: The predicate forms the least specific expression node.  Predicates
  * result in boolean expressions that are combined to form the final expression.
- * <p>
  *
  * @see jakarta.persistence.criteria Predicate
  *
diff --git a/jpa/org.eclipse.persistence.jpa/src/main/java/org/eclipse/persistence/internal/jpa/querydef/CompoundSelectionImpl.java b/jpa/org.eclipse.persistence.jpa/src/main/java/org/eclipse/persistence/internal/jpa/querydef/CompoundSelectionImpl.java
index a501a70..837a96b 100644
--- a/jpa/org.eclipse.persistence.jpa/src/main/java/org/eclipse/persistence/internal/jpa/querydef/CompoundSelectionImpl.java
+++ b/jpa/org.eclipse.persistence.jpa/src/main/java/org/eclipse/persistence/internal/jpa/querydef/CompoundSelectionImpl.java
@@ -29,7 +29,6 @@
  * criteria API.
  * <p>
  * <b>Description</b>: The Selection is the expression describing what should be returned by the query.
- * <p>
  *
  * @see jakarta.persistence.criteria Join
  *
diff --git a/jpa/org.eclipse.persistence.jpa/src/main/java/org/eclipse/persistence/internal/jpa/querydef/ConstructorSelectionImpl.java b/jpa/org.eclipse.persistence.jpa/src/main/java/org/eclipse/persistence/internal/jpa/querydef/ConstructorSelectionImpl.java
index ee0c52c..44180a2 100644
--- a/jpa/org.eclipse.persistence.jpa/src/main/java/org/eclipse/persistence/internal/jpa/querydef/ConstructorSelectionImpl.java
+++ b/jpa/org.eclipse.persistence.jpa/src/main/java/org/eclipse/persistence/internal/jpa/querydef/ConstructorSelectionImpl.java
@@ -28,7 +28,6 @@
  * criteria API.  Specifically this class represents the Selection of a Constructor.
  * <p>
  * <b>Description</b>: The Selection is the expression describing what should be returned by the query.
- * <p>
  *
  * @see jakarta.persistence.criteria Join
  *
diff --git a/jpa/org.eclipse.persistence.jpa/src/main/java/org/eclipse/persistence/internal/jpa/querydef/CriteriaDeleteImpl.java b/jpa/org.eclipse.persistence.jpa/src/main/java/org/eclipse/persistence/internal/jpa/querydef/CriteriaDeleteImpl.java
index 951884a..5601993 100644
--- a/jpa/org.eclipse.persistence.jpa/src/main/java/org/eclipse/persistence/internal/jpa/querydef/CriteriaDeleteImpl.java
+++ b/jpa/org.eclipse.persistence.jpa/src/main/java/org/eclipse/persistence/internal/jpa/querydef/CriteriaDeleteImpl.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2011, 2020 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2011, 2021 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0 which is available at
@@ -32,7 +32,6 @@
  * <p>
  * <b>Description</b>: This is the container class for the components that
  * define a Delete Query.
- * <p>
  *
  * @see jakarta.persistence.criteria CriteriaDelete
  *
diff --git a/jpa/org.eclipse.persistence.jpa/src/main/java/org/eclipse/persistence/internal/jpa/querydef/CriteriaQueryImpl.java b/jpa/org.eclipse.persistence.jpa/src/main/java/org/eclipse/persistence/internal/jpa/querydef/CriteriaQueryImpl.java
index c76116f..5b544c8 100644
--- a/jpa/org.eclipse.persistence.jpa/src/main/java/org/eclipse/persistence/internal/jpa/querydef/CriteriaQueryImpl.java
+++ b/jpa/org.eclipse.persistence.jpa/src/main/java/org/eclipse/persistence/internal/jpa/querydef/CriteriaQueryImpl.java
@@ -51,7 +51,6 @@
  * <p>
  * <b>Description</b>: This is the container class for the components that
  * define a query.
- * <p>
  *
  * @see jakarta.persistence.criteria CriteriaQuery
  *
diff --git a/jpa/org.eclipse.persistence.jpa/src/main/java/org/eclipse/persistence/internal/jpa/querydef/CriteriaUpdateImpl.java b/jpa/org.eclipse.persistence.jpa/src/main/java/org/eclipse/persistence/internal/jpa/querydef/CriteriaUpdateImpl.java
index c53278f..0fee0d1 100644
--- a/jpa/org.eclipse.persistence.jpa/src/main/java/org/eclipse/persistence/internal/jpa/querydef/CriteriaUpdateImpl.java
+++ b/jpa/org.eclipse.persistence.jpa/src/main/java/org/eclipse/persistence/internal/jpa/querydef/CriteriaUpdateImpl.java
@@ -35,7 +35,6 @@
  * <p>
  * <b>Description</b>: This is the container class for the components that
  * define an Update Query.
- * <p>
  *
  * @see jakarta.persistence.criteria CriteriaUpdate
  *
diff --git a/jpa/org.eclipse.persistence.jpa/src/main/java/org/eclipse/persistence/internal/jpa/querydef/ExpressionImpl.java b/jpa/org.eclipse.persistence.jpa/src/main/java/org/eclipse/persistence/internal/jpa/querydef/ExpressionImpl.java
index 009715b..a6c860f 100644
--- a/jpa/org.eclipse.persistence.jpa/src/main/java/org/eclipse/persistence/internal/jpa/querydef/ExpressionImpl.java
+++ b/jpa/org.eclipse.persistence.jpa/src/main/java/org/eclipse/persistence/internal/jpa/querydef/ExpressionImpl.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2011, 2020 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2011, 2021 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0 which is available at
@@ -34,7 +34,6 @@
  * <p>
  * <b>Description</b>: Expressions are expression nodes that can not be joined from
  * and may or not be the result of a Path expression.
- * <p>
  *
  * @see jakarta.persistence.criteria Expression
  *
diff --git a/jpa/org.eclipse.persistence.jpa/src/main/java/org/eclipse/persistence/internal/jpa/querydef/FromImpl.java b/jpa/org.eclipse.persistence.jpa/src/main/java/org/eclipse/persistence/internal/jpa/querydef/FromImpl.java
index c0ce99c..232333c 100644
--- a/jpa/org.eclipse.persistence.jpa/src/main/java/org/eclipse/persistence/internal/jpa/querydef/FromImpl.java
+++ b/jpa/org.eclipse.persistence.jpa/src/main/java/org/eclipse/persistence/internal/jpa/querydef/FromImpl.java
@@ -56,7 +56,6 @@
  * <p>
  * <b>Description</b>: This class represents a from clause element which could
  * be the root of the query of the end node of a join statement.
- * <p>
  *
  * @see jakarta.persistence.criteria From
  *
diff --git a/jpa/org.eclipse.persistence.jpa/src/main/java/org/eclipse/persistence/internal/jpa/querydef/FunctionExpressionImpl.java b/jpa/org.eclipse.persistence.jpa/src/main/java/org/eclipse/persistence/internal/jpa/querydef/FunctionExpressionImpl.java
index b9332a0..b5c8ee8 100644
--- a/jpa/org.eclipse.persistence.jpa/src/main/java/org/eclipse/persistence/internal/jpa/querydef/FunctionExpressionImpl.java
+++ b/jpa/org.eclipse.persistence.jpa/src/main/java/org/eclipse/persistence/internal/jpa/querydef/FunctionExpressionImpl.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2011, 2020 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2011, 2021 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0 which is available at
@@ -28,7 +28,6 @@
  * <p>
  * <b>Description</b>: The predicate forms the least specific expression node.  Predicates
  * result in boolean expressions that are combined to form the final expression.
- * <p>
  *
  * @see jakarta.persistence.criteria Predicate
  *
diff --git a/jpa/org.eclipse.persistence.jpa/src/main/java/org/eclipse/persistence/internal/jpa/querydef/InImpl.java b/jpa/org.eclipse.persistence.jpa/src/main/java/org/eclipse/persistence/internal/jpa/querydef/InImpl.java
index f8203c2..e708717 100644
--- a/jpa/org.eclipse.persistence.jpa/src/main/java/org/eclipse/persistence/internal/jpa/querydef/InImpl.java
+++ b/jpa/org.eclipse.persistence.jpa/src/main/java/org/eclipse/persistence/internal/jpa/querydef/InImpl.java
@@ -39,7 +39,6 @@
  * criteria API.
  * <p>
  * <b>Description</b>: This class represents an In predicate.
- * <p>
  *
  * @see jakarta.persistence.criteria Join
  *
diff --git a/jpa/org.eclipse.persistence.jpa/src/main/java/org/eclipse/persistence/internal/jpa/querydef/InternalExpression.java b/jpa/org.eclipse.persistence.jpa/src/main/java/org/eclipse/persistence/internal/jpa/querydef/InternalExpression.java
index 840e7e8..c0cb6b4 100644
--- a/jpa/org.eclipse.persistence.jpa/src/main/java/org/eclipse/persistence/internal/jpa/querydef/InternalExpression.java
+++ b/jpa/org.eclipse.persistence.jpa/src/main/java/org/eclipse/persistence/internal/jpa/querydef/InternalExpression.java
@@ -17,7 +17,6 @@
  * <b>Description</b>: Expressions are expression nodes that can not be joined from
  * and may or not be the result of a Path expression.  The SubQuery is a special type of expression that
  * requires certain methods but can not extend ExpressionImpl.  This interface provide a common API.
- * <p>
  *
  * @see jakarta.persistence.criteria Expression
  *
diff --git a/jpa/org.eclipse.persistence.jpa/src/main/java/org/eclipse/persistence/internal/jpa/querydef/InternalSelection.java b/jpa/org.eclipse.persistence.jpa/src/main/java/org/eclipse/persistence/internal/jpa/querydef/InternalSelection.java
index e689853..4d6d567 100644
--- a/jpa/org.eclipse.persistence.jpa/src/main/java/org/eclipse/persistence/internal/jpa/querydef/InternalSelection.java
+++ b/jpa/org.eclipse.persistence.jpa/src/main/java/org/eclipse/persistence/internal/jpa/querydef/InternalSelection.java
@@ -22,7 +22,6 @@
  * <b>Description</b>: An InternalSelection has the EclipseLink expression representation of the
  * Criteria API expressions.  A special interface was created because Subqueries can be selections but are not in the
  * ExpressionImpl hierarchy
- * <p>
  *
  * @see jakarta.persistence.criteria Expression
  *
diff --git a/jpa/org.eclipse.persistence.jpa/src/main/java/org/eclipse/persistence/internal/jpa/querydef/JoinImpl.java b/jpa/org.eclipse.persistence.jpa/src/main/java/org/eclipse/persistence/internal/jpa/querydef/JoinImpl.java
index ea33a3e..fba26dc 100644
--- a/jpa/org.eclipse.persistence.jpa/src/main/java/org/eclipse/persistence/internal/jpa/querydef/JoinImpl.java
+++ b/jpa/org.eclipse.persistence.jpa/src/main/java/org/eclipse/persistence/internal/jpa/querydef/JoinImpl.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2011, 2020 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2011, 2021 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0 which is available at
@@ -38,7 +38,6 @@
  * criteria API.
  * <p>
  * <b>Description</b>: This class represents a join of an attribute from a "From"element.
- * <p>
  *
  * @see jakarta.persistence.criteria Join
  *
diff --git a/jpa/org.eclipse.persistence.jpa/src/main/java/org/eclipse/persistence/internal/jpa/querydef/ListJoinImpl.java b/jpa/org.eclipse.persistence.jpa/src/main/java/org/eclipse/persistence/internal/jpa/querydef/ListJoinImpl.java
index 427ace4..a44b901 100644
--- a/jpa/org.eclipse.persistence.jpa/src/main/java/org/eclipse/persistence/internal/jpa/querydef/ListJoinImpl.java
+++ b/jpa/org.eclipse.persistence.jpa/src/main/java/org/eclipse/persistence/internal/jpa/querydef/ListJoinImpl.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2011, 2020 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2011, 2021 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0 which is available at
@@ -33,7 +33,6 @@
  * criteria API.
  * <p>
  * <b>Description</b>: This class represents a join of an attribute from a "From"element.
- * <p>
  *
  * @see jakarta.persistence.criteria ListJoin
  *
diff --git a/jpa/org.eclipse.persistence.jpa/src/main/java/org/eclipse/persistence/internal/jpa/querydef/MapJoinImpl.java b/jpa/org.eclipse.persistence.jpa/src/main/java/org/eclipse/persistence/internal/jpa/querydef/MapJoinImpl.java
index d5c649a..c5c4fca 100644
--- a/jpa/org.eclipse.persistence.jpa/src/main/java/org/eclipse/persistence/internal/jpa/querydef/MapJoinImpl.java
+++ b/jpa/org.eclipse.persistence.jpa/src/main/java/org/eclipse/persistence/internal/jpa/querydef/MapJoinImpl.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2011, 2020 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2011, 2021 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0 which is available at
@@ -39,7 +39,6 @@
  * criteria API.
  * <p>
  * <b>Description</b>: This class represents a join of an attribute from a "From"element.
- * <p>
  *
  * @see jakarta.persistence.criteria MapJoin
  *
diff --git a/jpa/org.eclipse.persistence.jpa/src/main/java/org/eclipse/persistence/internal/jpa/querydef/PathImpl.java b/jpa/org.eclipse.persistence.jpa/src/main/java/org/eclipse/persistence/internal/jpa/querydef/PathImpl.java
index 2acaef9..566c338 100644
--- a/jpa/org.eclipse.persistence.jpa/src/main/java/org/eclipse/persistence/internal/jpa/querydef/PathImpl.java
+++ b/jpa/org.eclipse.persistence.jpa/src/main/java/org/eclipse/persistence/internal/jpa/querydef/PathImpl.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2011, 2020 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2011, 2021 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0 which is available at
@@ -32,7 +32,6 @@
  * criteria API.
  * <p>
  * <b>Description</b>: This class represents an abstract path which is a model of the expression through joins.
- * <p>
  *
  * @see jakarta.persistence.criteria Path
  *
diff --git a/jpa/org.eclipse.persistence.jpa/src/main/java/org/eclipse/persistence/internal/jpa/querydef/PredicateImpl.java b/jpa/org.eclipse.persistence.jpa/src/main/java/org/eclipse/persistence/internal/jpa/querydef/PredicateImpl.java
index da0de9e..ff2fc5d 100644
--- a/jpa/org.eclipse.persistence.jpa/src/main/java/org/eclipse/persistence/internal/jpa/querydef/PredicateImpl.java
+++ b/jpa/org.eclipse.persistence.jpa/src/main/java/org/eclipse/persistence/internal/jpa/querydef/PredicateImpl.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2011, 2020 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2011, 2021 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0 which is available at
@@ -29,7 +29,6 @@
  * <p>
  * <b>Description</b>: The predicate forms the least specific expression node.  Predicates
  * result in boolean expressions that are combined to form the final expression.
- * <p>
  *
  * @see jakarta.persistence.criteria Predicate
  *
diff --git a/jpa/org.eclipse.persistence.jpa/src/main/java/org/eclipse/persistence/internal/jpa/querydef/RootImpl.java b/jpa/org.eclipse.persistence.jpa/src/main/java/org/eclipse/persistence/internal/jpa/querydef/RootImpl.java
index c7ceceb..26ccc66 100644
--- a/jpa/org.eclipse.persistence.jpa/src/main/java/org/eclipse/persistence/internal/jpa/querydef/RootImpl.java
+++ b/jpa/org.eclipse.persistence.jpa/src/main/java/org/eclipse/persistence/internal/jpa/querydef/RootImpl.java
@@ -29,7 +29,6 @@
  * <p>
  * <b>Description</b>: This class represents root of a path. All paths are
  * created from roots and they correspond to ExpressionBuilders.
- * <p>
  *
  * @see jakarta.persistence.criteria Path
  *
diff --git a/jpa/org.eclipse.persistence.jpa/src/main/java/org/eclipse/persistence/internal/jpa/querydef/SelectionImpl.java b/jpa/org.eclipse.persistence.jpa/src/main/java/org/eclipse/persistence/internal/jpa/querydef/SelectionImpl.java
index cd1d7c8..ef08dec 100644
--- a/jpa/org.eclipse.persistence.jpa/src/main/java/org/eclipse/persistence/internal/jpa/querydef/SelectionImpl.java
+++ b/jpa/org.eclipse.persistence.jpa/src/main/java/org/eclipse/persistence/internal/jpa/querydef/SelectionImpl.java
@@ -30,7 +30,6 @@
  * criteria API.
  * <p>
  * <b>Description</b>: The Selection is the expression describing what should be returned by the query.
- * <p>
  *
  * @see jakarta.persistence.criteria Join
  *
diff --git a/jpa/org.eclipse.persistence.jpa/src/main/java/org/eclipse/persistence/internal/jpa/querydef/SetJoinImpl.java b/jpa/org.eclipse.persistence.jpa/src/main/java/org/eclipse/persistence/internal/jpa/querydef/SetJoinImpl.java
index 7725c93..b2eb1ea 100644
--- a/jpa/org.eclipse.persistence.jpa/src/main/java/org/eclipse/persistence/internal/jpa/querydef/SetJoinImpl.java
+++ b/jpa/org.eclipse.persistence.jpa/src/main/java/org/eclipse/persistence/internal/jpa/querydef/SetJoinImpl.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2011, 2020 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2011, 2021 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0 which is available at
@@ -31,7 +31,6 @@
  * criteria API.
  * <p>
  * <b>Description</b>: This class represents a join of an attribute from a "From"element.
- * <p>
  *
  * @see jakarta.persistence.criteria ListJoin
  *
diff --git a/jpa/org.eclipse.persistence.jpa/src/main/java/org/eclipse/persistence/internal/jpa/querydef/SubQueryImpl.java b/jpa/org.eclipse.persistence.jpa/src/main/java/org/eclipse/persistence/internal/jpa/querydef/SubQueryImpl.java
index 2292853..9f3eb98 100644
--- a/jpa/org.eclipse.persistence.jpa/src/main/java/org/eclipse/persistence/internal/jpa/querydef/SubQueryImpl.java
+++ b/jpa/org.eclipse.persistence.jpa/src/main/java/org/eclipse/persistence/internal/jpa/querydef/SubQueryImpl.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2011, 2020 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2011, 2021 Oracle and/or its affiliates. All rights reserved.
  * Copyright (c) 2011, 2018 IBM Corporation. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
@@ -59,7 +59,6 @@
  * <p>
  * <b>Description</b>: This is the container class for the components that define a query to
  * be used in a sub select expression.
- * <p>
  *
  * @see jakarta.persistence.criteria CriteriaQuery
  * @see jakarta.persistence.criteria SubQuery
diff --git a/jpa/org.eclipse.persistence.jpa/src/main/java/org/eclipse/persistence/internal/jpa/querydef/TupleQuery.java b/jpa/org.eclipse.persistence.jpa/src/main/java/org/eclipse/persistence/internal/jpa/querydef/TupleQuery.java
index 6c432d7..97c3e9d 100644
--- a/jpa/org.eclipse.persistence.jpa/src/main/java/org/eclipse/persistence/internal/jpa/querydef/TupleQuery.java
+++ b/jpa/org.eclipse.persistence.jpa/src/main/java/org/eclipse/persistence/internal/jpa/querydef/TupleQuery.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2018, 2020 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2018, 2021 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0 which is available at
@@ -26,7 +26,6 @@
  * <b>Purpose</b>: This is a special subclass of the ReportQuery that constructs Tuple results.
  * <p>
  * <b>Description</b>: A subclass of ReportQuery this query type combines multiple selections into
- * <p>
  *
  * @see jakarta.persistence.criteria CriteriaQuery
  *
diff --git a/jpa/org.eclipse.persistence.jpa/src/main/java/org/eclipse/persistence/jpa/PersistenceProvider.java b/jpa/org.eclipse.persistence.jpa/src/main/java/org/eclipse/persistence/jpa/PersistenceProvider.java
index 701a432..f4c18d6 100644
--- a/jpa/org.eclipse.persistence.jpa/src/main/java/org/eclipse/persistence/jpa/PersistenceProvider.java
+++ b/jpa/org.eclipse.persistence.jpa/src/main/java/org/eclipse/persistence/jpa/PersistenceProvider.java
@@ -201,7 +201,7 @@
      * <p>
      * Called by the Persistence class when schema generation is to occur as a
      * separate phase from creation of the entity manager factory.
-     * <p>
+     *
      * @param info the name of the persistence unit
      * @param properties properties for schema generation; these may also
      *        contain provider-specific properties. The value of these
@@ -228,7 +228,7 @@
      * <p>
      * Called by the Persistence class when schema generation is to occur as a
      * separate phase from creation of the entity manager factory.
-     * <p>
+     *
      * @param persistenceUnitName the name of the persistence unit
      * @param properties properties for schema generation; these may also
      *        contain provider-specific properties. The value of these
diff --git a/moxy/org.eclipse.persistence.moxy/src/main/java/org/eclipse/persistence/internal/jaxb/AccessorFactoryWrapper.java b/moxy/org.eclipse.persistence.moxy/src/main/java/org/eclipse/persistence/internal/jaxb/AccessorFactoryWrapper.java
index e2afbeb..a8f3338 100644
--- a/moxy/org.eclipse.persistence.moxy/src/main/java/org/eclipse/persistence/internal/jaxb/AccessorFactoryWrapper.java
+++ b/moxy/org.eclipse.persistence.moxy/src/main/java/org/eclipse/persistence/internal/jaxb/AccessorFactoryWrapper.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2012, 2020 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2012, 2021 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0 which is available at
@@ -25,7 +25,7 @@
  * The instance can be from either the internal or public package. This class will
  * reflectively invoke the createFieldAccessor and createPropertyAccessor methods
  * on the underlying AccessorFactory to create Accessor instances.
- * <p>
+ *
  * @author mmacivor
  * @since EclipseLink 2.4
  *
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/annotations/xmlnullpolicy/XmlNullPolicyNoXmlElementTestCases.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/annotations/xmlnullpolicy/XmlNullPolicyNoXmlElementTestCases.java
index abd5410..4d3d8e7 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/annotations/xmlnullpolicy/XmlNullPolicyNoXmlElementTestCases.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/annotations/xmlnullpolicy/XmlNullPolicyNoXmlElementTestCases.java
@@ -50,7 +50,6 @@
     /**
      * This is the preferred (and only) constructor.
      *
-     * @param name
      */
     public XmlNullPolicyNoXmlElementTestCases(String name) throws Exception{
         super(name);
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/annotations/xmlnullpolicy/XmlNullPolicyTestCases.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/annotations/xmlnullpolicy/XmlNullPolicyTestCases.java
index de05a88..2734a44 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/annotations/xmlnullpolicy/XmlNullPolicyTestCases.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/annotations/xmlnullpolicy/XmlNullPolicyTestCases.java
@@ -50,7 +50,6 @@
     /**
      * This is the preferred (and only) constructor.
      *
-     * @param name
      */
     public XmlNullPolicyTestCases(String name) throws Exception{
         super(name);
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/annotations/xmlpaths/XmlPathsTestCases.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/annotations/xmlpaths/XmlPathsTestCases.java
index a805a70..6b2271a 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/annotations/xmlpaths/XmlPathsTestCases.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/annotations/xmlpaths/XmlPathsTestCases.java
@@ -37,8 +37,6 @@
     /**
      * This is the preferred (and only) constructor.
      *
-     * @param name
-     * @throws Exception
      */
     public XmlPathsTestCases(String name) throws Exception {
         super(name);
@@ -51,7 +49,6 @@
     /**
      * Return the control Employee.
      *
-     * @return
      */
     @Override
     public Employee getControlObject() {
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/annotations/xmlpaths/override/XmlPathsOverrideTestCases.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/annotations/xmlpaths/override/XmlPathsOverrideTestCases.java
index 7f36362..c4eaa99 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/annotations/xmlpaths/override/XmlPathsOverrideTestCases.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/annotations/xmlpaths/override/XmlPathsOverrideTestCases.java
@@ -39,8 +39,6 @@
     /**
      * This is the preferred (and only) constructor.
      *
-     * @param name
-     * @throws Exception
      */
     public XmlPathsOverrideTestCases(String name) throws Exception {
         super(name);
@@ -65,7 +63,6 @@
     /**
      * Return the control Employee.
      *
-     * @return
      */
     @Override
     public Employee getControlObject() {
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/casesensitivity/Customer.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/casesensitivity/Customer.java
index 8217eb9..a832a22 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/casesensitivity/Customer.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/casesensitivity/Customer.java
@@ -51,8 +51,8 @@
     public abstract String getNameBridge();
 
     /**
-     * Bridge for {@link org.eclipse.persistence.testing.jaxb.casesensitivity.correctCase.CustomerImpl#equals(Object)} and
-     * {@link org.eclipse.persistence.testing.jaxb.casesensitivity.otherCase.CustomerImpl#equals(Object)}
+     * Bridge for {@link org.eclipse.persistence.testing.jaxb.casesensitivity.correctCase.CustomerImpl} and
+     * {@link org.eclipse.persistence.testing.jaxb.casesensitivity.otherCase.CustomerImpl}
      *
      * @param o Employee object.
      * @return true if the Employee classes' attributes match the same values.
@@ -72,8 +72,8 @@
     }
 
     /**
-     * Bridge for {@link org.eclipse.persistence.testing.jaxb.casesensitivity.correctCase.CustomerImpl#hashCode()} and
-     * {@link org.eclipse.persistence.testing.jaxb.casesensitivity.otherCase.CustomerImpl#hashCode()}
+     * Bridge for {@link org.eclipse.persistence.testing.jaxb.casesensitivity.correctCase.CustomerImpl} and
+     * {@link org.eclipse.persistence.testing.jaxb.casesensitivity.otherCase.CustomerImpl}
      *
      * @return hashCode
      */
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/classloader/DifferentClassLoaderTestCases.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/classloader/DifferentClassLoaderTestCases.java
index 021d133..27e952d 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/classloader/DifferentClassLoaderTestCases.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/classloader/DifferentClassLoaderTestCases.java
@@ -61,7 +61,7 @@
     @Override
     protected Object getControlObject() {
         try{
-                    Object classA = rootClass.newInstance();
+                    Object classA = rootClass.getConstructor().newInstance();
             return classA;
         }catch(Exception e){
 
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/dynamic/DynamicJAXBFromSessionsXMLTestCases.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/dynamic/DynamicJAXBFromSessionsXMLTestCases.java
index e524af9..341d53d 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/dynamic/DynamicJAXBFromSessionsXMLTestCases.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/dynamic/DynamicJAXBFromSessionsXMLTestCases.java
@@ -30,15 +30,10 @@
 import org.eclipse.persistence.internal.dynamic.DynamicEntityImpl;
 import org.eclipse.persistence.internal.helper.Helper;
 import org.eclipse.persistence.jaxb.dynamic.DynamicJAXBContext;
-import org.eclipse.persistence.jaxb.dynamic.DynamicJAXBContextFactory;
 import org.eclipse.persistence.oxm.NamespaceResolver;
-import org.eclipse.persistence.oxm.XMLConstants;
 import org.eclipse.persistence.oxm.XMLRoot;
 import org.eclipse.persistence.testing.jaxb.JAXBTestCases;
-import org.w3c.dom.Attr;
-import org.w3c.dom.Document;
-import org.w3c.dom.Element;
-import org.w3c.dom.Text;
+import org.w3c.dom.*;
 
 public class DynamicJAXBFromSessionsXMLTestCases extends JAXBTestCases {
 
@@ -261,15 +256,15 @@
 
             boolean equal = true;
             try {
-                if (testElement.getNodeType() == controlElement.ATTRIBUTE_NODE && controlElement.getNodeType() == controlElement.ATTRIBUTE_NODE) {
+                if (testElement.getNodeType() == Node.ATTRIBUTE_NODE && controlElement.getNodeType() == Node.ATTRIBUTE_NODE) {
                     Attr att1 = (Attr) testElement;
                     Attr att2 = (Attr) controlElement;
                     equal = equal && att1.getNodeValue().equals(att2.getNodeValue());
-                } else if (testElement.getNodeType() == controlElement.TEXT_NODE && controlElement.getNodeType() == controlElement.TEXT_NODE) {
+                } else if (testElement.getNodeType() == Node.TEXT_NODE && controlElement.getNodeType() == Node.TEXT_NODE) {
                     Text text1 = (Text) testElement;
                     Text text2 = (Text) controlElement;
                     equal = equal && text1.getNodeValue().equals(text2.getNodeValue());
-                } else if (testElement.getNodeType() == controlElement.ELEMENT_NODE && controlElement.getNodeType() == controlElement.ELEMENT_NODE) {
+                } else if (testElement.getNodeType() == Node.ELEMENT_NODE && controlElement.getNodeType() == Node.ELEMENT_NODE) {
                     Element elem1 = testElement;
                     Element elem2 = controlElement;
                     equal = equal && elem1.getNodeName().equals(elem2.getNodeName());
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/dynamic/DynamicJAXBFromXSDTestCases.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/dynamic/DynamicJAXBFromXSDTestCases.java
index 26ca8a8..023c2e1 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/dynamic/DynamicJAXBFromXSDTestCases.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/dynamic/DynamicJAXBFromXSDTestCases.java
@@ -938,7 +938,6 @@
     /**
      * Test for element type reference across multiple XML schemas with different namespaces.
      * Validates result after marshalling against XML Schema.
-     * @throws Exception
      */
     public void testXmlSchemaCrossSchema() throws Exception {
         String backupProperty = null;
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/events/ClassLoaderTestCases.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/events/ClassLoaderTestCases.java
index 6d24cef..9e3b02e 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/events/ClassLoaderTestCases.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/events/ClassLoaderTestCases.java
@@ -52,7 +52,7 @@
         // Write Constructor:
         MethodVisitor mv = cw.visitMethod(Opcodes.ACC_PUBLIC, "<init>", "()V", null, null);
         mv.visitVarInsn(Opcodes.ALOAD, 0);
-        mv.visitMethodInsn(Opcodes.INVOKESPECIAL, ClassLoaderRoot.class.getName().replace('.', '/'), "<init>", "()V");
+        mv.visitMethodInsn(Opcodes.INVOKESPECIAL, ClassLoaderRoot.class.getName().replace('.', '/'), "<init>", "()V", false);
         mv.visitInsn(Opcodes.RETURN);
         mv.visitMaxs(1, 1);
         mv.visitEnd();
@@ -65,7 +65,7 @@
     public void testMarshalJSON() throws Exception {
         Marshaller marshaller = jaxbContext.createMarshaller();
         marshaller.setProperty(MarshallerProperties.MEDIA_TYPE, "application/json");
-        ClassLoaderRoot classLoaderChild = (ClassLoaderRoot) classLoaderChildClass.newInstance();
+        ClassLoaderRoot classLoaderChild = (ClassLoaderRoot) classLoaderChildClass.getConstructor().newInstance();
 
         assertEquals(0, classLoaderChild.beforeMarshalCalled);
         assertEquals(0, classLoaderChild.afterMarshalCalled);
@@ -76,7 +76,7 @@
 
     public void testMarshalXML() throws Exception {
         Marshaller marshaller = jaxbContext.createMarshaller();
-        ClassLoaderRoot classLoaderChild = (ClassLoaderRoot) classLoaderChildClass.newInstance();
+        ClassLoaderRoot classLoaderChild = (ClassLoaderRoot) classLoaderChildClass.getConstructor().newInstance();
 
         assertEquals(0, classLoaderChild.beforeMarshalCalled);
         assertEquals(0, classLoaderChild.afterMarshalCalled);
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/externalizedmetadata/ExternalizedMetadataTestCases.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/externalizedmetadata/ExternalizedMetadataTestCases.java
index d2a6744..9e7c6b9 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/externalizedmetadata/ExternalizedMetadataTestCases.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/externalizedmetadata/ExternalizedMetadataTestCases.java
@@ -77,7 +77,6 @@
     /**
      * This is the preferred (and only) constructor.
      *
-     * @param name
      */
     public ExternalizedMetadataTestCases(String name) {
         super(name);
@@ -97,7 +96,6 @@
      *
      * Assumes a prior call to generateSchema has been made.
      *
-     * @return
      */
     public JAXBContext getJAXBContext() {
         return jaxbContext;
@@ -107,8 +105,6 @@
      * Generate the schema(s) for a given set of classes.  Any eclipselink-oxm.xml file(s)
      * found in the package(s) will be applied by default.
      *
-     * @param classes
-     * @param expectedSchemaCount
      */
     public MySchemaOutputResolver generateSchema(Class[] classes, int expectedSchemaCount) {
         ClassLoader classLoader = Thread.currentThread().getContextClassLoader();
@@ -127,8 +123,6 @@
     /**
      * Generate the schema using the CONTEXT_PATH.
      *
-     * @param contextPath
-     * @param expectedSchemaCount
      */
     public MySchemaOutputResolver generateSchema(String contextPath, int expectedSchemaCount) {
         MySchemaOutputResolver outputResolver = new MySchemaOutputResolver();
@@ -146,9 +140,6 @@
     /**
      * Generate the schema using the CONTEXT_PATH.
      *
-     * @param contextPath
-     * @param expectedSchemaCount
-     * @param outputResolver
      */
     public void generateSchema(String contextPath, int expectedSchemaCount, MyStreamSchemaOutputResolver outputResolver) {
         try {
@@ -165,9 +156,6 @@
      * Generate the schema(s) for a given context path, and apply the eclipselink-oxm.xml
      * file(s) in the properties map.
      *
-     * @param contextPath
-     * @param properties
-     * @param expectedSchemaCount
      */
     public MySchemaOutputResolver generateSchema(String contextPath, Map<String, Map<String, Source>> properties, int expectedSchemaCount) {
         MySchemaOutputResolver outputResolver = new MySchemaOutputResolver();
@@ -189,7 +177,6 @@
      *
      * @param contextPath used as key for storing eclipselink-oxm.xml file Source in properties map
      * @param iStream eclipselink-oxm.xml file as a stream
-     * @param expectedSchemaCount
      */
     private MySchemaOutputResolver generateSchema(String contextPath, InputStream iStream, int expectedSchemaCount) {
         HashMap<String, Source> metadataSourceMap = new HashMap<String, Source>();
@@ -207,7 +194,6 @@
      *
      * @param contextPath used as key for storing eclipselink-oxm.xml file Source in properties map
      * @param path eclipselink-oxm.xml file will be searched for on this path
-     * @param expectedSchemaCount
      */
     public MySchemaOutputResolver generateSchema(String contextPath, String path, int expectedSchemaCount) {
         String metadataFile = path + "eclipselink-oxm.xml";
@@ -233,10 +219,8 @@
      * file found on the path.  The eclipselink-oxm.xml will be stored in the property map
      * using the contextPath as a key (maps package name to xml metadata file).
      *
-     * @param classes
      * @param contextPath used as key for storing eclipselink-oxm.xml file Source in properties map
      * @param iStream eclipselink-oxm.xml file as a stream
-     * @param expectedSchemaCount
      */
     private MySchemaOutputResolver generateSchema(Class[] classes, String contextPath, InputStream iStream, int expectedSchemaCount) {
         HashMap<String, Source> metadataSourceMap = new HashMap<String, Source>();
@@ -260,10 +244,8 @@
      * file found on the path.  The eclipselink-oxm.xml will be stored in the property map
      * using the contextPath as a key (maps package name to xml metadata file).
      *
-     * @param classes
      * @param contextPath used as key for storing eclipselink-oxm.xml file Source in properties map
      * @param path eclipselink-oxm.xml file will be searched for on this path
-     * @param expectedSchemaCount
      */
     public MySchemaOutputResolver generateSchema(Class[] classes, String contextPath, String path, int expectedSchemaCount) {
         String metadataFile = path + "eclipselink-oxm.xml";
@@ -327,10 +309,8 @@
      * file found on the path.  The eclipselink-oxm.xml will be stored in the property map
      * using the contextPath as a key (maps package name to xml metadata file).
      *
-     * @param types
      * @param contextPath used as key for storing eclipselink-oxm.xml file Source in properties map
      * @param path eclipselink-oxm.xml file will be searched for on this path
-     * @param expectedSchemaCount
      */
     public MySchemaOutputResolver generateSchema(Type[] types, String contextPath, String path, int expectedSchemaCount) {
         ClassLoader classLoader = Thread.currentThread().getContextClassLoader();
@@ -362,8 +342,6 @@
     /**
      * Generate one or more schemas from a context path.
      *
-     * @param contextPath
-     * @param outputResolver
      */
     protected void generateSchema(String contextPath, SchemaOutputResolver outputResolver, Map<String, Map<String, Source>> properties) throws Exception {
         try {
@@ -377,8 +355,6 @@
     /**
      * Generate one or more schemas from a context path.
      *
-     * @param contextPath
-     * @param outputResolver
      */
     protected void generateSchema(String contextPath, SchemaOutputResolver outputResolver) throws Exception {
         try {
@@ -393,10 +369,6 @@
      * Generate one or more schemas from an array of classes and a Map containing zero or more
      * eclipselink-oxm.xml entries.
      *
-     * @param classesToBeBound
-     * @param properties
-     * @param outputResolver
-     * @param classLoader
      */
     protected void generateSchema(Class[] classesToBeBound, java.util.Map properties, SchemaOutputResolver outputResolver, ClassLoader classLoader) throws Exception {
         try {
@@ -411,10 +383,6 @@
      * Generate one or more schemas from an array of types and a Map containing zero or more
      * eclipselink-oxm.xml entries.
      *
-     * @param typesToBeBound
-     * @param properties
-     * @param outputResolver
-     * @param classLoader
      */
     protected void generateSchema(Type[] typesToBeBound, java.util.Map properties, SchemaOutputResolver outputResolver, ClassLoader classLoader) throws Exception {
         try {
@@ -428,7 +396,6 @@
     /**
      * Validates a given instance doc against the generated schema.
      *
-     * @param src
      * @param namespace index in output resolver's list of generated schemas
      * @param outputResolver contains one or more schemas to validate against
      */
@@ -453,7 +420,6 @@
     /**
      * Validates a given instance doc against the generated schema.
      *
-     * @param src
      * @param namespace index in output resolver's list of generated schemas
      * @param outputResolver contains one or more schemas to validate against
      */
@@ -478,8 +444,6 @@
     /**
      * Validates a given instance doc against a given schema.
      *
-     * @param src
-     * @param schema
      */
     protected String validateAgainstSchema(String src, String schema) {
         SchemaFactory sFact = SchemaFactory.newInstance(javax.xml.XMLConstants.W3C_XML_SCHEMA_NS_URI);
@@ -502,7 +466,6 @@
     /**
      * Validates a given instance doc against the generated schema.
      *
-     * @param src
      * @param namespace index in output resolver's list of generated schemas
      * @param outputResolver contains one or more schemas to validate against
      */
@@ -595,7 +558,6 @@
     /**
      * Validates a given bindings file against the eclipselink oxm schema.
      *
-     * @param src
      */
     protected void validateBindingsFileAgainstSchema(InputStream src) {
         String result = null;
@@ -628,8 +590,6 @@
     /**
      * Compare two schemas for equality.
      *
-     * @param testSchema
-     * @param controlSchema
      */
     public static void compareSchemas(File testSchema, File controlSchema) {
         if (testSchema == null || controlSchema == null) {
@@ -656,8 +616,6 @@
     /**
      * Compare two schemas for equality.
      *
-     * @param testSchema
-     * @param controlSchema
      */
     public static void compareSchemas(String testSchema, File controlSchema) {
         if (testSchema == null || controlSchema == null) {
@@ -766,8 +724,6 @@
     /**
      * Convenience method that returns a newly created XMLContext based on an array of classes.
      *
-     * @param classes
-     * @return
      */
     protected XMLContext createXmlContext(Class[] classes) {
         try {
@@ -801,10 +757,6 @@
      * Convenience method for creating a JAXBContext.  The XML document is
      * validated against the metadata schema.
      *
-     * @param classes
-     * @param contextPath
-     * @param metadataFile
-     * @return
      */
     public JAXBContext createContext(Class[] classes, String contextPath, String metadataFile) throws JAXBException {
         // validate instance document against the metadata schema
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/externalizedmetadata/exceptions/contextfactory/ExceptionHandlingTestCases.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/externalizedmetadata/exceptions/contextfactory/ExceptionHandlingTestCases.java
index 4149f08..ec79c80 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/externalizedmetadata/exceptions/contextfactory/ExceptionHandlingTestCases.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/externalizedmetadata/exceptions/contextfactory/ExceptionHandlingTestCases.java
@@ -40,7 +40,6 @@
     /**
      * This is the preferred (and only) constructor.
      *
-     * @param name
      */
     public ExceptionHandlingTestCases(String name) {
         super(name);
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/externalizedmetadata/jaxbcontextfactory/JAXBContextFactoryTestCases.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/externalizedmetadata/jaxbcontextfactory/JAXBContextFactoryTestCases.java
index 395b718..072d351 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/externalizedmetadata/jaxbcontextfactory/JAXBContextFactoryTestCases.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/externalizedmetadata/jaxbcontextfactory/JAXBContextFactoryTestCases.java
@@ -95,7 +95,6 @@
     /**
      * This is the preferred (and only) constructor.
      *
-     * @param name
      */
     public JAXBContextFactoryTestCases(String name) {
         super(name);
@@ -369,7 +368,7 @@
         URL[] urls = new URL[1];
         File f = new File(Thread.currentThread().getContextClassLoader().
                 getResource("org/eclipse/persistence/testing/jaxb/externalizedmetadata/jaxbcontextfactory/bindingformat/testfolder").toURI());
-        urls[0] = f.toURL();
+        urls[0] = f.toURI().toURL();
         URLClassLoader testLoader = new URLClassLoader(urls);
 
 
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/externalizedmetadata/mappings/anyattribute/AnyAttributeMappingTestCases.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/externalizedmetadata/mappings/anyattribute/AnyAttributeMappingTestCases.java
index c7d93bf..6375b6e 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/externalizedmetadata/mappings/anyattribute/AnyAttributeMappingTestCases.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/externalizedmetadata/mappings/anyattribute/AnyAttributeMappingTestCases.java
@@ -48,7 +48,6 @@
     /**
      * This is the preferred (and only) constructor.
      *
-     * @param name
      */
     public AnyAttributeMappingTestCases(String name) throws Exception {
         super(name);
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/externalizedmetadata/mappings/anyattribute/AnyAttributeSubTypeMappingTestCases.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/externalizedmetadata/mappings/anyattribute/AnyAttributeSubTypeMappingTestCases.java
index cd2af1f..0826287 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/externalizedmetadata/mappings/anyattribute/AnyAttributeSubTypeMappingTestCases.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/externalizedmetadata/mappings/anyattribute/AnyAttributeSubTypeMappingTestCases.java
@@ -50,7 +50,6 @@
     /**
      * This is the preferred (and only) constructor.
      *
-     * @param name
      */
     public AnyAttributeSubTypeMappingTestCases(String name) throws Exception {
         super(name);
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/externalizedmetadata/mappings/anycollection/AnyCollectionMappingTestCases.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/externalizedmetadata/mappings/anycollection/AnyCollectionMappingTestCases.java
index 7c21352..7345a3e 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/externalizedmetadata/mappings/anycollection/AnyCollectionMappingTestCases.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/externalizedmetadata/mappings/anycollection/AnyCollectionMappingTestCases.java
@@ -40,7 +40,6 @@
     /**
      * This is the preferred (and only) constructor.
      *
-     * @param name
      */
     public AnyCollectionMappingTestCases(String name) throws Exception {
         super(name);
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/externalizedmetadata/mappings/anyobject/AnyObjectMappingTestCases.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/externalizedmetadata/mappings/anyobject/AnyObjectMappingTestCases.java
index 75c41ea..fa71118 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/externalizedmetadata/mappings/anyobject/AnyObjectMappingTestCases.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/externalizedmetadata/mappings/anyobject/AnyObjectMappingTestCases.java
@@ -45,7 +45,6 @@
     /**
      * This is the preferred (and only) constructor.
      *
-     * @param name
      */
     public AnyObjectMappingTestCases(String name) throws Exception {
         super(name);
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/externalizedmetadata/mappings/binarydata/BinaryDataMappingTestCases.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/externalizedmetadata/mappings/binarydata/BinaryDataMappingTestCases.java
index effd24f..deb878b 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/externalizedmetadata/mappings/binarydata/BinaryDataMappingTestCases.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/externalizedmetadata/mappings/binarydata/BinaryDataMappingTestCases.java
@@ -50,7 +50,6 @@
     /**
      * This is the preferred (and only) constructor.
      *
-     * @param name
      */
     public BinaryDataMappingTestCases(String name) throws Exception {
         super(name);
@@ -65,7 +64,6 @@
     /**
      * Return the control MyData.
      *
-     * @return
      */
     @Override
     public Object getControlObject() {
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/externalizedmetadata/mappings/binarydatacollection/BinaryDataCollectionMappingTestCases.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/externalizedmetadata/mappings/binarydatacollection/BinaryDataCollectionMappingTestCases.java
index ddb6329..a6907bc 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/externalizedmetadata/mappings/binarydatacollection/BinaryDataCollectionMappingTestCases.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/externalizedmetadata/mappings/binarydatacollection/BinaryDataCollectionMappingTestCases.java
@@ -46,7 +46,6 @@
     /**
      * This is the preferred (and only) constructor.
      *
-     * @param name
      */
     public BinaryDataCollectionMappingTestCases(String name) throws Exception {
         super(name);
@@ -61,7 +60,6 @@
     /**
      * Return the control MyData.
      *
-     * @return
      */
     @Override
     public MyData getControlObject() {
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/externalizedmetadata/mappings/choicecollection/ChoiceCollectionMappingTestCases.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/externalizedmetadata/mappings/choicecollection/ChoiceCollectionMappingTestCases.java
index e1b4a98..ec99c2c 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/externalizedmetadata/mappings/choicecollection/ChoiceCollectionMappingTestCases.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/externalizedmetadata/mappings/choicecollection/ChoiceCollectionMappingTestCases.java
@@ -58,7 +58,6 @@
     /**
      * Return the control Employee.
      *
-     * @return
      */
     @Override
     public Object getWriteControlObject() {
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/externalizedmetadata/mappings/collectionreference/CollectionReferenceMappingTestCases.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/externalizedmetadata/mappings/collectionreference/CollectionReferenceMappingTestCases.java
index babb2d5..a7e54e6 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/externalizedmetadata/mappings/collectionreference/CollectionReferenceMappingTestCases.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/externalizedmetadata/mappings/collectionreference/CollectionReferenceMappingTestCases.java
@@ -43,7 +43,6 @@
     /**
      * This is the preferred (and only) constructor.
      *
-     * @param name
      */
     public CollectionReferenceMappingTestCases(String name) throws Exception {
         super(name);
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/externalizedmetadata/mappings/composite/CompositeMappingTestCases.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/externalizedmetadata/mappings/composite/CompositeMappingTestCases.java
index b8a3cee..1276e6d 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/externalizedmetadata/mappings/composite/CompositeMappingTestCases.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/externalizedmetadata/mappings/composite/CompositeMappingTestCases.java
@@ -58,8 +58,6 @@
     /**
      * This is the preferred (and only) constructor.
      *
-     * @param name
-     * @throws Exception
      */
     public CompositeMappingTestCases(String name) throws Exception {
         super(name);
@@ -128,7 +126,6 @@
     /**
      * Return the control Employee.
      *
-     * @return
      */
     @Override
     public Object getControlObject() {
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/externalizedmetadata/mappings/compositecollection/CompositeCollecitonMappingTestCases.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/externalizedmetadata/mappings/compositecollection/CompositeCollecitonMappingTestCases.java
index 64c9b6c..79de256 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/externalizedmetadata/mappings/compositecollection/CompositeCollecitonMappingTestCases.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/externalizedmetadata/mappings/compositecollection/CompositeCollecitonMappingTestCases.java
@@ -64,7 +64,6 @@
     /**
      * This is the preferred (and only) constructor.
      *
-     * @param name
      */
     public CompositeCollecitonMappingTestCases(String name) throws Exception{
         super(name);
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/externalizedmetadata/mappings/direct/DirectMappingTestCases.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/externalizedmetadata/mappings/direct/DirectMappingTestCases.java
index 7c77e83..ca6b9e2 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/externalizedmetadata/mappings/direct/DirectMappingTestCases.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/externalizedmetadata/mappings/direct/DirectMappingTestCases.java
@@ -62,7 +62,6 @@
     /**
      * This is the preferred (and only) constructor.
      *
-     * @param name
      */
     public DirectMappingTestCases(String name) throws Exception{
         super(name);
@@ -194,7 +193,6 @@
     /**
      * Validates user-defined properties set via xml metadata.
      *
-     * @param props
      */
     private void validateProperties(Map props) {
         assertTrue("Expected [" + PROPCOUNT + "] user-defined properties, but there were [" + props.size() + "]", props.size() == PROPCOUNT);
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/externalizedmetadata/mappings/directcollection/DirectCollectionMappingTestCases.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/externalizedmetadata/mappings/directcollection/DirectCollectionMappingTestCases.java
index dfacbf2..46433ec 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/externalizedmetadata/mappings/directcollection/DirectCollectionMappingTestCases.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/externalizedmetadata/mappings/directcollection/DirectCollectionMappingTestCases.java
@@ -56,7 +56,6 @@
     /**
      * This is the preferred (and only) constructor.
      *
-     * @param name
      */
     public DirectCollectionMappingTestCases(String name) throws Exception{
         super(name);
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/externalizedmetadata/mappings/multiple/MultipleMappingPerFieldTestCases.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/externalizedmetadata/mappings/multiple/MultipleMappingPerFieldTestCases.java
index 725ec17..2bb624a 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/externalizedmetadata/mappings/multiple/MultipleMappingPerFieldTestCases.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/externalizedmetadata/mappings/multiple/MultipleMappingPerFieldTestCases.java
@@ -49,7 +49,6 @@
     /**
      * This is the preferred (and only) constructor.
      *
-     * @param name
      */
     public MultipleMappingPerFieldTestCases(String name) throws Exception{
         super(name);
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/externalizedmetadata/mappings/objectreference/ObjectReferenceMappingReadOnlyTestCases.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/externalizedmetadata/mappings/objectreference/ObjectReferenceMappingReadOnlyTestCases.java
index 4ebd7e5..cc6ea09 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/externalizedmetadata/mappings/objectreference/ObjectReferenceMappingReadOnlyTestCases.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/externalizedmetadata/mappings/objectreference/ObjectReferenceMappingReadOnlyTestCases.java
@@ -38,7 +38,6 @@
         /**
          * This is the preferred (and only) constructor.
          *
-         * @param name
          */
         public ObjectReferenceMappingReadOnlyTestCases(String name) throws Exception {
             super(name);
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/externalizedmetadata/mappings/objectreference/ObjectReferenceMappingTestCases.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/externalizedmetadata/mappings/objectreference/ObjectReferenceMappingTestCases.java
index 564ee87..1414e36 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/externalizedmetadata/mappings/objectreference/ObjectReferenceMappingTestCases.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/externalizedmetadata/mappings/objectreference/ObjectReferenceMappingTestCases.java
@@ -44,7 +44,6 @@
     /**
      * This is the preferred (and only) constructor.
      *
-     * @param name
      */
     public ObjectReferenceMappingTestCases(String name) throws Exception {
         super(name);
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/externalizedmetadata/mappings/objectreference/ObjectReferenceMappingWriteOnlyTestCases.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/externalizedmetadata/mappings/objectreference/ObjectReferenceMappingWriteOnlyTestCases.java
index a1e37b8..3bfd682 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/externalizedmetadata/mappings/objectreference/ObjectReferenceMappingWriteOnlyTestCases.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/externalizedmetadata/mappings/objectreference/ObjectReferenceMappingWriteOnlyTestCases.java
@@ -36,7 +36,6 @@
     /**
      * This is the preferred (and only) constructor.
      *
-     * @param name
      */
     public ObjectReferenceMappingWriteOnlyTestCases(String name) throws Exception {
         super(name);
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/externalizedmetadata/xmlaccessororder/XmlAccessorOrderTestCases.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/externalizedmetadata/xmlaccessororder/XmlAccessorOrderTestCases.java
index 329aa32..3d2fda3 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/externalizedmetadata/xmlaccessororder/XmlAccessorOrderTestCases.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/externalizedmetadata/xmlaccessororder/XmlAccessorOrderTestCases.java
@@ -41,7 +41,6 @@
     /**
      * This is the preferred (and only) constructor.
      *
-     * @param name
      */
     public XmlAccessorOrderTestCases(String name) throws Exception{
         super(name);
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/externalizedmetadata/xmlaccessortype/XmlAccessorTypeTestCases.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/externalizedmetadata/xmlaccessortype/XmlAccessorTypeTestCases.java
index 73ad4cb..d6ac3cb 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/externalizedmetadata/xmlaccessortype/XmlAccessorTypeTestCases.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/externalizedmetadata/xmlaccessortype/XmlAccessorTypeTestCases.java
@@ -38,7 +38,6 @@
     /**
      * This is the preferred (and only) constructor.
      *
-     * @param name
      */
     public XmlAccessorTypeTestCases(String name) throws Exception{
         super(name);
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/externalizedmetadata/xmlaccessortype/field/XmlAccessorTypeFieldTestCases.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/externalizedmetadata/xmlaccessortype/field/XmlAccessorTypeFieldTestCases.java
index 85ac0ae..e476240 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/externalizedmetadata/xmlaccessortype/field/XmlAccessorTypeFieldTestCases.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/externalizedmetadata/xmlaccessortype/field/XmlAccessorTypeFieldTestCases.java
@@ -40,7 +40,6 @@
     /**
      * This is the preferred (and only) constructor.
      *
-     * @param name
      */
     public XmlAccessorTypeFieldTestCases(String name) throws Exception{
         super(name);
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/externalizedmetadata/xmlaccessortype/inheritance/XmlAccessorTypeInheritanceTestCases.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/externalizedmetadata/xmlaccessortype/inheritance/XmlAccessorTypeInheritanceTestCases.java
index 9c30ebe..480debd 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/externalizedmetadata/xmlaccessortype/inheritance/XmlAccessorTypeInheritanceTestCases.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/externalizedmetadata/xmlaccessortype/inheritance/XmlAccessorTypeInheritanceTestCases.java
@@ -34,7 +34,6 @@
     /**
      * This is the preferred (and only) constructor.
      *
-     * @param name
      */
     public XmlAccessorTypeInheritanceTestCases(String name) throws Exception {
         super(name);
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/externalizedmetadata/xmlaccessortype/none/XmlAccessorTypeNoneTestCases.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/externalizedmetadata/xmlaccessortype/none/XmlAccessorTypeNoneTestCases.java
index 44b3c94..88361f5 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/externalizedmetadata/xmlaccessortype/none/XmlAccessorTypeNoneTestCases.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/externalizedmetadata/xmlaccessortype/none/XmlAccessorTypeNoneTestCases.java
@@ -37,7 +37,6 @@
     /**
      * This is the preferred (and only) constructor.
      *
-     * @param name
      */
     public XmlAccessorTypeNoneTestCases(String name) throws Exception{
         super(name);
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/externalizedmetadata/xmlaccessortype/none/XmlAccessorTypeNoneWithPropOrderTestCases.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/externalizedmetadata/xmlaccessortype/none/XmlAccessorTypeNoneWithPropOrderTestCases.java
index d6053c0..e34e65a 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/externalizedmetadata/xmlaccessortype/none/XmlAccessorTypeNoneWithPropOrderTestCases.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/externalizedmetadata/xmlaccessortype/none/XmlAccessorTypeNoneWithPropOrderTestCases.java
@@ -37,7 +37,6 @@
     /**
      * This is the preferred (and only) constructor.
      *
-     * @param name
      */
     public XmlAccessorTypeNoneWithPropOrderTestCases(String name) throws Exception{
         super(name);
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/externalizedmetadata/xmlaccessortype/packagelevel/XmlAccessorTypePackageTestCases.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/externalizedmetadata/xmlaccessortype/packagelevel/XmlAccessorTypePackageTestCases.java
index dc7b8b7..1c5841b 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/externalizedmetadata/xmlaccessortype/packagelevel/XmlAccessorTypePackageTestCases.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/externalizedmetadata/xmlaccessortype/packagelevel/XmlAccessorTypePackageTestCases.java
@@ -41,7 +41,6 @@
     /**
      * This is the preferred (and only) constructor.
      *
-     * @param name
      */
     public XmlAccessorTypePackageTestCases(String name) throws Exception{
         super(name);
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/externalizedmetadata/xmlaccessortype/packagelevel/classoverride/XmlAccessorTypePackageClassOverrideTestCases.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/externalizedmetadata/xmlaccessortype/packagelevel/classoverride/XmlAccessorTypePackageClassOverrideTestCases.java
index 11d8cb9..30a4630 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/externalizedmetadata/xmlaccessortype/packagelevel/classoverride/XmlAccessorTypePackageClassOverrideTestCases.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/externalizedmetadata/xmlaccessortype/packagelevel/classoverride/XmlAccessorTypePackageClassOverrideTestCases.java
@@ -41,7 +41,6 @@
     /**
      * This is the preferred (and only) constructor.
      *
-     * @param name
      */
     public XmlAccessorTypePackageClassOverrideTestCases(String name) throws Exception{
         super(name);
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/externalizedmetadata/xmlaccessortype/packagelevel/javaclassoverride/XmlAccessorTypePackageJavaClassOverrideTestCases.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/externalizedmetadata/xmlaccessortype/packagelevel/javaclassoverride/XmlAccessorTypePackageJavaClassOverrideTestCases.java
index 6b3b323..45bdaed 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/externalizedmetadata/xmlaccessortype/packagelevel/javaclassoverride/XmlAccessorTypePackageJavaClassOverrideTestCases.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/externalizedmetadata/xmlaccessortype/packagelevel/javaclassoverride/XmlAccessorTypePackageJavaClassOverrideTestCases.java
@@ -42,7 +42,6 @@
     /**
      * This is the preferred (and only) constructor.
      *
-     * @param name
      */
     public XmlAccessorTypePackageJavaClassOverrideTestCases(String name) throws Exception{
         super(name);
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/externalizedmetadata/xmlaccessortype/packagelevel/nooverride/XmlAccessorTypePackageNoOverrideTestCases.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/externalizedmetadata/xmlaccessortype/packagelevel/nooverride/XmlAccessorTypePackageNoOverrideTestCases.java
index 0017685..78946e4 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/externalizedmetadata/xmlaccessortype/packagelevel/nooverride/XmlAccessorTypePackageNoOverrideTestCases.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/externalizedmetadata/xmlaccessortype/packagelevel/nooverride/XmlAccessorTypePackageNoOverrideTestCases.java
@@ -35,7 +35,6 @@
     /**
      * This is the preferred (and only) constructor.
      *
-     * @param name
      */
     public XmlAccessorTypePackageNoOverrideTestCases(String name) throws Exception{
         super(name);
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/externalizedmetadata/xmlaccessortype/property/XmlAccessorTypePropertyTestCases.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/externalizedmetadata/xmlaccessortype/property/XmlAccessorTypePropertyTestCases.java
index 8ac82e5..4560265 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/externalizedmetadata/xmlaccessortype/property/XmlAccessorTypePropertyTestCases.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/externalizedmetadata/xmlaccessortype/property/XmlAccessorTypePropertyTestCases.java
@@ -40,7 +40,6 @@
     /**
      * This is the preferred (and only) constructor.
      *
-     * @param name
      */
     public XmlAccessorTypePropertyTestCases(String name) throws Exception{
         super(name);
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/externalizedmetadata/xmlaccessortype/publicmember/XmlAccessorTypePublicMemberTestCases.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/externalizedmetadata/xmlaccessortype/publicmember/XmlAccessorTypePublicMemberTestCases.java
index 89b10c4..9cdbc94 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/externalizedmetadata/xmlaccessortype/publicmember/XmlAccessorTypePublicMemberTestCases.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/externalizedmetadata/xmlaccessortype/publicmember/XmlAccessorTypePublicMemberTestCases.java
@@ -40,7 +40,6 @@
     /**
      * This is the preferred (and only) constructor.
      *
-     * @param name
      */
     public XmlAccessorTypePublicMemberTestCases(String name) throws Exception{
         super(name);
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/externalizedmetadata/xmlanyattribute/XmlAnyAttributeTestCases.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/externalizedmetadata/xmlanyattribute/XmlAnyAttributeTestCases.java
index fcd2106..cd81d80 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/externalizedmetadata/xmlanyattribute/XmlAnyAttributeTestCases.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/externalizedmetadata/xmlanyattribute/XmlAnyAttributeTestCases.java
@@ -45,7 +45,6 @@
     /**
      * This is the preferred (and only) constructor.
      *
-     * @param name
      */
     public XmlAnyAttributeTestCases(String name) throws Exception{
         super(name);
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/externalizedmetadata/xmlattachmentref/XmlAttachmentRefCases.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/externalizedmetadata/xmlattachmentref/XmlAttachmentRefCases.java
index a117559..980415b 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/externalizedmetadata/xmlattachmentref/XmlAttachmentRefCases.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/externalizedmetadata/xmlattachmentref/XmlAttachmentRefCases.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 1998, 2020 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1998, 2021 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0 which is available at
@@ -45,7 +45,6 @@
     /**
      * This is the preferred (and only) constructor.
      *
-     * @param name
      */
     public XmlAttachmentRefCases(String name) {
         super(name);
@@ -69,7 +68,6 @@
      * object and comparing the documents.
      *
      * Positive test.
-     * @throws JAXBException
      */
     public void testXmlAttachmentRefUnmarshalThenMarshal() throws JAXBException {
       /*  String metadataFile = PATH + "eclipselink-oxm.xml";
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/externalizedmetadata/xmlattribute/XmlAttributeTestCases.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/externalizedmetadata/xmlattribute/XmlAttributeTestCases.java
index 4341514..2f41cbd 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/externalizedmetadata/xmlattribute/XmlAttributeTestCases.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/externalizedmetadata/xmlattribute/XmlAttributeTestCases.java
@@ -44,7 +44,6 @@
     /**
      * This is the preferred (and only) constructor.
      *
-     * @param name
      */
     public XmlAttributeTestCases(String name) throws Exception{
         super(name);
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/externalizedmetadata/xmlclassextractor/XmlClassExtractorTestCases.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/externalizedmetadata/xmlclassextractor/XmlClassExtractorTestCases.java
index 385cd1d..92129bd 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/externalizedmetadata/xmlclassextractor/XmlClassExtractorTestCases.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/externalizedmetadata/xmlclassextractor/XmlClassExtractorTestCases.java
@@ -42,7 +42,6 @@
     /**
      * This is the preferred (and only) constructor.
      *
-     * @param name
      */
     public XmlClassExtractorTestCases(String name) throws Exception{
         super(name);
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/externalizedmetadata/xmlcustomizer/XmlCustomizerTestCases.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/externalizedmetadata/xmlcustomizer/XmlCustomizerTestCases.java
index 86d84e4..7e29498 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/externalizedmetadata/xmlcustomizer/XmlCustomizerTestCases.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/externalizedmetadata/xmlcustomizer/XmlCustomizerTestCases.java
@@ -72,7 +72,6 @@
      * 'last-name' respectively.
      *
      * Negative test.
-     * @throws JAXBException
      */
     public void testXmlCustomizerNoOverrideFail() throws JAXBException {
         Class<?>[] classes = {
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/externalizedmetadata/xmldiscriminator/XmlDiscriminatorTestCases.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/externalizedmetadata/xmldiscriminator/XmlDiscriminatorTestCases.java
index 274afd8..9e0943f 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/externalizedmetadata/xmldiscriminator/XmlDiscriminatorTestCases.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/externalizedmetadata/xmldiscriminator/XmlDiscriminatorTestCases.java
@@ -41,7 +41,6 @@
     /**
      * This is the preferred (and only) constructor.
      *
-     * @param name
      */
     public XmlDiscriminatorTestCases(String name)throws Exception {
         super(name);
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/externalizedmetadata/xmlelement/XmlElementTestCases.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/externalizedmetadata/xmlelement/XmlElementTestCases.java
index b35bc7f..065bc85 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/externalizedmetadata/xmlelement/XmlElementTestCases.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/externalizedmetadata/xmlelement/XmlElementTestCases.java
@@ -50,8 +50,6 @@
     /**
      * This is the preferred (and only) constructor.
      *
-     * @param name
-     * @throws Exception
      */
     public XmlElementTestCases(String name) throws Exception {
         super(name);
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/externalizedmetadata/xmlelementref/XmlElementRefTestCases.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/externalizedmetadata/xmlelementref/XmlElementRefTestCases.java
index cc3cf1f..e4a4294 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/externalizedmetadata/xmlelementref/XmlElementRefTestCases.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/externalizedmetadata/xmlelementref/XmlElementRefTestCases.java
@@ -40,7 +40,6 @@
     /**
      * This is the preferred (and only) constructor.
      *
-     * @param name
      */
     public XmlElementRefTestCases(String name)throws Exception {
         super(name);
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/externalizedmetadata/xmlelementrefs/XmlElementRefsTestCases.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/externalizedmetadata/xmlelementrefs/XmlElementRefsTestCases.java
index f9df642..6e2bc2f 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/externalizedmetadata/xmlelementrefs/XmlElementRefsTestCases.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/externalizedmetadata/xmlelementrefs/XmlElementRefsTestCases.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2011, 2020 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2011, 2021 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0 which is available at
@@ -62,7 +62,6 @@
      * Tests @XmlElementRefs via eclipselink-oxm.xml.
      *
      * Positive test.
-     * @throws JAXBException
      */
     public void testXmlElementRefs() throws JAXBException {
         // load XML metadata
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/externalizedmetadata/xmlelements/XmlElementsTestCases.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/externalizedmetadata/xmlelements/XmlElementsTestCases.java
index c87f806..b8f4194 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/externalizedmetadata/xmlelements/XmlElementsTestCases.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/externalizedmetadata/xmlelements/XmlElementsTestCases.java
@@ -46,9 +46,7 @@
      /**
      * This is the preferred (and only) constructor.
      *
-     * @param name
-     * @throws Exception
-     */
+      */
     public XmlElementsTestCases(String name) throws Exception {
         super(name);
         setClasses(new Class[] { Foo.class });
@@ -103,7 +101,6 @@
      * xml-element-wrapper and xml-idref are used.
      *
      * Positive test.
-     * @throws Exception
      */
 
     public void testXmlElementsWithIdRefSchemaGen() throws Exception {
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/externalizedmetadata/xmlelementwrapper/XmlElemenetWrapperNilTestCases.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/externalizedmetadata/xmlelementwrapper/XmlElemenetWrapperNilTestCases.java
index 66d6182..c109d18 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/externalizedmetadata/xmlelementwrapper/XmlElemenetWrapperNilTestCases.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/externalizedmetadata/xmlelementwrapper/XmlElemenetWrapperNilTestCases.java
@@ -33,8 +33,6 @@
     /**
      * This is the preferred (and only) constructor.
      *
-     * @param name
-     * @throws Exception
      */
     public XmlElemenetWrapperNilTestCases(String name) throws Exception {
         super(name);
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/externalizedmetadata/xmlelementwrapper/XmlElementWrapperElementOverrideTestCases.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/externalizedmetadata/xmlelementwrapper/XmlElementWrapperElementOverrideTestCases.java
index 145fea3..736dac3 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/externalizedmetadata/xmlelementwrapper/XmlElementWrapperElementOverrideTestCases.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/externalizedmetadata/xmlelementwrapper/XmlElementWrapperElementOverrideTestCases.java
@@ -34,8 +34,6 @@
     /**
      * This is the preferred (and only) constructor.
      *
-     * @param name
-     * @throws Exception
      */
     public XmlElementWrapperElementOverrideTestCases(String name) throws Exception {
         super(name);
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/externalizedmetadata/xmlelementwrapper/XmlElementWrapperTestCases.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/externalizedmetadata/xmlelementwrapper/XmlElementWrapperTestCases.java
index 322bdb1..483f96b 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/externalizedmetadata/xmlelementwrapper/XmlElementWrapperTestCases.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/externalizedmetadata/xmlelementwrapper/XmlElementWrapperTestCases.java
@@ -40,8 +40,6 @@
     /**
      * This is the preferred (and only) constructor.
      *
-     * @param name
-     * @throws Exception
      */
     public XmlElementWrapperTestCases(String name) throws Exception {
         super(name);
@@ -98,7 +96,6 @@
      * so the class annotations should be used to generate the schema.
      *
      * Positive test.
-     * @throws Exception
      */
     public void testXmlElementWrapperNoOverrideSchemaGen() throws Exception {
          JAXBContext ctx = JAXBContextFactory.createContext(new Class[] { Employee.class }, null);
@@ -129,14 +126,13 @@
      * Tests @XmlElementWrapper via eclipselink-oxm.xml.  Here, a number of
      * overrides are performed.
      *
-     * Here, @XmlElementWrapper.namespace() is not "##default" and different
+     * Here, {@code @XmlElementWrapper.namespace()} is not "{@code ##default}" and different
      * from the target namespace of the enclosing class.  An element declaration
      * whose name is @XmlElementWrapper.name() and target namespace is
-     * @XmlElementWrapper.namespace() should be generated.  Note: The element
+     * {@code @XmlElementWrapper.namespace()} should be generated.  Note: The element
      * declaration is assumed to already exist and is not created.
      *
      * Positive test.
-     * @throws Exception
      */
     public void testXmlElementWrapperNSSchemaGen() throws Exception {
         InputStream inputStream = ClassLoader.getSystemResourceAsStream("org/eclipse/persistence/testing/jaxb/externalizedmetadata/xmlelementwrapper/eclipselink-oxm-ns.xml");
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/externalizedmetadata/xmlenum/XmlEnumInheritanceTestCases.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/externalizedmetadata/xmlenum/XmlEnumInheritanceTestCases.java
index 2245be3..666c642 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/externalizedmetadata/xmlenum/XmlEnumInheritanceTestCases.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/externalizedmetadata/xmlenum/XmlEnumInheritanceTestCases.java
@@ -36,8 +36,6 @@
     /**
      * This is the preferred (and only) constructor.
      *
-     * @param name
-     * @throws Exception
      */
     public XmlEnumInheritanceTestCases(String name) throws Exception {
         super(name);
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/externalizedmetadata/xmlenum/XmlEnumQualifiedTestCases.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/externalizedmetadata/xmlenum/XmlEnumQualifiedTestCases.java
index e8a40da..96c3326 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/externalizedmetadata/xmlenum/XmlEnumQualifiedTestCases.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/externalizedmetadata/xmlenum/XmlEnumQualifiedTestCases.java
@@ -36,8 +36,6 @@
     /**
      * This is the preferred (and only) constructor.
      *
-     * @param name
-     * @throws Exception
      */
     public XmlEnumQualifiedTestCases(String name) throws Exception {
         super(name);
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/externalizedmetadata/xmlenum/XmlEnumTestCases.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/externalizedmetadata/xmlenum/XmlEnumTestCases.java
index b0237c4..80c7c10 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/externalizedmetadata/xmlenum/XmlEnumTestCases.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/externalizedmetadata/xmlenum/XmlEnumTestCases.java
@@ -36,8 +36,6 @@
     /**
      * This is the preferred (and only) constructor.
      *
-     * @param name
-     * @throws Exception
      */
     public XmlEnumTestCases(String name) throws Exception {
         super(name);
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/externalizedmetadata/xmlenum/XmlEnumUnqualifiedTestCases.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/externalizedmetadata/xmlenum/XmlEnumUnqualifiedTestCases.java
index 4abb137..c0a8167 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/externalizedmetadata/xmlenum/XmlEnumUnqualifiedTestCases.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/externalizedmetadata/xmlenum/XmlEnumUnqualifiedTestCases.java
@@ -36,8 +36,6 @@
     /**
      * This is the preferred (and only) constructor.
      *
-     * @param name
-     * @throws Exception
      */
     public XmlEnumUnqualifiedTestCases(String name) throws Exception {
         super(name);
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/externalizedmetadata/xmlinlinebinarydata/XmlInlineBinaryDataTestCases.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/externalizedmetadata/xmlinlinebinarydata/XmlInlineBinaryDataTestCases.java
index 1756512..ff0dca3 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/externalizedmetadata/xmlinlinebinarydata/XmlInlineBinaryDataTestCases.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/externalizedmetadata/xmlinlinebinarydata/XmlInlineBinaryDataTestCases.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2011, 2020 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2011, 2021 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0 which is available at
@@ -63,7 +63,6 @@
      * we should use an attachment, and not inline the binary data.
      *
      * Positive test.
-     * @throws JAXBException
      */
     public void testClassLevelXmlInlineBinaryOverride() throws JAXBException {
         String metadataFile = PATH + "eclipselink-oxm-class-override.xml";
@@ -129,7 +128,6 @@
      * using an attachment.
      *
      * Positive test.
-     * @throws JAXBException
      */
     public void testPropertyLevelXmlInlineBinaryOverride() throws JAXBException {
         String metadataFile = PATH + "eclipselink-oxm-property.xml";
@@ -190,7 +188,6 @@
      * Positive test.
      *
      * THIS TEST CAN BE ENABLED UPON RESOLUTION OF BUG# 299948
-     * @throws JAXBException
      */
     public void testClassLevelXmlInlineBinaryNoOverride() throws JAXBException {
         JAXBContext jaxbContext = null;
@@ -259,7 +256,6 @@
      * not inline the binary data.
      *
      * Positive test.
-     * @throws JAXBException
      */
     public void testPropertyLevelXmlInlineBinaryOverrideViaMetadata() throws JAXBException {
         String metadataFile = PATH + "eclipselink-oxm-property-override.xml";
@@ -323,7 +319,6 @@
      * class annotations, and no property level XML metadata declarations.
      *
      * Positive test.
-     * @throws JAXBException
      */
     public void testClassLevelXmlInlineBinaryViaMetadata() throws JAXBException {
         String metadataFile = PATH + "eclipselink-oxm-class.xml";
@@ -384,7 +379,6 @@
      * Positive test.
      *
      * THIS TEST CAN BE ENABLED UPON RESOLUTION OF BUG# 299948
-     * @throws JAXBException
      */
     public void testPropertyLevelXmlInlineBinaryViaMetadata() throws JAXBException {
         String metadataFile = PATH + "eclipselink-oxm.xml";
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/externalizedmetadata/xmljoinnode/XmlJoinNodeTestCases.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/externalizedmetadata/xmljoinnode/XmlJoinNodeTestCases.java
index ff92631..66aa5c7 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/externalizedmetadata/xmljoinnode/XmlJoinNodeTestCases.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/externalizedmetadata/xmljoinnode/XmlJoinNodeTestCases.java
@@ -55,7 +55,6 @@
     /**
      * This is the preferred (and only) constructor.
      *
-     * @param name
      */
     public XmlJoinNodeTestCases(String name) throws Exception{
         super(name);
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/externalizedmetadata/xmllist/XmlListTestCases.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/externalizedmetadata/xmllist/XmlListTestCases.java
index 1c8342f..dff15e5 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/externalizedmetadata/xmllist/XmlListTestCases.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/externalizedmetadata/xmllist/XmlListTestCases.java
@@ -39,7 +39,6 @@
     /**
      * This is the preferred (and only) constructor.
      *
-     * @param name
      */
     public XmlListTestCases(String name) throws Exception{
         super(name);
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/externalizedmetadata/xmlmimetype/XmlMimeTypeCases.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/externalizedmetadata/xmlmimetype/XmlMimeTypeCases.java
index 66f7c55..63887db 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/externalizedmetadata/xmlmimetype/XmlMimeTypeCases.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/externalizedmetadata/xmlmimetype/XmlMimeTypeCases.java
@@ -38,7 +38,6 @@
     /**
      * This is the preferred (and only) constructor.
      *
-     * @param name
      */
     public XmlMimeTypeCases(String name) throws Exception {
         super(name);
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/externalizedmetadata/xmlmixed/XmlMixedTestCases.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/externalizedmetadata/xmlmixed/XmlMixedTestCases.java
index 0acef0c..f816154 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/externalizedmetadata/xmlmixed/XmlMixedTestCases.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/externalizedmetadata/xmlmixed/XmlMixedTestCases.java
@@ -40,8 +40,6 @@
     /**
      * This is the preferred (and only) constructor.
      *
-     * @param name
-     * @throws Exception
      */
     public XmlMixedTestCases(String name) throws Exception {
         super(name);
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/externalizedmetadata/xmlregistry/XmlRegistryTestCases.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/externalizedmetadata/xmlregistry/XmlRegistryTestCases.java
index b376ed8..40296af 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/externalizedmetadata/xmlregistry/XmlRegistryTestCases.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/externalizedmetadata/xmlregistry/XmlRegistryTestCases.java
@@ -40,7 +40,6 @@
     /**
      * This is the preferred (and only) constructor.
      *
-     * @param name
      */
     public XmlRegistryTestCases(String name) throws Exception {
         super(name);
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/externalizedmetadata/xmlrootelement/XmlRootElementTestCases.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/externalizedmetadata/xmlrootelement/XmlRootElementTestCases.java
index 0175a48..2ad4dac 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/externalizedmetadata/xmlrootelement/XmlRootElementTestCases.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/externalizedmetadata/xmlrootelement/XmlRootElementTestCases.java
@@ -38,7 +38,6 @@
     /**
      * This is the preferred (and only) constructor.
      *
-     * @param name
      */
     public XmlRootElementTestCases(String name) throws Exception {
         super(name);
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/externalizedmetadata/xmlschema/XmlSchemaTestCases.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/externalizedmetadata/xmlschema/XmlSchemaTestCases.java
index da83f46..26d78e5 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/externalizedmetadata/xmlschema/XmlSchemaTestCases.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/externalizedmetadata/xmlschema/XmlSchemaTestCases.java
@@ -54,7 +54,6 @@
     /**
      * This is the preferred (and only) constructor.
      *
-     * @param name
      */
     public XmlSchemaTestCases(String name) throws Exception {
         super(name);
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/externalizedmetadata/xmlschema/namespace/linked/LinkedNamespacesTestCases.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/externalizedmetadata/xmlschema/namespace/linked/LinkedNamespacesTestCases.java
index 9779313..891a0a5 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/externalizedmetadata/xmlschema/namespace/linked/LinkedNamespacesTestCases.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/externalizedmetadata/xmlschema/namespace/linked/LinkedNamespacesTestCases.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2016, 2020 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2016, 2021 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0 which is available at
@@ -101,7 +101,6 @@
     /**
      * Tests that marshaling of {@link Article} object results in valid XML.
      *
-     * @throws Exception
      */
     @Test
     public void testArticleValidateOutput() throws Exception {
@@ -118,7 +117,6 @@
     /**
      * Tests that marshaling of {@link Book} object results in valid XML.
      *
-     * @throws Exception
      */
     @Test
     public void testBookValidateOutput() throws Exception {
@@ -135,7 +133,6 @@
     /**
      * Tests that reading a marshaled {@link Article} object results in an object equal to the original.
      *
-     * @throws Exception
      */
     @Test
     public void testArticleRoundTrip() throws Exception {
@@ -154,7 +151,6 @@
     /**
      * Tests that reading a marshaled {@link Book} object results in an object equal to the original.
      *
-     * @throws Exception
      */
     @Test
     public void testBookRoundTrip() throws Exception {
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/externalizedmetadata/xmlschematypes/XmlSchemaTypesTestCases.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/externalizedmetadata/xmlschematypes/XmlSchemaTypesTestCases.java
index 334e2ae..ae2a29a 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/externalizedmetadata/xmlschematypes/XmlSchemaTypesTestCases.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/externalizedmetadata/xmlschematypes/XmlSchemaTypesTestCases.java
@@ -44,7 +44,6 @@
     /**
      * This is the preferred (and only) constructor.
      *
-     * @param name
      */
     public XmlSchemaTypesTestCases(String name) throws Exception{
         super(name);
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/externalizedmetadata/xmlseealso/XmlSeeAlsoTestCases.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/externalizedmetadata/xmlseealso/XmlSeeAlsoTestCases.java
index 5d8f471..6c07787 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/externalizedmetadata/xmlseealso/XmlSeeAlsoTestCases.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/externalizedmetadata/xmlseealso/XmlSeeAlsoTestCases.java
@@ -29,7 +29,7 @@
 
 /**
  * Tests generation for Employee when xml-see-also is defined.  Overrides the
- * @XmlSeeAlso on Employee (XmlSeeAlsoTestCases.class) with (MySimpleClass,
+ * {@code @XmlSeeAlso} on Employee (XmlSeeAlsoTestCases.class) with (MySimpleClass,
  * MyOtherClass)
  *
  * Positive test.
@@ -41,7 +41,6 @@
     /**
      * This is the preferred (and only) constructor.
      *
-     * @param name
      */
     public XmlSeeAlsoTestCases(String name) throws Exception{
         super(name);
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/externalizedmetadata/xmltransient/XmlTransientTestCases.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/externalizedmetadata/xmltransient/XmlTransientTestCases.java
index 0132b12..37ff37b 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/externalizedmetadata/xmltransient/XmlTransientTestCases.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/externalizedmetadata/xmltransient/XmlTransientTestCases.java
@@ -38,7 +38,6 @@
     /**
      * This is the preferred (and only) constructor.
      *
-     * @param name
      */
     public XmlTransientTestCases(String name) throws Exception{
         super(name);
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/externalizedmetadata/xmltype/XmlTypeTestCases.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/externalizedmetadata/xmltype/XmlTypeTestCases.java
index d6ab2d4..5168bf7 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/externalizedmetadata/xmltype/XmlTypeTestCases.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/externalizedmetadata/xmltype/XmlTypeTestCases.java
@@ -40,7 +40,6 @@
     /**
      * This is the preferred (and only) constructor.
      *
-     * @param name
      */
     public XmlTypeTestCases(String name) throws Exception {
         super(name);
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/externalizedmetadata/xmlvalue/XmlValueTestCases.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/externalizedmetadata/xmlvalue/XmlValueTestCases.java
index 41f66a4..1392ebe 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/externalizedmetadata/xmlvalue/XmlValueTestCases.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/externalizedmetadata/xmlvalue/XmlValueTestCases.java
@@ -42,7 +42,6 @@
     /**
      * This is the preferred (and only) constructor.
      *
-     * @param name
      */
     public XmlValueTestCases(String name) throws Exception{
         super(name);
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/schemagen/SchemaGenTestCases.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/schemagen/SchemaGenTestCases.java
index 4b41643..a8d4759 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/schemagen/SchemaGenTestCases.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/schemagen/SchemaGenTestCases.java
@@ -45,7 +45,6 @@
     /**
      * This is the preferred (and only) constructor.
      *
-     * @param name
      */
     public SchemaGenTestCases(String name) {
         super(name);
@@ -54,9 +53,6 @@
     /**
      * Generate one or more schemas from deployment xml.
      *
-     * @param contextPath
-     * @param outputResolver
-     * @param additionalGlobalElements
      */
     protected void generateSchema(String contextPath, MySchemaOutputResolver outputResolver, Map<QName, Type> additionalGlobalElements) {
         JAXBContext jaxbContext;
@@ -71,9 +67,6 @@
     /**
      * Generate one or more schemas from an array of Classes.
      *
-     * @param classesToBeBound
-     * @param outputResolver
-     * @param additionalGlobalElements
      */
     protected void generateSchema(Class[] classesToBeBound, MySchemaOutputResolver outputResolver, Map<QName, Type> additionalGlobalElements) throws Exception {
         JAXBContext jaxbContext;
@@ -88,9 +81,6 @@
     /**
      * Generate one or more schemas from an array of Types.
      *
-     * @param typesToBeBound
-     * @param outputResolver
-     * @param additionalGlobalElements
      */
     protected void generateSchema(Type[] typesToBeBound, MySchemaOutputResolver outputResolver, Map<QName, Type> additionalGlobalElements) {
         JAXBContext jaxbContext;
@@ -115,7 +105,6 @@
     /**
      * Validates a given instance doc against the generated schema.
      *
-     * @param src
      * @param schemaIndex index in output resolver's list of generated schemas
      * @param outputResolver contains one or more schemas to validate against
      */
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/schemagen/classarray/ClassArraySchemaGenTestCases.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/schemagen/classarray/ClassArraySchemaGenTestCases.java
index 5dc30c1..286b16a 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/schemagen/classarray/ClassArraySchemaGenTestCases.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/schemagen/classarray/ClassArraySchemaGenTestCases.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 1998, 2019 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1998, 2021 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0 which is available at
@@ -43,7 +43,6 @@
     /**
      * This is the preferred (and only) constructor.
      *
-     * @param name
      */
     public ClassArraySchemaGenTestCases(String name) throws Exception {
         super(name);
@@ -90,7 +89,6 @@
     /**
      * Tests user-set additional global element generation (Employee).
      *
-     * @throws Exception
      */
     public void testSchemaGenFromClassArrayWithElements() throws Exception {
         generateSchema();
@@ -109,7 +107,6 @@
     /**
      * Tests user-set additional global element generation (String)
      *
-     * @throws Exception
      */
     public void testSchemaGenFromClassArrayWithStringElement() throws Exception {
         generateSchema();
@@ -120,7 +117,6 @@
     /**
      * Tests user-set additional global element generation (int)
      *
-     * @throws Exception
      */
     public void testSchemaGenFromClassArrayWithIntElement() throws Exception {
         generateSchema();
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/schemagen/customizedmapping/xmlelementref/SchemaGenXmlElementRefTestCases.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/schemagen/customizedmapping/xmlelementref/SchemaGenXmlElementRefTestCases.java
index eed6fd1..c8fd5ed 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/schemagen/customizedmapping/xmlelementref/SchemaGenXmlElementRefTestCases.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/schemagen/customizedmapping/xmlelementref/SchemaGenXmlElementRefTestCases.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 1998, 2020 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1998, 2021 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0 which is available at
@@ -46,7 +46,6 @@
     /**
      * This is the preferred (and only) constructor.
      *
-     * @param name
      */
     public SchemaGenXmlElementRefTestCases(String name) throws Exception {
         super(name);
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/schemagen/customizedmapping/xmlelementwrapper/SchemaGenXmlElementWrapperTestCases.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/schemagen/customizedmapping/xmlelementwrapper/SchemaGenXmlElementWrapperTestCases.java
index 2556359..b9bfb95 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/schemagen/customizedmapping/xmlelementwrapper/SchemaGenXmlElementWrapperTestCases.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/schemagen/customizedmapping/xmlelementwrapper/SchemaGenXmlElementWrapperTestCases.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 1998, 2020 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1998, 2021 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0 which is available at
@@ -44,7 +44,6 @@
     /**
      * This is the preferred (and only) constructor.
      *
-     * @param name
      */
     public SchemaGenXmlElementWrapperTestCases(String name) throws Exception {
         super(name);
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/schemagen/customizedmapping/xmlid/SchemaGenXmlIDTestCases.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/schemagen/customizedmapping/xmlid/SchemaGenXmlIDTestCases.java
index e7d0522..7d2799c 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/schemagen/customizedmapping/xmlid/SchemaGenXmlIDTestCases.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/schemagen/customizedmapping/xmlid/SchemaGenXmlIDTestCases.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2014, 2020 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2014, 2021 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0 which is available at
@@ -27,7 +27,6 @@
     /**
      * This is the preferred (and only) constructor.
      *
-     * @param name
      */
     public SchemaGenXmlIDTestCases(String name) throws Exception {
         super(name);
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/schemagen/customizedmapping/xmlidref/SchemaGenXmlIDREFTestCases.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/schemagen/customizedmapping/xmlidref/SchemaGenXmlIDREFTestCases.java
index 8b9bfd1..477e0e3 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/schemagen/customizedmapping/xmlidref/SchemaGenXmlIDREFTestCases.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/schemagen/customizedmapping/xmlidref/SchemaGenXmlIDREFTestCases.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 1998, 2020 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1998, 2021 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0 which is available at
@@ -43,7 +43,6 @@
     /**
      * This is the preferred (and only) constructor.
      *
-     * @param name
      */
     public SchemaGenXmlIDREFTestCases(String name) throws Exception {
         super(name);
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/schemagen/customizedmapping/xmllist/SchemaGenXmlListTestCases.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/schemagen/customizedmapping/xmllist/SchemaGenXmlListTestCases.java
index d8e900d..7c12452 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/schemagen/customizedmapping/xmllist/SchemaGenXmlListTestCases.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/schemagen/customizedmapping/xmllist/SchemaGenXmlListTestCases.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 1998, 2020 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1998, 2021 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0 which is available at
@@ -43,7 +43,6 @@
     /**
      * This is the preferred (and only) constructor.
      *
-     * @param name
      */
     public SchemaGenXmlListTestCases(String name) throws Exception {
         super(name);
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/schemagen/customizedmapping/xmlrootelement/Name002.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/schemagen/customizedmapping/xmlrootelement/Name002.java
index 91d85d6..d1786e9 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/schemagen/customizedmapping/xmlrootelement/Name002.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/schemagen/customizedmapping/xmlrootelement/Name002.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 1998, 2020 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1998, 2021 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0 which is available at
@@ -18,8 +18,8 @@
 
 /**
  * Mapping:  Class to Element Declaration
- * if @XmlRootElement.name() is not ##default, then the XML name is equal to
- * @XmlRootElement.name()
+ * if {@code @XmlRootElement.name()} is not {@code ##default}, then the XML name is equal to
+ * {@code @XmlRootElement.name()}
  */
 @XmlRootElement (name="CustomName002")
 @XmlType(propOrder={"b001", "bt01", "d001", "f001", "i001", "l001", "s001", "sh01"})
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/schemagen/customizedmapping/xmlrootelement/SchemaGenXMLRootElementTestCases.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/schemagen/customizedmapping/xmlrootelement/SchemaGenXMLRootElementTestCases.java
index 34204ec..6997ffd 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/schemagen/customizedmapping/xmlrootelement/SchemaGenXMLRootElementTestCases.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/schemagen/customizedmapping/xmlrootelement/SchemaGenXMLRootElementTestCases.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 1998, 2020 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1998, 2021 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0 which is available at
@@ -36,7 +36,6 @@
     /**
      * This is the preferred (and only) constructor.
      *
-     * @param name
      */
     public SchemaGenXMLRootElementTestCases(String name) throws Exception {
         super(name);
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/schemagen/customizedmapping/xmltype/SchemaGenXMLTypeTestCases.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/schemagen/customizedmapping/xmltype/SchemaGenXMLTypeTestCases.java
index 8875fe4..c523458 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/schemagen/customizedmapping/xmltype/SchemaGenXMLTypeTestCases.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/schemagen/customizedmapping/xmltype/SchemaGenXMLTypeTestCases.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 1998, 2020 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1998, 2021 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0 which is available at
@@ -36,7 +36,6 @@
     /**
      * This is the preferred (and only) constructor.
      *
-     * @param name
      */
     public SchemaGenXMLTypeTestCases(String name) throws Exception {
         super(name);
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/schemagen/customizedmapping/xmlvalue/SchemaGenXmlValueTestCases.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/schemagen/customizedmapping/xmlvalue/SchemaGenXmlValueTestCases.java
index a104f7b..30e5179 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/schemagen/customizedmapping/xmlvalue/SchemaGenXmlValueTestCases.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/schemagen/customizedmapping/xmlvalue/SchemaGenXmlValueTestCases.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2014, 2020 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2014, 2021 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0 which is available at
@@ -25,7 +25,6 @@
     /**
      * This is the preferred (and only) constructor.
      *
-     * @param name
      */
     public SchemaGenXmlValueTestCases(String name) throws Exception {
         super(name);
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/schemagen/defaultmapping/SchemaGenMapTestCases.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/schemagen/defaultmapping/SchemaGenMapTestCases.java
index 823474c..cf79aea 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/schemagen/defaultmapping/SchemaGenMapTestCases.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/schemagen/defaultmapping/SchemaGenMapTestCases.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2014, 2020 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2014, 2021 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0 which is available at
@@ -28,7 +28,6 @@
     /**
      * This is the preferred (and only) constructor.
      *
-     * @param name
      */
     public SchemaGenMapTestCases(String name) throws Exception {
         super(name);
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/schemagen/deploymentxml/DeploymentXMLSchemaGenTestCases.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/schemagen/deploymentxml/DeploymentXMLSchemaGenTestCases.java
index 023195c..2e62299 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/schemagen/deploymentxml/DeploymentXMLSchemaGenTestCases.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/schemagen/deploymentxml/DeploymentXMLSchemaGenTestCases.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 1998, 2020 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1998, 2021 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0 which is available at
@@ -52,7 +52,6 @@
     /**
      * This is the preferred (and only) constructor.
      *
-     * @param name
      */
     public DeploymentXMLSchemaGenTestCases(String name) throws Exception {
         super(name);
@@ -99,7 +98,6 @@
     /**
      * Tests user-set additional global element generation (Employee).
      *
-     * @throws Exception
      */
     public void testSchemaGenFromProjectXmlWithElements() throws Exception {
         generateSchema();
@@ -118,7 +116,6 @@
     /**
      * Tests user-set additional global element generation (String)
      *
-     * @throws Exception
      */
     public void testSchemaGenFromProjectXmlWithStringElement() throws Exception {
         generateSchema();
@@ -129,7 +126,6 @@
     /**
      * Tests user-set additional global element generation (int)
      *
-     * @throws Exception
      */
     public void testSchemaGenFromProjectXmlWithIntElement() throws Exception {
         generateSchema();
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/schemagen/employee/SchemaGenEmployeeTestCases.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/schemagen/employee/SchemaGenEmployeeTestCases.java
index 62fd790..ba5afd1 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/schemagen/employee/SchemaGenEmployeeTestCases.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/schemagen/employee/SchemaGenEmployeeTestCases.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 1998, 2020 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1998, 2021 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0 which is available at
@@ -111,7 +111,6 @@
      * not contain a 'firstName' element, which is required as the
      * corresponding field in the Employee class contains the following
      * annotation:  @XmlElement(required = true)
-     * @throws Exception
      */
     public void xtestEmployeeSchemaGenMissingRequiredElement() throws Exception {
         boolean exception = false;
@@ -146,7 +145,6 @@
      * not contain a 'firstName' element, which is required as the
      * corresponding field in the Employee class contains the following
      * annotation:  @XmlElement(required = true)
-     * @throws Exception
      */
     public void xtestEmployeeSchemaGenMissingRequiredAttribute() throws Exception {
         boolean exception = false;
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/schemagen/typearray/TypeArraySchemaGenTestCases.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/schemagen/typearray/TypeArraySchemaGenTestCases.java
index 64dc03b..115bd40 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/schemagen/typearray/TypeArraySchemaGenTestCases.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/schemagen/typearray/TypeArraySchemaGenTestCases.java
@@ -54,7 +54,6 @@
     /**
      * This is the preferred (and only) constructor.
      *
-     * @param name
      */
     public TypeArraySchemaGenTestCases(String name) throws Exception {
         super(name);
@@ -109,7 +108,6 @@
     /**
      * Tests user-set additional global element generation (Employee).
      *
-     * @throws Exception
      */
     public void testSchemaGenFromTypesArrayWithElements() throws Exception {
         String src = PATH + "ASingleEmployee.xml";
@@ -128,7 +126,6 @@
     /**
      * Tests user-set additional global element generation (String)
      *
-     * @throws Exception
      */
     public void testSchemaGenFromTypesArrayWithStringElement() throws Exception {
         generateSchema();
@@ -139,7 +136,6 @@
     /**
      * Tests user-set additional global element generation (int)
      *
-     * @throws Exception
      */
     public void testSchemaGenFromTypesArrayWithIntElement() throws Exception {
         generateSchema();
@@ -150,7 +146,6 @@
     /**
      * Tests user-set additional global element generation ({@code List<Employee>})
      *
-     * @throws Exception
      */
     public void testSchemaGenFromTypesArrayWithParameterizedElement() throws Exception {
         generateSchema();
@@ -169,7 +164,6 @@
     /**
      * Tests user-set additional global element generation (Employee[])
      *
-     * @throws Exception
      */
     public void testSchemaGenFromTypesArrayWithArrayElement() throws Exception {
         generateSchema();
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/typemappinginfo/TypeMappingInfoTestCases.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/typemappinginfo/TypeMappingInfoTestCases.java
index 3967b56..272458b 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/typemappinginfo/TypeMappingInfoTestCases.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/typemappinginfo/TypeMappingInfoTestCases.java
@@ -360,8 +360,6 @@
 
         /**
          * Override this function to implement different read/write control documents.
-         * @return
-         * @throws Exception
          */
         protected Document getWriteControlDocument() throws Exception {
             if(writeControlDocument != null){
@@ -377,8 +375,6 @@
         /**
          * Provide an alternative write version of the control document when rountrip is not enabled.
          * If this function is not called and getWriteControlDocument() is not overridden then the write and read control documents are the same.
-         * @param xmlResource
-         * @throws Exception
          */
         protected void setWriteControlDocument(String xmlResource) throws Exception {
             writeControlDocumentLocation = xmlResource;
@@ -522,9 +518,6 @@
     /**
      * Return an Element for a given xml-element snippet.
      *
-     * @param xmlelement
-     * @return
-     * @throws Exception
      */
     protected Element getXmlElement(String xmlelement) throws Exception {
         StringReader str = new StringReader(xmlelement);
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmlaccessortype/FieldAndPropertyTestCases.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmlaccessortype/FieldAndPropertyTestCases.java
index 9a41685..7f9fb9c 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmlaccessortype/FieldAndPropertyTestCases.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmlaccessortype/FieldAndPropertyTestCases.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2011, 2020 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2011, 2021 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0 which is available at
@@ -27,7 +27,6 @@
     /**
      * This is the preferred (and only) constructor.
      *
-     * @param name
      */
     public FieldAndPropertyTestCases(String name) throws Exception {
         super(name);
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmlaccessortype/IgnoreInvalidNonPublicFieldTestCases.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmlaccessortype/IgnoreInvalidNonPublicFieldTestCases.java
index f31bda8..fc2450b 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmlaccessortype/IgnoreInvalidNonPublicFieldTestCases.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmlaccessortype/IgnoreInvalidNonPublicFieldTestCases.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2018, 2020 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2018, 2021 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0 which is available at
@@ -20,7 +20,6 @@
     /**
      * This is the preferred (and only) constructor.
      *
-     * @param name
      */
     public IgnoreInvalidNonPublicFieldTestCases(String name) throws Exception {
         super(name);
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmlelementwrapper/XmlElementWrapperTestCases.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmlelementwrapper/XmlElementWrapperTestCases.java
index 93a001a..e8740df 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmlelementwrapper/XmlElementWrapperTestCases.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmlelementwrapper/XmlElementWrapperTestCases.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 1998, 2020 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1998, 2021 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0 which is available at
@@ -41,8 +41,6 @@
     /**
      * This is the preferred (and only) constructor.
      *
-     * @param name
-     * @throws Exception
      */
     public XmlElementWrapperTestCases(String name) throws Exception {
         super(name);
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmlmarshaller/UnmarshallerTestCases.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmlmarshaller/UnmarshallerTestCases.java
index 1e4bae3..9526012 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmlmarshaller/UnmarshallerTestCases.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmlmarshaller/UnmarshallerTestCases.java
@@ -238,13 +238,13 @@
     public void testJAXBClassLoader() throws Exception {
         // Determine the directory that Employee.class is in
         URL classURL = ClassLoader.getSystemClassLoader().getResource("org/eclipse/persistence/testing/jaxb/xmlmarshaller/Employee.class");
-        URL directoryURL = new File(classURL.getFile()).getParentFile().getParentFile().getParentFile().getParentFile().getParentFile().getParentFile().toURL();
+        URL directoryURL = new File(classURL.getFile()).getParentFile().getParentFile().getParentFile().getParentFile().getParentFile().getParentFile().toURI().toURL();
 
         // Create a URLClassLoader specifically for this class
         URLClassLoader classLoader = new URLClassLoader(new URL[] { directoryURL });
 
         // Set up a control object using this ClassLoader
-        Object controlObject = Class.forName("org.eclipse.persistence.testing.jaxb.xmlmarshaller.Employee", true, classLoader).newInstance();
+        Object controlObject = Class.forName("org.eclipse.persistence.testing.jaxb.xmlmarshaller.Employee", true, classLoader).getConstructor().newInstance();
         Method setMethod = controlObject.getClass().getMethod("setName", new Class[] { String.class });
         setMethod.invoke(controlObject, new Object[] { CONTROL_EMPLOYEE_NAME });
 
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmlschema/model/DerivationControl.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmlschema/model/DerivationControl.java
index 1b1c795..680fe4a 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmlschema/model/DerivationControl.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmlschema/model/DerivationControl.java
@@ -23,7 +23,7 @@
  * <p>Java class for derivationControl.
  *
  * <p>The following schema fragment specifies the expected content contained within this class.
- * <p>
+ * <br>
  * <pre>{@code
  * <simpleType name="derivationControl">
  *   <restriction base="{http://www.w3.org/2001/XMLSchema}NMTOKEN">
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmlschema/model/FormChoice.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmlschema/model/FormChoice.java
index 9a0943f..8d4efb1 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmlschema/model/FormChoice.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmlschema/model/FormChoice.java
@@ -23,7 +23,7 @@
  * <p>Java class for formChoice.
  *
  * <p>The following schema fragment specifies the expected content contained within this class.
- * <p>
+ * <br>
  * <pre>{@code
  * <simpleType name="formChoice">
  *   <restriction base="{http://www.w3.org/2001/XMLSchema}NMTOKEN">
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmlschema/model/ReducedDerivationControl.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmlschema/model/ReducedDerivationControl.java
index 9667459..0cf453d 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmlschema/model/ReducedDerivationControl.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmlschema/model/ReducedDerivationControl.java
@@ -23,7 +23,7 @@
  * <p>Java class for reducedDerivationControl.
  *
  * <p>The following schema fragment specifies the expected content contained within this class.
- * <p>
+ * <br>
  * <pre>{@code
  * <simpleType name="reducedDerivationControl">
  *   <restriction base="{http://www.w3.org/2001/XMLSchema}derivationControl">
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmlschema/model/TypeDerivationControl.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmlschema/model/TypeDerivationControl.java
index 88f80d6..759c7b1 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmlschema/model/TypeDerivationControl.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmlschema/model/TypeDerivationControl.java
@@ -23,7 +23,7 @@
  * <p>Java class for typeDerivationControl.
  *
  * <p>The following schema fragment specifies the expected content contained within this class.
- * <p>
+ * <br>
  * <pre>{@code
  * <simpleType name="typeDerivationControl">
  *   <restriction base="{http://www.w3.org/2001/XMLSchema}derivationControl">
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/oxm/classloader/MappingClassLoaderTestCases.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/oxm/classloader/MappingClassLoaderTestCases.java
index 1e3132a..617e2cd 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/oxm/classloader/MappingClassLoaderTestCases.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/oxm/classloader/MappingClassLoaderTestCases.java
@@ -54,16 +54,15 @@
         classLoader = new JARClassLoader("org/eclipse/persistence/testing/oxm/classloader/MappingTests.jar");
         xmlContext = getXMLContext(new MappingTestProject(classLoader, platform, metadata), classLoader);
         unmarshaller = xmlContext.createUnmarshaller();
-        unmarshaller.setAttachmentUnmarshaller((XMLAttachmentUnmarshaller) classLoader.loadClass(ATTACHMENT_UNMARSHALLER_CLASS).newInstance());
+        unmarshaller.setAttachmentUnmarshaller((XMLAttachmentUnmarshaller) classLoader.loadClass(ATTACHMENT_UNMARSHALLER_CLASS).getConstructor().newInstance());
         marshaller = xmlContext.createMarshaller();
-        marshaller.setAttachmentMarshaller((XMLAttachmentMarshaller) classLoader.loadClass(ATTACHMENT_MARSHALLER_CLASS).newInstance());
+        marshaller.setAttachmentMarshaller((XMLAttachmentMarshaller) classLoader.loadClass(ATTACHMENT_MARSHALLER_CLASS).getConstructor().newInstance());
     }
 
     /**
      * Attempting to create the project with the wrong class loader should
      * cause a ClassNotFoundException.
      *
-     * @throws Exception
      */
     public void testClassLoadFailure() throws Exception {
         boolean exception = false;
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/oxm/classloader/MappingTestProject.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/oxm/classloader/MappingTestProject.java
index c10488c..263fcc9 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/oxm/classloader/MappingTestProject.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/oxm/classloader/MappingTestProject.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 1998, 2020 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1998, 2021 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0 which is available at
@@ -97,7 +97,7 @@
         addMapping.setSetMethodName("setAddresses");
         ContainerPolicy listPolicy;
         try {
-            listPolicy = (ContainerPolicy) listContainerPolicyClass.newInstance();
+            listPolicy = (ContainerPolicy) listContainerPolicyClass.getConstructor().newInstance();
             Method meth = listContainerPolicyClass.getDeclaredMethod("setContainerClassName", new Class[] { String.class });
             meth.invoke(listPolicy, new Object[] { "java.util.ArrayList" });
         } catch (Exception e) {
@@ -119,7 +119,7 @@
         aamapping.setSetMethodName("setAnyAttribute");
         ContainerPolicy mapPolicy;
         try {
-            mapPolicy = (ContainerPolicy) mapContainerPolicyClass.newInstance();
+            mapPolicy = (ContainerPolicy) mapContainerPolicyClass.getConstructor().newInstance();
             Method meth = mapContainerPolicyClass.getDeclaredMethod("setContainerClassName", new Class[] { String.class });
             meth.invoke(mapPolicy, new Object[] { "java.util.HashMap" });
         } catch (Exception e) {
@@ -199,7 +199,7 @@
         XMLCollectionReferenceMapping addressesMapping = new XMLCollectionReferenceMapping();
         ContainerPolicy listPolicy;
         try {
-            listPolicy = (ContainerPolicy) listContainerPolicyClass.newInstance();
+            listPolicy = (ContainerPolicy) listContainerPolicyClass.getConstructor().newInstance();
             Method meth = listContainerPolicyClass.getDeclaredMethod("setContainerClassName", new Class[] { String.class });
             meth.invoke(listPolicy, new Object[] { "java.util.ArrayList" });
         } catch (Exception e) {
@@ -215,7 +215,7 @@
         responsibilitiesMapping.setAttributeName("responsibilities");
         ContainerPolicy listPolicy1;
         try {
-            listPolicy1 = (ContainerPolicy) listContainerPolicyClass.newInstance();
+            listPolicy1 = (ContainerPolicy) listContainerPolicyClass.getConstructor().newInstance();
             Method meth = listContainerPolicyClass.getDeclaredMethod("setContainerClassName", new Class[] { String.class });
             meth.invoke(listPolicy1, new Object[] { "java.util.ArrayList" });
         } catch (Exception e) {
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/oxm/mappings/XMLMappingTestCases.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/oxm/mappings/XMLMappingTestCases.java
index 2b1a1c6..8bcc59e 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/oxm/mappings/XMLMappingTestCases.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/oxm/mappings/XMLMappingTestCases.java
@@ -166,8 +166,6 @@
 
     /**
      * Override this function to implement different read/write control documents.
-     * @return
-     * @throws Exception
      */
     protected Document getWriteControlDocument() throws Exception {
         if(writeControlDocument != null){
@@ -183,8 +181,6 @@
     /**
      * Provide an alternative write version of the control document when rountrip is not enabled.
      * If this function is not called and getWriteControlDocument() is not overridden then the write and read control documents are the same.
-     * @param xmlResource
-     * @throws Exception
      */
     protected void setWriteControlDocument(String xmlResource) throws Exception {
         writeControlDocumentLocation = xmlResource;
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/oxm/mappings/anyattribute/withoutgroupingelement/AnyAttributeNotInNRTestCases.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/oxm/mappings/anyattribute/withoutgroupingelement/AnyAttributeNotInNRTestCases.java
index 4b5b3ed..34dbf0b 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/oxm/mappings/anyattribute/withoutgroupingelement/AnyAttributeNotInNRTestCases.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/oxm/mappings/anyattribute/withoutgroupingelement/AnyAttributeNotInNRTestCases.java
@@ -22,7 +22,7 @@
  * The Descriptor for Root has a Namepace Resolver with "myns" in it
  * The document has some attributes in the anyattribute mapping with a new prefix/uri
  * ie: (in this case ns0, "www.example.com/test.xsd" are not in any NR)
- * <pre>{@code<myns:root ns0:first-name="Matt" ns0:last-name="MacIvor"
+ * <pre>{@code <myns:root ns0:first-name="Matt" ns0:last-name="MacIvor"
  *        xmlns:myns="www.example.com/some-dir/some.xsd"
  *        xmlns:ns0="www.example.com/test.xsd"/>}</pre>
  */
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/oxm/mappings/binarydata/Employee.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/oxm/mappings/binarydata/Employee.java
index 3fb1fba..75f28ce 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/oxm/mappings/binarydata/Employee.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/oxm/mappings/binarydata/Employee.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 1998, 2020 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1998, 2021 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0 which is available at
@@ -12,24 +12,8 @@
 
 // Contributors:
 //     Oracle - initial API and implementation from Oracle TopLink
-
-/* $Header: Employee.java 12-dec-2006.16:06:40 mmacivor Exp $ */
-/*
-   DESCRIPTION
-
-   MODIFIED    (MM/DD/YY)
-    mmacivor    12/12/06 -
-    mfobrien    10/23/06 - Creation
- */
-
-/**
- *  @version $Header: Employee.java 12-dec-2006.16:06:40 mmacivor Exp $
- *  @author  mfobrien
- *  @since   11.1
- */
 package org.eclipse.persistence.testing.oxm.mappings.binarydata;
 
-import java.awt.Image;
 import java.io.ByteArrayInputStream;
 import java.io.IOException;
 
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/oxm/mappings/binarydata/identifiedbyname/BinaryDataIdentifiedByNameEmptyNSRNillableTestCases.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/oxm/mappings/binarydata/identifiedbyname/BinaryDataIdentifiedByNameEmptyNSRNillableTestCases.java
index 5762b1b..842c5b3 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/oxm/mappings/binarydata/identifiedbyname/BinaryDataIdentifiedByNameEmptyNSRNillableTestCases.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/oxm/mappings/binarydata/identifiedbyname/BinaryDataIdentifiedByNameEmptyNSRNillableTestCases.java
@@ -12,20 +12,6 @@
 
 // Contributors:
 //     Oracle - initial API and implementation from Oracle TopLink
-
-/* $Header: BinaryDataIdentifiedByNameEmptyNSRTestCases.java 20-oct-2006.16:41:05 mfobrien Exp $ */
-/*
-   DESCRIPTION
-
-   MODIFIED    (MM/DD/YY)
-    mfobrien    10/20/06 - Creation
- */
-
-/**
- *  @version $Header: BinaryDataIdentifiedByNameEmptyNSRTestCases.java 20-oct-2006.16:41:05 mfobrien Exp $
- *  @author  mfobrien
- *  @since  11.1
- */
 package org.eclipse.persistence.testing.oxm.mappings.binarydata.identifiedbyname;
 
 import java.util.Vector;
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/oxm/mappings/binarydata/identifiedbyname/BinaryDataIdentifiedByNameEmptyNSRTestCases.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/oxm/mappings/binarydata/identifiedbyname/BinaryDataIdentifiedByNameEmptyNSRTestCases.java
index 8b74107..4513003 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/oxm/mappings/binarydata/identifiedbyname/BinaryDataIdentifiedByNameEmptyNSRTestCases.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/oxm/mappings/binarydata/identifiedbyname/BinaryDataIdentifiedByNameEmptyNSRTestCases.java
@@ -12,20 +12,6 @@
 
 // Contributors:
 //     Oracle - initial API and implementation from Oracle TopLink
-
-/* $Header: BinaryDataIdentifiedByNameEmptyNSRTestCases.java 20-oct-2006.16:41:05 mfobrien Exp $ */
-/*
-   DESCRIPTION
-
-   MODIFIED    (MM/DD/YY)
-    mfobrien    10/20/06 - Creation
- */
-
-/**
- *  @version $Header: BinaryDataIdentifiedByNameEmptyNSRTestCases.java 20-oct-2006.16:41:05 mfobrien Exp $
- *  @author  mfobrien
- *  @since  11.1
- */
 package org.eclipse.persistence.testing.oxm.mappings.binarydata.identifiedbyname;
 
 import java.util.Vector;
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/oxm/mappings/binarydata/identifiedbyname/BinaryDataIdentifiedByNameNullNSRTestCases.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/oxm/mappings/binarydata/identifiedbyname/BinaryDataIdentifiedByNameNullNSRTestCases.java
index 6708e0f..40efa50 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/oxm/mappings/binarydata/identifiedbyname/BinaryDataIdentifiedByNameNullNSRTestCases.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/oxm/mappings/binarydata/identifiedbyname/BinaryDataIdentifiedByNameNullNSRTestCases.java
@@ -12,34 +12,6 @@
 
 // Contributors:
 //     Oracle - initial API and implementation from Oracle TopLink
-
-/* $Header: BinaryDataIdentifiedByNameNullNSRTestCases.java 20-oct-2006.16:41:18 mfobrien Exp $ */
-/*
-   DESCRIPTION
-
-   MODIFIED    (MM/DD/YY)
-    mfobrien    10/20/06 - Creation
- */
-
-/**
- *  @version $Header: BinaryDataIdentifiedByNameNullNSRTestCases.java 20-oct-2006.16:41:18 mfobrien Exp $
- *  @author  mfobrien
- *  @since   11.1
- */
-
-/* $Header: BinaryDataIdentifiedByNameEmptyNSRTestCases.java 20-oct-2006.16:41:05 mfobrien Exp $ */
-/*
-   DESCRIPTION
-
-   MODIFIED    (MM/DD/YY)
-    mfobrien    10/20/06 - Creation
- */
-
-/**
- *  @version $Header: BinaryDataIdentifiedByNameEmptyNSRTestCases.java 20-oct-2006.16:41:05 mfobrien Exp $
- *  @author  mfobrien
- *  @since  11.1
- */
 package org.eclipse.persistence.testing.oxm.mappings.binarydata.identifiedbyname;
 
 import org.eclipse.persistence.oxm.NamespaceResolver;
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/oxm/mappings/binarydata/identifiedbyname/BinaryDataIdentifiedByNameXOPonNSRTestCases.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/oxm/mappings/binarydata/identifiedbyname/BinaryDataIdentifiedByNameXOPonNSRTestCases.java
index 5b59b43..2d81c17 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/oxm/mappings/binarydata/identifiedbyname/BinaryDataIdentifiedByNameXOPonNSRTestCases.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/oxm/mappings/binarydata/identifiedbyname/BinaryDataIdentifiedByNameXOPonNSRTestCases.java
@@ -12,20 +12,6 @@
 
 // Contributors:
 //     Oracle - initial API and implementation from Oracle TopLink
-
-/* $Header: BinaryDataIdentifiedByNameXOPonNSRTestCases.java 20-oct-2006.16:41:42 mfobrien Exp $ */
-/*
-   DESCRIPTION
-
-   MODIFIED    (MM/DD/YY)
-    mfobrien    10/20/06 - Creation
- */
-
-/**
- *  @version $Header: BinaryDataIdentifiedByNameXOPonNSRTestCases.java 20-oct-2006.16:41:42 mfobrien Exp $
- *  @author  mfobrien
- *  @since   11.1
- */
 package org.eclipse.persistence.testing.oxm.mappings.binarydata.identifiedbyname;
 
 import java.util.Vector;
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/oxm/mappings/binarydatacollection/Employee.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/oxm/mappings/binarydatacollection/Employee.java
index e434c11..c5b23c3 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/oxm/mappings/binarydatacollection/Employee.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/oxm/mappings/binarydatacollection/Employee.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 1998, 2020 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1998, 2021 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0 which is available at
@@ -12,20 +12,6 @@
 
 // Contributors:
 //     Oracle - initial API and implementation from Oracle TopLink
-
-/* $Header: Employee.java 19-oct-2006.17:22:32 mfobrien Exp $ */
-/*
-   DESCRIPTION
-
-   MODIFIED    (MM/DD/YY)
-    mfobrien    10/19/06 - Creation
- */
-
-/**
- *  @version $Header: Employee.java 19-oct-2006.17:22:32 mfobrien Exp $
- *  @author  mfobrien
- *  @since   11.1
- */
 package org.eclipse.persistence.testing.oxm.mappings.binarydatacollection;
 
 import java.util.Vector;
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/oxm/mappings/binarydatacollection/MyAttachmentMarshaller.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/oxm/mappings/binarydatacollection/MyAttachmentMarshaller.java
index 8294673..86052b5 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/oxm/mappings/binarydatacollection/MyAttachmentMarshaller.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/oxm/mappings/binarydatacollection/MyAttachmentMarshaller.java
@@ -12,11 +12,6 @@
 
 // Contributors:
 //     Oracle - initial API and implementation from Oracle TopLink
-
-/**
- *  @author  mfobrien
- *  @since  11.1
- */
 package org.eclipse.persistence.testing.oxm.mappings.binarydatacollection;
 
 import java.util.HashMap;
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/oxm/mappings/binarydatacollection/MyAttachmentUnmarshaller.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/oxm/mappings/binarydatacollection/MyAttachmentUnmarshaller.java
index 6916b4d..dff376e 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/oxm/mappings/binarydatacollection/MyAttachmentUnmarshaller.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/oxm/mappings/binarydatacollection/MyAttachmentUnmarshaller.java
@@ -12,11 +12,6 @@
 
 // Contributors:
 //     Oracle - initial API and implementation from Oracle TopLink
-
-/**
- *  @author  mfobrien
- *  @since   11.1
- */
 package org.eclipse.persistence.testing.oxm.mappings.binarydatacollection;
 
 import java.io.IOException;
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/oxm/mappings/binarydatacollection/XMLBinaryDataCollectionMappingTestSuite.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/oxm/mappings/binarydatacollection/XMLBinaryDataCollectionMappingTestSuite.java
index fbc101f..cd6236d 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/oxm/mappings/binarydatacollection/XMLBinaryDataCollectionMappingTestSuite.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/oxm/mappings/binarydatacollection/XMLBinaryDataCollectionMappingTestSuite.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 1998, 2020 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1998, 2021 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0 which is available at
@@ -12,14 +12,6 @@
 
 // Contributors:
 //     Oracle - initial API and implementation from Oracle TopLink
-
-/* $Header: XMLBinaryDataCollectionMappingTestSuite.java 11-may-2007.15:17:46 dmccann Exp $ */
-
-/**
- *  @version $Header: XMLBinaryDataCollectionMappingTestSuite.java 11-may-2007.15:17:46 dmccann Exp $
- *  @author  mfobrien
- *  @since  11.1
- */
 package org.eclipse.persistence.testing.oxm.mappings.binarydatacollection;
 
 import junit.framework.Test;
@@ -35,6 +27,11 @@
 import org.eclipse.persistence.testing.oxm.mappings.binarydatacollection.identifiedbyname.withgroupingelement.BinaryDataCollectionWithGroupingElementNillableEmptyNSRTestCases;
 import org.eclipse.persistence.testing.oxm.mappings.binarydatacollection.reuse.BinaryDataCollectionReuseTestCases;
 
+/**
+ *  @version $Header: XMLBinaryDataCollectionMappingTestSuite.java 11-may-2007.15:17:46 dmccann Exp $
+ *  @author  mfobrien
+ *  @since  11.1
+ */
 public class XMLBinaryDataCollectionMappingTestSuite extends TestCase {
     public static Test suite() {
         TestSuite suite = new TestSuite("XMLBinaryDataCollectionMapping Test Suite");
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/oxm/mappings/binarydatacollection/identifiedbyname/withgroupingelement/BinaryDataCollectionForcedInlineBinaryTestCases.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/oxm/mappings/binarydatacollection/identifiedbyname/withgroupingelement/BinaryDataCollectionForcedInlineBinaryTestCases.java
index 23fb5f4..dddbf33 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/oxm/mappings/binarydatacollection/identifiedbyname/withgroupingelement/BinaryDataCollectionForcedInlineBinaryTestCases.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/oxm/mappings/binarydatacollection/identifiedbyname/withgroupingelement/BinaryDataCollectionForcedInlineBinaryTestCases.java
@@ -12,14 +12,6 @@
 
 // Contributors:
 //     mmacivor - July 16/2009 - 2.0 - Initial implementation
-
-/* $Header: BinaryDataCollectionWithGroupingElementIdentifiedByNameXOPonNSRTestCases.java 19-oct-2006.17:10:30 mfobrien Exp $ */
-
-/**
- *  @version $Header: BinaryDataCollectionWithGroupingElementIdentifiedByNameXOPonNSRTestCases.java 19-oct-2006.17:10:30 mfobrien Exp $
- *  @author  mfobrien
- *  @since   11.1
- */
 package org.eclipse.persistence.testing.oxm.mappings.binarydatacollection.identifiedbyname.withgroupingelement;
 
 import java.util.Vector;
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/oxm/mappings/binarydatacollection/identifiedbyname/withgroupingelement/BinaryDataCollectionWithGroupingElementIdentifiedByNameEmptyNSRTestCases.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/oxm/mappings/binarydatacollection/identifiedbyname/withgroupingelement/BinaryDataCollectionWithGroupingElementIdentifiedByNameEmptyNSRTestCases.java
index 28104b5..c79f748 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/oxm/mappings/binarydatacollection/identifiedbyname/withgroupingelement/BinaryDataCollectionWithGroupingElementIdentifiedByNameEmptyNSRTestCases.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/oxm/mappings/binarydatacollection/identifiedbyname/withgroupingelement/BinaryDataCollectionWithGroupingElementIdentifiedByNameEmptyNSRTestCases.java
@@ -12,14 +12,6 @@
 
 // Contributors:
 //     Oracle - initial API and implementation from Oracle TopLink
-
-/* $Header: BinaryDataCollectionWithGroupingElementIdentifiedByNameXOPonNSRTestCases.java 19-oct-2006.17:10:30 mfobrien Exp $ */
-
-/**
- *  @version $Header: BinaryDataCollectionWithGroupingElementIdentifiedByNameXOPonNSRTestCases.java 19-oct-2006.17:10:30 mfobrien Exp $
- *  @author  mfobrien
- *  @since   11.1
- */
 package org.eclipse.persistence.testing.oxm.mappings.binarydatacollection.identifiedbyname.withgroupingelement;
 
 import java.util.Vector;
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/oxm/mappings/binarydatacollection/identifiedbyname/withgroupingelement/BinaryDataCollectionWithGroupingElementIdentifiedByNameNullNSRTestCases.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/oxm/mappings/binarydatacollection/identifiedbyname/withgroupingelement/BinaryDataCollectionWithGroupingElementIdentifiedByNameNullNSRTestCases.java
index f262aa7..cd1be1d 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/oxm/mappings/binarydatacollection/identifiedbyname/withgroupingelement/BinaryDataCollectionWithGroupingElementIdentifiedByNameNullNSRTestCases.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/oxm/mappings/binarydatacollection/identifiedbyname/withgroupingelement/BinaryDataCollectionWithGroupingElementIdentifiedByNameNullNSRTestCases.java
@@ -12,14 +12,6 @@
 
 // Contributors:
 //     Oracle - initial API and implementation from Oracle TopLink
-
-/* $Header: BinaryDataCollectionWithGroupingElementIdentifiedByNameXOPonNSRTestCases.java 19-oct-2006.17:10:30 mfobrien Exp $ */
-
-/**
- *  @version $Header: BinaryDataCollectionWithGroupingElementIdentifiedByNameXOPonNSRTestCases.java 19-oct-2006.17:10:30 mfobrien Exp $
- *  @author  mfobrien
- *  @since   11.1
- */
 package org.eclipse.persistence.testing.oxm.mappings.binarydatacollection.identifiedbyname.withgroupingelement;
 
 import org.eclipse.persistence.oxm.NamespaceResolver;
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/oxm/mappings/binarydatacollection/identifiedbyname/withgroupingelement/BinaryDataCollectionWithGroupingElementIdentifiedByNameProject.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/oxm/mappings/binarydatacollection/identifiedbyname/withgroupingelement/BinaryDataCollectionWithGroupingElementIdentifiedByNameProject.java
index bcde92d..5d86d16 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/oxm/mappings/binarydatacollection/identifiedbyname/withgroupingelement/BinaryDataCollectionWithGroupingElementIdentifiedByNameProject.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/oxm/mappings/binarydatacollection/identifiedbyname/withgroupingelement/BinaryDataCollectionWithGroupingElementIdentifiedByNameProject.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 1998, 2020 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1998, 2021 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0 which is available at
@@ -12,11 +12,6 @@
 
 // Contributors:
 //     Oracle - initial API and implementation from Oracle TopLink
-
-/**
- *  @author  mfobrien
- *  @since   11.1
- */
 package org.eclipse.persistence.testing.oxm.mappings.binarydatacollection.identifiedbyname.withgroupingelement;
 
 import org.eclipse.persistence.internal.helper.ClassConstants;
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/oxm/mappings/binarydatacollection/identifiedbyname/withgroupingelement/BinaryDataCollectionWithGroupingElementIdentifiedByNameXOPonNSRTestCases.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/oxm/mappings/binarydatacollection/identifiedbyname/withgroupingelement/BinaryDataCollectionWithGroupingElementIdentifiedByNameXOPonNSRTestCases.java
index 29aa188..d4cf2e9 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/oxm/mappings/binarydatacollection/identifiedbyname/withgroupingelement/BinaryDataCollectionWithGroupingElementIdentifiedByNameXOPonNSRTestCases.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/oxm/mappings/binarydatacollection/identifiedbyname/withgroupingelement/BinaryDataCollectionWithGroupingElementIdentifiedByNameXOPonNSRTestCases.java
@@ -12,14 +12,6 @@
 
 // Contributors:
 //     Oracle - initial API and implementation from Oracle TopLink
-
-/* $Header: BinaryDataCollectionWithGroupingElementIdentifiedByNameXOPonNSRTestCases.java 19-oct-2006.17:10:30 mfobrien Exp $ */
-
-/**
- *  @version $Header: BinaryDataCollectionWithGroupingElementIdentifiedByNameXOPonNSRTestCases.java 19-oct-2006.17:10:30 mfobrien Exp $
- *  @author  mfobrien
- *  @since   11.1
- */
 package org.eclipse.persistence.testing.oxm.mappings.binarydatacollection.identifiedbyname.withgroupingelement;
 
 import java.util.Vector;
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/oxm/mappings/binarydatacollection/identifiedbyname/withgroupingelement/BinaryDataCollectionWithGroupingElementNillableEmptyNSRTestCases.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/oxm/mappings/binarydatacollection/identifiedbyname/withgroupingelement/BinaryDataCollectionWithGroupingElementNillableEmptyNSRTestCases.java
index e42a748..486d1e0 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/oxm/mappings/binarydatacollection/identifiedbyname/withgroupingelement/BinaryDataCollectionWithGroupingElementNillableEmptyNSRTestCases.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/oxm/mappings/binarydatacollection/identifiedbyname/withgroupingelement/BinaryDataCollectionWithGroupingElementNillableEmptyNSRTestCases.java
@@ -12,14 +12,6 @@
 
 // Contributors:
 //     Oracle - initial API and implementation from Oracle TopLink
-
-/* $Header: BinaryDataCollectionWithGroupingElementIdentifiedByNameXOPonNSRTestCases.java 19-oct-2006.17:10:30 mfobrien Exp $ */
-
-/**
- *  @version $Header: BinaryDataCollectionWithGroupingElementIdentifiedByNameXOPonNSRTestCases.java 19-oct-2006.17:10:30 mfobrien Exp $
- *  @author  mfobrien
- *  @since   11.1
- */
 package org.eclipse.persistence.testing.oxm.mappings.binarydatacollection.identifiedbyname.withgroupingelement;
 
 import java.util.Vector;
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/oxm/mappings/compositecollection/nillable/CompositeCollectionNodeNullPolicyProject.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/oxm/mappings/compositecollection/nillable/CompositeCollectionNodeNullPolicyProject.java
index b9c1549..6bdb6c1 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/oxm/mappings/compositecollection/nillable/CompositeCollectionNodeNullPolicyProject.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/oxm/mappings/compositecollection/nillable/CompositeCollectionNodeNullPolicyProject.java
@@ -23,7 +23,6 @@
 
     /**
      * Construct a project with a descriptor setup for all fields that do not use a default NodeNullPolicy
-     * @param fieldsAsElements
      */
     public CompositeCollectionNodeNullPolicyProject(boolean fieldsAsElements) {
         XMLDescriptor aTeamDescriptor = getTeamDescriptor(fieldsAsElements);
@@ -72,7 +71,6 @@
     }
 
     /**
-     * @return
      */
     private XMLDescriptor getEmployeeDescriptor(boolean fieldsAsElements) {
         // if all fields are attributes the use XPath format @id otherwise use id/text()
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/oxm/mappings/compositeobject/nillable/CompositeObjectNodeNullPolicyProject.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/oxm/mappings/compositeobject/nillable/CompositeObjectNodeNullPolicyProject.java
index 4c5a1a2..35e21c0 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/oxm/mappings/compositeobject/nillable/CompositeObjectNodeNullPolicyProject.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/oxm/mappings/compositeobject/nillable/CompositeObjectNodeNullPolicyProject.java
@@ -23,7 +23,6 @@
 
     /**
      * Construct a project with a descriptor setup for all fields that do not use a default NodeNullPolicy
-     * @param fieldsAsElements
      */
     public CompositeObjectNodeNullPolicyProject(boolean fieldsAsElements) {
         XMLDescriptor aTeamDescriptor = getTeamDescriptor(fieldsAsElements);
@@ -72,7 +71,6 @@
     }
 
     /**
-     * @return
      */
     private XMLDescriptor getEmployeeDescriptor(boolean fieldsAsElements) {
         // if all fields are attributes the use XPath format @id otherwise use id/text()
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/oxm/mappings/compositeobject/nillable/CompositeObjectNodeNullPolicyTextNodeProject.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/oxm/mappings/compositeobject/nillable/CompositeObjectNodeNullPolicyTextNodeProject.java
index 26fc4fd..f0f2297 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/oxm/mappings/compositeobject/nillable/CompositeObjectNodeNullPolicyTextNodeProject.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/oxm/mappings/compositeobject/nillable/CompositeObjectNodeNullPolicyTextNodeProject.java
@@ -24,7 +24,6 @@
     /**
      * Construct a project with a descriptor setup for all fields that do not use a default NodeNullPolicy
      * The firstname field of the composite object "manager" is a text() field
-     * @param fieldsAsElements
      */
     public CompositeObjectNodeNullPolicyTextNodeProject(boolean fieldsAsElements) {
         XMLDescriptor aTeamDescriptor = getTeamDescriptor(fieldsAsElements);
@@ -73,7 +72,6 @@
     }
 
     /**
-     * @return
      */
     private XMLDescriptor getEmployeeDescriptor(boolean fieldsAsElements) {
         // if all fields are attributes the use XPath format @id otherwise use id/text()
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/oxm/mappings/directcollection/nillable/DirectCollectionNodeNullPolicyProject.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/oxm/mappings/directcollection/nillable/DirectCollectionNodeNullPolicyProject.java
index ad37d50..a05104e 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/oxm/mappings/directcollection/nillable/DirectCollectionNodeNullPolicyProject.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/oxm/mappings/directcollection/nillable/DirectCollectionNodeNullPolicyProject.java
@@ -25,7 +25,6 @@
 
     /**
      * Construct a project with a descriptor setup for all fields that do not use a default NodeNullPolicy
-     * @param fieldsAsElements
      */
     public DirectCollectionNodeNullPolicyProject(boolean fieldsAsElements) {
         XMLDescriptor aDescriptor = getEmployeeDescriptor(fieldsAsElements);
@@ -35,7 +34,6 @@
 
     /**
      * Set only the mappings that do not have a default NodeNullPolicy
-     * @return
      */
     private XMLDescriptor getEmployeeDescriptor(boolean fieldsAsElements) {
         // if all fields are attributes the use XPath format @id otherwise use id/text()
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/oxm/mappings/directtofield/nillable/DirectIsSetNodeNullPolicyProject.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/oxm/mappings/directtofield/nillable/DirectIsSetNodeNullPolicyProject.java
index 993385f..bf1c26c 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/oxm/mappings/directtofield/nillable/DirectIsSetNodeNullPolicyProject.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/oxm/mappings/directtofield/nillable/DirectIsSetNodeNullPolicyProject.java
@@ -22,7 +22,6 @@
 
     /**
      * Construct a project with a descriptor setup for all fields that do not use a default NullPolicy
-     * @param fieldsAsElements
      */
     public DirectIsSetNodeNullPolicyProject(boolean fieldsAsElements) {
         XMLDescriptor aDescriptor = getEmployeeDescriptor(fieldsAsElements);
@@ -31,7 +30,6 @@
 
     /**
      * Set only the mappings that do not have a default NullPolicy
-     * @return
      */
     private XMLDescriptor getEmployeeDescriptor(boolean fieldsAsElements) {
         // if all fields are attributes then use XPath format @id otherwise use id/text()
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/oxm/mappings/directtofield/nillable/DirectNodeNullPolicyProject.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/oxm/mappings/directtofield/nillable/DirectNodeNullPolicyProject.java
index f0bb100..0f79baa 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/oxm/mappings/directtofield/nillable/DirectNodeNullPolicyProject.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/oxm/mappings/directtofield/nillable/DirectNodeNullPolicyProject.java
@@ -22,7 +22,6 @@
 
     /**
      * Construct a project with a descriptor setup for all fields that do not use a default NodeNullPolicy
-     * @param fieldsAsElements
      */
     public DirectNodeNullPolicyProject(boolean fieldsAsElements) {
         XMLDescriptor aDescriptor = getEmployeeDescriptor(fieldsAsElements);
@@ -31,7 +30,6 @@
 
     /**
      * Set only the mappings that do not have a default NodeNullPolicy
-     * @return
      */
     private XMLDescriptor getEmployeeDescriptor(boolean fieldsAsElements) {
         // if all fields are attributes the use XPath format @id otherwise use id/text()
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/oxm/mappings/xmlfragment/Employee.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/oxm/mappings/xmlfragment/Employee.java
index f786376..1328ead 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/oxm/mappings/xmlfragment/Employee.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/oxm/mappings/xmlfragment/Employee.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 1998, 2020 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1998, 2021 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0 which is available at
@@ -23,6 +23,7 @@
 
 import org.w3c.dom.Attr;
 import org.w3c.dom.Element;
+import org.w3c.dom.Node;
 import org.w3c.dom.Text;
 
 /**
@@ -44,15 +45,15 @@
         boolean equal = this.firstName.equals(emp.firstName);
         equal = equal && this.lastName.equals(emp.lastName);
         try {
-            if(emp.xmlNode.getNodeType() == xmlNode.ATTRIBUTE_NODE && xmlNode.getNodeType() == xmlNode.ATTRIBUTE_NODE) {
+            if(emp.xmlNode.getNodeType() == Node.ATTRIBUTE_NODE && xmlNode.getNodeType() == Node.ATTRIBUTE_NODE) {
                 Attr att1 = (Attr)emp.xmlNode;
                 Attr att2 = (Attr)xmlNode;
                 equal = equal && att1.getNodeValue().equals(att2.getNodeValue());
-            } else if(emp.xmlNode.getNodeType() == xmlNode.TEXT_NODE && xmlNode.getNodeType() == xmlNode.TEXT_NODE) {
+            } else if(emp.xmlNode.getNodeType() == Node.TEXT_NODE && xmlNode.getNodeType() == Node.TEXT_NODE) {
                 Text text1 = (Text)emp.xmlNode;
                 Text text2 = (Text)this.xmlNode;
                 equal = equal && text1.getNodeValue().equals(text2.getNodeValue());
-            } else if(emp.xmlNode.getNodeType() == xmlNode.ELEMENT_NODE && xmlNode.getNodeType() == xmlNode.ELEMENT_NODE) {
+            } else if(emp.xmlNode.getNodeType() == Node.ELEMENT_NODE && xmlNode.getNodeType() == Node.ELEMENT_NODE) {
                 //TODO: Proper comparison. for now just check and and number of children
                 Element elem1 = (Element)emp.xmlNode;
                 Element elem2 = (Element)xmlNode;
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/oxm/mappings/xmlfragmentcollection/Employee.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/oxm/mappings/xmlfragmentcollection/Employee.java
index 9514f42..272c3f0 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/oxm/mappings/xmlfragmentcollection/Employee.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/oxm/mappings/xmlfragmentcollection/Employee.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 1998, 2020 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1998, 2021 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0 which is available at
@@ -61,15 +61,15 @@
           Node next = (Node)nodesIter.next();
           Node next2 = (Node)empNodesIter.next();
            try {
-            if(next2.getNodeType() == next.ATTRIBUTE_NODE && next.getNodeType() == next.ATTRIBUTE_NODE) {
+            if(next2.getNodeType() == Node.ATTRIBUTE_NODE && next.getNodeType() == Node.ATTRIBUTE_NODE) {
                 Attr att1 = (Attr)next2;
                 Attr att2 = (Attr)next;
                 equal = equal && att1.getNodeValue().equals(att2.getNodeValue());
-            } else if(next2.getNodeType() == next.TEXT_NODE && next.getNodeType() == next.TEXT_NODE) {
+            } else if(next2.getNodeType() == Node.TEXT_NODE && next.getNodeType() == Node.TEXT_NODE) {
                 Text text1 = (Text)next2;
                 Text text2 = (Text)next;
                 equal = equal && text1.getNodeValue().equals(text2.getNodeValue());
-            } else if(next2.getNodeType() == next.ELEMENT_NODE && next.getNodeType() == next.ELEMENT_NODE) {
+            } else if(next2.getNodeType() == Node.ELEMENT_NODE && next.getNodeType() == Node.ELEMENT_NODE) {
                 //TODO: Proper comparison. for now just check and and number of children
                 Element elem1 = (Element)next2;
                 Element elem2 = (Element)next;
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/oxm/schemamodelgenerator/GenerateSchemaTestCases.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/oxm/schemamodelgenerator/GenerateSchemaTestCases.java
index fa51ef3..22afb9c 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/oxm/schemamodelgenerator/GenerateSchemaTestCases.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/oxm/schemamodelgenerator/GenerateSchemaTestCases.java
@@ -71,7 +71,6 @@
     /**
      * Login the session to ensure that the descriptors are initialized.
      *
-     * @param prj
      */
     protected void loginProject(Project prj) {
         XMLPlatform platform = new SAXPlatform();
@@ -90,7 +89,6 @@
     /**
      * Write the given schema to the T_WORK folder.
      *
-     * @param generatedSchema
      */
     protected void writeSchema(Schema generatedSchema) {
         try {
@@ -112,7 +110,6 @@
     /**
      * For debugging - write the given schema to System out.
      *
-     * @param generatedSchema
      */
     protected void outputSchema(Schema generatedSchema){
         Project p = new SchemaModelProject();
@@ -132,8 +129,6 @@
      * Compares a schema model Schema (as a string) against a string representation
      * of an XML schema.
      *
-     * @param generatedSchema
-     * @param controlSchema
      */
     protected boolean compareSchemaStrings(Schema generatedSchema, String controlSchema){
         Project p = new SchemaModelProject();
@@ -152,9 +147,6 @@
     /**
      * Utility for reading in an XML schema file and returning it as a string.
      *
-     * @param reader
-     * @param available
-     * @return
      */
     protected String getSchemaAsString(BufferedReader reader, int available) {
         StringBuffer sb = new StringBuffer(available);
@@ -175,7 +167,6 @@
      * Return a Document for a given XML Schema.
      *
      * @param xsdResource indicates the .xsd file to be parsed into a Document
-     * @return
      * @see Document
      */
     protected Document getDocument(String xsdResource) {
@@ -194,8 +185,6 @@
     /**
      * Return a Document for a given EclipseLink schema model Schema.
      *
-     * @param schema
-     * @return
      * @see Document
      */
     protected Document getDocument(Schema schema) {
@@ -217,7 +206,6 @@
     /**
      * Removes any empty child text nodes.
      *
-     * @param node
      */
     protected void removeEmptyTextNodes(Node node) {
         NodeList nodeList = node.getChildNodes();
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/oxm/schemamodelgenerator/GenerateSingleSchemaTestCases.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/oxm/schemamodelgenerator/GenerateSingleSchemaTestCases.java
index 77f4099..a505761 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/oxm/schemamodelgenerator/GenerateSingleSchemaTestCases.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/oxm/schemamodelgenerator/GenerateSingleSchemaTestCases.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 1998, 2020 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1998, 2021 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0 which is available at
@@ -81,7 +81,6 @@
      * Test global complex type and global element generation.  Element form default
      * is qualified.
      *
-     * @throws Exception
      */
     public void testElementFormQualified() throws Exception {
         Schema generatedSchema = null;
@@ -120,7 +119,6 @@
      * Test global element and anonymous complex type generation. Element form
      * default is qualified.
      *
-     * @throws Exception
      */
     public void testElementFormQualifiedNoSchemaContext() throws Exception {
         Schema generatedSchema = null;
@@ -157,7 +155,6 @@
     /**
      * Test global complex type generation.  Element form default is qualified.
      *
-     * @throws Exception
      */
     public void testElementFormQualifiedNoDefaultRootElement() throws Exception {
         Schema generatedSchema = null;
@@ -221,7 +218,6 @@
      * is unqualified.  Element refs will be generated for local elements whose
      * type is that of a global complex type.
      *
-     * @throws Exception
      */
     public void testElementFormUnqualified() throws Exception {
         Schema generatedSchema = null;
@@ -260,7 +256,6 @@
      * Element refs will be generated for local elements - the global
      * elements they refer to will have anonymous complex types generated.
      *
-     * @throws Exception
      */
     public void testElementFormUnqualifiedNoSchemaContext() throws Exception {
         Schema generatedSchema = null;
@@ -300,7 +295,6 @@
      * a global complex type.  In these cases, global elements will be
      * generated for the refs.
      *
-     * @throws Exception
      */
     public void testElementFormUnqualifiedNoDefaultRootElement() throws Exception {
         Schema generatedSchema = null;
@@ -363,8 +357,6 @@
      * Add the Employee, Address and PhoneNumber descriptors to the List of descriptors
      * to be processed by the schema model generator.
      *
-     * @param prj
-     * @return
      */
     private List<Descriptor> setupDescriptorList(Project prj) {
         List<Descriptor> descriptorsToProcess = new ArrayList<Descriptor>();
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/oxm/schemamodelgenerator/mappings/pathbased/PathbasedMappingTestCases.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/oxm/schemamodelgenerator/mappings/pathbased/PathbasedMappingTestCases.java
index 612d886..e50d888 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/oxm/schemamodelgenerator/mappings/pathbased/PathbasedMappingTestCases.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/oxm/schemamodelgenerator/mappings/pathbased/PathbasedMappingTestCases.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 1998, 2020 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1998, 2021 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0 which is available at
@@ -129,8 +129,6 @@
      * Add the Customer, Address and PhoneNumber descriptors to the List of descriptors
      * to be processed by the schema model generator.
      *
-     * @param prj
-     * @return
      */
     private List<Descriptor> setupDescriptorList(Project prj) {
         List<Descriptor> descriptorsToProcess = new ArrayList<Descriptor>();
diff --git a/sdo/org.eclipse.persistence.sdo/src/main/java/org/eclipse/persistence/sdo/SDOConstants.java b/sdo/org.eclipse.persistence.sdo/src/main/java/org/eclipse/persistence/sdo/SDOConstants.java
index 87eb083..f85e51c 100644
--- a/sdo/org.eclipse.persistence.sdo/src/main/java/org/eclipse/persistence/sdo/SDOConstants.java
+++ b/sdo/org.eclipse.persistence.sdo/src/main/java/org/eclipse/persistence/sdo/SDOConstants.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 1998, 2020 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1998, 2021 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0 which is available at
@@ -32,7 +32,7 @@
  * </ul>
  */
 public class SDOConstants {
-    // 20070604: use a standard class as opposed to a constant interface (v21.20060731) - see item 17 of (Effective Java)
+// 20070604: use a standard class as opposed to a constant interface (v21.20060731) - see item 17 of (Effective Java)
 
     /** Strings for known uris and default prefix values */
     public static final String SDO_PREFIX = "sdo";
@@ -367,4 +367,8 @@
             sdoTypeHelper.reset();
         }
     }
+
+    private SDOConstants() {
+        //no instance please
+    }
 }
diff --git a/sdo/org.eclipse.persistence.sdo/src/main/java/org/eclipse/persistence/sdo/SDOHelper.java b/sdo/org.eclipse.persistence.sdo/src/main/java/org/eclipse/persistence/sdo/SDOHelper.java
index b5e9eea..38211bd 100644
--- a/sdo/org.eclipse.persistence.sdo/src/main/java/org/eclipse/persistence/sdo/SDOHelper.java
+++ b/sdo/org.eclipse.persistence.sdo/src/main/java/org/eclipse/persistence/sdo/SDOHelper.java
@@ -61,6 +61,10 @@
  */
 public class SDOHelper {
 
+    private SDOHelper() {
+        //no instance please
+    }
+
     /**
      * Return the EclipseLink implementation of Type. The given Type is assumed to be an instance of
      * {@link org.eclipse.persistence.sdo.SDOType}. If not, an exception will be thrown.
diff --git a/sdo/org.eclipse.persistence.sdo/src/main/java/org/eclipse/persistence/sdo/helper/ApplicationResolver.java b/sdo/org.eclipse.persistence.sdo/src/main/java/org/eclipse/persistence/sdo/helper/ApplicationResolver.java
index 769e2f3..6fd2f37 100644
--- a/sdo/org.eclipse.persistence.sdo/src/main/java/org/eclipse/persistence/sdo/helper/ApplicationResolver.java
+++ b/sdo/org.eclipse.persistence.sdo/src/main/java/org/eclipse/persistence/sdo/helper/ApplicationResolver.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2011, 2020 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2011, 2021 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0 which is available at
@@ -23,6 +23,12 @@
 public abstract class ApplicationResolver {
 
     /**
+     * Default constructor.
+     */
+    protected ApplicationResolver() {
+    }
+
+    /**
      * Return the application name for the currently executing application.
      *
      * This method will be utilized if the logic in SDOHelperContext fails
diff --git a/sdo/org.eclipse.persistence.sdo/src/main/java/org/eclipse/persistence/sdo/helper/SDOTypesGenerator.java b/sdo/org.eclipse.persistence.sdo/src/main/java/org/eclipse/persistence/sdo/helper/SDOTypesGenerator.java
index a249baa..63f6407 100644
--- a/sdo/org.eclipse.persistence.sdo/src/main/java/org/eclipse/persistence/sdo/helper/SDOTypesGenerator.java
+++ b/sdo/org.eclipse.persistence.sdo/src/main/java/org/eclipse/persistence/sdo/helper/SDOTypesGenerator.java
@@ -2319,6 +2319,12 @@
         private String propertyTypeURI;
         private String oppositePropName;
 
+        /**
+         * Default constructor.
+         */
+        public NonContainmentReference() {
+        }
+
         public void setOwningType(SDOType owningType) {
             this.owningType = owningType;
         }
@@ -2367,6 +2373,12 @@
         private String localName;
         private Property property;
 
+        /**
+         * Default constructor.
+         */
+        protected GlobalRef() {
+        }
+
         public void setOwningType(SDOType owningType) {
             this.owningType = owningType;
         }
diff --git a/sdo/org.eclipse.persistence.sdo/src/main/java/org/eclipse/persistence/sdo/helper/delegates/AbstractHelperDelegator.java b/sdo/org.eclipse.persistence.sdo/src/main/java/org/eclipse/persistence/sdo/helper/delegates/AbstractHelperDelegator.java
index 7b15574..9dc94ec 100644
--- a/sdo/org.eclipse.persistence.sdo/src/main/java/org/eclipse/persistence/sdo/helper/delegates/AbstractHelperDelegator.java
+++ b/sdo/org.eclipse.persistence.sdo/src/main/java/org/eclipse/persistence/sdo/helper/delegates/AbstractHelperDelegator.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 1998, 2020 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1998, 2021 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0 which is available at
@@ -28,6 +28,12 @@
     protected HelperContext aHelperContext;
 
     /**
+     * Default constructor.
+     */
+    protected  AbstractHelperDelegator() {
+    }
+
+    /**
      * Return the helperContext that this instance is associated with.
      * This context contains all helpers. If null, the default context
      * is returned.
diff --git a/sdo/org.eclipse.persistence.sdo/src/main/java/org/eclipse/persistence/sdo/types/SDOPropertyType.java b/sdo/org.eclipse.persistence.sdo/src/main/java/org/eclipse/persistence/sdo/types/SDOPropertyType.java
index 57a2e3a..fa3daf6 100644
--- a/sdo/org.eclipse.persistence.sdo/src/main/java/org/eclipse/persistence/sdo/types/SDOPropertyType.java
+++ b/sdo/org.eclipse.persistence.sdo/src/main/java/org/eclipse/persistence/sdo/types/SDOPropertyType.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 1998, 2020 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1998, 2021 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0 which is available at
@@ -167,6 +167,15 @@
         return this.initialized;
     }
 
-    public static class PropertyImpl extends SDODataObject {}
+    /**
+     * SDO Property
+     */
+    public static class PropertyImpl extends SDODataObject {
+        /**
+         * Default constructor.
+         */
+        public PropertyImpl() {
+        }
+    }
 
 }
diff --git a/sdo/org.eclipse.persistence.sdo/src/main/java/org/eclipse/persistence/sdo/types/SDOTypeType.java b/sdo/org.eclipse.persistence.sdo/src/main/java/org/eclipse/persistence/sdo/types/SDOTypeType.java
index fd0c5c6..c4e18c1 100644
--- a/sdo/org.eclipse.persistence.sdo/src/main/java/org/eclipse/persistence/sdo/types/SDOTypeType.java
+++ b/sdo/org.eclipse.persistence.sdo/src/main/java/org/eclipse/persistence/sdo/types/SDOTypeType.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 1998, 2020 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1998, 2021 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0 which is available at
@@ -164,6 +164,16 @@
         return this.initialized;
     }
 
-    public static class TypeImpl extends SDODataObject {}
+    /**
+     * SDO Type
+     */
+    public static class TypeImpl extends SDODataObject {
+        /**
+         * Default constructor.
+         */
+        public TypeImpl() {
+            super();
+        }
+    }
 
 }
diff --git a/utils/eclipselink.dbws.builder.test.oracle/src/it/java/dbws/testing/shadowddlgeneration/oldjpub/RowtypeInfo.java b/utils/eclipselink.dbws.builder.test.oracle/src/it/java/dbws/testing/shadowddlgeneration/oldjpub/RowtypeInfo.java
index 60c0807..2751d3f 100644
--- a/utils/eclipselink.dbws.builder.test.oracle/src/it/java/dbws/testing/shadowddlgeneration/oldjpub/RowtypeInfo.java
+++ b/utils/eclipselink.dbws.builder.test.oracle/src/it/java/dbws/testing/shadowddlgeneration/oldjpub/RowtypeInfo.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 1998, 2020 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1998, 2021 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0 which is available at
@@ -18,6 +18,7 @@
 import java.sql.SQLException;
 import java.util.ArrayList;
 import java.util.List;
+import java.util.Objects;
 
 public class RowtypeInfo extends SequencedInfo {
 
@@ -109,6 +110,11 @@
         return true;
     }
 
+    @Override
+    public int hashCode() {
+        return Objects.hash(argument_name, type_owner, type_name, type_subname, modifier, data_type, data_level, data_length, data_precision, data_scale);
+    }
+
     public String toString() {
         return "RowtypeInfo(" + argument_name + "," + type_owner + "," + type_name + ","
             + type_subname + "," + modifier + "," + data_type + "," + data_level + ","
diff --git a/utils/org.eclipse.persistence.dbws.builder/src/main/java/module-info.java b/utils/org.eclipse.persistence.dbws.builder/src/main/java/module-info.java
index 415a4d9..3621d62 100644
--- a/utils/org.eclipse.persistence.dbws.builder/src/main/java/module-info.java
+++ b/utils/org.eclipse.persistence.dbws.builder/src/main/java/module-info.java
@@ -25,7 +25,7 @@
     requires org.eclipse.persistence.dbws;
     requires org.eclipse.persistence.jpa;
     requires org.eclipse.persistence.jpa.jpql;
-    requires org.eclipse.persistence.moxy;
+    requires transitive org.eclipse.persistence.moxy;
     requires org.eclipse.persistence.oracleddlparser;
 
     exports org.eclipse.persistence.tools.dbws;
diff --git a/utils/org.eclipse.persistence.dbws.builder/src/main/java/org/eclipse/persistence/tools/dbws/JarArchiver.java b/utils/org.eclipse.persistence.dbws.builder/src/main/java/org/eclipse/persistence/tools/dbws/JarArchiver.java
index 8564143..94eac15 100644
--- a/utils/org.eclipse.persistence.dbws.builder/src/main/java/org/eclipse/persistence/tools/dbws/JarArchiver.java
+++ b/utils/org.eclipse.persistence.dbws.builder/src/main/java/org/eclipse/persistence/tools/dbws/JarArchiver.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 1998, 2019 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1998, 2021 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0 which is available at
@@ -43,10 +43,7 @@
  * <b>INTERNAL:</b> JarArchiver implements the {@link DBWSPackager.Archiver} interface. <br>
  * This helper class takes the files generated by a DBWSPackager and puts them into an archive,<br>
  * in this case, a <code>.jar</code> file.
- * <p>
  *
- * @author Mike Norman - michael.norman@oracle.com
- * @since EclipseLink 1.x
  * <pre>
  * Jar-file layout
  *    \
@@ -58,6 +55,8 @@
  *        |   eclipselink-dbws-sessions.xml
  *        |   eclipselink-dbws.xml
  * </pre>
+ * @author Mike Norman - michael.norman@oracle.com
+ * @since EclipseLink 1.x
  */
 public class JarArchiver implements DBWSPackager.Archiver {
 
