diff --git a/foundation/eclipselink.core.test/src/it/java/org/eclipse/persistence/testing/models/collections/map/MapPopulator.java b/foundation/eclipselink.core.test/src/it/java/org/eclipse/persistence/testing/models/collections/map/MapPopulator.java
index 9b62aa1..b731b17 100644
--- a/foundation/eclipselink.core.test/src/it/java/org/eclipse/persistence/testing/models/collections/map/MapPopulator.java
+++ b/foundation/eclipselink.core.test/src/it/java/org/eclipse/persistence/testing/models/collections/map/MapPopulator.java
@@ -61,11 +61,11 @@ public void buildExamples() {
         registerObject(getEntityEntityU1MMapHolder(), "0015");
     }
 
-    protected boolean containsObject(Class domainClass, String identifier) {
+    protected boolean containsObject(Class<?> domainClass, String identifier) {
         return populationManager.containsObject(domainClass, identifier);
     }
 
-    protected Object getObject(Class domainClass, String identifier) {
+    protected Object getObject(Class<?> domainClass, String identifier) {
         return populationManager.getObject(domainClass, identifier);
     }
 
diff --git a/foundation/eclipselink.core.test/src/it/java/org/eclipse/persistence/testing/models/employee/domain/EmployeePopulator.java b/foundation/eclipselink.core.test/src/it/java/org/eclipse/persistence/testing/models/employee/domain/EmployeePopulator.java
index fdb5162..8ff350d 100644
--- a/foundation/eclipselink.core.test/src/it/java/org/eclipse/persistence/testing/models/employee/domain/EmployeePopulator.java
+++ b/foundation/eclipselink.core.test/src/it/java/org/eclipse/persistence/testing/models/employee/domain/EmployeePopulator.java
@@ -711,7 +711,7 @@ public void buildExamples() {
         smallProjectExample10();
     }
 
-    protected boolean containsObject(Class domainClass, String identifier) {
+    protected boolean containsObject(Class<?> domainClass, String identifier) {
         return populationManager.containsObject(domainClass, identifier);
     }
 
@@ -1051,11 +1051,11 @@ protected Vector<Object> getAllObjects() {
         return populationManager.getAllObjects();
     }
 
-    public Vector<Object> getAllObjectsForClass(Class domainClass) {
+    public Vector<Object> getAllObjectsForClass(Class<?> domainClass) {
         return populationManager.getAllObjectsForClass(domainClass);
     }
 
-    protected Object getObject(Class domainClass, String identifier) {
+    protected Object getObject(Class<?> domainClass, String identifier) {
         return populationManager.getObject(domainClass, identifier);
     }
 
@@ -1157,7 +1157,7 @@ public PhoneNumber phoneNumberExample6() {
         return new PhoneNumber("ISDN", "905", "5553691");
     }
 
-    protected void registerObject(Class domainClass, Object domainObject, String identifier) {
+    protected void registerObject(Class<?> domainClass, Object domainObject, String identifier) {
         populationManager.registerObject(domainClass, domainObject, identifier);
     }
 
diff --git a/foundation/eclipselink.core.test/src/it/java/org/eclipse/persistence/testing/models/forceupdate/FUVLPopulator.java b/foundation/eclipselink.core.test/src/it/java/org/eclipse/persistence/testing/models/forceupdate/FUVLPopulator.java
index a61111f..f7bfb5f 100644
--- a/foundation/eclipselink.core.test/src/it/java/org/eclipse/persistence/testing/models/forceupdate/FUVLPopulator.java
+++ b/foundation/eclipselink.core.test/src/it/java/org/eclipse/persistence/testing/models/forceupdate/FUVLPopulator.java
@@ -624,7 +624,7 @@ public void buildExamples()
     employeeVLIOExample12();
 
 }
-protected boolean containsObject(Class domainClass, String identifier)
+protected boolean containsObject(Class<?> domainClass, String identifier)
 {
     return populationManager.containsObject(domainClass, identifier);
 }
@@ -1849,11 +1849,11 @@ protected Vector<Object> getAllObjects()
 {
     return populationManager.getAllObjects();
 }
-public Vector<Object> getAllObjectsForClass(Class domainClass)
+public Vector<Object> getAllObjectsForClass(Class<?> domainClass)
 {
     return populationManager.getAllObjectsForClass(domainClass);
 }
-protected Object getObject(Class domainClass, String identifier)
+protected Object getObject(Class<?> domainClass, String identifier)
 {
     return populationManager.getObject(domainClass, identifier);
 }
@@ -1954,7 +1954,7 @@ public PhoneNumberVLIO phoneNumberVLIOExample6()
     return new PhoneNumberVLIO("ISDN", "905" , "5553691");
 }
 
-protected void registerObject(Class domainClass, Object domainObject, String identifier)
+protected void registerObject(Class<?> domainClass, Object domainObject, String identifier)
 {
     populationManager.registerObject(domainClass, domainObject, identifier);
 }
diff --git a/foundation/eclipselink.core.test/src/it/java/org/eclipse/persistence/testing/models/inheritance/Computer.java b/foundation/eclipselink.core.test/src/it/java/org/eclipse/persistence/testing/models/inheritance/Computer.java
index b38fcd6..5f331b5 100644
--- a/foundation/eclipselink.core.test/src/it/java/org/eclipse/persistence/testing/models/inheritance/Computer.java
+++ b/foundation/eclipselink.core.test/src/it/java/org/eclipse/persistence/testing/models/inheritance/Computer.java
@@ -115,7 +115,7 @@ public static Mainframe example5() {
         return mainframe;
     }
 
-    public static Class getClassFromRow(DataRecord row) {
+    public static Class<?> getClassFromRow(DataRecord row) {
         if (row.get("CTYPE").equals("PC")) {
             if (row.get("PCTYPE").equals("IBM")) {
                 return org.eclipse.persistence.testing.models.inheritance.IBMPC.class;
diff --git a/foundation/eclipselink.core.test/src/it/java/org/eclipse/persistence/testing/models/inheritance/STI_EmployeePopulator.java b/foundation/eclipselink.core.test/src/it/java/org/eclipse/persistence/testing/models/inheritance/STI_EmployeePopulator.java
index 4d43e97..66629c6 100644
--- a/foundation/eclipselink.core.test/src/it/java/org/eclipse/persistence/testing/models/inheritance/STI_EmployeePopulator.java
+++ b/foundation/eclipselink.core.test/src/it/java/org/eclipse/persistence/testing/models/inheritance/STI_EmployeePopulator.java
@@ -442,7 +442,7 @@ public void buildExamples() {
         smallProjectExample10();
     }
 
-    protected boolean containsObject(Class domainClass, String identifier) {
+    protected boolean containsObject(Class<?> domainClass, String identifier) {
         return populationManager.containsObject(domainClass, identifier);
     }
 
@@ -666,11 +666,11 @@ protected Vector<Object> getAllObjects() {
         return populationManager.getAllObjects();
     }
 
-    public Vector<Object> getAllObjectsForClass(Class domainClass) {
+    public Vector<Object> getAllObjectsForClass(Class<?> domainClass) {
         return populationManager.getAllObjectsForClass(domainClass);
     }
 
-    protected Object getObject(Class domainClass, String identifier) {
+    protected Object getObject(Class<?> domainClass, String identifier) {
         return populationManager.getObject(domainClass, identifier);
     }
 
@@ -748,7 +748,7 @@ public STI_LargeProject largeProjectExample5() {
         return largeProject;
     }
 
-    protected void registerObject(Class domainClass, Object domainObject, String identifier) {
+    protected void registerObject(Class<?> domainClass, Object domainObject, String identifier) {
         populationManager.registerObject(domainClass, domainObject, identifier);
     }
 
diff --git a/foundation/eclipselink.core.test/src/it/java/org/eclipse/persistence/testing/models/onetoonejointable/EmployeePopulator.java b/foundation/eclipselink.core.test/src/it/java/org/eclipse/persistence/testing/models/onetoonejointable/EmployeePopulator.java
index 9be62c5..12b727f 100644
--- a/foundation/eclipselink.core.test/src/it/java/org/eclipse/persistence/testing/models/onetoonejointable/EmployeePopulator.java
+++ b/foundation/eclipselink.core.test/src/it/java/org/eclipse/persistence/testing/models/onetoonejointable/EmployeePopulator.java
@@ -675,7 +675,7 @@ public void buildExamples() {
         smallProjectExample10();
     }
 
-    protected boolean containsObject(Class domainClass, String identifier) {
+    protected boolean containsObject(Class<?> domainClass, String identifier) {
         return populationManager.containsObject(domainClass, identifier);
     }
 
@@ -899,11 +899,11 @@ protected Vector<Object> getAllObjects() {
         return populationManager.getAllObjects();
     }
 
-    public Vector<Object> getAllObjectsForClass(Class domainClass) {
+    public Vector<Object> getAllObjectsForClass(Class<?> domainClass) {
         return populationManager.getAllObjectsForClass(domainClass);
     }
 
-    protected Object getObject(Class domainClass, String identifier) {
+    protected Object getObject(Class<?> domainClass, String identifier) {
         return populationManager.getObject(domainClass, identifier);
     }
 
@@ -984,7 +984,7 @@ public LargeProject largeProjectExample5() {
         return largeProject;
     }
 
-    protected void registerObject(Class domainClass, Object domainObject, String identifier) {
+    protected void registerObject(Class<?> domainClass, Object domainObject, String identifier) {
         populationManager.registerObject(domainClass, domainObject, identifier);
     }
 
diff --git a/foundation/eclipselink.core.test/src/it/java/org/eclipse/persistence/testing/models/orderedlist/EmployeePopulator.java b/foundation/eclipselink.core.test/src/it/java/org/eclipse/persistence/testing/models/orderedlist/EmployeePopulator.java
index eeffdef..5d5a8b9 100644
--- a/foundation/eclipselink.core.test/src/it/java/org/eclipse/persistence/testing/models/orderedlist/EmployeePopulator.java
+++ b/foundation/eclipselink.core.test/src/it/java/org/eclipse/persistence/testing/models/orderedlist/EmployeePopulator.java
@@ -243,7 +243,7 @@ public void buildExamples() {
         employeeExample12();
     }
 
-    protected boolean containsObject(Class domainClass, String identifier) {
+    protected boolean containsObject(Class<?> domainClass, String identifier) {
         return populationManager.containsObject(domainClass, identifier);
     }
 
@@ -417,11 +417,11 @@ protected Vector<Object> getAllObjects() {
         return populationManager.getAllObjects();
     }
 
-    public Vector<Object> getAllObjectsForClass(Class domainClass) {
+    public Vector<Object> getAllObjectsForClass(Class<?> domainClass) {
         return populationManager.getAllObjectsForClass(domainClass);
     }
 
-    protected Object getObject(Class domainClass, String identifier) {
+    protected Object getObject(Class<?> domainClass, String identifier) {
         return populationManager.getObject(domainClass, identifier);
     }
 
@@ -462,7 +462,7 @@ public String getPhoneNumber(String areaCode) {
         return phoneNumber.toString();
     }
 
-    protected void registerObject(Class domainClass, Object domainObject, String identifier) {
+    protected void registerObject(Class<?> domainClass, Object domainObject, String identifier) {
         populationManager.registerObject(domainClass, domainObject, identifier);
     }
 
diff --git a/foundation/eclipselink.core.test/src/it/java/org/eclipse/persistence/testing/models/orderedlist/NullsLastOrderedListContainerPolicy.java b/foundation/eclipselink.core.test/src/it/java/org/eclipse/persistence/testing/models/orderedlist/NullsLastOrderedListContainerPolicy.java
index 5c22a0f..6b028e1 100644
--- a/foundation/eclipselink.core.test/src/it/java/org/eclipse/persistence/testing/models/orderedlist/NullsLastOrderedListContainerPolicy.java
+++ b/foundation/eclipselink.core.test/src/it/java/org/eclipse/persistence/testing/models/orderedlist/NullsLastOrderedListContainerPolicy.java
@@ -71,7 +71,7 @@ public NullsLastOrderedListContainerPolicy() {
      * INTERNAL:
      * Construct a new policy for the specified class.
      */
-    public NullsLastOrderedListContainerPolicy(Class containerClass) {
+    public NullsLastOrderedListContainerPolicy(Class<?> containerClass) {
         super(containerClass);
     }
 
diff --git a/foundation/eclipselink.core.test/src/it/java/org/eclipse/persistence/testing/models/performance/EmployeePopulator.java b/foundation/eclipselink.core.test/src/it/java/org/eclipse/persistence/testing/models/performance/EmployeePopulator.java
index f32b399..a2459a9 100644
--- a/foundation/eclipselink.core.test/src/it/java/org/eclipse/persistence/testing/models/performance/EmployeePopulator.java
+++ b/foundation/eclipselink.core.test/src/it/java/org/eclipse/persistence/testing/models/performance/EmployeePopulator.java
@@ -685,7 +685,7 @@ public void buildExamples() {
         smallProjectExample10();
     }
 
-    protected boolean containsObject(Class domainClass, String identifier) {
+    protected boolean containsObject(Class<?> domainClass, String identifier) {
         return populationManager.containsObject(domainClass, identifier);
     }
 
@@ -1025,11 +1025,11 @@ protected Vector<Object> getAllObjects() {
         return populationManager.getAllObjects();
     }
 
-    public Vector<Object> getAllObjectsForClass(Class domainClass) {
+    public Vector<Object> getAllObjectsForClass(Class<?> domainClass) {
         return populationManager.getAllObjectsForClass(domainClass);
     }
 
-    protected Object getObject(Class domainClass, String identifier) {
+    protected Object getObject(Class<?> domainClass, String identifier) {
         return populationManager.getObject(domainClass, identifier);
     }
 
@@ -1131,7 +1131,7 @@ public PhoneNumber phoneNumberExample6() {
         return new PhoneNumber("ISDN", "905", "5553691");
     }
 
-    protected void registerObject(Class domainClass, Object domainObject, String identifier) {
+    protected void registerObject(Class<?> domainClass, Object domainObject, String identifier) {
         populationManager.registerObject(domainClass, domainObject, identifier);
     }
 
diff --git a/foundation/eclipselink.core.test/src/it/java/org/eclipse/persistence/testing/models/performance/toplink/EmployeePopulator.java b/foundation/eclipselink.core.test/src/it/java/org/eclipse/persistence/testing/models/performance/toplink/EmployeePopulator.java
index ec037af..591b111 100644
--- a/foundation/eclipselink.core.test/src/it/java/org/eclipse/persistence/testing/models/performance/toplink/EmployeePopulator.java
+++ b/foundation/eclipselink.core.test/src/it/java/org/eclipse/persistence/testing/models/performance/toplink/EmployeePopulator.java
@@ -687,7 +687,7 @@ public void buildExamples() {
         smallProjectExample10();
     }
 
-    protected boolean containsObject(Class domainClass, String identifier) {
+    protected boolean containsObject(Class<?> domainClass, String identifier) {
         return populationManager.containsObject(domainClass, identifier);
     }
 
@@ -1027,11 +1027,11 @@ protected Vector<Object> getAllObjects() {
         return populationManager.getAllObjects();
     }
 
-    public Vector<Object> getAllObjectsForClass(Class domainClass) {
+    public Vector<Object> getAllObjectsForClass(Class<?> domainClass) {
         return populationManager.getAllObjectsForClass(domainClass);
     }
 
-    protected Object getObject(Class domainClass, String identifier) {
+    protected Object getObject(Class<?> domainClass, String identifier) {
         return populationManager.getObject(domainClass, identifier);
     }
 
@@ -1133,7 +1133,7 @@ public PhoneNumber phoneNumberExample6() {
         return new PhoneNumber("ISDN", "905", "5553691");
     }
 
-    protected void registerObject(Class domainClass, Object domainObject, String identifier) {
+    protected void registerObject(Class<?> domainClass, Object domainObject, String identifier) {
         populationManager.registerObject(domainClass, domainObject, identifier);
     }
 
diff --git a/foundation/eclipselink.core.test/src/it/java/org/eclipse/persistence/testing/models/transparentindirection/IndirectContainerProject.java b/foundation/eclipselink.core.test/src/it/java/org/eclipse/persistence/testing/models/transparentindirection/IndirectContainerProject.java
index 78cf6ea..2e9e236 100644
--- a/foundation/eclipselink.core.test/src/it/java/org/eclipse/persistence/testing/models/transparentindirection/IndirectContainerProject.java
+++ b/foundation/eclipselink.core.test/src/it/java/org/eclipse/persistence/testing/models/transparentindirection/IndirectContainerProject.java
@@ -297,9 +297,9 @@ protected void configureSalesRepContainer2(org.eclipse.persistence.mappings.Many
 
     protected abstract void modifyOrderDescriptor(RelationalDescriptor descriptor);
 
-    protected abstract Class orderClass();
+    protected abstract Class<?> orderClass();
 
-    protected abstract Class orderLineClass();
+    protected abstract Class<?> orderLineClass();
 
-    protected abstract Class salesRepClass();
+    protected abstract Class<?> salesRepClass();
 }
diff --git a/foundation/eclipselink.core.test/src/it/java/org/eclipse/persistence/testing/models/transparentindirection/IndirectListProject.java b/foundation/eclipselink.core.test/src/it/java/org/eclipse/persistence/testing/models/transparentindirection/IndirectListProject.java
index 357e8af..864d3e9 100644
--- a/foundation/eclipselink.core.test/src/it/java/org/eclipse/persistence/testing/models/transparentindirection/IndirectListProject.java
+++ b/foundation/eclipselink.core.test/src/it/java/org/eclipse/persistence/testing/models/transparentindirection/IndirectListProject.java
@@ -47,17 +47,17 @@ protected void modifyOrderDescriptor(RelationalDescriptor descriptor) {
     }
 
     @Override
-    protected Class orderClass() {
+    protected Class<?> orderClass() {
         return org.eclipse.persistence.testing.models.transparentindirection.Order.class;
     }
 
     @Override
-    protected Class orderLineClass() {
+    protected Class<?> orderLineClass() {
         return org.eclipse.persistence.testing.models.transparentindirection.OrderLine.class;
     }
 
     @Override
-    protected Class salesRepClass() {
+    protected Class<?> salesRepClass() {
         return org.eclipse.persistence.testing.models.transparentindirection.SalesRep.class;
     }
 }
diff --git a/foundation/eclipselink.core.test/src/it/java/org/eclipse/persistence/testing/models/transparentindirection/IndirectMapProject.java b/foundation/eclipselink.core.test/src/it/java/org/eclipse/persistence/testing/models/transparentindirection/IndirectMapProject.java
index e3062d4..25e968d 100644
--- a/foundation/eclipselink.core.test/src/it/java/org/eclipse/persistence/testing/models/transparentindirection/IndirectMapProject.java
+++ b/foundation/eclipselink.core.test/src/it/java/org/eclipse/persistence/testing/models/transparentindirection/IndirectMapProject.java
@@ -47,17 +47,17 @@ protected void modifyOrderDescriptor(RelationalDescriptor descriptor) {
     }
 
     @Override
-    public Class orderClass() {
+    public Class<?> orderClass() {
         return org.eclipse.persistence.testing.models.transparentindirection.MappedOrder.class;
     }
 
     @Override
-    public Class orderLineClass() {
+    public Class<?> orderLineClass() {
         return org.eclipse.persistence.testing.models.transparentindirection.MappedOrderLine.class;
     }
 
     @Override
-    protected Class salesRepClass() {
+    protected Class<?> salesRepClass() {
         return org.eclipse.persistence.testing.models.transparentindirection.MappedSalesRep.class;
     }
 }
diff --git a/foundation/eclipselink.core.test/src/it/java/org/eclipse/persistence/testing/models/transparentindirection/IndirectSetProject.java b/foundation/eclipselink.core.test/src/it/java/org/eclipse/persistence/testing/models/transparentindirection/IndirectSetProject.java
index 681c5b4..c30913b 100644
--- a/foundation/eclipselink.core.test/src/it/java/org/eclipse/persistence/testing/models/transparentindirection/IndirectSetProject.java
+++ b/foundation/eclipselink.core.test/src/it/java/org/eclipse/persistence/testing/models/transparentindirection/IndirectSetProject.java
@@ -54,17 +54,17 @@ protected void modifyOrderDescriptor(RelationalDescriptor descriptor) {
     }
 
     @Override
-    protected Class orderClass() {
+    protected Class<?> orderClass() {
         return org.eclipse.persistence.testing.models.transparentindirection.SetOrder.class;
     }
 
     @Override
-    public Class orderLineClass() {
+    public Class<?> orderLineClass() {
         return org.eclipse.persistence.testing.models.transparentindirection.SetOrderLine.class;
     }
 
     @Override
-    protected Class salesRepClass() {
+    protected Class<?> salesRepClass() {
         return org.eclipse.persistence.testing.models.transparentindirection.SetSalesRep.class;
     }
 }
diff --git a/foundation/eclipselink.core.test/src/it/java/org/eclipse/persistence/testing/models/unidirectional/EmployeePopulator.java b/foundation/eclipselink.core.test/src/it/java/org/eclipse/persistence/testing/models/unidirectional/EmployeePopulator.java
index 7676a82..96d2a0a 100644
--- a/foundation/eclipselink.core.test/src/it/java/org/eclipse/persistence/testing/models/unidirectional/EmployeePopulator.java
+++ b/foundation/eclipselink.core.test/src/it/java/org/eclipse/persistence/testing/models/unidirectional/EmployeePopulator.java
@@ -242,7 +242,7 @@ public void buildExamples() {
         employeeExample12();
     }
 
-    protected boolean containsObject(Class domainClass, String identifier) {
+    protected boolean containsObject(Class<?> domainClass, String identifier) {
         return populationManager.containsObject(domainClass, identifier);
     }
 
@@ -416,11 +416,11 @@ protected Vector<Object> getAllObjects() {
         return populationManager.getAllObjects();
     }
 
-    public Vector<Object> getAllObjectsForClass(Class domainClass) {
+    public Vector<Object> getAllObjectsForClass(Class<?> domainClass) {
         return populationManager.getAllObjectsForClass(domainClass);
     }
 
-    protected Object getObject(Class domainClass, String identifier) {
+    protected Object getObject(Class<?> domainClass, String identifier) {
         return populationManager.getObject(domainClass, identifier);
     }
 
@@ -461,7 +461,7 @@ public String getPhoneNumber(String areaCode) {
         return phoneNumber.toString();
     }
 
-    protected void registerObject(Class domainClass, Object domainObject, String identifier) {
+    protected void registerObject(Class<?> domainClass, Object domainObject, String identifier) {
         populationManager.registerObject(domainClass, domainObject, identifier);
     }
 
diff --git a/foundation/eclipselink.core.test/src/it/java/org/eclipse/persistence/testing/tests/aggregate/AgentBuilderHelper.java b/foundation/eclipselink.core.test/src/it/java/org/eclipse/persistence/testing/tests/aggregate/AgentBuilderHelper.java
index f9f502c..86ed957 100644
--- a/foundation/eclipselink.core.test/src/it/java/org/eclipse/persistence/testing/tests/aggregate/AgentBuilderHelper.java
+++ b/foundation/eclipselink.core.test/src/it/java/org/eclipse/persistence/testing/tests/aggregate/AgentBuilderHelper.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
@@ -53,7 +53,7 @@ public static List getHouses(Object object) {
         }
     }
 
-    public static String getName(Class cls) {
+    public static String getName(Class<?> cls) {
         if(Agent.class.equals(cls)) {
             return "Agent";
         } else if (Builder.class.equals(cls)) {
@@ -63,7 +63,7 @@ public static String getName(Class cls) {
         }
     }
 
-    public static String getNameInBrackets(Class cls) {
+    public static String getNameInBrackets(Class<?> cls) {
         if(Agent.class.equals(cls)) {
             return "(Agent)";
         } else if (Builder.class.equals(cls)) {
diff --git a/foundation/eclipselink.core.test/src/it/java/org/eclipse/persistence/testing/tests/aggregate/AggregateCollectionClearTest.java b/foundation/eclipselink.core.test/src/it/java/org/eclipse/persistence/testing/tests/aggregate/AggregateCollectionClearTest.java
index 0040556..2ee3ace 100644
--- a/foundation/eclipselink.core.test/src/it/java/org/eclipse/persistence/testing/tests/aggregate/AggregateCollectionClearTest.java
+++ b/foundation/eclipselink.core.test/src/it/java/org/eclipse/persistence/testing/tests/aggregate/AggregateCollectionClearTest.java
@@ -19,9 +19,9 @@
 
 public class AggregateCollectionClearTest extends TransactionalTestCase {
     public Object object;
-    public Class cls;
+    public Class<?> cls;
 
-    public AggregateCollectionClearTest(Class cls) {
+    public AggregateCollectionClearTest(Class<?> cls) {
         this.cls = cls;
         setName(getName() + AgentBuilderHelper.getNameInBrackets(cls));
         setDescription("Verifies that when aggregate collections get cleared that the changes are merged.  CR 3013");
diff --git a/foundation/eclipselink.core.test/src/it/java/org/eclipse/persistence/testing/tests/aggregate/AggregateCollectionOuterJoinTest.java b/foundation/eclipselink.core.test/src/it/java/org/eclipse/persistence/testing/tests/aggregate/AggregateCollectionOuterJoinTest.java
index 92026b7..c7b0264 100644
--- a/foundation/eclipselink.core.test/src/it/java/org/eclipse/persistence/testing/tests/aggregate/AggregateCollectionOuterJoinTest.java
+++ b/foundation/eclipselink.core.test/src/it/java/org/eclipse/persistence/testing/tests/aggregate/AggregateCollectionOuterJoinTest.java
@@ -27,11 +27,11 @@
  * Bug 2847621 - Test to ensure outer joins are working with aggregate collections
  */
 public class AggregateCollectionOuterJoinTest extends AutoVerifyTestCase {
-    Class cls;
+    Class<?> cls;
     protected List objects = null;
 
     // Must be either Agent or Builder
-    public AggregateCollectionOuterJoinTest(Class cls) {
+    public AggregateCollectionOuterJoinTest(Class<?> cls) {
         super();
         this.cls = cls;
         setName(getName() + AgentBuilderHelper.getNameInBrackets(cls));
diff --git a/foundation/eclipselink.core.test/src/it/java/org/eclipse/persistence/testing/tests/aggregate/BatchReadingWithAggregateCollectionMapping.java b/foundation/eclipselink.core.test/src/it/java/org/eclipse/persistence/testing/tests/aggregate/BatchReadingWithAggregateCollectionMapping.java
index 563a2a7..e092016 100644
--- a/foundation/eclipselink.core.test/src/it/java/org/eclipse/persistence/testing/tests/aggregate/BatchReadingWithAggregateCollectionMapping.java
+++ b/foundation/eclipselink.core.test/src/it/java/org/eclipse/persistence/testing/tests/aggregate/BatchReadingWithAggregateCollectionMapping.java
@@ -22,9 +22,9 @@
 
 public class BatchReadingWithAggregateCollectionMapping extends ReadObjectTest {
 
-    Class cls;
+    Class<?> cls;
     // Must be Agent or Builder
-    public BatchReadingWithAggregateCollectionMapping(Class cls) {
+    public BatchReadingWithAggregateCollectionMapping(Class<?> cls) {
         super();
         this.cls = cls;
         setName(getName() + AgentBuilderHelper.getNameInBrackets(cls));
diff --git a/foundation/eclipselink.core.test/src/it/java/org/eclipse/persistence/testing/tests/aggregate/NestedAggregateCollectionAbstractTestCase.java b/foundation/eclipselink.core.test/src/it/java/org/eclipse/persistence/testing/tests/aggregate/NestedAggregateCollectionAbstractTestCase.java
index bf87c71..0b5eaff 100644
--- a/foundation/eclipselink.core.test/src/it/java/org/eclipse/persistence/testing/tests/aggregate/NestedAggregateCollectionAbstractTestCase.java
+++ b/foundation/eclipselink.core.test/src/it/java/org/eclipse/persistence/testing/tests/aggregate/NestedAggregateCollectionAbstractTestCase.java
@@ -24,11 +24,11 @@
 import org.eclipse.persistence.testing.models.aggregate.House;
 
 public class NestedAggregateCollectionAbstractTestCase extends org.eclipse.persistence.testing.framework.AutoVerifyTestCase {
-    public Class cls;
+    public Class<?> cls;
     public boolean instantiationExceptionOccurred = false;
 
     // Must be Agent or Builder
-    public NestedAggregateCollectionAbstractTestCase(Class cls) {
+    public NestedAggregateCollectionAbstractTestCase(Class<?> cls) {
         super();
         this.cls = cls;
         setName(getName() + AgentBuilderHelper.getNameInBrackets(cls));
diff --git a/foundation/eclipselink.core.test/src/it/java/org/eclipse/persistence/testing/tests/aggregate/NestedAggregateCollectionTest.java b/foundation/eclipselink.core.test/src/it/java/org/eclipse/persistence/testing/tests/aggregate/NestedAggregateCollectionTest.java
index 142fe68..2b6022d 100644
--- a/foundation/eclipselink.core.test/src/it/java/org/eclipse/persistence/testing/tests/aggregate/NestedAggregateCollectionTest.java
+++ b/foundation/eclipselink.core.test/src/it/java/org/eclipse/persistence/testing/tests/aggregate/NestedAggregateCollectionTest.java
@@ -26,7 +26,7 @@
  * @author Tom Ware
  */
 public class NestedAggregateCollectionTest extends org.eclipse.persistence.testing.framework.AutoVerifyTestCase {
-    private Class cls;
+    private Class<?> cls;
     private String errorMessage = null;
     private UnitOfWork uow = null;
     // that's either Agent or Builder
@@ -34,7 +34,7 @@ public class NestedAggregateCollectionTest extends org.eclipse.persistence.testi
     private House house = null;
 
     // Must be Agent or Builder.
-    public NestedAggregateCollectionTest(Class cls) {
+    public NestedAggregateCollectionTest(Class<?> cls) {
         super();
         this.cls = cls;
         setName(getName() + AgentBuilderHelper.getNameInBrackets(cls));
diff --git a/foundation/eclipselink.core.test/src/it/java/org/eclipse/persistence/testing/tests/aggregate/VerifyCascadeDelete.java b/foundation/eclipselink.core.test/src/it/java/org/eclipse/persistence/testing/tests/aggregate/VerifyCascadeDelete.java
index 408bf30..4ea5abc 100644
--- a/foundation/eclipselink.core.test/src/it/java/org/eclipse/persistence/testing/tests/aggregate/VerifyCascadeDelete.java
+++ b/foundation/eclipselink.core.test/src/it/java/org/eclipse/persistence/testing/tests/aggregate/VerifyCascadeDelete.java
@@ -22,14 +22,14 @@
 import org.eclipse.persistence.testing.models.aggregate.Customer;
 
 public class VerifyCascadeDelete extends TransactionalTestCase {
-    public Class cls;
+    public Class<?> cls;
     public Company company;
     public Object object;
     private OneToOneMapping companyMapping;
     private boolean privateOwnedValue = false;
 
     // Must be Agent or Builder
-    public VerifyCascadeDelete(Class cls) {
+    public VerifyCascadeDelete(Class<?> cls) {
         super();
         this.cls = cls;
         setName(getName() + AgentBuilderHelper.getNameInBrackets(cls));
diff --git a/foundation/eclipselink.core.test/src/it/java/org/eclipse/persistence/testing/tests/clientserver/DeadLockEmployeePopulator.java b/foundation/eclipselink.core.test/src/it/java/org/eclipse/persistence/testing/tests/clientserver/DeadLockEmployeePopulator.java
index aeb8bd5..6795ff6 100644
--- a/foundation/eclipselink.core.test/src/it/java/org/eclipse/persistence/testing/tests/clientserver/DeadLockEmployeePopulator.java
+++ b/foundation/eclipselink.core.test/src/it/java/org/eclipse/persistence/testing/tests/clientserver/DeadLockEmployeePopulator.java
@@ -137,7 +137,7 @@ public void buildExamples() {
         employeeExample3();
     }
 
-    protected boolean containsObject(Class domainClass, String identifier) {
+    protected boolean containsObject(Class<?> domainClass, String identifier) {
         return populationManager.containsObject(domainClass, identifier);
     }
 
@@ -182,15 +182,15 @@ protected Vector<Object> getAllObjects() {
         return populationManager.getAllObjects();
     }
 
-    public Vector<Object> getAllObjectsForClass(Class domainClass) {
+    public Vector<Object> getAllObjectsForClass(Class<?> domainClass) {
         return populationManager.getAllObjectsForClass(domainClass);
     }
 
-    protected Object getObject(Class domainClass, String identifier) {
+    protected Object getObject(Class<?> domainClass, String identifier) {
         return populationManager.getObject(domainClass, identifier);
     }
 
-    protected void registerObject(Class domainClass, Object domainObject, String identifier) {
+    protected void registerObject(Class<?> domainClass, Object domainObject, String identifier) {
         populationManager.registerObject(domainClass, domainObject, identifier);
     }
 
diff --git a/foundation/eclipselink.core.test/src/it/java/org/eclipse/persistence/testing/tests/collections/CollectionReadObjectTest.java b/foundation/eclipselink.core.test/src/it/java/org/eclipse/persistence/testing/tests/collections/CollectionReadObjectTest.java
index 3923cda..3aa8dab 100644
--- a/foundation/eclipselink.core.test/src/it/java/org/eclipse/persistence/testing/tests/collections/CollectionReadObjectTest.java
+++ b/foundation/eclipselink.core.test/src/it/java/org/eclipse/persistence/testing/tests/collections/CollectionReadObjectTest.java
@@ -20,7 +20,7 @@
 import org.eclipse.persistence.testing.framework.*;
 
 public class CollectionReadObjectTest extends org.eclipse.persistence.testing.framework.ReadObjectTest {
-    Class collectionClass;
+    Class<?> collectionClass;
 
     public CollectionReadObjectTest() {
         super();
diff --git a/foundation/eclipselink.core.test/src/it/java/org/eclipse/persistence/testing/tests/conversion/ConvertClassTypeTest.java b/foundation/eclipselink.core.test/src/it/java/org/eclipse/persistence/testing/tests/conversion/ConvertClassTypeTest.java
index af68844..5e6e228 100644
--- a/foundation/eclipselink.core.test/src/it/java/org/eclipse/persistence/testing/tests/conversion/ConvertClassTypeTest.java
+++ b/foundation/eclipselink.core.test/src/it/java/org/eclipse/persistence/testing/tests/conversion/ConvertClassTypeTest.java
@@ -21,16 +21,16 @@
 public class ConvertClassTypeTest extends AutoVerifyTestCase {
     protected boolean m_failure;
     protected String m_testStr;
-    protected Class m_testClass;
-    protected Class m_type;
+    protected Class<?> m_testClass;
+    protected Class<?> m_type;
 
-    public ConvertClassTypeTest(String testStr, Class type) {
+    public ConvertClassTypeTest(String testStr, Class<?> type) {
         m_testStr = testStr;
         m_testClass = null;
         m_type = type;
     }
 
-    public ConvertClassTypeTest(Class testClass, Class type) {
+    public ConvertClassTypeTest(Class<?> testClass, Class<?> type) {
         m_testClass = testClass;
         m_testStr = null;
         m_type = type;
diff --git a/foundation/eclipselink.core.test/src/it/java/org/eclipse/persistence/testing/tests/conversion/ConvertObjectTest.java b/foundation/eclipselink.core.test/src/it/java/org/eclipse/persistence/testing/tests/conversion/ConvertObjectTest.java
index 87b4468..b896e16 100644
--- a/foundation/eclipselink.core.test/src/it/java/org/eclipse/persistence/testing/tests/conversion/ConvertObjectTest.java
+++ b/foundation/eclipselink.core.test/src/it/java/org/eclipse/persistence/testing/tests/conversion/ConvertObjectTest.java
@@ -23,13 +23,13 @@ public class ConvertObjectTest extends AutoVerifyTestCase {
     protected boolean m_failure;
     protected boolean m_testingFailure;
     protected Object m_testObj;
-    protected Class m_targetClass;
+    protected Class<?> m_targetClass;
 
     /**
      * This constructor is used when an exception being thrown implies the test
      * failed.
      */
-    public ConvertObjectTest(Object testObj, Class targetClass) {
+    public ConvertObjectTest(Object testObj, Class<?> targetClass) {
         m_testObj = testObj;
         m_targetClass = targetClass;
         m_testingFailure = false;
@@ -39,7 +39,7 @@ public ConvertObjectTest(Object testObj, Class targetClass) {
      * This constructor is used when an exception being thrown implies the test
      * passed.
      */
-    public ConvertObjectTest(Object testObj, Class targetClass, boolean testingFailure) {
+    public ConvertObjectTest(Object testObj, Class<?> targetClass, boolean testingFailure) {
         m_testObj = testObj;
         m_targetClass = targetClass;
         m_testingFailure = testingFailure;
diff --git a/foundation/eclipselink.core.test/src/it/java/org/eclipse/persistence/testing/tests/customsqlstoredprocedures/CustomSQLSubQueryTest.java b/foundation/eclipselink.core.test/src/it/java/org/eclipse/persistence/testing/tests/customsqlstoredprocedures/CustomSQLSubQueryTest.java
index 175d29e..849cca5 100644
--- a/foundation/eclipselink.core.test/src/it/java/org/eclipse/persistence/testing/tests/customsqlstoredprocedures/CustomSQLSubQueryTest.java
+++ b/foundation/eclipselink.core.test/src/it/java/org/eclipse/persistence/testing/tests/customsqlstoredprocedures/CustomSQLSubQueryTest.java
@@ -33,7 +33,7 @@ public class CustomSQLSubQueryTest extends AutoVerifyTestCase {
     protected ReadAllQuery query;
     protected int numberOfManagedEmployees;
     protected Object objectsFromDatabase;
-    protected Class referenceClass;
+    protected Class<?> referenceClass;
     protected Employee someManager;
 
     public CustomSQLSubQueryTest() {
diff --git a/foundation/eclipselink.core.test/src/it/java/org/eclipse/persistence/testing/tests/distributedcache/DirectMapMergeTest.java b/foundation/eclipselink.core.test/src/it/java/org/eclipse/persistence/testing/tests/distributedcache/DirectMapMergeTest.java
index b629885..e63840c 100644
--- a/foundation/eclipselink.core.test/src/it/java/org/eclipse/persistence/testing/tests/distributedcache/DirectMapMergeTest.java
+++ b/foundation/eclipselink.core.test/src/it/java/org/eclipse/persistence/testing/tests/distributedcache/DirectMapMergeTest.java
@@ -36,7 +36,7 @@ protected int getCollectionSize(Object rootObject) {
     }
 
     @Override
-    protected Class getRootClass() {
+    protected Class<?> getRootClass() {
         return DirectMapMappings.class;
     }
 
diff --git a/foundation/eclipselink.core.test/src/it/java/org/eclipse/persistence/testing/tests/distributedcache/DistributedCacheMergeTest.java b/foundation/eclipselink.core.test/src/it/java/org/eclipse/persistence/testing/tests/distributedcache/DistributedCacheMergeTest.java
index 032f3c6..f4fe28d 100644
--- a/foundation/eclipselink.core.test/src/it/java/org/eclipse/persistence/testing/tests/distributedcache/DistributedCacheMergeTest.java
+++ b/foundation/eclipselink.core.test/src/it/java/org/eclipse/persistence/testing/tests/distributedcache/DistributedCacheMergeTest.java
@@ -217,7 +217,7 @@ protected void test() {
 
     }
 
-    protected Class getRootClass() {
+    protected Class<?> getRootClass() {
         return Employee.class;
     }
 
diff --git a/foundation/eclipselink.core.test/src/it/java/org/eclipse/persistence/testing/tests/distributedservers/rcm/ConfigurableCacheSyncDistributedTest.java b/foundation/eclipselink.core.test/src/it/java/org/eclipse/persistence/testing/tests/distributedservers/rcm/ConfigurableCacheSyncDistributedTest.java
index 5e01584..da8ba79 100644
--- a/foundation/eclipselink.core.test/src/it/java/org/eclipse/persistence/testing/tests/distributedservers/rcm/ConfigurableCacheSyncDistributedTest.java
+++ b/foundation/eclipselink.core.test/src/it/java/org/eclipse/persistence/testing/tests/distributedservers/rcm/ConfigurableCacheSyncDistributedTest.java
@@ -120,7 +120,7 @@ public void setup() {
         oldCacheSyncConfigValues = new Hashtable();
         Enumeration keys = cacheSyncConfigValues.keys();
         while (keys.hasMoreElements()) {
-            Class keyClass = (Class)keys.nextElement();
+            Class<?> keyClass = (Class)keys.nextElement();
             ClassDescriptor descriptor = getSession().getDescriptor(keyClass);
             if (descriptor != null) {
                 int cacheSyncType = descriptor.getCacheSynchronizationType();
@@ -148,7 +148,7 @@ public void reset() {
         }
         Enumeration keys = oldCacheSyncConfigValues.keys();
         while (keys.hasMoreElements()) {
-            Class keyClass = (Class)keys.nextElement();
+            Class<?> keyClass = (Class)keys.nextElement();
             ClassDescriptor descriptor = getSession().getDescriptor(keyClass);
             int newCacheSyncType = (Integer) oldCacheSyncConfigValues.get(keyClass);
             descriptor.setCacheSynchronizationType(newCacheSyncType);
diff --git a/foundation/eclipselink.core.test/src/it/java/org/eclipse/persistence/testing/tests/distributedservers/rcm/ConfigurableUpdateChangeObjectTest.java b/foundation/eclipselink.core.test/src/it/java/org/eclipse/persistence/testing/tests/distributedservers/rcm/ConfigurableUpdateChangeObjectTest.java
index 7ffee65..32877fb 100644
--- a/foundation/eclipselink.core.test/src/it/java/org/eclipse/persistence/testing/tests/distributedservers/rcm/ConfigurableUpdateChangeObjectTest.java
+++ b/foundation/eclipselink.core.test/src/it/java/org/eclipse/persistence/testing/tests/distributedservers/rcm/ConfigurableUpdateChangeObjectTest.java
@@ -57,7 +57,7 @@ public void setup() {
         oldCacheSyncConfigValues = new Hashtable();
         Enumeration keys = cacheSyncConfigValues.keys();
         while (keys.hasMoreElements()) {
-            Class keyClass = (Class)keys.nextElement();
+            Class<?> keyClass = (Class)keys.nextElement();
             ClassDescriptor descriptor = getSession().getDescriptor(keyClass);
             if (descriptor != null) {
                 int cacheSyncType = descriptor.getCacheSynchronizationType();
@@ -93,7 +93,7 @@ public void reset() {
         super.reset();
         Enumeration keys = oldCacheSyncConfigValues.keys();
         while (keys.hasMoreElements()) {
-            Class keyClass = (Class)keys.nextElement();
+            Class<?> keyClass = (Class)keys.nextElement();
             ClassDescriptor descriptor = getSession().getDescriptor(keyClass);
             int newCacheSyncType = (Integer) oldCacheSyncConfigValues.get(keyClass);
             descriptor.setCacheSynchronizationType(newCacheSyncType);
diff --git a/foundation/eclipselink.core.test/src/it/java/org/eclipse/persistence/testing/tests/distributedservers/rcm/InvalidateObjectWithMissingReferenceTest.java b/foundation/eclipselink.core.test/src/it/java/org/eclipse/persistence/testing/tests/distributedservers/rcm/InvalidateObjectWithMissingReferenceTest.java
index bc4565d..dff0212 100644
--- a/foundation/eclipselink.core.test/src/it/java/org/eclipse/persistence/testing/tests/distributedservers/rcm/InvalidateObjectWithMissingReferenceTest.java
+++ b/foundation/eclipselink.core.test/src/it/java/org/eclipse/persistence/testing/tests/distributedservers/rcm/InvalidateObjectWithMissingReferenceTest.java
@@ -57,7 +57,7 @@ public void reset() {
         }
         Enumeration keys = oldCacheSyncConfigValues.keys();
         while (keys.hasMoreElements()) {
-            Class keyClass = (Class)keys.nextElement();
+            Class<?> keyClass = (Class)keys.nextElement();
             ClassDescriptor descriptor = getSession().getDescriptor(keyClass);
             int newCacheSyncType = (Integer) oldCacheSyncConfigValues.get(keyClass);
             descriptor.setCacheSynchronizationType(newCacheSyncType);
@@ -69,7 +69,7 @@ public void setup() {
         oldCacheSyncConfigValues = new Hashtable();
         Enumeration keys = cacheSyncConfigValues.keys();
         while (keys.hasMoreElements()) {
-            Class keyClass = (Class)keys.nextElement();
+            Class<?> keyClass = (Class)keys.nextElement();
             ClassDescriptor descriptor = getSession().getDescriptor(keyClass);
 
             if (descriptor != null) {
diff --git a/foundation/eclipselink.core.test/src/it/java/org/eclipse/persistence/testing/tests/expressions/DefaultingFunctionsExpressionTest.java b/foundation/eclipselink.core.test/src/it/java/org/eclipse/persistence/testing/tests/expressions/DefaultingFunctionsExpressionTest.java
index 03d5dc1..97c7385 100644
--- a/foundation/eclipselink.core.test/src/it/java/org/eclipse/persistence/testing/tests/expressions/DefaultingFunctionsExpressionTest.java
+++ b/foundation/eclipselink.core.test/src/it/java/org/eclipse/persistence/testing/tests/expressions/DefaultingFunctionsExpressionTest.java
@@ -23,7 +23,7 @@ public class DefaultingFunctionsExpressionTest extends ReadAllExpressionTest {
      * @param referenceClass java.lang.Class
      * @param originalObjectsSize int
      */
-    public DefaultingFunctionsExpressionTest(Class referenceClass, int originalObjectsSize) {
+    public DefaultingFunctionsExpressionTest(Class<?> referenceClass, int originalObjectsSize) {
         super(referenceClass, originalObjectsSize);
     }
 
diff --git a/foundation/eclipselink.core.test/src/it/java/org/eclipse/persistence/testing/tests/expressions/ExpressionTestSuite.java b/foundation/eclipselink.core.test/src/it/java/org/eclipse/persistence/testing/tests/expressions/ExpressionTestSuite.java
index 6d0487f..2fe46cb 100644
--- a/foundation/eclipselink.core.test/src/it/java/org/eclipse/persistence/testing/tests/expressions/ExpressionTestSuite.java
+++ b/foundation/eclipselink.core.test/src/it/java/org/eclipse/persistence/testing/tests/expressions/ExpressionTestSuite.java
@@ -213,7 +213,7 @@ private void addAggregateQueryTest() {
         addTest(test);
     }
 
-    private void addAggregeateCollectionJoinTest(Class cls) {
+    private void addAggregeateCollectionJoinTest(Class<?> cls) {
         ExpressionBuilder builder = new ExpressionBuilder();
         Expression expression = builder.anyOf("customers").anyOf("dependants").get("firstName").equal("Kyle");
 
diff --git a/foundation/eclipselink.core.test/src/it/java/org/eclipse/persistence/testing/tests/expressions/GetFunctionWithTwoArgumentsTest.java b/foundation/eclipselink.core.test/src/it/java/org/eclipse/persistence/testing/tests/expressions/GetFunctionWithTwoArgumentsTest.java
index d61b71f..64aac82 100644
--- a/foundation/eclipselink.core.test/src/it/java/org/eclipse/persistence/testing/tests/expressions/GetFunctionWithTwoArgumentsTest.java
+++ b/foundation/eclipselink.core.test/src/it/java/org/eclipse/persistence/testing/tests/expressions/GetFunctionWithTwoArgumentsTest.java
@@ -18,7 +18,7 @@
 import org.eclipse.persistence.expressions.*;
 
 public class GetFunctionWithTwoArgumentsTest extends ReadAllExpressionTest {
-    public GetFunctionWithTwoArgumentsTest(Class referenceClass, int originalObjectsSize) {
+    public GetFunctionWithTwoArgumentsTest(Class<?> referenceClass, int originalObjectsSize) {
         super(referenceClass, originalObjectsSize);
     }
 
diff --git a/foundation/eclipselink.core.test/src/it/java/org/eclipse/persistence/testing/tests/expressions/ReadAllExpressionTest.java b/foundation/eclipselink.core.test/src/it/java/org/eclipse/persistence/testing/tests/expressions/ReadAllExpressionTest.java
index 2125f12..9d7ab27 100644
--- a/foundation/eclipselink.core.test/src/it/java/org/eclipse/persistence/testing/tests/expressions/ReadAllExpressionTest.java
+++ b/foundation/eclipselink.core.test/src/it/java/org/eclipse/persistence/testing/tests/expressions/ReadAllExpressionTest.java
@@ -38,7 +38,7 @@ public class ReadAllExpressionTest extends org.eclipse.persistence.testing.frame
      * @param referenceClass java.lang.Class
      * @param originalObjectsSize int
      */
-    public ReadAllExpressionTest(Class referenceClass, int originalObjectsSize) {
+    public ReadAllExpressionTest(Class<?> referenceClass, int originalObjectsSize) {
         super(referenceClass, originalObjectsSize);
     }
 
@@ -85,7 +85,7 @@ public boolean isPlatformSupported(DatabasePlatform platform) {
         }
         if (supportedPlatforms != null) {
             for (Iterator iterator = supportedPlatforms.iterator(); iterator.hasNext();) {
-                Class platformClass = (Class)iterator.next();
+                Class<?> platformClass = (Class)iterator.next();
                 if (platformClass.isInstance(platform)) {
                     supported = true;
                 }
@@ -95,7 +95,7 @@ public boolean isPlatformSupported(DatabasePlatform platform) {
         }
         if (unsupportedPlatforms != null) {
             for (Iterator iterator = unsupportedPlatforms.iterator(); iterator.hasNext();) {
-                Class platformClass = (Class)iterator.next();
+                Class<?> platformClass = (Class)iterator.next();
                 if (platformClass.isInstance(platform)) {
                     notSupported = true;
                 }
@@ -166,14 +166,14 @@ protected void test() {
         }
     }
 
-    public void addSupportedPlatform(Class platform) {
+    public void addSupportedPlatform(Class<?> platform) {
         if (supportedPlatforms == null) {
             supportedPlatforms = new Vector();
         }
         supportedPlatforms.addElement(platform);
     }
 
-    public void addUnsupportedPlatform(Class platform) {
+    public void addUnsupportedPlatform(Class<?> platform) {
         if (unsupportedPlatforms == null) {
             unsupportedPlatforms = new Vector();
         }
diff --git a/foundation/eclipselink.core.test/src/it/java/org/eclipse/persistence/testing/tests/expressions/ReadAllOuterJoinExpressionTest.java b/foundation/eclipselink.core.test/src/it/java/org/eclipse/persistence/testing/tests/expressions/ReadAllOuterJoinExpressionTest.java
index a155131..7209ce7 100644
--- a/foundation/eclipselink.core.test/src/it/java/org/eclipse/persistence/testing/tests/expressions/ReadAllOuterJoinExpressionTest.java
+++ b/foundation/eclipselink.core.test/src/it/java/org/eclipse/persistence/testing/tests/expressions/ReadAllOuterJoinExpressionTest.java
@@ -18,7 +18,7 @@
 
 public class ReadAllOuterJoinExpressionTest extends ReadAllExpressionTest {
 
-    public ReadAllOuterJoinExpressionTest(Class referenceClass, int originalObjectsSize) {
+    public ReadAllOuterJoinExpressionTest(Class<?> referenceClass, int originalObjectsSize) {
         super(referenceClass, originalObjectsSize);
     }
 
diff --git a/foundation/eclipselink.core.test/src/it/java/org/eclipse/persistence/testing/tests/expressions/ReadAllOuterJoinExpressionTest2.java b/foundation/eclipselink.core.test/src/it/java/org/eclipse/persistence/testing/tests/expressions/ReadAllOuterJoinExpressionTest2.java
index a7caf20..6702691 100644
--- a/foundation/eclipselink.core.test/src/it/java/org/eclipse/persistence/testing/tests/expressions/ReadAllOuterJoinExpressionTest2.java
+++ b/foundation/eclipselink.core.test/src/it/java/org/eclipse/persistence/testing/tests/expressions/ReadAllOuterJoinExpressionTest2.java
@@ -21,7 +21,7 @@ public class ReadAllOuterJoinExpressionTest2 extends ReadAllExpressionTest {
      * @param referenceClass java.lang.Class
      * @param originalObjectsSize int
      */
-    public ReadAllOuterJoinExpressionTest2(Class referenceClass, int originalObjectsSize) {
+    public ReadAllOuterJoinExpressionTest2(Class<?> referenceClass, int originalObjectsSize) {
         super(referenceClass, originalObjectsSize);
     }
 
diff --git a/foundation/eclipselink.core.test/src/it/java/org/eclipse/persistence/testing/tests/expressions/ReadObjectExpressionTest.java b/foundation/eclipselink.core.test/src/it/java/org/eclipse/persistence/testing/tests/expressions/ReadObjectExpressionTest.java
index 52dd6ff..eb91c9b 100644
--- a/foundation/eclipselink.core.test/src/it/java/org/eclipse/persistence/testing/tests/expressions/ReadObjectExpressionTest.java
+++ b/foundation/eclipselink.core.test/src/it/java/org/eclipse/persistence/testing/tests/expressions/ReadObjectExpressionTest.java
@@ -24,7 +24,7 @@
 public class ReadObjectExpressionTest extends ReadObjectTest {
     Expression expression;
     /** The class of the target objects to be read from the database. */
-    private Class referenceClass;
+    private Class<?> referenceClass;
 
     public ReadObjectExpressionTest(Object theOriginalObject, Expression theExpression) {
         originalObject = theOriginalObject;
@@ -34,7 +34,7 @@ public ReadObjectExpressionTest(Object theOriginalObject, Expression theExpressi
         }
     }
 
-    public ReadObjectExpressionTest(Class theReferenceClass, Expression theExpression) {
+    public ReadObjectExpressionTest(Class<?> theReferenceClass, Expression theExpression) {
         referenceClass = theReferenceClass;
         expression = theExpression;
     }
diff --git a/foundation/eclipselink.core.test/src/it/java/org/eclipse/persistence/testing/tests/feature/PrintIdentityMapTest.java b/foundation/eclipselink.core.test/src/it/java/org/eclipse/persistence/testing/tests/feature/PrintIdentityMapTest.java
index ce0b1f9..294c721 100644
--- a/foundation/eclipselink.core.test/src/it/java/org/eclipse/persistence/testing/tests/feature/PrintIdentityMapTest.java
+++ b/foundation/eclipselink.core.test/src/it/java/org/eclipse/persistence/testing/tests/feature/PrintIdentityMapTest.java
@@ -18,7 +18,7 @@
 import org.eclipse.persistence.testing.framework.*;
 
 public class PrintIdentityMapTest extends AutoVerifyTestCase {
-    protected Class classToPrint;
+    protected Class<?> classToPrint;
     protected StringWriter outWriter;
 
     /**
@@ -32,7 +32,7 @@ public PrintIdentityMapTest() {
     /**
      * PrintIdentityMapTestModel constructor comment.
      */
-    public PrintIdentityMapTest(Class classToPrint) {
+    public PrintIdentityMapTest(Class<?> classToPrint) {
         this();
         this.classToPrint = classToPrint;
     }
diff --git a/foundation/eclipselink.core.test/src/it/java/org/eclipse/persistence/testing/tests/history/RollbackObjectsTest.java b/foundation/eclipselink.core.test/src/it/java/org/eclipse/persistence/testing/tests/history/RollbackObjectsTest.java
index c055912..22ff51a 100644
--- a/foundation/eclipselink.core.test/src/it/java/org/eclipse/persistence/testing/tests/history/RollbackObjectsTest.java
+++ b/foundation/eclipselink.core.test/src/it/java/org/eclipse/persistence/testing/tests/history/RollbackObjectsTest.java
@@ -31,11 +31,11 @@
 
 public class RollbackObjectsTest extends AutoVerifyTestCase {
 
-    Class domainClass;
+    Class<?> domainClass;
     AsOfClause pastTime;
     Vector pastObjects;
 
-    public RollbackObjectsTest(Class domainClass, AsOfClause pastTime) {
+    public RollbackObjectsTest(Class<?> domainClass, AsOfClause pastTime) {
         super();
         this.domainClass = domainClass;
         this.pastTime = pastTime;
diff --git a/foundation/eclipselink.core.test/src/it/java/org/eclipse/persistence/testing/tests/identitymaps/CleanupCacheKeyCorrectnessTest.java b/foundation/eclipselink.core.test/src/it/java/org/eclipse/persistence/testing/tests/identitymaps/CleanupCacheKeyCorrectnessTest.java
index a259974..b7db3e2 100644
--- a/foundation/eclipselink.core.test/src/it/java/org/eclipse/persistence/testing/tests/identitymaps/CleanupCacheKeyCorrectnessTest.java
+++ b/foundation/eclipselink.core.test/src/it/java/org/eclipse/persistence/testing/tests/identitymaps/CleanupCacheKeyCorrectnessTest.java
@@ -30,8 +30,8 @@
  */
 public class CleanupCacheKeyCorrectnessTest extends TestCase {
 
-    protected Class originalIdentityMapClass;
-    protected Class newIdentityMapClass;
+    protected Class<? extends IdentityMap> originalIdentityMapClass;
+    protected Class<? extends IdentityMap> newIdentityMapClass;
     protected int originalIdentityMapSize;
     protected int newIdentityMapSize;
     protected int numberOfObjectsToCreate;
diff --git a/foundation/eclipselink.core.test/src/it/java/org/eclipse/persistence/testing/tests/identitymaps/CreateCacheKeyWeakIdentityMapTest.java b/foundation/eclipselink.core.test/src/it/java/org/eclipse/persistence/testing/tests/identitymaps/CreateCacheKeyWeakIdentityMapTest.java
index 92af5d8..ae90e3b 100644
--- a/foundation/eclipselink.core.test/src/it/java/org/eclipse/persistence/testing/tests/identitymaps/CreateCacheKeyWeakIdentityMapTest.java
+++ b/foundation/eclipselink.core.test/src/it/java/org/eclipse/persistence/testing/tests/identitymaps/CreateCacheKeyWeakIdentityMapTest.java
@@ -23,7 +23,7 @@
  * Read objects into the cache, force garbage collection, see that the cache is empty.
  */
 public class CreateCacheKeyWeakIdentityMapTest extends TestCase {
-    protected Class originalIdentityMapClass;
+    protected Class<? extends IdentityMap> originalIdentityMapClass;
     protected int originalIdentityMapSize;
     protected int querySize;
 
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 c780868..e496488 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
@@ -17,6 +17,7 @@
 import java.util.Vector;
 import org.eclipse.persistence.exceptions.*;
 import org.eclipse.persistence.internal.descriptors.*;
+import org.eclipse.persistence.internal.identitymaps.IdentityMap;
 import org.eclipse.persistence.testing.framework.*;
 import org.eclipse.persistence.testing.models.employee.domain.*;
 import org.eclipse.persistence.testing.tests.employee.EmployeeDeleteTest;
@@ -34,7 +35,7 @@ public class DeleteFromIdentityMapTest extends RegisterInIdentityMapTest {
     protected Object retrievalAttempt;
     protected OptimisticLockingPolicy lockingPolicy;
 
-    public DeleteFromIdentityMapTest(Class mapClass) {
+    public DeleteFromIdentityMapTest(Class<? extends IdentityMap> mapClass) {
         super(mapClass);
     }
 
diff --git a/foundation/eclipselink.core.test/src/it/java/org/eclipse/persistence/testing/tests/identitymaps/HardCacheWeakIdentityMapTest.java b/foundation/eclipselink.core.test/src/it/java/org/eclipse/persistence/testing/tests/identitymaps/HardCacheWeakIdentityMapTest.java
index 0eaf51b..0858de7 100644
--- a/foundation/eclipselink.core.test/src/it/java/org/eclipse/persistence/testing/tests/identitymaps/HardCacheWeakIdentityMapTest.java
+++ b/foundation/eclipselink.core.test/src/it/java/org/eclipse/persistence/testing/tests/identitymaps/HardCacheWeakIdentityMapTest.java
@@ -15,6 +15,7 @@
 package org.eclipse.persistence.testing.tests.identitymaps;
 
 import org.eclipse.persistence.internal.identitymaps.HardCacheWeakIdentityMap;
+import org.eclipse.persistence.internal.identitymaps.IdentityMap;
 import org.eclipse.persistence.sessions.*;
 import org.eclipse.persistence.queries.*;
 import org.eclipse.persistence.expressions.*;
@@ -27,7 +28,7 @@
  * the end result should be the same.
  */
 public class HardCacheWeakIdentityMapTest extends TestCase {
-    protected Class originalIdentityMapClass = null;
+    protected Class<? extends IdentityMap> originalIdentityMapClass = null;
     protected int originalIdentityMapSize = 0;
     protected Employee firstEmployee = null;
     protected Employee secondEmployee = null;
diff --git a/foundation/eclipselink.core.test/src/it/java/org/eclipse/persistence/testing/tests/identitymaps/InsertWeakIdentityMapTest.java b/foundation/eclipselink.core.test/src/it/java/org/eclipse/persistence/testing/tests/identitymaps/InsertWeakIdentityMapTest.java
index dc22c42..003b4dc 100644
--- a/foundation/eclipselink.core.test/src/it/java/org/eclipse/persistence/testing/tests/identitymaps/InsertWeakIdentityMapTest.java
+++ b/foundation/eclipselink.core.test/src/it/java/org/eclipse/persistence/testing/tests/identitymaps/InsertWeakIdentityMapTest.java
@@ -19,6 +19,7 @@
 import java.util.Vector;
 
 import org.eclipse.persistence.internal.identitymaps.CacheKey;
+import org.eclipse.persistence.internal.identitymaps.IdentityMap;
 import org.eclipse.persistence.internal.identitymaps.WeakIdentityMap;
 import org.eclipse.persistence.queries.InsertObjectQuery;
 import org.eclipse.persistence.testing.models.employee.domain.Employee;
@@ -26,7 +27,7 @@
 
 //bug4649617  Test if there is any memory leak in InsertObjectQuery with WeakIdentityMap.
 public class InsertWeakIdentityMapTest extends TestCase {
-    protected Class originalIdentityMapClass;
+    protected Class<? extends IdentityMap> originalIdentityMapClass;
     protected int originalIdentityMapSize;
     protected int identityMapSize = 10;
 
diff --git a/foundation/eclipselink.core.test/src/it/java/org/eclipse/persistence/testing/tests/identitymaps/MergeWithNoIdentityMap.java b/foundation/eclipselink.core.test/src/it/java/org/eclipse/persistence/testing/tests/identitymaps/MergeWithNoIdentityMap.java
index 286c9e0..2a293d9 100644
--- a/foundation/eclipselink.core.test/src/it/java/org/eclipse/persistence/testing/tests/identitymaps/MergeWithNoIdentityMap.java
+++ b/foundation/eclipselink.core.test/src/it/java/org/eclipse/persistence/testing/tests/identitymaps/MergeWithNoIdentityMap.java
@@ -14,6 +14,7 @@
 //     Oracle - initial API and implementation from Oracle TopLink
 package org.eclipse.persistence.testing.tests.identitymaps;
 
+import org.eclipse.persistence.internal.identitymaps.IdentityMap;
 import org.eclipse.persistence.sessions.*;
 import org.eclipse.persistence.testing.models.employee.domain.*;
 
@@ -21,7 +22,7 @@ public class MergeWithNoIdentityMap extends RegisterInIdentityMapTest {
     public Employee clone;
     public org.eclipse.persistence.internal.descriptors.OptimisticLockingPolicy lockPolicy;
 
-    public MergeWithNoIdentityMap(Class mapClass) {
+    public MergeWithNoIdentityMap(Class<? extends IdentityMap> mapClass) {
         super(mapClass);
     }
 
diff --git a/foundation/eclipselink.core.test/src/it/java/org/eclipse/persistence/testing/tests/identitymaps/ReadSoftCacheWeakIdentityMapTest.java b/foundation/eclipselink.core.test/src/it/java/org/eclipse/persistence/testing/tests/identitymaps/ReadSoftCacheWeakIdentityMapTest.java
index 6a99989..99f94aa 100644
--- a/foundation/eclipselink.core.test/src/it/java/org/eclipse/persistence/testing/tests/identitymaps/ReadSoftCacheWeakIdentityMapTest.java
+++ b/foundation/eclipselink.core.test/src/it/java/org/eclipse/persistence/testing/tests/identitymaps/ReadSoftCacheWeakIdentityMapTest.java
@@ -24,7 +24,7 @@
  * This test will throws warnings on problem, not error because of VM differences.
  */
 public class ReadSoftCacheWeakIdentityMapTest extends ReadWeakIdentityMapTest {
-    public ReadSoftCacheWeakIdentityMapTest(Class mapClass) {
+    public ReadSoftCacheWeakIdentityMapTest(Class<? extends IdentityMap> mapClass) {
         super(mapClass);
         setDescription("This test verifies that the SoftCacheWeakIdentityMap holds onto the SoftReferences appropriately");
     }
diff --git a/foundation/eclipselink.core.test/src/it/java/org/eclipse/persistence/testing/tests/identitymaps/ReadWeakIdentityMapTest.java b/foundation/eclipselink.core.test/src/it/java/org/eclipse/persistence/testing/tests/identitymaps/ReadWeakIdentityMapTest.java
index 18f1cb2..a8c3086 100644
--- a/foundation/eclipselink.core.test/src/it/java/org/eclipse/persistence/testing/tests/identitymaps/ReadWeakIdentityMapTest.java
+++ b/foundation/eclipselink.core.test/src/it/java/org/eclipse/persistence/testing/tests/identitymaps/ReadWeakIdentityMapTest.java
@@ -23,12 +23,12 @@
  * Read objects into the cache, force garbage collection, see that the cache is empty.
  */
 public class ReadWeakIdentityMapTest extends TestCase {
-    protected Class identityMapClass;
-    protected Class originalIdentityMapClass;
+    protected Class<? extends IdentityMap> identityMapClass;
+    protected Class<? extends IdentityMap> originalIdentityMapClass;
     protected int originalIdentityMapSize;
     protected int querySize;
 
-    public ReadWeakIdentityMapTest(Class mapClass) {
+    public ReadWeakIdentityMapTest(Class<? extends IdentityMap> mapClass) {
         identityMapClass = mapClass;
     }
 
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 3cf2989..af85cb6 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
@@ -24,12 +24,12 @@
  * No exceptions should be thrown when registering an object in an identity map.
  */
 public class RegisterInIdentityMapTest extends TestCase {
-    protected Class identityMapClass;
-    protected Class originalIdentityMapClass;
+    protected Class<? extends IdentityMap> identityMapClass;
+    protected Class<? extends IdentityMap> originalIdentityMapClass;
     protected int originalIdentityMapSize;
     protected Vector employees;
 
-    public RegisterInIdentityMapTest(Class mapClass) {
+    public RegisterInIdentityMapTest(Class<? extends IdentityMap> mapClass) {
         identityMapClass = mapClass;
     }
 
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 8c323c9..3031695 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
@@ -14,6 +14,7 @@
 //     Oracle - initial API and implementation from Oracle TopLink
 package org.eclipse.persistence.testing.tests.identitymaps;
 
+import org.eclipse.persistence.internal.identitymaps.IdentityMap;
 import org.eclipse.persistence.testing.framework.*;
 
 /**
@@ -25,7 +26,7 @@ public class SetWriteLockInIdentityMapTest extends RegisterInIdentityMapTest {
     protected Object originalWriteLockValue;
     protected Object retrievedWriteLockValue;
 
-    public SetWriteLockInIdentityMapTest(Class mapClass) {
+    public SetWriteLockInIdentityMapTest(Class<? extends IdentityMap> mapClass) {
         super(mapClass);
         originalWriteLockValue = new java.math.BigDecimal("9999999999999999999999999");
     }
diff --git a/foundation/eclipselink.core.test/src/it/java/org/eclipse/persistence/testing/tests/identitymaps/cacheinvalidation/CacheInvalidationPolicyCloneTest.java b/foundation/eclipselink.core.test/src/it/java/org/eclipse/persistence/testing/tests/identitymaps/cacheinvalidation/CacheInvalidationPolicyCloneTest.java
index 555035f..d64eb59 100644
--- a/foundation/eclipselink.core.test/src/it/java/org/eclipse/persistence/testing/tests/identitymaps/cacheinvalidation/CacheInvalidationPolicyCloneTest.java
+++ b/foundation/eclipselink.core.test/src/it/java/org/eclipse/persistence/testing/tests/identitymaps/cacheinvalidation/CacheInvalidationPolicyCloneTest.java
@@ -30,9 +30,9 @@
  */
 public class CacheInvalidationPolicyCloneTest extends TestCase {
 
-    protected Class policyClassToTest;
+    protected Class<?> policyClassToTest;
 
-    public CacheInvalidationPolicyCloneTest(Class policyClassToTest) {
+    public CacheInvalidationPolicyCloneTest(Class<?> policyClassToTest) {
         super();
         this.policyClassToTest = policyClassToTest;
         setName(getClass().getSimpleName() + " : " + policyClassToTest.getSimpleName());
diff --git a/foundation/eclipselink.core.test/src/it/java/org/eclipse/persistence/testing/tests/inheritance/STI_JoinedAttributeTest.java b/foundation/eclipselink.core.test/src/it/java/org/eclipse/persistence/testing/tests/inheritance/STI_JoinedAttributeTest.java
index fe05a00..c6fa609 100644
--- a/foundation/eclipselink.core.test/src/it/java/org/eclipse/persistence/testing/tests/inheritance/STI_JoinedAttributeTest.java
+++ b/foundation/eclipselink.core.test/src/it/java/org/eclipse/persistence/testing/tests/inheritance/STI_JoinedAttributeTest.java
@@ -42,7 +42,7 @@ public class STI_JoinedAttributeTest extends TestCase {
     static protected boolean eachTestShouldEnsurePopulation = false;
 
     // the following static variables are used only in case eachTestShouldEnsurePopulation==true
-    static protected Class[] classes = {STI_Employee.class, STI_Project.class};
+    static protected Class<?>[] classes = {STI_Employee.class, STI_Project.class};
     static protected Vector[] objectVectors = {null, null};
     static protected STI_EmployeePopulator populator = new STI_EmployeePopulator();
 
@@ -78,7 +78,7 @@ private static boolean isPublicTestMethod(Method m) {
     // stolen from junit.framework.TestSuite
     private static boolean isTestMethod(Method m) {
         String name= m.getName();
-        Class[] parameters= m.getParameterTypes();
+        Class<?>[] parameters= m.getParameterTypes();
         Class<?> returnType= m.getReturnType();
         return parameters.length == 0 && name.startsWith("test") && returnType.equals(Void.TYPE);
      }
diff --git a/foundation/eclipselink.core.test/src/it/java/org/eclipse/persistence/testing/tests/interfaces/QueryAccrossV11ProxyIndirectionTest.java b/foundation/eclipselink.core.test/src/it/java/org/eclipse/persistence/testing/tests/interfaces/QueryAccrossV11ProxyIndirectionTest.java
index 3ab8a95..2d102f1 100644
--- a/foundation/eclipselink.core.test/src/it/java/org/eclipse/persistence/testing/tests/interfaces/QueryAccrossV11ProxyIndirectionTest.java
+++ b/foundation/eclipselink.core.test/src/it/java/org/eclipse/persistence/testing/tests/interfaces/QueryAccrossV11ProxyIndirectionTest.java
@@ -49,7 +49,7 @@ public ClassDescriptor getDescriptorV11ProxyIndirection() {
         return descriptor;
     }
 
-    public void setDescriptorV11ProxyIndirection(Class cls, String attributeName, Class proxyIndirectClass) {
+    public void setDescriptorV11ProxyIndirection(Class<?> cls, String attributeName, Class<?> proxyIndirectClass) {
         // instruct descriptor to use proxy indirection since
         // VariableOneToOneMapping maping for attribute "program"
         // in InterfaceWithoutTablesProject.java, did not set it;
diff --git a/foundation/eclipselink.core.test/src/it/java/org/eclipse/persistence/testing/tests/interfaces/ReadAllBatchTest.java b/foundation/eclipselink.core.test/src/it/java/org/eclipse/persistence/testing/tests/interfaces/ReadAllBatchTest.java
index b5235d4..fc7f2e2 100644
--- a/foundation/eclipselink.core.test/src/it/java/org/eclipse/persistence/testing/tests/interfaces/ReadAllBatchTest.java
+++ b/foundation/eclipselink.core.test/src/it/java/org/eclipse/persistence/testing/tests/interfaces/ReadAllBatchTest.java
@@ -21,7 +21,7 @@ public class ReadAllBatchTest extends ReadAllTest {
     public Exception storedException;
     public int expectedExceptionCode;
 
-    public ReadAllBatchTest(Class aClass, int numberOfObjects) {
+    public ReadAllBatchTest(Class<?> aClass, int numberOfObjects) {
         super(aClass, numberOfObjects);
         setDescription("Test that the correct exception is thrown when a batch query across a variable 1:1 mapping is attempted. Maybe this will be supported someday.");
         storedException = null;
diff --git a/foundation/eclipselink.core.test/src/it/java/org/eclipse/persistence/testing/tests/interfaces/VariableOneToOneCodeCoverageTest.java b/foundation/eclipselink.core.test/src/it/java/org/eclipse/persistence/testing/tests/interfaces/VariableOneToOneCodeCoverageTest.java
index 4b6ff6d..90d9904 100644
--- a/foundation/eclipselink.core.test/src/it/java/org/eclipse/persistence/testing/tests/interfaces/VariableOneToOneCodeCoverageTest.java
+++ b/foundation/eclipselink.core.test/src/it/java/org/eclipse/persistence/testing/tests/interfaces/VariableOneToOneCodeCoverageTest.java
@@ -180,7 +180,7 @@ public void setTypeField(DatabaseField typeField) {
     }
 
     @Override
-    public Object getTypeForImplementor(Class implementor) {
+    public Object getTypeForImplementor(Class<?> implementor) {
         return super.getTypeForImplementor(implementor);
     }
 
diff --git a/foundation/eclipselink.core.test/src/it/java/org/eclipse/persistence/testing/tests/interfaces/VariableOneToOneGetTypeFieldTest.java b/foundation/eclipselink.core.test/src/it/java/org/eclipse/persistence/testing/tests/interfaces/VariableOneToOneGetTypeFieldTest.java
index 5294906..7382a1d 100644
--- a/foundation/eclipselink.core.test/src/it/java/org/eclipse/persistence/testing/tests/interfaces/VariableOneToOneGetTypeFieldTest.java
+++ b/foundation/eclipselink.core.test/src/it/java/org/eclipse/persistence/testing/tests/interfaces/VariableOneToOneGetTypeFieldTest.java
@@ -60,7 +60,7 @@ public void test() {
 
     @Override
     public void verify() {
-        Class actualClass;
+        Class<?> actualClass;
         Object actualValue;
 
         // valueReturned1
diff --git a/foundation/eclipselink.core.test/src/it/java/org/eclipse/persistence/testing/tests/jpql/AggregateTest.java b/foundation/eclipselink.core.test/src/it/java/org/eclipse/persistence/testing/tests/jpql/AggregateTest.java
index 7ad6f46..0a709cd 100644
--- a/foundation/eclipselink.core.test/src/it/java/org/eclipse/persistence/testing/tests/jpql/AggregateTest.java
+++ b/foundation/eclipselink.core.test/src/it/java/org/eclipse/persistence/testing/tests/jpql/AggregateTest.java
@@ -27,7 +27,7 @@ public class AggregateTest extends JPQLTestCase {
     private ReportQuery reportQuery;
     private Collection originalResults;
 
-    private static AggregateTest getNewTestCaseNamed(String testName, String ejbql, Class referenceClass) {
+    private static AggregateTest getNewTestCaseNamed(String testName, String ejbql, Class<?> referenceClass) {
         AggregateTest test = new AggregateTest();
 
         test.setName(testName);
diff --git a/foundation/eclipselink.core.test/src/it/java/org/eclipse/persistence/testing/tests/jpql/JPQLTestCase.java b/foundation/eclipselink.core.test/src/it/java/org/eclipse/persistence/testing/tests/jpql/JPQLTestCase.java
index a8406f2..aafa954 100644
--- a/foundation/eclipselink.core.test/src/it/java/org/eclipse/persistence/testing/tests/jpql/JPQLTestCase.java
+++ b/foundation/eclipselink.core.test/src/it/java/org/eclipse/persistence/testing/tests/jpql/JPQLTestCase.java
@@ -32,7 +32,7 @@
 public class JPQLTestCase extends TransactionalTestCase {
     private String ejbql;
     protected ObjectLevelReadQuery theQuery = null;
-    private Class referenceClass;
+    private Class<?> referenceClass;
     private Expression originalExpression = null;
     private Object originalObject;
     private DomainObjectComparer comparer = null;
@@ -64,7 +64,7 @@ public JPQLTestCase(String ejbqlString, ObjectLevelReadQuery theQuery) {
         this.theQuery = theQuery;
     }
 
-    public JPQLTestCase(String ejbqlString, ObjectLevelReadQuery theQuery, Class theReferenceClass) {
+    public JPQLTestCase(String ejbqlString, ObjectLevelReadQuery theQuery, Class<?> theReferenceClass) {
         this();
         this.ejbql = ejbqlString;
         this.theQuery = theQuery;
@@ -240,11 +240,11 @@ public void setQuery(ObjectLevelReadQuery theQuery) {
         this.theQuery = theQuery;
     }
 
-    public Class getReferenceClass() {
+    public Class<?> getReferenceClass() {
         return referenceClass;
     }
 
-    public void setReferenceClass(Class theClass) {
+    public void setReferenceClass(Class<?> theClass) {
         this.referenceClass = theClass;
     }
 
@@ -324,7 +324,7 @@ public boolean isPlatformSupported(DatabasePlatform platform) {
         }
         if (supportedPlatforms != null) {
             for (Iterator iterator = supportedPlatforms.iterator(); iterator.hasNext();) {
-                Class platformClass = (Class)iterator.next();
+                Class<?> platformClass = (Class)iterator.next();
                 if (platformClass.isInstance(platform)) {
                     supported = true;
                 }
@@ -334,7 +334,7 @@ public boolean isPlatformSupported(DatabasePlatform platform) {
         }
         if (unsupportedPlatforms != null) {
             for (Iterator iterator = unsupportedPlatforms.iterator(); iterator.hasNext();) {
-                Class platformClass = (Class)iterator.next();
+                Class<?> platformClass = (Class)iterator.next();
                 if (platformClass.isInstance(platform)) {
                     notSupported = true;
                 }
@@ -343,14 +343,14 @@ public boolean isPlatformSupported(DatabasePlatform platform) {
         return supported && (!notSupported);
     }
 
-    public void addSupportedPlatform(Class platform) {
+    public void addSupportedPlatform(Class<?> platform) {
         if (supportedPlatforms == null) {
             supportedPlatforms = new Vector();
         }
         supportedPlatforms.addElement(platform);
     }
 
-    public void addUnsupportedPlatform(Class platform) {
+    public void addUnsupportedPlatform(Class<?> platform) {
         if (unsupportedPlatforms == null) {
             unsupportedPlatforms = new Vector();
         }
diff --git a/foundation/eclipselink.core.test/src/it/java/org/eclipse/persistence/testing/tests/jpql/ModTest.java b/foundation/eclipselink.core.test/src/it/java/org/eclipse/persistence/testing/tests/jpql/ModTest.java
index 9a5029b..afee1aa 100644
--- a/foundation/eclipselink.core.test/src/it/java/org/eclipse/persistence/testing/tests/jpql/ModTest.java
+++ b/foundation/eclipselink.core.test/src/it/java/org/eclipse/persistence/testing/tests/jpql/ModTest.java
@@ -22,7 +22,7 @@
 import org.eclipse.persistence.testing.framework.*;
 
 public class ModTest extends JPQLTestCase {
-    private static ModTest getNewTestCaseNamed(String name, String ejbql, Class referenceClass) {
+    private static ModTest getNewTestCaseNamed(String name, String ejbql, Class<?> referenceClass) {
         ModTest test = new ModTest();
 
         test.setName(name);
diff --git a/foundation/eclipselink.core.test/src/it/java/org/eclipse/persistence/testing/tests/mapping/MultipleTableDeleteObjectTest.java b/foundation/eclipselink.core.test/src/it/java/org/eclipse/persistence/testing/tests/mapping/MultipleTableDeleteObjectTest.java
index 174ec8a..af96fcc 100644
--- a/foundation/eclipselink.core.test/src/it/java/org/eclipse/persistence/testing/tests/mapping/MultipleTableDeleteObjectTest.java
+++ b/foundation/eclipselink.core.test/src/it/java/org/eclipse/persistence/testing/tests/mapping/MultipleTableDeleteObjectTest.java
@@ -35,7 +35,7 @@ protected void setup() {
         super.setup();
         try {
             // Get the Method
-            Class[] parms = new Class[1];
+            Class<?>[] parms = new Class<?>[1];
             parms[0] = DatabaseSessionImpl.class;
             java.lang.reflect.Method method = Employee1.class.getMethod(this.amendmentMethodName, parms);
 
diff --git a/foundation/eclipselink.core.test/src/it/java/org/eclipse/persistence/testing/tests/mapping/MultipleTableInsertObjectTest.java b/foundation/eclipselink.core.test/src/it/java/org/eclipse/persistence/testing/tests/mapping/MultipleTableInsertObjectTest.java
index fd707ec..e02edb4 100644
--- a/foundation/eclipselink.core.test/src/it/java/org/eclipse/persistence/testing/tests/mapping/MultipleTableInsertObjectTest.java
+++ b/foundation/eclipselink.core.test/src/it/java/org/eclipse/persistence/testing/tests/mapping/MultipleTableInsertObjectTest.java
@@ -35,7 +35,7 @@ protected void setup() {
         super.setup();
         try {
             // Get the Method
-            Class[] parms = new Class[1];
+            Class<?>[] parms = new Class<?>[1];
             parms[0] = DatabaseSessionImpl.class;
             java.lang.reflect.Method method = Employee1.class.getMethod(this.amendmentMethodName, parms);
 
diff --git a/foundation/eclipselink.core.test/src/it/java/org/eclipse/persistence/testing/tests/mapping/MultipleTableReadAllTest.java b/foundation/eclipselink.core.test/src/it/java/org/eclipse/persistence/testing/tests/mapping/MultipleTableReadAllTest.java
index 8f5ab88..ed3c38e 100644
--- a/foundation/eclipselink.core.test/src/it/java/org/eclipse/persistence/testing/tests/mapping/MultipleTableReadAllTest.java
+++ b/foundation/eclipselink.core.test/src/it/java/org/eclipse/persistence/testing/tests/mapping/MultipleTableReadAllTest.java
@@ -24,7 +24,7 @@
 public class MultipleTableReadAllTest extends org.eclipse.persistence.testing.framework.ReadAllTest {
     String amendmentMethodName;
 
-    public MultipleTableReadAllTest(Class aClass, int numberOfInstances, String amendmentMethodName) {
+    public MultipleTableReadAllTest(Class<?> aClass, int numberOfInstances, String amendmentMethodName) {
         super(aClass, numberOfInstances);
         this.amendmentMethodName = amendmentMethodName;
         setName("MultipleTableReadAllTest(" + amendmentMethodName + "," + aClass + ", " + numberOfInstances + ")");
@@ -35,7 +35,7 @@ protected void setup() {
         super.setup();
         try {
             // Get the Method
-            Class[] parms = new Class[1];
+            Class<?>[] parms = new Class<?>[1];
             parms[0] = DatabaseSessionImpl.class;
             java.lang.reflect.Method method = Employee1.class.getMethod(this.amendmentMethodName, parms);
 
diff --git a/foundation/eclipselink.core.test/src/it/java/org/eclipse/persistence/testing/tests/mapping/MultipleTableReadObjectTest.java b/foundation/eclipselink.core.test/src/it/java/org/eclipse/persistence/testing/tests/mapping/MultipleTableReadObjectTest.java
index 9552c42..95ec7d9 100644
--- a/foundation/eclipselink.core.test/src/it/java/org/eclipse/persistence/testing/tests/mapping/MultipleTableReadObjectTest.java
+++ b/foundation/eclipselink.core.test/src/it/java/org/eclipse/persistence/testing/tests/mapping/MultipleTableReadObjectTest.java
@@ -35,7 +35,7 @@ protected void setup() {
         super.setup();
         try {
             // Get the Method
-            Class[] parms = new Class[1];
+            Class<?>[] parms = new Class<?>[1];
             parms[0] = DatabaseSessionImpl.class;
             java.lang.reflect.Method method = Employee1.class.getMethod(this.amendmentMethodName, parms);
 
diff --git a/foundation/eclipselink.core.test/src/it/java/org/eclipse/persistence/testing/tests/mapping/MultipleTableWriteObjectTest.java b/foundation/eclipselink.core.test/src/it/java/org/eclipse/persistence/testing/tests/mapping/MultipleTableWriteObjectTest.java
index f691055..d7c314e 100644
--- a/foundation/eclipselink.core.test/src/it/java/org/eclipse/persistence/testing/tests/mapping/MultipleTableWriteObjectTest.java
+++ b/foundation/eclipselink.core.test/src/it/java/org/eclipse/persistence/testing/tests/mapping/MultipleTableWriteObjectTest.java
@@ -35,7 +35,7 @@ protected void setup() {
         super.setup();
         try {
             // Get the Method
-            Class[] parms = new Class[1];
+            Class<?>[] parms = new Class<?>[1];
             parms[0] = DatabaseSessionImpl.class;
             java.lang.reflect.Method method = Employee1.class.getMethod(this.amendmentMethodName, parms);
 
diff --git a/foundation/eclipselink.core.test/src/it/java/org/eclipse/persistence/testing/tests/multipletable/MultipleTableModel.java b/foundation/eclipselink.core.test/src/it/java/org/eclipse/persistence/testing/tests/multipletable/MultipleTableModel.java
index ba91f9b..3890c98 100644
--- a/foundation/eclipselink.core.test/src/it/java/org/eclipse/persistence/testing/tests/multipletable/MultipleTableModel.java
+++ b/foundation/eclipselink.core.test/src/it/java/org/eclipse/persistence/testing/tests/multipletable/MultipleTableModel.java
@@ -140,8 +140,8 @@ public static MultipleTableTest getHumanTest() {
     }
 
     public static class ReadAllTest extends TestCase {
-        Class cls;
-        public ReadAllTest(Class cls) {
+        Class<?> cls;
+        public ReadAllTest(Class<?> cls) {
             super();
             setName(Helper.getShortClassName(cls) + "ReadAllTest");
             this.cls = cls;
diff --git a/foundation/eclipselink.core.test/src/it/java/org/eclipse/persistence/testing/tests/nls/japanese/NLSEmployeePopulator.java b/foundation/eclipselink.core.test/src/it/java/org/eclipse/persistence/testing/tests/nls/japanese/NLSEmployeePopulator.java
index b0f474c..18397ec 100644
--- a/foundation/eclipselink.core.test/src/it/java/org/eclipse/persistence/testing/tests/nls/japanese/NLSEmployeePopulator.java
+++ b/foundation/eclipselink.core.test/src/it/java/org/eclipse/persistence/testing/tests/nls/japanese/NLSEmployeePopulator.java
@@ -721,7 +721,7 @@ public void buildExamples() {
         smallProjectExample10();
     }
 
-    protected boolean containsObject(Class domainClass, String identifier) {
+    protected boolean containsObject(Class<?> domainClass, String identifier) {
         return populationManager.containsObject(domainClass, identifier);
     }
 
@@ -1046,11 +1046,11 @@ protected Vector<Object> getAllObjects() {
         return populationManager.getAllObjects();
     }
 
-    public Vector<Object> getAllObjectsForClass(Class domainClass) {
+    public Vector<Object> getAllObjectsForClass(Class<?> domainClass) {
         return populationManager.getAllObjectsForClass(domainClass);
     }
 
-    protected Object getObject(Class domainClass, String identifier) {
+    protected Object getObject(Class<?> domainClass, String identifier) {
         return populationManager.getObject(domainClass, identifier);
     }
 
@@ -1155,7 +1155,7 @@ public PhoneNumber phoneNumberExample6() {
         return new PhoneNumber("\u3051\u3066\u3048\u305b", "905", "5553691");
     }
 
-    protected void registerObject(Class domainClass, Object domainObject, String identifier) {
+    protected void registerObject(Class<?> domainClass, Object domainObject, String identifier) {
         populationManager.registerObject(domainClass, domainObject, identifier);
     }
 
diff --git a/foundation/eclipselink.core.test/src/it/java/org/eclipse/persistence/testing/tests/onetoonejointable/OneToOneJoinTableEmployeeBasicTestModel.java b/foundation/eclipselink.core.test/src/it/java/org/eclipse/persistence/testing/tests/onetoonejointable/OneToOneJoinTableEmployeeBasicTestModel.java
index 2b5803b..046f58a 100644
--- a/foundation/eclipselink.core.test/src/it/java/org/eclipse/persistence/testing/tests/onetoonejointable/OneToOneJoinTableEmployeeBasicTestModel.java
+++ b/foundation/eclipselink.core.test/src/it/java/org/eclipse/persistence/testing/tests/onetoonejointable/OneToOneJoinTableEmployeeBasicTestModel.java
@@ -749,7 +749,7 @@ protected void setup() {
     }
 
     static class ReadAllExpressionTest extends org.eclipse.persistence.testing.tests.expressions.ReadAllExpressionTest {
-        public ReadAllExpressionTest(Class referenceClass, int originalObjectsSize) {
+        public ReadAllExpressionTest(Class<?> referenceClass, int originalObjectsSize) {
             super(referenceClass, originalObjectsSize);
         }
 
diff --git a/foundation/eclipselink.core.test/src/it/java/org/eclipse/persistence/testing/tests/optimisticlocking/ChangeSetOptimisticLockingInsertTest.java b/foundation/eclipselink.core.test/src/it/java/org/eclipse/persistence/testing/tests/optimisticlocking/ChangeSetOptimisticLockingInsertTest.java
index 231fcd1..22b28d2 100644
--- a/foundation/eclipselink.core.test/src/it/java/org/eclipse/persistence/testing/tests/optimisticlocking/ChangeSetOptimisticLockingInsertTest.java
+++ b/foundation/eclipselink.core.test/src/it/java/org/eclipse/persistence/testing/tests/optimisticlocking/ChangeSetOptimisticLockingInsertTest.java
@@ -29,9 +29,9 @@
 public class ChangeSetOptimisticLockingInsertTest extends AutoVerifyTestCase {
     protected UnitOfWork uow;
     protected Object originalObject;
-    protected Class domainClass;
+    protected Class<?> domainClass;
 
-    public ChangeSetOptimisticLockingInsertTest(Class aClass) {
+    public ChangeSetOptimisticLockingInsertTest(Class<?> aClass) {
         setName(getName() + "(" + aClass + ")");
         domainClass = aClass;
         setDescription("This test verifies that a changeset gets the correct writelock value");
diff --git a/foundation/eclipselink.core.test/src/it/java/org/eclipse/persistence/testing/tests/optimisticlocking/ChangeSetOptimisticLockingUpdateTest.java b/foundation/eclipselink.core.test/src/it/java/org/eclipse/persistence/testing/tests/optimisticlocking/ChangeSetOptimisticLockingUpdateTest.java
index b672231..01e115d 100644
--- a/foundation/eclipselink.core.test/src/it/java/org/eclipse/persistence/testing/tests/optimisticlocking/ChangeSetOptimisticLockingUpdateTest.java
+++ b/foundation/eclipselink.core.test/src/it/java/org/eclipse/persistence/testing/tests/optimisticlocking/ChangeSetOptimisticLockingUpdateTest.java
@@ -27,9 +27,9 @@
 public class ChangeSetOptimisticLockingUpdateTest extends TestCase {
     protected UnitOfWork uow;
     protected Object originalObject;
-    protected Class domainClass;
+    protected Class<?> domainClass;
 
-    public ChangeSetOptimisticLockingUpdateTest(Class aClass) {
+    public ChangeSetOptimisticLockingUpdateTest(Class<?> aClass) {
 
         setName(getName() + "(" + aClass + ")");
         domainClass = aClass;
diff --git a/foundation/eclipselink.core.test/src/it/java/org/eclipse/persistence/testing/tests/optimisticlocking/OptimisticLockingDeleteTest.java b/foundation/eclipselink.core.test/src/it/java/org/eclipse/persistence/testing/tests/optimisticlocking/OptimisticLockingDeleteTest.java
index 039a8da..67a440d 100644
--- a/foundation/eclipselink.core.test/src/it/java/org/eclipse/persistence/testing/tests/optimisticlocking/OptimisticLockingDeleteTest.java
+++ b/foundation/eclipselink.core.test/src/it/java/org/eclipse/persistence/testing/tests/optimisticlocking/OptimisticLockingDeleteTest.java
@@ -20,7 +20,7 @@
  * Test the optimistic locking feature by changing the write lock value on the database.
  */
 public class OptimisticLockingDeleteTest extends OptimisticLockingUpdateTest {
-    public OptimisticLockingDeleteTest(Class aClass, boolean useUnitOfWork) {
+    public OptimisticLockingDeleteTest(Class<?> aClass, boolean useUnitOfWork) {
         super(aClass, useUnitOfWork);
         setDescription("This test verifies that the correct object is deleted");
     }
diff --git a/foundation/eclipselink.core.test/src/it/java/org/eclipse/persistence/testing/tests/optimisticlocking/OptimisticLockingPolicyChangedValueUpdateTest.java b/foundation/eclipselink.core.test/src/it/java/org/eclipse/persistence/testing/tests/optimisticlocking/OptimisticLockingPolicyChangedValueUpdateTest.java
index 6953783..3b2da5a 100644
--- a/foundation/eclipselink.core.test/src/it/java/org/eclipse/persistence/testing/tests/optimisticlocking/OptimisticLockingPolicyChangedValueUpdateTest.java
+++ b/foundation/eclipselink.core.test/src/it/java/org/eclipse/persistence/testing/tests/optimisticlocking/OptimisticLockingPolicyChangedValueUpdateTest.java
@@ -24,7 +24,7 @@
  * the database.
  */
 public class OptimisticLockingPolicyChangedValueUpdateTest extends OptimisticLockingPolicyDeleteRowTest {
-    public OptimisticLockingPolicyChangedValueUpdateTest(Class aClass) {
+    public OptimisticLockingPolicyChangedValueUpdateTest(Class<?> aClass) {
         super(aClass);
         setDescription("This test verifies that an optimistic lock exception is thrown on update when the write lock is changed");
     }
diff --git a/foundation/eclipselink.core.test/src/it/java/org/eclipse/persistence/testing/tests/optimisticlocking/OptimisticLockingPolicyDeleteRowTest.java b/foundation/eclipselink.core.test/src/it/java/org/eclipse/persistence/testing/tests/optimisticlocking/OptimisticLockingPolicyDeleteRowTest.java
index d5d92d3..ef0f546 100644
--- a/foundation/eclipselink.core.test/src/it/java/org/eclipse/persistence/testing/tests/optimisticlocking/OptimisticLockingPolicyDeleteRowTest.java
+++ b/foundation/eclipselink.core.test/src/it/java/org/eclipse/persistence/testing/tests/optimisticlocking/OptimisticLockingPolicyDeleteRowTest.java
@@ -28,9 +28,9 @@
  */
 public class OptimisticLockingPolicyDeleteRowTest extends AutoVerifyTestCase {
     protected Object originalObject;
-    protected Class testClass;
+    protected Class<?> testClass;
 
-    public OptimisticLockingPolicyDeleteRowTest(Class aClass) {
+    public OptimisticLockingPolicyDeleteRowTest(Class<?> aClass) {
         setDescription("This test verifies that an optimistic lock exception is thrown when underlying database row is delete");
         testClass = aClass;
     }
diff --git a/foundation/eclipselink.core.test/src/it/java/org/eclipse/persistence/testing/tests/optimisticlocking/OptimisticLockingPolicyUpdateTest.java b/foundation/eclipselink.core.test/src/it/java/org/eclipse/persistence/testing/tests/optimisticlocking/OptimisticLockingPolicyUpdateTest.java
index 1de3a47..67cc42f 100644
--- a/foundation/eclipselink.core.test/src/it/java/org/eclipse/persistence/testing/tests/optimisticlocking/OptimisticLockingPolicyUpdateTest.java
+++ b/foundation/eclipselink.core.test/src/it/java/org/eclipse/persistence/testing/tests/optimisticlocking/OptimisticLockingPolicyUpdateTest.java
@@ -22,7 +22,7 @@
  * Test the optimistic locking feature by changing the write lock value on the database.
  */
 public class OptimisticLockingPolicyUpdateTest extends OptimisticLockingPolicyChangedValueUpdateTest {
-    public OptimisticLockingPolicyUpdateTest(Class aClass) {
+    public OptimisticLockingPolicyUpdateTest(Class<?> aClass) {
         super(aClass);
         setDescription("This test verifies that an optimistic lock exception is thrown when the write lock is changed");
     }
diff --git a/foundation/eclipselink.core.test/src/it/java/org/eclipse/persistence/testing/tests/optimisticlocking/OptimisticLockingTestModel.java b/foundation/eclipselink.core.test/src/it/java/org/eclipse/persistence/testing/tests/optimisticlocking/OptimisticLockingTestModel.java
index 2af13bc..a03499a 100644
--- a/foundation/eclipselink.core.test/src/it/java/org/eclipse/persistence/testing/tests/optimisticlocking/OptimisticLockingTestModel.java
+++ b/foundation/eclipselink.core.test/src/it/java/org/eclipse/persistence/testing/tests/optimisticlocking/OptimisticLockingTestModel.java
@@ -144,7 +144,7 @@ public static TestSuite getUpdateNullValueOptimisticLockingTestSuite() {
         suite.setName("UpdateNullValueOptimisticLockingTestSuite");
         suite.setDescription("Tests the functionality of updating fields with a null database value, with optimistic locking");
 
-        final Class[] policies = { AllFieldsLockingPolicy.class, SelectedFieldsLockingPolicy.class,
+        final Class<?>[] policies = { AllFieldsLockingPolicy.class, SelectedFieldsLockingPolicy.class,
                 ChangedFieldsLockingPolicy.class, VersionLockingPolicy.class, TimestampLockingPolicy.class };
         // done this way for test ordering
         for (int i = 0; i < policies.length; i++) {
diff --git a/foundation/eclipselink.core.test/src/it/java/org/eclipse/persistence/testing/tests/optimisticlocking/OptimisticLockingUpdateTest.java b/foundation/eclipselink.core.test/src/it/java/org/eclipse/persistence/testing/tests/optimisticlocking/OptimisticLockingUpdateTest.java
index 36857b8..19157c6 100644
--- a/foundation/eclipselink.core.test/src/it/java/org/eclipse/persistence/testing/tests/optimisticlocking/OptimisticLockingUpdateTest.java
+++ b/foundation/eclipselink.core.test/src/it/java/org/eclipse/persistence/testing/tests/optimisticlocking/OptimisticLockingUpdateTest.java
@@ -26,10 +26,10 @@
 public class OptimisticLockingUpdateTest extends AutoVerifyTestCase {
     protected UnitOfWork uow;
     protected Object originalObject;
-    protected Class domainClass;
+    protected Class<?> domainClass;
     protected boolean useUOW;
 
-    public OptimisticLockingUpdateTest(Class aClass, boolean useUnitOfWork) {
+    public OptimisticLockingUpdateTest(Class<?> aClass, boolean useUnitOfWork) {
         setName(getName() + "(" + aClass + ")");
         domainClass = aClass;
         this.useUOW = useUnitOfWork;
diff --git a/foundation/eclipselink.core.test/src/it/java/org/eclipse/persistence/testing/tests/optimisticlocking/SwitchableOptimisticLockingPolicyTest.java b/foundation/eclipselink.core.test/src/it/java/org/eclipse/persistence/testing/tests/optimisticlocking/SwitchableOptimisticLockingPolicyTest.java
index 7e6d880..77d33c4 100644
--- a/foundation/eclipselink.core.test/src/it/java/org/eclipse/persistence/testing/tests/optimisticlocking/SwitchableOptimisticLockingPolicyTest.java
+++ b/foundation/eclipselink.core.test/src/it/java/org/eclipse/persistence/testing/tests/optimisticlocking/SwitchableOptimisticLockingPolicyTest.java
@@ -44,10 +44,10 @@
 public class SwitchableOptimisticLockingPolicyTest extends TestCase {
 
     protected Exception tlException;
-    protected Class optimisticLockingPolicyClass;
-    protected Map<Class, OptimisticLockingPolicy> oldOptimisticLockingPolicies;
+    protected Class<?> optimisticLockingPolicyClass;
+    protected Map<Class<?>, OptimisticLockingPolicy> oldOptimisticLockingPolicies;
 
-    public SwitchableOptimisticLockingPolicyTest(Class optimisticLockingPolicyClass) {
+    public SwitchableOptimisticLockingPolicyTest(Class<?> optimisticLockingPolicyClass) {
         super();
         setName(getName() + " (" + Helper.getShortClassName(optimisticLockingPolicyClass) + ")");
         this.optimisticLockingPolicyClass = optimisticLockingPolicyClass;
@@ -56,10 +56,10 @@ public SwitchableOptimisticLockingPolicyTest(Class optimisticLockingPolicyClass)
 
     @Override
     public void setup() {
-        Set<Class> keys = getOldOptimisticLockingPolicies().keySet();
-        Iterator<Class> iterator = new ArrayList(keys).iterator();
+        Set<Class<?>> keys = getOldOptimisticLockingPolicies().keySet();
+        Iterator<Class<?>> iterator = new ArrayList(keys).iterator();
         while (iterator.hasNext()) {
-            Class classToModify = iterator.next();
+            Class<?> classToModify = iterator.next();
 
             // Validate usage
             if (!AbstractVideogameObject.class.isAssignableFrom(classToModify)) {
@@ -113,11 +113,11 @@ public void verify() {
 
     @Override
     public void reset() {
-        Set<Class> keys = getOldOptimisticLockingPolicies().keySet();
+        Set<Class<?>> keys = getOldOptimisticLockingPolicies().keySet();
 
-        Iterator<Class> iterator = new ArrayList(keys).iterator();
+        Iterator<Class<?>> iterator = new ArrayList(keys).iterator();
         while (iterator.hasNext()) {
-            Class classToModify = iterator.next();
+            Class<?> classToModify = iterator.next();
             ClassDescriptor descriptor = getSession().getDescriptor(classToModify);
 
             // re-init old optimistic locking policy
@@ -137,23 +137,23 @@ public void reset() {
         this.oldOptimisticLockingPolicies.clear();
     }
 
-    public void addClassToModify(Class clazz) {
+    public void addClassToModify(Class<?> clazz) {
         getOldOptimisticLockingPolicies().put(clazz, null);
     }
 
-    public Class getOptimisticLockingPolicyClass() {
+    public Class<?> getOptimisticLockingPolicyClass() {
         return optimisticLockingPolicyClass;
     }
 
-    public void setOptimisticLockingPolicyClass(Class optimisticLockingPolicyClass) {
+    public void setOptimisticLockingPolicyClass(Class<?> optimisticLockingPolicyClass) {
         this.optimisticLockingPolicyClass = optimisticLockingPolicyClass;
     }
 
-    public Map<Class, OptimisticLockingPolicy> getOldOptimisticLockingPolicies() {
+    public Map<Class<?>, OptimisticLockingPolicy> getOldOptimisticLockingPolicies() {
         return oldOptimisticLockingPolicies;
     }
 
-    public void setOldOptimisticLockingPolicies(Map<Class, OptimisticLockingPolicy> oldOptimisticLockingPolicy) {
+    public void setOldOptimisticLockingPolicies(Map<Class<?>, OptimisticLockingPolicy> oldOptimisticLockingPolicy) {
         this.oldOptimisticLockingPolicies = oldOptimisticLockingPolicy;
     }
 
diff --git a/foundation/eclipselink.core.test/src/it/java/org/eclipse/persistence/testing/tests/optimisticlocking/UpdateNullAggregateValueTest.java b/foundation/eclipselink.core.test/src/it/java/org/eclipse/persistence/testing/tests/optimisticlocking/UpdateNullAggregateValueTest.java
index 78be028..c860f9e 100644
--- a/foundation/eclipselink.core.test/src/it/java/org/eclipse/persistence/testing/tests/optimisticlocking/UpdateNullAggregateValueTest.java
+++ b/foundation/eclipselink.core.test/src/it/java/org/eclipse/persistence/testing/tests/optimisticlocking/UpdateNullAggregateValueTest.java
@@ -33,7 +33,7 @@ public class UpdateNullAggregateValueTest extends SwitchableOptimisticLockingPol
     protected GamesConsole original;
     protected GamesConsole original2;
 
-    public UpdateNullAggregateValueTest(Class optimisticLockingPolicyClass) {
+    public UpdateNullAggregateValueTest(Class<?> optimisticLockingPolicyClass) {
         super(optimisticLockingPolicyClass);
         addClassToModify(GamesConsole.class);
     }
diff --git a/foundation/eclipselink.core.test/src/it/java/org/eclipse/persistence/testing/tests/optimisticlocking/UpdateNullDirectToFieldValueTest.java b/foundation/eclipselink.core.test/src/it/java/org/eclipse/persistence/testing/tests/optimisticlocking/UpdateNullDirectToFieldValueTest.java
index 1b9c596..d0e7fd9 100644
--- a/foundation/eclipselink.core.test/src/it/java/org/eclipse/persistence/testing/tests/optimisticlocking/UpdateNullDirectToFieldValueTest.java
+++ b/foundation/eclipselink.core.test/src/it/java/org/eclipse/persistence/testing/tests/optimisticlocking/UpdateNullDirectToFieldValueTest.java
@@ -30,7 +30,7 @@ public class UpdateNullDirectToFieldValueTest extends SwitchableOptimisticLockin
     protected Camera original;
     protected Camera original2;
 
-    public UpdateNullDirectToFieldValueTest(Class optimisticLockingPolicyClass) {
+    public UpdateNullDirectToFieldValueTest(Class<?> optimisticLockingPolicyClass) {
         super(optimisticLockingPolicyClass);
         addClassToModify(Camera.class);
     }
diff --git a/foundation/eclipselink.core.test/src/it/java/org/eclipse/persistence/testing/tests/optimisticlocking/UpdateNullManyToManyValueTest.java b/foundation/eclipselink.core.test/src/it/java/org/eclipse/persistence/testing/tests/optimisticlocking/UpdateNullManyToManyValueTest.java
index 414624e..621792d 100644
--- a/foundation/eclipselink.core.test/src/it/java/org/eclipse/persistence/testing/tests/optimisticlocking/UpdateNullManyToManyValueTest.java
+++ b/foundation/eclipselink.core.test/src/it/java/org/eclipse/persistence/testing/tests/optimisticlocking/UpdateNullManyToManyValueTest.java
@@ -36,7 +36,7 @@ public class UpdateNullManyToManyValueTest extends SwitchableOptimisticLockingPo
     protected GamesConsole original;
     protected GamesConsole original2;
 
-    public UpdateNullManyToManyValueTest(Class optimisticLockingPolicyClass) {
+    public UpdateNullManyToManyValueTest(Class<?> optimisticLockingPolicyClass) {
         super(optimisticLockingPolicyClass);
         addClassToModify(Gamer.class);
         addClassToModify(GamesConsole.class);
diff --git a/foundation/eclipselink.core.test/src/it/java/org/eclipse/persistence/testing/tests/optimisticlocking/UpdateNullOneToManyValueTest.java b/foundation/eclipselink.core.test/src/it/java/org/eclipse/persistence/testing/tests/optimisticlocking/UpdateNullOneToManyValueTest.java
index a8d8896..848e232 100644
--- a/foundation/eclipselink.core.test/src/it/java/org/eclipse/persistence/testing/tests/optimisticlocking/UpdateNullOneToManyValueTest.java
+++ b/foundation/eclipselink.core.test/src/it/java/org/eclipse/persistence/testing/tests/optimisticlocking/UpdateNullOneToManyValueTest.java
@@ -36,7 +36,7 @@ public class UpdateNullOneToManyValueTest extends SwitchableOptimisticLockingPol
     protected GamesConsole original;
     protected GamesConsole original2;
 
-    public UpdateNullOneToManyValueTest(Class optimisticLockingPolicyClass) {
+    public UpdateNullOneToManyValueTest(Class<?> optimisticLockingPolicyClass) {
         super(optimisticLockingPolicyClass);
         addClassToModify(GamesConsole.class);
         addClassToModify(Controller.class);
diff --git a/foundation/eclipselink.core.test/src/it/java/org/eclipse/persistence/testing/tests/optimisticlocking/UpdateNullOneToManyValueTest2.java b/foundation/eclipselink.core.test/src/it/java/org/eclipse/persistence/testing/tests/optimisticlocking/UpdateNullOneToManyValueTest2.java
index 194a78b..90d2ac4 100644
--- a/foundation/eclipselink.core.test/src/it/java/org/eclipse/persistence/testing/tests/optimisticlocking/UpdateNullOneToManyValueTest2.java
+++ b/foundation/eclipselink.core.test/src/it/java/org/eclipse/persistence/testing/tests/optimisticlocking/UpdateNullOneToManyValueTest2.java
@@ -31,7 +31,7 @@ public class UpdateNullOneToManyValueTest2 extends SwitchableOptimisticLockingPo
     protected Controller original;
     protected Controller original2;
 
-    public UpdateNullOneToManyValueTest2(Class optimisticLockingPolicyClass) {
+    public UpdateNullOneToManyValueTest2(Class<?> optimisticLockingPolicyClass) {
         super(optimisticLockingPolicyClass);
         addClassToModify(Controller.class);
         addClassToModify(GamesConsole.class);
diff --git a/foundation/eclipselink.core.test/src/it/java/org/eclipse/persistence/testing/tests/optimisticlocking/UpdateNullOneToOneValueTest.java b/foundation/eclipselink.core.test/src/it/java/org/eclipse/persistence/testing/tests/optimisticlocking/UpdateNullOneToOneValueTest.java
index e95c04a..02ebc65 100644
--- a/foundation/eclipselink.core.test/src/it/java/org/eclipse/persistence/testing/tests/optimisticlocking/UpdateNullOneToOneValueTest.java
+++ b/foundation/eclipselink.core.test/src/it/java/org/eclipse/persistence/testing/tests/optimisticlocking/UpdateNullOneToOneValueTest.java
@@ -33,7 +33,7 @@ public class UpdateNullOneToOneValueTest extends SwitchableOptimisticLockingPoli
     protected GamesConsole original;
     protected GamesConsole original2;
 
-    public UpdateNullOneToOneValueTest(Class optimisticLockingPolicyClass) {
+    public UpdateNullOneToOneValueTest(Class<?> optimisticLockingPolicyClass) {
         super(optimisticLockingPolicyClass);
         addClassToModify(GamesConsole.class);
         addClassToModify(Camera.class);
diff --git a/foundation/eclipselink.core.test/src/it/java/org/eclipse/persistence/testing/tests/optimisticlocking/UpdateNullTransformationValueTest.java b/foundation/eclipselink.core.test/src/it/java/org/eclipse/persistence/testing/tests/optimisticlocking/UpdateNullTransformationValueTest.java
index f4a82ca..83afcb0 100644
--- a/foundation/eclipselink.core.test/src/it/java/org/eclipse/persistence/testing/tests/optimisticlocking/UpdateNullTransformationValueTest.java
+++ b/foundation/eclipselink.core.test/src/it/java/org/eclipse/persistence/testing/tests/optimisticlocking/UpdateNullTransformationValueTest.java
@@ -31,7 +31,7 @@ public class UpdateNullTransformationValueTest extends SwitchableOptimisticLocki
     protected GamesConsole original;
     protected GamesConsole original2;
 
-    public UpdateNullTransformationValueTest(Class optimisticLockingPolicyClass) {
+    public UpdateNullTransformationValueTest(Class<?> optimisticLockingPolicyClass) {
         super(optimisticLockingPolicyClass);
         addClassToModify(GamesConsole.class);
     }
diff --git a/foundation/eclipselink.core.test/src/it/java/org/eclipse/persistence/testing/tests/optimisticlocking/UpdateNullVariableOneToOneValueTest.java b/foundation/eclipselink.core.test/src/it/java/org/eclipse/persistence/testing/tests/optimisticlocking/UpdateNullVariableOneToOneValueTest.java
index 107537e..585a04a 100644
--- a/foundation/eclipselink.core.test/src/it/java/org/eclipse/persistence/testing/tests/optimisticlocking/UpdateNullVariableOneToOneValueTest.java
+++ b/foundation/eclipselink.core.test/src/it/java/org/eclipse/persistence/testing/tests/optimisticlocking/UpdateNullVariableOneToOneValueTest.java
@@ -34,7 +34,7 @@ public class UpdateNullVariableOneToOneValueTest extends SwitchableOptimisticLoc
     protected Gamer original;
     protected Gamer original2;
 
-    public UpdateNullVariableOneToOneValueTest(Class optimisticLockingPolicyClass) {
+    public UpdateNullVariableOneToOneValueTest(Class<?> optimisticLockingPolicyClass) {
         super(optimisticLockingPolicyClass);
         addClassToModify(Gamer.class);
         addClassToModify(Knitting.class);
diff --git a/foundation/eclipselink.core.test/src/it/java/org/eclipse/persistence/testing/tests/optimisticlocking/cascaded/BarPopulator.java b/foundation/eclipselink.core.test/src/it/java/org/eclipse/persistence/testing/tests/optimisticlocking/cascaded/BarPopulator.java
index b2e6358..28c4ed4 100644
--- a/foundation/eclipselink.core.test/src/it/java/org/eclipse/persistence/testing/tests/optimisticlocking/cascaded/BarPopulator.java
+++ b/foundation/eclipselink.core.test/src/it/java/org/eclipse/persistence/testing/tests/optimisticlocking/cascaded/BarPopulator.java
@@ -260,7 +260,7 @@ public void buildExamples() {
         barExample4();
     }
 
-    protected boolean containsObject(Class domainClass, String identifier) {
+    protected boolean containsObject(Class<?> domainClass, String identifier) {
         return populationManager.containsObject(domainClass, identifier);
     }
 
@@ -268,11 +268,11 @@ protected Vector<Object> getAllObjects() {
         return populationManager.getAllObjects();
     }
 
-    public Vector<Object> getAllObjectsForClass(Class domainClass) {
+    public Vector<Object> getAllObjectsForClass(Class<?> domainClass) {
         return populationManager.getAllObjectsForClass(domainClass);
     }
 
-    protected Object getObject(Class domainClass, String identifier) {
+    protected Object getObject(Class<?> domainClass, String identifier) {
         return populationManager.getObject(domainClass, identifier);
     }
 
@@ -358,7 +358,7 @@ public Qualification qualificationExample7() {
         return qualification;
     }
 
-    protected void registerObject(Class domainClass, Object domainObject, String identifier) {
+    protected void registerObject(Class<?> domainClass, Object domainObject, String identifier) {
         populationManager.registerObject(domainClass, domainObject, identifier);
     }
 
diff --git a/foundation/eclipselink.core.test/src/it/java/org/eclipse/persistence/testing/tests/optimization/queryandsqlcounting/RownumFilteringFirstResultQueryTest.java b/foundation/eclipselink.core.test/src/it/java/org/eclipse/persistence/testing/tests/optimization/queryandsqlcounting/RownumFilteringFirstResultQueryTest.java
index 6c3af30..fb9cbeb 100644
--- a/foundation/eclipselink.core.test/src/it/java/org/eclipse/persistence/testing/tests/optimization/queryandsqlcounting/RownumFilteringFirstResultQueryTest.java
+++ b/foundation/eclipselink.core.test/src/it/java/org/eclipse/persistence/testing/tests/optimization/queryandsqlcounting/RownumFilteringFirstResultQueryTest.java
@@ -25,7 +25,7 @@ public RownumFilteringFirstResultQueryTest() {
         super(0,11,1);
     }
 
-    public RownumFilteringFirstResultQueryTest(Class classToQueryOn){
+    public RownumFilteringFirstResultQueryTest(Class<?> classToQueryOn){
         super(0,11,1);
         this.queryToUse = new ReadAllQuery(classToQueryOn);
     }
diff --git a/foundation/eclipselink.core.test/src/it/java/org/eclipse/persistence/testing/tests/optimization/queryandsqlcounting/RownumFilteringQueryTest.java b/foundation/eclipselink.core.test/src/it/java/org/eclipse/persistence/testing/tests/optimization/queryandsqlcounting/RownumFilteringQueryTest.java
index 0d610cb..a04e394 100644
--- a/foundation/eclipselink.core.test/src/it/java/org/eclipse/persistence/testing/tests/optimization/queryandsqlcounting/RownumFilteringQueryTest.java
+++ b/foundation/eclipselink.core.test/src/it/java/org/eclipse/persistence/testing/tests/optimization/queryandsqlcounting/RownumFilteringQueryTest.java
@@ -42,7 +42,7 @@ public RownumFilteringQueryTest() {
         expectedResultSize = 1;
     }
 
-    public RownumFilteringQueryTest(Class classToQuery) {
+    public RownumFilteringQueryTest(Class<?> classToQuery) {
         this();
         queryToUse = new ReadAllQuery(classToQuery);
     }
diff --git a/foundation/eclipselink.core.test/src/it/java/org/eclipse/persistence/testing/tests/orderedlist/OrderListTestModel.java b/foundation/eclipselink.core.test/src/it/java/org/eclipse/persistence/testing/tests/orderedlist/OrderListTestModel.java
index 317fd05..4c6f129 100644
--- a/foundation/eclipselink.core.test/src/it/java/org/eclipse/persistence/testing/tests/orderedlist/OrderListTestModel.java
+++ b/foundation/eclipselink.core.test/src/it/java/org/eclipse/persistence/testing/tests/orderedlist/OrderListTestModel.java
@@ -84,7 +84,7 @@ public class OrderListTestModel extends TestModel {
      * setup saves there the original state of something, sets a new state required for testing,
      * then reset brings back the saved original state.
      */
-    Map<Class, ObjectChangeTrackingPolicy> originalChangeTrackingPolicies;
+    Map<Class<?>, ObjectChangeTrackingPolicy> originalChangeTrackingPolicies;
 
     /*
      * Constants used by WhereToAdd tests.
@@ -359,7 +359,7 @@ public void setup() {
         if(!isTopLevel) {
             if(changeTracking == ChangeTracking.ATTRIBUTE) {
                 // Save change policies for the all employee demo class in order to restore them at reset time.
-                Map<Class, ObjectChangePolicy> originalChangeTrackingPolicies = new HashMap<>();
+                Map<Class<?>, ObjectChangePolicy> originalChangeTrackingPolicies = new HashMap<>();
 
                 originalChangeTrackingPolicies.put(Employee.class, getSession().getDescriptor(Employee.class).getObjectChangePolicy());
                 getSession().getDescriptor(Employee.class).setObjectChangePolicy(new AttributeChangeTrackingPolicy());
@@ -387,9 +387,9 @@ public void reset() {
         if(!isTopLevel) {
             // restore original change policies.
             if(originalChangeTrackingPolicies != null) {
-                Iterator<Map.Entry<Class, ObjectChangeTrackingPolicy>> it = originalChangeTrackingPolicies.entrySet().iterator();
+                Iterator<Map.Entry<Class<?>, ObjectChangeTrackingPolicy>> it = originalChangeTrackingPolicies.entrySet().iterator();
                 while(it.hasNext()) {
-                    Map.Entry<Class, ObjectChangeTrackingPolicy> entry = it.next();
+                    Map.Entry<Class<?>, ObjectChangeTrackingPolicy> entry = it.next();
                     getSession().getDescriptor(entry.getKey()).setObjectChangePolicy(entry.getValue());
                 }
                 originalChangeTrackingPolicies = null;
@@ -2185,11 +2185,11 @@ class CreateEmptyManagersTest extends CreateManagersTest {
      * are of the expected type.
      */
     class VerifyContainerPolicyClassTest extends TestCase {
-        Class expectedClass;
+        Class<?> expectedClass;
         VerifyContainerPolicyClassTest() {
             this(NullsLastOrderedListContainerPolicy.class);
         }
-        VerifyContainerPolicyClassTest(Class expectedClass) {
+        VerifyContainerPolicyClassTest(Class<?> expectedClass) {
             super();
             this.expectedClass = expectedClass;
             setName("VerifyContainerPolicyClassTest");
diff --git a/foundation/eclipselink.core.test/src/it/java/org/eclipse/persistence/testing/tests/performance/java/DoPrivilegedTest.java b/foundation/eclipselink.core.test/src/it/java/org/eclipse/persistence/testing/tests/performance/java/DoPrivilegedTest.java
index 5befd09..c5721b2 100644
--- a/foundation/eclipselink.core.test/src/it/java/org/eclipse/persistence/testing/tests/performance/java/DoPrivilegedTest.java
+++ b/foundation/eclipselink.core.test/src/it/java/org/eclipse/persistence/testing/tests/performance/java/DoPrivilegedTest.java
@@ -66,12 +66,12 @@ public void test() throws Exception {
         String fieldValue = "TopLink Blah";
         String methodName = "setProduct";
 
-        Class clazz = null;
+        Class<?> clazz = null;
         Version version = null;
         Method method = null;
         try {
             clazz = Class.forName(className);
-            Class[] methodParameterTypes = { Class.forName("java.lang.String") };
+            Class<?>[] methodParameterTypes = { Class.forName("java.lang.String") };
             ClassLoader clazzloader = clazz.getClassLoader();
             ClassLoader classloader = Thread.currentThread().getContextClassLoader();
             Class.forName(className, true, clazzloader);
@@ -97,9 +97,9 @@ public void test() throws Exception {
             Object[] parameters = { "TopLink Blah." };
             method.invoke(version, parameters);
 
-            Constructor constructor = clazz.getConstructor((Class[])null);
+            Constructor constructor = clazz.getConstructor((Class<?>[])null);
             constructor.setAccessible(true);
-            Constructor declaredConstructor = clazz.getDeclaredConstructor((Class[])null);
+            Constructor declaredConstructor = clazz.getDeclaredConstructor((Class<?>[])null);
             declaredConstructor.setAccessible(true);
             constructor.newInstance((Object[])null);
 
@@ -186,7 +186,7 @@ public void testDoPrivileged() {
         }
     }
 
-    public Field getDeclaredField(final Class javaClass, final String fieldName, final boolean shouldSetAccessible) throws NoSuchFieldException {
+    public Field getDeclaredField(final Class<?> javaClass, final String fieldName, final boolean shouldSetAccessible) throws NoSuchFieldException {
         Field field = findDeclaredField(javaClass, fieldName);
         if (shouldSetAccessible) {
             field.setAccessible(true);
@@ -194,7 +194,7 @@ public Field getDeclaredField(final Class javaClass, final String fieldName, fin
         return field;
     }
 
-    public Method getDeclaredMethod(final Class javaClass, final String methodName, final Class[] methodParameterTypes, final boolean shouldSetAccessible) throws NoSuchMethodException {
+    public Method getDeclaredMethod(final Class<?> javaClass, final String methodName, final Class<?>[] methodParameterTypes, final boolean shouldSetAccessible) throws NoSuchMethodException {
         Method method = findDeclaredMethod(javaClass, methodName, methodParameterTypes);
         if (shouldSetAccessible) {
             method.setAccessible(true);
@@ -207,11 +207,11 @@ public Method getDeclaredMethod(final Class javaClass, final String methodName,
      * find the field.  This method is called by the public getDeclaredField() method and does a recursive
      * search for the named field in the given classes or it's superclasses.
      */
-    private Field findDeclaredField(Class javaClass, String fieldName) throws NoSuchFieldException {
+    private Field findDeclaredField(Class<?> javaClass, String fieldName) throws NoSuchFieldException {
         try {
             return javaClass.getDeclaredField(fieldName);
         } catch (NoSuchFieldException ex) {
-            Class superclass = javaClass.getSuperclass();
+            Class<?> superclass = javaClass.getSuperclass();
             if (superclass == null) {
                 throw ex;
             } else {
@@ -225,11 +225,11 @@ private Field findDeclaredField(Class javaClass, String fieldName) throws NoSuch
      * find the method.  This method is called by the public getDeclaredMethod() method and does a recursive
      * search for the named method in the given classes or it's superclasses.
      */
-    private Method findDeclaredMethod(Class javaClass, String methodName, Class[] methodParameterTypes) throws NoSuchMethodException {
+    private Method findDeclaredMethod(Class<?> javaClass, String methodName, Class<?>[] methodParameterTypes) throws NoSuchMethodException {
         try {
             return javaClass.getDeclaredMethod(methodName, methodParameterTypes);
         } catch (NoSuchMethodException ex) {
-            Class superclass = javaClass.getSuperclass();
+            Class<?> superclass = javaClass.getSuperclass();
             if (superclass == null) {
                 throw ex;
             } else {
diff --git a/foundation/eclipselink.core.test/src/it/java/org/eclipse/persistence/testing/tests/performance/java/FieldTest.java b/foundation/eclipselink.core.test/src/it/java/org/eclipse/persistence/testing/tests/performance/java/FieldTest.java
index 267921b..e3cad43 100644
--- a/foundation/eclipselink.core.test/src/it/java/org/eclipse/persistence/testing/tests/performance/java/FieldTest.java
+++ b/foundation/eclipselink.core.test/src/it/java/org/eclipse/persistence/testing/tests/performance/java/FieldTest.java
@@ -102,7 +102,7 @@ public void addReflectionMethodTest() {
             @Override
             public final void test() {
                 if (method == null) {
-                    Class[] argTypes = { Object.class };
+                    Class<?>[] argTypes = { Object.class };
                     try {
                         method = getClass().getMethod("setVariable", argTypes);
                     } catch (Exception ignore) {
diff --git a/foundation/eclipselink.core.test/src/it/java/org/eclipse/persistence/testing/tests/performance/java/MethodTest.java b/foundation/eclipselink.core.test/src/it/java/org/eclipse/persistence/testing/tests/performance/java/MethodTest.java
index 74a5f47..046e49b 100644
--- a/foundation/eclipselink.core.test/src/it/java/org/eclipse/persistence/testing/tests/performance/java/MethodTest.java
+++ b/foundation/eclipselink.core.test/src/it/java/org/eclipse/persistence/testing/tests/performance/java/MethodTest.java
@@ -155,7 +155,7 @@ public void addReflectionTest() {
             @Override
             public void startTest() {
                 if (method == null) {
-                    Class[] argTypes = {  };
+                    Class<?>[] argTypes = {  };
                     try {
                         method = getClass().getMethod("doTest", argTypes);
                     } catch (Exception ignore) {
diff --git a/foundation/eclipselink.core.test/src/it/java/org/eclipse/persistence/testing/tests/plsql/PLSQLTest.java b/foundation/eclipselink.core.test/src/it/java/org/eclipse/persistence/testing/tests/plsql/PLSQLTest.java
index ba9a67a..763e22f 100644
--- a/foundation/eclipselink.core.test/src/it/java/org/eclipse/persistence/testing/tests/plsql/PLSQLTest.java
+++ b/foundation/eclipselink.core.test/src/it/java/org/eclipse/persistence/testing/tests/plsql/PLSQLTest.java
@@ -27,20 +27,20 @@
  */
 public class PLSQLTest extends TestCase {
     protected String queryName;
-    protected Class queryClass;
+    protected Class<?> queryClass;
     protected List queryArguments;
     protected Object result;
 
     public PLSQLTest() {
     }
 
-    public PLSQLTest(String queryName, Class queryClass, List queryArguments) {
+    public PLSQLTest(String queryName, Class<?> queryClass, List queryArguments) {
         this.queryName = queryName;
         this.queryClass = queryClass;
         this.queryArguments = queryArguments;
     }
 
-    public PLSQLTest(String queryName, Class queryClass, List queryArguments, Object result) {
+    public PLSQLTest(String queryName, Class<?> queryClass, List queryArguments, Object result) {
         this.queryName = queryName;
         this.queryClass = queryClass;
         this.queryArguments = queryArguments;
diff --git a/foundation/eclipselink.core.test/src/it/java/org/eclipse/persistence/testing/tests/queries/CollectionReadAllTest.java b/foundation/eclipselink.core.test/src/it/java/org/eclipse/persistence/testing/tests/queries/CollectionReadAllTest.java
index 11677a1..7ac9299 100644
--- a/foundation/eclipselink.core.test/src/it/java/org/eclipse/persistence/testing/tests/queries/CollectionReadAllTest.java
+++ b/foundation/eclipselink.core.test/src/it/java/org/eclipse/persistence/testing/tests/queries/CollectionReadAllTest.java
@@ -26,7 +26,7 @@
 public class CollectionReadAllTest extends org.eclipse.persistence.testing.framework.ReadAllTest {
     protected Object dbContainter;
 
-    public CollectionReadAllTest(Class referenceClass, int originalObjectsSize, ReadAllQuery query) {
+    public CollectionReadAllTest(Class<?> referenceClass, int originalObjectsSize, ReadAllQuery query) {
         super(referenceClass, originalObjectsSize);
         this.setQuery(query);
         setName("CollectionReadAllTest(" + org.eclipse.persistence.internal.helper.Helper.getShortClassName(getQuery().getContainerPolicy().getContainerClass()) + "," + org.eclipse.persistence.internal.helper.Helper.getShortClassName(referenceClass) + ")");
@@ -60,7 +60,7 @@ protected void test() {
      */
     @Override
     protected void verify() {
-        Class queryContainerClass = getQuery().getContainerPolicy().getContainerClass();
+        Class<?> queryContainerClass = getQuery().getContainerPolicy().getContainerClass();
         if (!queryContainerClass.isInstance(dbContainter)) {
             throw new TestErrorException("The container class returned was" + dbContainter.getClass().toString() + " we expected a " + queryContainerClass.toString() + " to be returned.");
         }
diff --git a/foundation/eclipselink.core.test/src/it/java/org/eclipse/persistence/testing/tests/queries/CursoredStreamTest.java b/foundation/eclipselink.core.test/src/it/java/org/eclipse/persistence/testing/tests/queries/CursoredStreamTest.java
index 612ce84..ca7400c 100644
--- a/foundation/eclipselink.core.test/src/it/java/org/eclipse/persistence/testing/tests/queries/CursoredStreamTest.java
+++ b/foundation/eclipselink.core.test/src/it/java/org/eclipse/persistence/testing/tests/queries/CursoredStreamTest.java
@@ -31,10 +31,10 @@
     protected int size;
     protected Vector normalQueryObjects;
     protected Vector cursoredQueryObjects;
-    protected Class referenceClass;
+    protected Class<?> referenceClass;
     protected Expression joinExpression;
 
-    public CursoredStreamTest(Class referenceClass, Expression expression) {
+    public CursoredStreamTest(Class<?> referenceClass, Expression expression) {
         setReferenceClass(referenceClass);
         setName(getName() + "(" + referenceClass + ")");
         setDescription("This test verifies that the number of objects read in using a cursored stream" +
@@ -50,7 +50,7 @@ public Vector getNormalQueryObjects() {
         return normalQueryObjects;
     }
 
-    public Class getReferenceClass() {
+    public Class<?> getReferenceClass() {
         return referenceClass;
     }
 
@@ -66,7 +66,7 @@ public void setNormalQueryObjects(Vector objects) {
         normalQueryObjects = objects;
     }
 
-    public void setReferenceClass(Class aClass) {
+    public void setReferenceClass(Class<?> aClass) {
         referenceClass = aClass;
     }
 
diff --git a/foundation/eclipselink.core.test/src/it/java/org/eclipse/persistence/testing/tests/queries/CursoredStreamWithUselessConformTest.java b/foundation/eclipselink.core.test/src/it/java/org/eclipse/persistence/testing/tests/queries/CursoredStreamWithUselessConformTest.java
index 7e098f3..b61d665 100644
--- a/foundation/eclipselink.core.test/src/it/java/org/eclipse/persistence/testing/tests/queries/CursoredStreamWithUselessConformTest.java
+++ b/foundation/eclipselink.core.test/src/it/java/org/eclipse/persistence/testing/tests/queries/CursoredStreamWithUselessConformTest.java
@@ -24,7 +24,7 @@
  * and comparing the contents to a normal query read.
  */
 public class CursoredStreamWithUselessConformTest extends CursoredStreamTest {
-    public CursoredStreamWithUselessConformTest(Class referenceClass, Expression expression) {
+    public CursoredStreamWithUselessConformTest(Class<?> referenceClass, Expression expression) {
         super(referenceClass, expression);
     }
 
diff --git a/foundation/eclipselink.core.test/src/it/java/org/eclipse/persistence/testing/tests/queries/IdentitySystem.java b/foundation/eclipselink.core.test/src/it/java/org/eclipse/persistence/testing/tests/queries/IdentitySystem.java
index 491a78b..01abec8 100644
--- a/foundation/eclipselink.core.test/src/it/java/org/eclipse/persistence/testing/tests/queries/IdentitySystem.java
+++ b/foundation/eclipselink.core.test/src/it/java/org/eclipse/persistence/testing/tests/queries/IdentitySystem.java
@@ -68,7 +68,7 @@ public void buildExamples() {
 
     }
 
-    private boolean containsObject(Class domainClass, String identifier) {
+    private boolean containsObject(Class<?> domainClass, String identifier) {
         PopulationManager populationManager = PopulationManager.getDefaultManager();
 
         return populationManager.containsObject(domainClass, identifier);
@@ -85,7 +85,7 @@ public void createTables(DatabaseSession session)
 
     }
 
-    private Object getObject(Class domainClass, String identifier) {
+    private Object getObject(Class<?> domainClass, String identifier) {
         PopulationManager populationManager = PopulationManager.getDefaultManager();
         return populationManager.getObject(domainClass, identifier);
     }
diff --git a/foundation/eclipselink.core.test/src/it/java/org/eclipse/persistence/testing/tests/queries/MapReadAllTest.java b/foundation/eclipselink.core.test/src/it/java/org/eclipse/persistence/testing/tests/queries/MapReadAllTest.java
index b700fd8..c88e3b4 100644
--- a/foundation/eclipselink.core.test/src/it/java/org/eclipse/persistence/testing/tests/queries/MapReadAllTest.java
+++ b/foundation/eclipselink.core.test/src/it/java/org/eclipse/persistence/testing/tests/queries/MapReadAllTest.java
@@ -26,7 +26,7 @@
 public class MapReadAllTest extends ReadAllTest {
     protected Object dbContainter;
 
-    public MapReadAllTest(Class referenceClass, int originalObjectsSize, ReadAllQuery query) {
+    public MapReadAllTest(Class<?> referenceClass, int originalObjectsSize, ReadAllQuery query) {
         super(referenceClass, originalObjectsSize);
         this.setQuery(query);
         setName("MapReadAllTest(" + org.eclipse.persistence.internal.helper.Helper.getShortClassName(getQuery().getContainerPolicy().getContainerClass()) + "," + org.eclipse.persistence.internal.helper.Helper.getShortClassName(referenceClass) + ")");
@@ -67,7 +67,7 @@ protected void test() {
      */
     @Override
     protected void verify() {
-        Class queryContainerClass = getQuery().getContainerPolicy().getContainerClass();
+        Class<?> queryContainerClass = getQuery().getContainerPolicy().getContainerClass();
         if (!queryContainerClass.isInstance(dbContainter)) {
             throw new TestErrorException("The container class returned was" + dbContainter.getClass().toString() + " we expected a " + queryContainerClass.toString() + " to be returned.");
         }
diff --git a/foundation/eclipselink.core.test/src/it/java/org/eclipse/persistence/testing/tests/queries/NamedQueriesDescriptorQueryManagerTest.java b/foundation/eclipselink.core.test/src/it/java/org/eclipse/persistence/testing/tests/queries/NamedQueriesDescriptorQueryManagerTest.java
index 9e68a59..50439dd 100644
--- a/foundation/eclipselink.core.test/src/it/java/org/eclipse/persistence/testing/tests/queries/NamedQueriesDescriptorQueryManagerTest.java
+++ b/foundation/eclipselink.core.test/src/it/java/org/eclipse/persistence/testing/tests/queries/NamedQueriesDescriptorQueryManagerTest.java
@@ -76,7 +76,7 @@ public ClassDescriptor getDescriptorNamedQueries() {
     }
 
     // end of getDescriptorNamedQuery
-    public void setDescriptorNamedQueries(Class cls) {
+    public void setDescriptorNamedQueries(Class<?> cls) {
         this.descriptor = serverSession.getClassDescriptor(cls);
     }
 
diff --git a/foundation/eclipselink.core.test/src/it/java/org/eclipse/persistence/testing/tests/queries/NamedQueryGetQueryNoArgumentsTest.java b/foundation/eclipselink.core.test/src/it/java/org/eclipse/persistence/testing/tests/queries/NamedQueryGetQueryNoArgumentsTest.java
index f82ef8a..c560323 100644
--- a/foundation/eclipselink.core.test/src/it/java/org/eclipse/persistence/testing/tests/queries/NamedQueryGetQueryNoArgumentsTest.java
+++ b/foundation/eclipselink.core.test/src/it/java/org/eclipse/persistence/testing/tests/queries/NamedQueryGetQueryNoArgumentsTest.java
@@ -66,7 +66,7 @@ public ClassDescriptor getDescriptorNamedQueries() {
     }
 
     // end of getDescriptorNamedQuery
-    public void setDescriptorNamedQueries(Class cls) {
+    public void setDescriptorNamedQueries(Class<?> cls) {
         this.descriptor = getSession().getClassDescriptor(cls);
     }
 
diff --git a/foundation/eclipselink.core.test/src/it/java/org/eclipse/persistence/testing/tests/queries/ObjectLevelReadQueryTest.java b/foundation/eclipselink.core.test/src/it/java/org/eclipse/persistence/testing/tests/queries/ObjectLevelReadQueryTest.java
index 0fb01a3..57b9ecf 100644
--- a/foundation/eclipselink.core.test/src/it/java/org/eclipse/persistence/testing/tests/queries/ObjectLevelReadQueryTest.java
+++ b/foundation/eclipselink.core.test/src/it/java/org/eclipse/persistence/testing/tests/queries/ObjectLevelReadQueryTest.java
@@ -197,7 +197,7 @@ public void run() {
      * @param c Class where to search for method.
      * @return {@code [ObjectLevelReadQuery].checkForCustomQuery(AbstractSession, AbstractRecord)} method accessor.
      */
-    protected Method getCheckForCustomQueryMethod(final Class c) {
+    protected Method getCheckForCustomQueryMethod(final Class<?> c) {
         Method method;
         try {
             method = c.getDeclaredMethod(
diff --git a/foundation/eclipselink.core.test/src/it/java/org/eclipse/persistence/testing/tests/queries/OrderingMutipleTableTest.java b/foundation/eclipselink.core.test/src/it/java/org/eclipse/persistence/testing/tests/queries/OrderingMutipleTableTest.java
index ce8d021..ef688e6 100644
--- a/foundation/eclipselink.core.test/src/it/java/org/eclipse/persistence/testing/tests/queries/OrderingMutipleTableTest.java
+++ b/foundation/eclipselink.core.test/src/it/java/org/eclipse/persistence/testing/tests/queries/OrderingMutipleTableTest.java
@@ -34,7 +34,7 @@ public void test() {
         orderedQueryObjects = executeOrderingQuery(LargeProject.class, "budget");
     }
 
-    protected Vector executeOrderingQuery(Class class1, String orderField) {
+    protected Vector executeOrderingQuery(Class<?> class1, String orderField) {
         ReadAllQuery query = new ReadAllQuery();
         query.addAscendingOrdering(orderField);
         query.setReferenceClass(class1);
diff --git a/foundation/eclipselink.core.test/src/it/java/org/eclipse/persistence/testing/tests/queries/PredefinedInQueryReadAllTest.java b/foundation/eclipselink.core.test/src/it/java/org/eclipse/persistence/testing/tests/queries/PredefinedInQueryReadAllTest.java
index b9d6f3e..f5b02a5 100644
--- a/foundation/eclipselink.core.test/src/it/java/org/eclipse/persistence/testing/tests/queries/PredefinedInQueryReadAllTest.java
+++ b/foundation/eclipselink.core.test/src/it/java/org/eclipse/persistence/testing/tests/queries/PredefinedInQueryReadAllTest.java
@@ -24,7 +24,7 @@
  *
  */
 public class PredefinedInQueryReadAllTest extends ReadAllTest {
-    public PredefinedInQueryReadAllTest(Class referenceClass, int originalObjectsSize) {
+    public PredefinedInQueryReadAllTest(Class<?> referenceClass, int originalObjectsSize) {
         super(referenceClass, originalObjectsSize);
         setName("PredefinedInQueryReadAllTest");
     }
diff --git a/foundation/eclipselink.core.test/src/it/java/org/eclipse/persistence/testing/tests/queries/PredefinedQueryReadAllTest.java b/foundation/eclipselink.core.test/src/it/java/org/eclipse/persistence/testing/tests/queries/PredefinedQueryReadAllTest.java
index 814a8aa..e9bf447 100644
--- a/foundation/eclipselink.core.test/src/it/java/org/eclipse/persistence/testing/tests/queries/PredefinedQueryReadAllTest.java
+++ b/foundation/eclipselink.core.test/src/it/java/org/eclipse/persistence/testing/tests/queries/PredefinedQueryReadAllTest.java
@@ -23,7 +23,7 @@
  *
  */
 public class PredefinedQueryReadAllTest extends ReadAllTest {
-    public PredefinedQueryReadAllTest(Class referenceClass, int originalObjectsSize) {
+    public PredefinedQueryReadAllTest(Class<?> referenceClass, int originalObjectsSize) {
         super(referenceClass, originalObjectsSize);
         setName("PredefinedQueryReadAllTest");
     }
diff --git a/foundation/eclipselink.core.test/src/it/java/org/eclipse/persistence/testing/tests/queries/ScrollableCursorTest.java b/foundation/eclipselink.core.test/src/it/java/org/eclipse/persistence/testing/tests/queries/ScrollableCursorTest.java
index 68981a3..01e4412 100644
--- a/foundation/eclipselink.core.test/src/it/java/org/eclipse/persistence/testing/tests/queries/ScrollableCursorTest.java
+++ b/foundation/eclipselink.core.test/src/it/java/org/eclipse/persistence/testing/tests/queries/ScrollableCursorTest.java
@@ -29,12 +29,12 @@ public class ScrollableCursorTest extends TestCase {
     protected int size;
     protected Vector normalQueryObjects;
     protected Vector cursoredQueryObjects;
-    protected Class referenceClass;
+    protected Class<?> referenceClass;
     protected Expression joinExpression;
     protected boolean TYPE_SCROLL_INSENSITIVE_isSupported;
     protected boolean CONCUR_UPDATABLE_isSupported;
 
-    public ScrollableCursorTest(Class referenceClass, Expression expression) {
+    public ScrollableCursorTest(Class<?> referenceClass, Expression expression) {
         setReferenceClass(referenceClass);
         setName(getName() + "(" + referenceClass + ")");
         setDescription("This test verifies that the number of objects read in using a scrollable cursor" +
@@ -50,7 +50,7 @@ public Vector getNormalQueryObjects() {
         return normalQueryObjects;
     }
 
-    public Class getReferenceClass() {
+    public Class<?> getReferenceClass() {
         return referenceClass;
     }
 
@@ -66,7 +66,7 @@ public void setNormalQueryObjects(Vector objects) {
         normalQueryObjects = objects;
     }
 
-    public void setReferenceClass(Class aClass) {
+    public void setReferenceClass(Class<?> aClass) {
         referenceClass = aClass;
     }
 
diff --git a/foundation/eclipselink.core.test/src/it/java/org/eclipse/persistence/testing/tests/queries/inmemory/MemoryQueryAcrossAggregateCollectionMapping.java b/foundation/eclipselink.core.test/src/it/java/org/eclipse/persistence/testing/tests/queries/inmemory/MemoryQueryAcrossAggregateCollectionMapping.java
index 1313243..9dada79 100644
--- a/foundation/eclipselink.core.test/src/it/java/org/eclipse/persistence/testing/tests/queries/inmemory/MemoryQueryAcrossAggregateCollectionMapping.java
+++ b/foundation/eclipselink.core.test/src/it/java/org/eclipse/persistence/testing/tests/queries/inmemory/MemoryQueryAcrossAggregateCollectionMapping.java
@@ -23,7 +23,7 @@
 import org.eclipse.persistence.testing.tests.aggregate.AgentBuilderHelper;
 
 public class MemoryQueryAcrossAggregateCollectionMapping extends TestCase {
-    protected Class cls;
+    protected Class<?> cls;
     // Either Agent or Builder
     protected Object object;
     protected Customer customer;
@@ -34,7 +34,7 @@ public class MemoryQueryAcrossAggregateCollectionMapping extends TestCase {
     protected java.util.List customers;
 
     // Must be Agent or Builder
-    public MemoryQueryAcrossAggregateCollectionMapping(Class cls) {
+    public MemoryQueryAcrossAggregateCollectionMapping(Class<?> cls) {
         super();
         this.cls = cls;
         setName(getName() + AgentBuilderHelper.getNameInBrackets(cls));
diff --git a/foundation/eclipselink.core.test/src/it/java/org/eclipse/persistence/testing/tests/queries/optimization/NestedOneToManyBatchReadAllTest.java b/foundation/eclipselink.core.test/src/it/java/org/eclipse/persistence/testing/tests/queries/optimization/NestedOneToManyBatchReadAllTest.java
index 537ef28..9fd64e9 100644
--- a/foundation/eclipselink.core.test/src/it/java/org/eclipse/persistence/testing/tests/queries/optimization/NestedOneToManyBatchReadAllTest.java
+++ b/foundation/eclipselink.core.test/src/it/java/org/eclipse/persistence/testing/tests/queries/optimization/NestedOneToManyBatchReadAllTest.java
@@ -24,7 +24,7 @@
 
 public class NestedOneToManyBatchReadAllTest extends ReadAllTest {
 
-    public NestedOneToManyBatchReadAllTest(Class referenceClass, int originalObjectsSize) {
+    public NestedOneToManyBatchReadAllTest(Class<?> referenceClass, int originalObjectsSize) {
         super(referenceClass, originalObjectsSize);
     }
 
diff --git a/foundation/eclipselink.core.test/src/it/java/org/eclipse/persistence/testing/tests/queries/optimization/ReadAllPartialReadingAddressTest.java b/foundation/eclipselink.core.test/src/it/java/org/eclipse/persistence/testing/tests/queries/optimization/ReadAllPartialReadingAddressTest.java
index 4afdffe..4d8141d 100644
--- a/foundation/eclipselink.core.test/src/it/java/org/eclipse/persistence/testing/tests/queries/optimization/ReadAllPartialReadingAddressTest.java
+++ b/foundation/eclipselink.core.test/src/it/java/org/eclipse/persistence/testing/tests/queries/optimization/ReadAllPartialReadingAddressTest.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
@@ -26,7 +26,7 @@ public ReadAllPartialReadingAddressTest(int size, String attribute) {
         this.attribute = attribute;
     }
 
-    public ReadAllPartialReadingAddressTest(Class referenceClass, int originalObjectsSize) {
+    public ReadAllPartialReadingAddressTest(Class<?> referenceClass, int originalObjectsSize) {
         super(referenceClass, originalObjectsSize);
     }
 }
diff --git a/foundation/eclipselink.core.test/src/it/java/org/eclipse/persistence/testing/tests/queries/options/ClearQueryOptionsOnStatementTest.java b/foundation/eclipselink.core.test/src/it/java/org/eclipse/persistence/testing/tests/queries/options/ClearQueryOptionsOnStatementTest.java
index b55ffcd..30fc6e8 100644
--- a/foundation/eclipselink.core.test/src/it/java/org/eclipse/persistence/testing/tests/queries/options/ClearQueryOptionsOnStatementTest.java
+++ b/foundation/eclipselink.core.test/src/it/java/org/eclipse/persistence/testing/tests/queries/options/ClearQueryOptionsOnStatementTest.java
@@ -145,7 +145,7 @@ public void testResultSetFetchSizeReset(Session session) {
         Map statementCache = null;
         try {
             Method method = PrivilegedAccessHelper.getDeclaredMethod(DatabaseAccessor.class,
-                "getStatementCache", new Class[]{});
+                "getStatementCache", new Class<?>[]{});
             method.setAccessible(true);
             statementCache = (Map) method.invoke(accessor, new Object[] {});
         } catch (Exception nsme) {
diff --git a/foundation/eclipselink.core.test/src/it/java/org/eclipse/persistence/testing/tests/queries/report/ClassForInheritanceTestCase.java b/foundation/eclipselink.core.test/src/it/java/org/eclipse/persistence/testing/tests/queries/report/ClassForInheritanceTestCase.java
index b123520..1f8606d 100644
--- a/foundation/eclipselink.core.test/src/it/java/org/eclipse/persistence/testing/tests/queries/report/ClassForInheritanceTestCase.java
+++ b/foundation/eclipselink.core.test/src/it/java/org/eclipse/persistence/testing/tests/queries/report/ClassForInheritanceTestCase.java
@@ -36,7 +36,7 @@ public class ClassForInheritanceTestCase extends ReportQueryTestCase {
     protected void buildExpectedResults() throws Exception {
 
         Vector projects = getSession().readAllObjects(Project.class);
-        Class projClass = null;
+        Class<?> projClass = null;
         Project proj = null;
         for (Enumeration e = projects.elements(); e.hasMoreElements(); ) {
             proj = (Project)e.nextElement();
diff --git a/foundation/eclipselink.core.test/src/it/java/org/eclipse/persistence/testing/tests/remote/RMIServerManagerController.java b/foundation/eclipselink.core.test/src/it/java/org/eclipse/persistence/testing/tests/remote/RMIServerManagerController.java
index a9593dc..e2394e4 100644
--- a/foundation/eclipselink.core.test/src/it/java/org/eclipse/persistence/testing/tests/remote/RMIServerManagerController.java
+++ b/foundation/eclipselink.core.test/src/it/java/org/eclipse/persistence/testing/tests/remote/RMIServerManagerController.java
@@ -55,7 +55,7 @@ public RMIRemoteSessionController createRemoteSessionController() {
         } else {
             try {
                 Class<?> cls = Class.forName(controllerClassName);
-                Class[] parameterTypes = { org.eclipse.persistence.sessions.Session.class };
+                Class<?>[] parameterTypes = { org.eclipse.persistence.sessions.Session.class };
                 Constructor<?> constructor = cls.getConstructor(parameterTypes);
                 Object[] params = { getSession() };
                 controller = (RMIRemoteSessionController)constructor.newInstance(params);
diff --git a/foundation/eclipselink.core.test/src/it/java/org/eclipse/persistence/testing/tests/remote/RemoteConnectionExceptionsTest.java b/foundation/eclipselink.core.test/src/it/java/org/eclipse/persistence/testing/tests/remote/RemoteConnectionExceptionsTest.java
index 5d9e5bf..4646328 100644
--- a/foundation/eclipselink.core.test/src/it/java/org/eclipse/persistence/testing/tests/remote/RemoteConnectionExceptionsTest.java
+++ b/foundation/eclipselink.core.test/src/it/java/org/eclipse/persistence/testing/tests/remote/RemoteConnectionExceptionsTest.java
@@ -25,7 +25,7 @@
 
 public class RemoteConnectionExceptionsTest extends TestCase {
 
-    public RemoteConnectionExceptionsTest(int mode, Class remoteConnectionClass) {
+    public RemoteConnectionExceptionsTest(int mode, Class<?> remoteConnectionClass) {
         this.remoteConnectionClass = remoteConnectionClass;
         generator = new TransporterGenerator(mode);
         setNameAndCheckMode();
@@ -39,7 +39,7 @@ public RemoteConnectionExceptionsTest(int mode,
         this(mode, Class.forName(remoteConnectionClassName));
     }
 
-    protected Class remoteConnectionClass;
+    protected Class<?> remoteConnectionClass;
     private RemoteConnection remoteConnection;
     protected TransporterGenerator generator;
     protected Object[] results;
@@ -107,10 +107,10 @@ protected void setMethodsAndArgs() {
             }
             methods.add(method);
 
-            Class[] types = method.getParameterTypes();
+            Class<?>[] types = method.getParameterTypes();
             Object[] params = new Object[types.length];
             for (int j = 0; j < types.length; j++) {
-                Class type = types[j];
+                Class<?> type = types[j];
                 if (type.isPrimitive()) {
                     params[j] = getWrapperClassInstance(type);
                 }
@@ -222,7 +222,7 @@ public void verify() {
         }
     }
 
-    public static Object getWrapperClassInstance(Class cls) {
+    public static Object getWrapperClassInstance(Class<?> cls) {
         if (Integer.TYPE.equals(cls)) {
             return 0;
         } else if (Boolean.TYPE.equals(cls)) {
diff --git a/foundation/eclipselink.core.test/src/it/java/org/eclipse/persistence/testing/tests/returning/DescriptorExceptionTest.java b/foundation/eclipselink.core.test/src/it/java/org/eclipse/persistence/testing/tests/returning/DescriptorExceptionTest.java
index e4babc0..f3298d2 100644
--- a/foundation/eclipselink.core.test/src/it/java/org/eclipse/persistence/testing/tests/returning/DescriptorExceptionTest.java
+++ b/foundation/eclipselink.core.test/src/it/java/org/eclipse/persistence/testing/tests/returning/DescriptorExceptionTest.java
@@ -122,7 +122,7 @@ protected Project getProject() {
         return project;
     }
 
-    protected static ClassDescriptor getDescriptor(Project project, Class type) {
+    protected static ClassDescriptor getDescriptor(Project project, Class<?> type) {
         ClassDescriptor desc = project.getDescriptor(type);
         if (!desc.hasReturningPolicy()) {
             desc.setReturningPolicy(new ReturningPolicy());
diff --git a/foundation/eclipselink.core.test/src/it/java/org/eclipse/persistence/testing/tests/returning/model/AdapterWithReturnObjectControl.java b/foundation/eclipselink.core.test/src/it/java/org/eclipse/persistence/testing/tests/returning/model/AdapterWithReturnObjectControl.java
index f2d7e2b..79fbde5 100644
--- a/foundation/eclipselink.core.test/src/it/java/org/eclipse/persistence/testing/tests/returning/model/AdapterWithReturnObjectControl.java
+++ b/foundation/eclipselink.core.test/src/it/java/org/eclipse/persistence/testing/tests/returning/model/AdapterWithReturnObjectControl.java
@@ -120,7 +120,7 @@ public void getChange(DataRecord row, DatabaseMapping mapping, Session session,
 
     protected Object readObjectFromRow(Session session, ClassDescriptor desc, DataRecord row) {
         if (desc.hasInheritance()) {
-            Class newClass = desc.getInheritancePolicy().classFromRow((DatabaseRecord)row, (AbstractSession)session);
+            Class<?> newClass = desc.getInheritancePolicy().classFromRow((DatabaseRecord)row, (AbstractSession)session);
             desc = session.getClassDescriptor(newClass);
         }
         Object object = desc.getObjectBuilder().buildNewInstance();
diff --git a/foundation/eclipselink.core.test/src/it/java/org/eclipse/persistence/testing/tests/security/ExceptionTestSaveSecurityManager.java b/foundation/eclipselink.core.test/src/it/java/org/eclipse/persistence/testing/tests/security/ExceptionTestSaveSecurityManager.java
index ce4dd31..9e77477 100644
--- a/foundation/eclipselink.core.test/src/it/java/org/eclipse/persistence/testing/tests/security/ExceptionTestSaveSecurityManager.java
+++ b/foundation/eclipselink.core.test/src/it/java/org/eclipse/persistence/testing/tests/security/ExceptionTestSaveSecurityManager.java
@@ -31,13 +31,13 @@ public class ExceptionTestSaveSecurityManager extends ExceptionTest {
     private SecurityManager orgSecurityManager;
     private IntegrityChecker orgIntegrityChecker;
     private boolean orgDefaultUseDoPrivilegedValue;
-    private Class cls;
+    private Class<?> cls;
     private RelationalDescriptor descriptor;
 
     public ExceptionTestSaveSecurityManager() {
     }
 
-    public ExceptionTestSaveSecurityManager(String description, Class cls) {
+    public ExceptionTestSaveSecurityManager(String description, Class<?> cls) {
         super();
         if (cls != null) {
             StringBuilder sb = new StringBuilder();
@@ -51,7 +51,7 @@ public ExceptionTestSaveSecurityManager(String description, Class cls) {
         this.cls = cls;
     }
 
-    protected Class getTestClass() {
+    protected Class<?> getTestClass() {
         return cls;
     }
 
diff --git a/foundation/eclipselink.core.test/src/it/java/org/eclipse/persistence/testing/tests/security/SecurityOnInitializingAttributeMethodTest.java b/foundation/eclipselink.core.test/src/it/java/org/eclipse/persistence/testing/tests/security/SecurityOnInitializingAttributeMethodTest.java
index 5ca3e3e..a74f736 100644
--- a/foundation/eclipselink.core.test/src/it/java/org/eclipse/persistence/testing/tests/security/SecurityOnInitializingAttributeMethodTest.java
+++ b/foundation/eclipselink.core.test/src/it/java/org/eclipse/persistence/testing/tests/security/SecurityOnInitializingAttributeMethodTest.java
@@ -29,7 +29,7 @@ public class SecurityOnInitializingAttributeMethodTest extends ExceptionTestSave
 
     private TransformationMapping mapping;
 
-    public SecurityOnInitializingAttributeMethodTest(Class c) {
+    public SecurityOnInitializingAttributeMethodTest(Class<?> c) {
         super("This tests security on initializing attribute method (TL-ERROR 84)", c);
     }
 
diff --git a/foundation/eclipselink.core.test/src/it/java/org/eclipse/persistence/testing/tests/security/SecurityWhileInitializingClassExtractionMethodTest.java b/foundation/eclipselink.core.test/src/it/java/org/eclipse/persistence/testing/tests/security/SecurityWhileInitializingClassExtractionMethodTest.java
index 8463651..d73d9b1 100644
--- a/foundation/eclipselink.core.test/src/it/java/org/eclipse/persistence/testing/tests/security/SecurityWhileInitializingClassExtractionMethodTest.java
+++ b/foundation/eclipselink.core.test/src/it/java/org/eclipse/persistence/testing/tests/security/SecurityWhileInitializingClassExtractionMethodTest.java
@@ -28,7 +28,7 @@ public class SecurityWhileInitializingClassExtractionMethodTest extends Exceptio
 
     private InheritancePolicy policy;
 
-    public SecurityWhileInitializingClassExtractionMethodTest(Class c) {
+    public SecurityWhileInitializingClassExtractionMethodTest(Class<?> c) {
         super("This tests Security While Initializing Class Extraction Method (TL-ERROR 88)", c);
     }
 
diff --git a/foundation/eclipselink.core.test/src/it/java/org/eclipse/persistence/testing/tests/security/SecurityWhileInitializingCopyPolicyTest.java b/foundation/eclipselink.core.test/src/it/java/org/eclipse/persistence/testing/tests/security/SecurityWhileInitializingCopyPolicyTest.java
index dae4a5b..f1a4867 100644
--- a/foundation/eclipselink.core.test/src/it/java/org/eclipse/persistence/testing/tests/security/SecurityWhileInitializingCopyPolicyTest.java
+++ b/foundation/eclipselink.core.test/src/it/java/org/eclipse/persistence/testing/tests/security/SecurityWhileInitializingCopyPolicyTest.java
@@ -26,7 +26,7 @@ public class SecurityWhileInitializingCopyPolicyTest extends ExceptionTestSaveSe
 
     private CloneCopyPolicy policy;
 
-    public SecurityWhileInitializingCopyPolicyTest(Class c) {
+    public SecurityWhileInitializingCopyPolicyTest(Class<?> c) {
         super("This tests Security While Initializing Copy Policy (TL-ERROR 89)", c);
     }
 
diff --git a/foundation/eclipselink.core.test/src/it/java/org/eclipse/persistence/testing/tests/transparentindirection/NullDelegateInValueHolderTest.java b/foundation/eclipselink.core.test/src/it/java/org/eclipse/persistence/testing/tests/transparentindirection/NullDelegateInValueHolderTest.java
index a117cb6..47f57f9 100644
--- a/foundation/eclipselink.core.test/src/it/java/org/eclipse/persistence/testing/tests/transparentindirection/NullDelegateInValueHolderTest.java
+++ b/foundation/eclipselink.core.test/src/it/java/org/eclipse/persistence/testing/tests/transparentindirection/NullDelegateInValueHolderTest.java
@@ -31,10 +31,10 @@
  */
 public class NullDelegateInValueHolderTest extends TestCase {
 
-    protected Class indirectCollectionClass;
+    protected Class<?> indirectCollectionClass;
     protected AbstractOrder testOrder;
 
-    public NullDelegateInValueHolderTest(Class indirectCollectionClass) {
+    public NullDelegateInValueHolderTest(Class<?> indirectCollectionClass) {
         super();
         this.indirectCollectionClass = indirectCollectionClass;
         setDescription("NullDelegateInValueHolderTest: " + Helper.getShortClassName(this.indirectCollectionClass));
diff --git a/foundation/eclipselink.core.test/src/it/java/org/eclipse/persistence/testing/tests/transparentindirection/ZTestSuite.java b/foundation/eclipselink.core.test/src/it/java/org/eclipse/persistence/testing/tests/transparentindirection/ZTestSuite.java
index 96eb9cf..aec3982 100644
--- a/foundation/eclipselink.core.test/src/it/java/org/eclipse/persistence/testing/tests/transparentindirection/ZTestSuite.java
+++ b/foundation/eclipselink.core.test/src/it/java/org/eclipse/persistence/testing/tests/transparentindirection/ZTestSuite.java
@@ -26,7 +26,7 @@ public ZTestSuite() {
         this("Unnamed Test Suite");
     }
 
-    public ZTestSuite(Class testCaseClass) {
+    public ZTestSuite(Class<?> testCaseClass) {
         this(testCaseClass.getName(), testCaseClass);
     }
 
@@ -35,12 +35,12 @@ public ZTestSuite(String name) {
         this.setName(name);
     }
 
-    public ZTestSuite(String name, Class testCaseClass) {
+    public ZTestSuite(String name, Class<?> testCaseClass) {
         this(name);
         this.add(testCaseClass);
     }
 
-    public void add(Class testCaseClass) {
+    public void add(Class<?> testCaseClass) {
         Constructor ctor = this.singleArgumentConstructorFor(testCaseClass);
         Object[] arguments = new Object[1];
 
@@ -64,7 +64,7 @@ public void add(Class testCaseClass) {
      * specified class that begin with "test", removing any duplicates.
      * @param testClass a subclass of <code>TestCase</code>
      */
-    public Enumeration methodNamesStartingWithTestFor(Class testClass) {
+    public Enumeration methodNamesStartingWithTestFor(Class<?> testClass) {
         Method[] methods = testClass.getMethods();
         Vector names = new Vector(methods.length);
         for (int i = 0; i < methods.length; i++) {
@@ -85,7 +85,7 @@ public Enumeration methodNamesStartingWithTestFor(Class testClass) {
      * Return the required constructor for the specified class.
      * @param testCaseClass a subclass of <code>TestCase</code>
      */
-    private Constructor singleArgumentConstructorFor(Class testCaseClass) {
+    private Constructor singleArgumentConstructorFor(Class<?> testCaseClass) {
         try {
             return testCaseClass.getConstructor(String.class);
         } catch (NoSuchMethodException e) {
diff --git a/foundation/eclipselink.core.test/src/it/java/org/eclipse/persistence/testing/tests/validation/ClassWithoutConstructor.java b/foundation/eclipselink.core.test/src/it/java/org/eclipse/persistence/testing/tests/validation/ClassWithoutConstructor.java
index bfb24c9..29824d1 100644
--- a/foundation/eclipselink.core.test/src/it/java/org/eclipse/persistence/testing/tests/validation/ClassWithoutConstructor.java
+++ b/foundation/eclipselink.core.test/src/it/java/org/eclipse/persistence/testing/tests/validation/ClassWithoutConstructor.java
@@ -28,7 +28,7 @@ public class ClassWithoutConstructor implements IndirectContainer {
     //used for TL-172 testing (work in progress)
 
     private ClassWithoutConstructor() throws java.lang.NoSuchMethodException {
-        Class[] parmClasses = { Integer.class };
+        Class<?>[] parmClasses = { Integer.class };
         ClassWithoutConstructor.class.getDeclaredMethod("invalidMethod", parmClasses);
     }
 
diff --git a/foundation/eclipselink.core.test/src/it/java/org/eclipse/persistence/testing/tests/validation/ConstructingDescriptorExceptionTests.java b/foundation/eclipselink.core.test/src/it/java/org/eclipse/persistence/testing/tests/validation/ConstructingDescriptorExceptionTests.java
index 5f16c84..ce84bfb 100644
--- a/foundation/eclipselink.core.test/src/it/java/org/eclipse/persistence/testing/tests/validation/ConstructingDescriptorExceptionTests.java
+++ b/foundation/eclipselink.core.test/src/it/java/org/eclipse/persistence/testing/tests/validation/ConstructingDescriptorExceptionTests.java
@@ -59,7 +59,7 @@ public void test() throws NoSuchMethodException {
             IndirectListContainerPolicy policy = new IndirectListContainerPolicy();
             Object object = new Object();
             DatabaseRecord row = new DatabaseRecord();
-            Class[] parmClasses = { };
+            Class<?>[] parmClasses = { };
             Method method = javaClass.getDeclaredMethod("test", parmClasses);
 
             DescriptorException descriptorException;
diff --git a/foundation/eclipselink.core.test/src/it/java/org/eclipse/persistence/testing/tests/validation/GetClassDescriptorWithNullTest.java b/foundation/eclipselink.core.test/src/it/java/org/eclipse/persistence/testing/tests/validation/GetClassDescriptorWithNullTest.java
index f569ad2..8154124 100644
--- a/foundation/eclipselink.core.test/src/it/java/org/eclipse/persistence/testing/tests/validation/GetClassDescriptorWithNullTest.java
+++ b/foundation/eclipselink.core.test/src/it/java/org/eclipse/persistence/testing/tests/validation/GetClassDescriptorWithNullTest.java
@@ -45,7 +45,7 @@ public void test() {
         Project aProject = aSession.getProject();
 
         // important to declare types as Object / Class to invoke correct methods on Session
-        Class aClass = null;
+        Class<?> aClass = null;
         Object anObject = null;
 
         /* when null is passed to Project / Session getClassDescriptor(Object) /
diff --git a/foundation/eclipselink.core.test/src/it/java/org/eclipse/persistence/testing/tests/validation/IllegalArgumentWhileInstantiatingMethodBasedProxyTest.java b/foundation/eclipselink.core.test/src/it/java/org/eclipse/persistence/testing/tests/validation/IllegalArgumentWhileInstantiatingMethodBasedProxyTest.java
index 22acd7a..719cd5e 100644
--- a/foundation/eclipselink.core.test/src/it/java/org/eclipse/persistence/testing/tests/validation/IllegalArgumentWhileInstantiatingMethodBasedProxyTest.java
+++ b/foundation/eclipselink.core.test/src/it/java/org/eclipse/persistence/testing/tests/validation/IllegalArgumentWhileInstantiatingMethodBasedProxyTest.java
@@ -46,7 +46,7 @@ protected void setup() throws NoSuchMethodException {
         descriptor.setJavaClass(IllegalArgumentWhileInstantiatingMethodBasedProxyTest.class);
         descriptor.addTableName("Dummy_Table");
         row = new DatabaseRecord();
-        Class[] parmClasses = { DatabaseRecord.class };
+        Class<?>[] parmClasses = { DatabaseRecord.class };
         theTransformer = new MethodBasedAttributeTransformer();
         theTransformer.setAttributeTransformationMethod(IllegalArgumentWhileInstantiatingMethodBasedProxyTest.class.getDeclaredMethod("invalidMethod", parmClasses));
         //   theReceiver = new IllegalArgumentWhileInstantiatingMethodBasedProxyTest(); //not correct error
diff --git a/foundation/eclipselink.core.test/src/it/java/org/eclipse/persistence/testing/tests/validation/InvalidAttributeTypeForProxyIndirectionTest.java b/foundation/eclipselink.core.test/src/it/java/org/eclipse/persistence/testing/tests/validation/InvalidAttributeTypeForProxyIndirectionTest.java
index fcc8e9e..9b163d7 100644
--- a/foundation/eclipselink.core.test/src/it/java/org/eclipse/persistence/testing/tests/validation/InvalidAttributeTypeForProxyIndirectionTest.java
+++ b/foundation/eclipselink.core.test/src/it/java/org/eclipse/persistence/testing/tests/validation/InvalidAttributeTypeForProxyIndirectionTest.java
@@ -34,7 +34,7 @@ public InvalidAttributeTypeForProxyIndirectionTest() {
 
     IntegrityChecker orgIntegrityChecker;
     Class<Employee> attributeType = org.eclipse.persistence.testing.models.employee.domain.Employee.class;
-    Class[] targetInterfaces = { InvalidAttributeTypeForProxyIndirectionTest.class };
+    Class<?>[] targetInterfaces = { InvalidAttributeTypeForProxyIndirectionTest.class };
     OneToManyMapping mapping = new OneToManyMapping();
 
     @Override
diff --git a/foundation/eclipselink.core.test/src/it/java/org/eclipse/persistence/testing/tests/validation/InvalidGetMethodReturnTypeForProxyIndirectionTest.java b/foundation/eclipselink.core.test/src/it/java/org/eclipse/persistence/testing/tests/validation/InvalidGetMethodReturnTypeForProxyIndirectionTest.java
index 9c5504b..def14f3 100644
--- a/foundation/eclipselink.core.test/src/it/java/org/eclipse/persistence/testing/tests/validation/InvalidGetMethodReturnTypeForProxyIndirectionTest.java
+++ b/foundation/eclipselink.core.test/src/it/java/org/eclipse/persistence/testing/tests/validation/InvalidGetMethodReturnTypeForProxyIndirectionTest.java
@@ -34,7 +34,7 @@ public InvalidGetMethodReturnTypeForProxyIndirectionTest() {
 
     IntegrityChecker orgIntegrityChecker;
     Class<Employee> attributeType = org.eclipse.persistence.testing.models.employee.domain.Employee.class;
-    Class[] targetInterfaces = { InvalidAttributeTypeForProxyIndirectionTest.class };
+    Class<?>[] targetInterfaces = { InvalidAttributeTypeForProxyIndirectionTest.class };
     OneToManyMapping mapping = new OneToManyMapping();
 
     @Override
diff --git a/foundation/eclipselink.core.test/src/it/java/org/eclipse/persistence/testing/tests/validation/InvalidIdentityMapTest.java b/foundation/eclipselink.core.test/src/it/java/org/eclipse/persistence/testing/tests/validation/InvalidIdentityMapTest.java
index bb6761c..2e59b33 100644
--- a/foundation/eclipselink.core.test/src/it/java/org/eclipse/persistence/testing/tests/validation/InvalidIdentityMapTest.java
+++ b/foundation/eclipselink.core.test/src/it/java/org/eclipse/persistence/testing/tests/validation/InvalidIdentityMapTest.java
@@ -18,6 +18,7 @@
 import org.eclipse.persistence.exceptions.DescriptorException;
 import org.eclipse.persistence.exceptions.IntegrityChecker;
 import org.eclipse.persistence.exceptions.EclipseLinkException;
+import org.eclipse.persistence.internal.identitymaps.IdentityMap;
 import org.eclipse.persistence.internal.identitymaps.IdentityMapManager;
 import org.eclipse.persistence.internal.sessions.AbstractSession;
 import org.eclipse.persistence.sessions.DatabaseSession;
@@ -29,7 +30,7 @@
 public class InvalidIdentityMapTest extends ExceptionTest {
 
     ClassDescriptor descriptor;
-    Class orgIdentityMapClass;
+    Class<? extends IdentityMap> orgIdentityMapClass;
     IntegrityChecker orgIntegrityChecker;
 
     public InvalidIdentityMapTest() {
diff --git a/foundation/eclipselink.core.test/src/it/java/org/eclipse/persistence/testing/tests/validation/InvalidSetMethodParameterTypeForProxyIndirectionTest.java b/foundation/eclipselink.core.test/src/it/java/org/eclipse/persistence/testing/tests/validation/InvalidSetMethodParameterTypeForProxyIndirectionTest.java
index 0485e20..88ce419 100644
--- a/foundation/eclipselink.core.test/src/it/java/org/eclipse/persistence/testing/tests/validation/InvalidSetMethodParameterTypeForProxyIndirectionTest.java
+++ b/foundation/eclipselink.core.test/src/it/java/org/eclipse/persistence/testing/tests/validation/InvalidSetMethodParameterTypeForProxyIndirectionTest.java
@@ -33,7 +33,7 @@ public InvalidSetMethodParameterTypeForProxyIndirectionTest() {
 
     IntegrityChecker orgIntegrityChecker;
     Class<Employee> attributeType = org.eclipse.persistence.testing.models.employee.domain.Employee.class;
-    Class[] targetInterfaces = { InvalidAttributeTypeForProxyIndirectionTest.class };
+    Class<?>[] targetInterfaces = { InvalidAttributeTypeForProxyIndirectionTest.class };
     OneToManyMapping mapping = new OneToManyMapping();
 
     @Override
diff --git a/foundation/eclipselink.core.test/src/it/java/org/eclipse/persistence/testing/tests/validation/TargetInvocationWhileInstantiatingMethodBasedProxyTest.java b/foundation/eclipselink.core.test/src/it/java/org/eclipse/persistence/testing/tests/validation/TargetInvocationWhileInstantiatingMethodBasedProxyTest.java
index 773a588..4402cc5 100644
--- a/foundation/eclipselink.core.test/src/it/java/org/eclipse/persistence/testing/tests/validation/TargetInvocationWhileInstantiatingMethodBasedProxyTest.java
+++ b/foundation/eclipselink.core.test/src/it/java/org/eclipse/persistence/testing/tests/validation/TargetInvocationWhileInstantiatingMethodBasedProxyTest.java
@@ -48,7 +48,7 @@ protected void setup() throws NoSuchMethodException {
         descriptor.setJavaClass(TargetInvocationWhileInstantiatingMethodBasedProxyTest.class);
         descriptor.addTableName("Dummy_Table");
         row = new DatabaseRecord();
-        Class[] parmClasses = { DatabaseRecord.class };
+        Class<?>[] parmClasses = { DatabaseRecord.class };
         theMethod = TargetInvocationWhileInstantiatingMethodBasedProxyTest.class.getDeclaredMethod("invalidMethod", parmClasses);
         theTransformer = new MethodBasedAttributeTransformer();
         theTransformer.setAttributeTransformationMethod(theMethod);
diff --git a/foundation/eclipselink.core.test/src/it/java/org/eclipse/persistence/testing/tests/validation/TargetInvocationWhileInvokingRowExtractionMethodTest.java b/foundation/eclipselink.core.test/src/it/java/org/eclipse/persistence/testing/tests/validation/TargetInvocationWhileInvokingRowExtractionMethodTest.java
index ba5f20a..5e6f3b2 100644
--- a/foundation/eclipselink.core.test/src/it/java/org/eclipse/persistence/testing/tests/validation/TargetInvocationWhileInvokingRowExtractionMethodTest.java
+++ b/foundation/eclipselink.core.test/src/it/java/org/eclipse/persistence/testing/tests/validation/TargetInvocationWhileInvokingRowExtractionMethodTest.java
@@ -48,7 +48,7 @@ protected void setup() throws NoSuchMethodException {
         policy.preInitialize((AbstractSession)getSession());
 
         row = new DatabaseRecord();
-        Class[] parmClasses = { DataRecord.class };
+        Class<?>[] parmClasses = { DataRecord.class };
 
 
         expectedException = DescriptorException.targetInvocationWhileInvokingRowExtractionMethod(row, TargetInvocationWhileInvokingRowExtractionMethodTest.class.getDeclaredMethod("invalidMethod", parmClasses), descriptor, new Exception());
diff --git a/foundation/eclipselink.core.test/src/it/java/org/eclipse/persistence/testing/tests/workbenchintegration/ProjectXMLSortedCollectionMapping.java b/foundation/eclipselink.core.test/src/it/java/org/eclipse/persistence/testing/tests/workbenchintegration/ProjectXMLSortedCollectionMapping.java
index 9f417d1..8590215 100644
--- a/foundation/eclipselink.core.test/src/it/java/org/eclipse/persistence/testing/tests/workbenchintegration/ProjectXMLSortedCollectionMapping.java
+++ b/foundation/eclipselink.core.test/src/it/java/org/eclipse/persistence/testing/tests/workbenchintegration/ProjectXMLSortedCollectionMapping.java
@@ -91,8 +91,8 @@ protected void verify() {
         CollectionMapping collectionMapping = (CollectionMapping)readBackMapping;
         ContainerPolicy containerPolciy = collectionMapping.getContainerPolicy();
         if(containerPolciy.isCollectionPolicy()){
-            Class conatinerClass = containerPolciy.getContainerClass();
-            Class comparatorClass = ((SortedCollectionContainerPolicy)containerPolciy).getComparatorClass();
+            Class<?> conatinerClass = containerPolciy.getContainerClass();
+            Class<?> comparatorClass = ((SortedCollectionContainerPolicy)containerPolciy).getComparatorClass();
             if(!conatinerClass.equals(TreeSet.class) ){
                 throw new TestErrorException("The container class read was not equal to the conatiner class set originally, which expected as the java.util.TreeSet class. ");
             }
@@ -104,7 +104,7 @@ protected void verify() {
         }
     }
 
-    public Class getComparator(){
+    public Class<?> getComparator(){
         return ProjectXMLSortedCollectionMapping.ProjectComparator.class;
     }
 
diff --git a/foundation/eclipselink.core.test/src/it/java/org/eclipse/persistence/testing/tests/workbenchintegration/ProjectXMLSortedCollectionMappingWithInvalidComparatorTest.java b/foundation/eclipselink.core.test/src/it/java/org/eclipse/persistence/testing/tests/workbenchintegration/ProjectXMLSortedCollectionMappingWithInvalidComparatorTest.java
index 23776aa..4b8c5e0 100644
--- a/foundation/eclipselink.core.test/src/it/java/org/eclipse/persistence/testing/tests/workbenchintegration/ProjectXMLSortedCollectionMappingWithInvalidComparatorTest.java
+++ b/foundation/eclipselink.core.test/src/it/java/org/eclipse/persistence/testing/tests/workbenchintegration/ProjectXMLSortedCollectionMappingWithInvalidComparatorTest.java
@@ -41,7 +41,7 @@ protected void verify() {
     }
 
     @Override
-    public Class getComparator(){
+    public Class<?> getComparator(){
         return ProjectXMLSortedCollectionMappingWithInvalidComparatorTest.ProjectComparator.class;
     }
 
diff --git a/foundation/eclipselink.core.test/src/it/java/org/eclipse/persistence/testing/tests/workbenchintegration/TypeConversionConverterDataClassIsArrayTest.java b/foundation/eclipselink.core.test/src/it/java/org/eclipse/persistence/testing/tests/workbenchintegration/TypeConversionConverterDataClassIsArrayTest.java
index 8fa8189..5a71c63 100644
--- a/foundation/eclipselink.core.test/src/it/java/org/eclipse/persistence/testing/tests/workbenchintegration/TypeConversionConverterDataClassIsArrayTest.java
+++ b/foundation/eclipselink.core.test/src/it/java/org/eclipse/persistence/testing/tests/workbenchintegration/TypeConversionConverterDataClassIsArrayTest.java
@@ -29,9 +29,9 @@ public class TypeConversionConverterDataClassIsArrayTest extends ProjectClassGen
 
     protected ClassDescriptor descriptor;
     protected DirectToFieldMapping mapping;
-    protected Class classType;
+    protected Class<?> classType;
 
-    public TypeConversionConverterDataClassIsArrayTest(Class classType) {
+    public TypeConversionConverterDataClassIsArrayTest(Class<?> classType) {
         super(new org.eclipse.persistence.testing.models.employee.relational.EmployeeProject());
         setDescription("Test addTypeConversionConverterLines method -> setDataClassName() generates legal array code");
         setName(getName() + "[" + classType.getName() + "]");
diff --git a/foundation/eclipselink.core.test/src/it/java/org/eclipse/persistence/testing/tests/workbenchintegration/TypeConversionConverterObjectClassIsArrayTest.java b/foundation/eclipselink.core.test/src/it/java/org/eclipse/persistence/testing/tests/workbenchintegration/TypeConversionConverterObjectClassIsArrayTest.java
index b713018..d3b9528 100644
--- a/foundation/eclipselink.core.test/src/it/java/org/eclipse/persistence/testing/tests/workbenchintegration/TypeConversionConverterObjectClassIsArrayTest.java
+++ b/foundation/eclipselink.core.test/src/it/java/org/eclipse/persistence/testing/tests/workbenchintegration/TypeConversionConverterObjectClassIsArrayTest.java
@@ -29,9 +29,9 @@ public class TypeConversionConverterObjectClassIsArrayTest extends ProjectClassG
 
     protected ClassDescriptor descriptor;
     protected DirectToFieldMapping mapping;
-    protected Class classType;
+    protected Class<?> classType;
 
-    public TypeConversionConverterObjectClassIsArrayTest(Class classType) {
+    public TypeConversionConverterObjectClassIsArrayTest(Class<?> classType) {
         super(new org.eclipse.persistence.testing.models.employee.relational.EmployeeProject());
         setDescription("Test addTypeConversionConverterLines method -> setObjectClassName() generates legal array code");
         setName(getName() + "[" + classType.getName() + "]");
diff --git a/foundation/eclipselink.core.test/src/test/java/org/eclipse/persistence/testing/tests/junit/helper/JavaVersionTest.java b/foundation/eclipselink.core.test/src/test/java/org/eclipse/persistence/testing/tests/junit/helper/JavaVersionTest.java
index dd86863..7d9312d 100644
--- a/foundation/eclipselink.core.test/src/test/java/org/eclipse/persistence/testing/tests/junit/helper/JavaVersionTest.java
+++ b/foundation/eclipselink.core.test/src/test/java/org/eclipse/persistence/testing/tests/junit/helper/JavaVersionTest.java
@@ -70,7 +70,7 @@ public void testPropertyVersion() {
             final String versionString = ReflectionHelper.<String>invokeStaticMethod(
                     "vmVersionString", JavaVersion.class, null, String.class);
             final JavaVersion version =  ReflectionHelper.<JavaVersion>invokeStaticMethod(
-                    "propertyVersionParser", JavaVersion.class, new Class[] {String.class}, JavaVersion.class, versionString);
+                    "propertyVersionParser", JavaVersion.class, new Class<?>[] {String.class}, JavaVersion.class, versionString);
         } catch (ReflectiveOperationException e) {
             fail("Exception: " + e.getMessage());
         }
@@ -90,7 +90,7 @@ public void testPropertyVersionParser() {
             final String versionString = JavaSEPlatform.versionString(major, minor);
             try {
                 final JavaVersion javaVersion =  ReflectionHelper.<JavaVersion>invokeStaticMethod(
-                        "propertyVersionParser", JavaVersion.class, new Class[] {String.class}, JavaVersion.class, versionString);
+                        "propertyVersionParser", JavaVersion.class, new Class<?>[] {String.class}, JavaVersion.class, versionString);
                 assertNotNull("JavaVersion instance must be returned for valid platform"
                         +" version number ["+ major +","+ minor +"]", javaVersion);
                 assertTrue("Returned JavaVersion instance numbers do not match provided"
@@ -107,7 +107,7 @@ public void testPropertyVersionParser() {
             final String versionString = JavaSEPlatform.versionString(major, minor);
             try {
                 final JavaVersion javaVersion =  ReflectionHelper.<JavaVersion>invokeStaticMethod(
-                        "propertyVersionParser", JavaVersion.class, new Class[] {String.class}, JavaVersion.class, versionString);
+                        "propertyVersionParser", JavaVersion.class, new Class<?>[] {String.class}, JavaVersion.class, versionString);
                 assertNotNull("JavaVersion instance must be returned for invalid platform"
                         +" version number ["+ major +","+ minor +"]", javaVersion);
                 assertTrue("Returned JavaVersion instance numbers do not match provided"
diff --git a/foundation/eclipselink.core.test/src/test/java/org/eclipse/persistence/testing/tests/junit/localization/LocalizationResourcesTest.java b/foundation/eclipselink.core.test/src/test/java/org/eclipse/persistence/testing/tests/junit/localization/LocalizationResourcesTest.java
index 89eb97b..648e9e4 100644
--- a/foundation/eclipselink.core.test/src/test/java/org/eclipse/persistence/testing/tests/junit/localization/LocalizationResourcesTest.java
+++ b/foundation/eclipselink.core.test/src/test/java/org/eclipse/persistence/testing/tests/junit/localization/LocalizationResourcesTest.java
@@ -70,15 +70,15 @@ private static String buildMessageWithList(final String message, final List<Stri
      * Test {@code getContents()} method of specified resource bundle class for duplicate keys.
      * @param c Logging resource bundle class being tested.
      */
-    private static void verifyBundle(final Class c) {
+    private static void verifyBundle(final Class<?> c) {
         final List<String> nonStringKeys = new LinkedList<>();
         final List<String> duplicateKeys = new LinkedList<>();
         final String bundleName = c.getSimpleName();
         final Set<String> keys = new HashSet<>();
         Object[][] bundle;
         try {
-            Object instance = ReflectionHelper.getInstance(c, new Class[] {});
-            bundle = (Object[][])ReflectionHelper.invokeMethod("getContents", instance, new Class[] {}, new Object[] {});
+            Object instance = ReflectionHelper.getInstance(c, new Class<?>[] {});
+            bundle = (Object[][])ReflectionHelper.invokeMethod("getContents", instance, new Class<?>[] {}, new Object[] {});
         } catch (ReflectiveOperationException | SecurityException e) {
             Assert.fail("Could not access " + bundleName + "#getContents()");
             bundle = null;
diff --git a/foundation/eclipselink.core.test/src/test/java/org/eclipse/persistence/testing/tests/junit/platform/server/wls/WebLogic_12_PlatformTest.java b/foundation/eclipselink.core.test/src/test/java/org/eclipse/persistence/testing/tests/junit/platform/server/wls/WebLogic_12_PlatformTest.java
index baefacc..b4c9312 100644
--- a/foundation/eclipselink.core.test/src/test/java/org/eclipse/persistence/testing/tests/junit/platform/server/wls/WebLogic_12_PlatformTest.java
+++ b/foundation/eclipselink.core.test/src/test/java/org/eclipse/persistence/testing/tests/junit/platform/server/wls/WebLogic_12_PlatformTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2015, 2020 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2015, 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,7 @@ public void testIsGlobalRuntime() {
     @Test
     public void testContextHelper() {
         Assume.assumeFalse("Java version is 12 above. Test will be skipped.", JavaSEPlatform.CURRENT.getMajor() >= 12);
-        Class contextHelperClass = null;
+        Class<?> contextHelperClass = null;
         for (Class<?> declaredClass : WebLogic_12_Platform.class.getDeclaredClasses()) {
             if ("org.eclipse.persistence.platform.server.wls.WebLogic_12_Platform$ContextHelper".equals(declaredClass.getName())) {
                 contextHelperClass = declaredClass;
diff --git a/foundation/eclipselink.core.test/src/test/java/org/eclipse/persistence/testing/tests/junit/security/JCEEncryptionTest.java b/foundation/eclipselink.core.test/src/test/java/org/eclipse/persistence/testing/tests/junit/security/JCEEncryptionTest.java
index a916f28..862b77a 100644
--- a/foundation/eclipselink.core.test/src/test/java/org/eclipse/persistence/testing/tests/junit/security/JCEEncryptionTest.java
+++ b/foundation/eclipselink.core.test/src/test/java/org/eclipse/persistence/testing/tests/junit/security/JCEEncryptionTest.java
@@ -46,7 +46,7 @@ public void test() {
     private Securable convertToEncryptionObject(String encryptionClassName) {
         try {
             ConversionManager cm = ConversionManager.getDefaultManager();
-            Class securableClass = cm.convertObject(encryptionClassName, Class.class);
+            Class<?> securableClass = cm.convertObject(encryptionClassName, Class.class);
             return (Securable)securableClass.getConstructor().newInstance();
         } catch (Throwable e) {
             return null;
diff --git a/foundation/eclipselink.core.test/src/test/java/org/eclipse/persistence/testing/tests/junit/sessionsxml/SessionManagerTest.java b/foundation/eclipselink.core.test/src/test/java/org/eclipse/persistence/testing/tests/junit/sessionsxml/SessionManagerTest.java
index 721cc1c..59f3317 100644
--- a/foundation/eclipselink.core.test/src/test/java/org/eclipse/persistence/testing/tests/junit/sessionsxml/SessionManagerTest.java
+++ b/foundation/eclipselink.core.test/src/test/java/org/eclipse/persistence/testing/tests/junit/sessionsxml/SessionManagerTest.java
@@ -211,7 +211,7 @@ private void reinitManager(boolean addDetector, boolean validDetector) {
         }
     }
 
-    private Object getField(Class c, String field, Object o) {
+    private Object getField(Class<?> c, String field, Object o) {
         Field f = null;
         try {
             f = c.getDeclaredField(field);
@@ -226,7 +226,7 @@ private Object getField(Class c, String field, Object o) {
         }
     }
 
-    private void setStaticField(Class c, String field, Object value) {
+    private void setStaticField(Class<?> c, String field, Object value) {
         Field f = null;
         try {
             f = c.getDeclaredField(field);
diff --git a/foundation/org.eclipse.persistence.corba/src/it/java/org/eclipse/persistence/testing/tests/remote/rmi/IIOP/RMIServerManagerController.java b/foundation/org.eclipse.persistence.corba/src/it/java/org/eclipse/persistence/testing/tests/remote/rmi/IIOP/RMIServerManagerController.java
index 3d376a6..0692d9d 100644
--- a/foundation/org.eclipse.persistence.corba/src/it/java/org/eclipse/persistence/testing/tests/remote/rmi/IIOP/RMIServerManagerController.java
+++ b/foundation/org.eclipse.persistence.corba/src/it/java/org/eclipse/persistence/testing/tests/remote/rmi/IIOP/RMIServerManagerController.java
@@ -55,7 +55,7 @@ public RMIRemoteSessionController createRemoteSessionController() {
         } else {
             try {
                 Class<?> cls = Class.forName(controllerClassName);
-                Class[] parameterTypes = { org.eclipse.persistence.sessions.Session.class };
+                Class<?>[] parameterTypes = { org.eclipse.persistence.sessions.Session.class };
                 Constructor<?> constructor = cls.getConstructor(parameterTypes);
                 Object[] params = { getSession() };
                 controller = (RMIRemoteSessionController)constructor.newInstance(params);
diff --git a/foundation/org.eclipse.persistence.corba/src/it/java/org/eclipse/persistence/testing/tests/remote/suncorba/CORBAServerManagerController.java b/foundation/org.eclipse.persistence.corba/src/it/java/org/eclipse/persistence/testing/tests/remote/suncorba/CORBAServerManagerController.java
index 6808265..002b235 100644
--- a/foundation/org.eclipse.persistence.corba/src/it/java/org/eclipse/persistence/testing/tests/remote/suncorba/CORBAServerManagerController.java
+++ b/foundation/org.eclipse.persistence.corba/src/it/java/org/eclipse/persistence/testing/tests/remote/suncorba/CORBAServerManagerController.java
@@ -48,7 +48,7 @@ public CORBARemoteSessionController createRemoteSessionController() {
         } else {
             try {
                 Class<?> cls = Class.forName(controllerClassName);
-                Class[] parameterTypes = { org.eclipse.persistence.sessions.Session.class };
+                Class<?>[] parameterTypes = { org.eclipse.persistence.sessions.Session.class };
                 Constructor<?> constructor = cls.getConstructor(parameterTypes);
                 java.lang.Object[] params = { getSession() };
                 controller = (CORBARemoteSessionController)constructor.newInstance(params);
diff --git a/foundation/org.eclipse.persistence.corba/src/it/java/org/eclipse/persistence/testing/tests/security/corba/SecurityWhileConvertingToMethodTest.java b/foundation/org.eclipse.persistence.corba/src/it/java/org/eclipse/persistence/testing/tests/security/corba/SecurityWhileConvertingToMethodTest.java
index a338122..607ebf0 100644
--- a/foundation/org.eclipse.persistence.corba/src/it/java/org/eclipse/persistence/testing/tests/security/corba/SecurityWhileConvertingToMethodTest.java
+++ b/foundation/org.eclipse.persistence.corba/src/it/java/org/eclipse/persistence/testing/tests/security/corba/SecurityWhileConvertingToMethodTest.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
@@ -31,7 +31,7 @@ public class SecurityWhileConvertingToMethodTest extends ExceptionTestSaveSecuri
 
     private TransformationMapping mapping;
 
-    public SecurityWhileConvertingToMethodTest(Class c) {
+    public SecurityWhileConvertingToMethodTest(Class<?> c) {
         super("This tests security while converting to method (TL-ERROR 85)", c);
     }
 
diff --git a/foundation/org.eclipse.persistence.core.test.framework/src/main/java/org/eclipse/persistence/testing/framework/DeleteAllQueryTestHelper.java b/foundation/org.eclipse.persistence.core.test.framework/src/main/java/org/eclipse/persistence/testing/framework/DeleteAllQueryTestHelper.java
index f15f439..c859705 100644
--- a/foundation/org.eclipse.persistence.core.test.framework/src/main/java/org/eclipse/persistence/testing/framework/DeleteAllQueryTestHelper.java
+++ b/foundation/org.eclipse.persistence.core.test.framework/src/main/java/org/eclipse/persistence/testing/framework/DeleteAllQueryTestHelper.java
@@ -28,11 +28,11 @@
 
 public class DeleteAllQueryTestHelper {
 
-    public static String execute(Session mainSession, Class referenceClass, Expression selectionExpression) {
+    public static String execute(Session mainSession, Class<?> referenceClass, Expression selectionExpression) {
         return execute(mainSession, referenceClass, selectionExpression, true);
     }
 
-    public static String execute(Session mainSession, Class referenceClass, Expression selectionExpression, boolean shouldDeferExecutionInUOW) {
+    public static String execute(Session mainSession, Class<?> referenceClass, Expression selectionExpression, boolean shouldDeferExecutionInUOW) {
         return execute(mainSession, referenceClass, selectionExpression, shouldDeferExecutionInUOW, true);
     }
 
@@ -53,8 +53,8 @@ public static String execute(Session mainSession, Class referenceClass, Expressi
     //  the results are saved and after compared with DeleteAllQuery results:
     //    both inCache and inDb comparison performed;
     //    both deleted and remained objects should be the same;
-    public static String execute(Session mainSession, Class referenceClass, Expression selectionExpression, boolean shouldDeferExecutionInUOW, boolean handleChildren) {
-        Class rootClass = referenceClass;
+    public static String execute(Session mainSession, Class<?> referenceClass, Expression selectionExpression, boolean shouldDeferExecutionInUOW, boolean handleChildren) {
+        Class<?> rootClass = referenceClass;
         ClassDescriptor descriptor = mainSession.getClassDescriptor(referenceClass);
         if(descriptor.hasInheritance()) {
             ClassDescriptor parentDescriptor = descriptor;
@@ -72,8 +72,8 @@ public static String execute(Session mainSession, Class referenceClass, Expressi
         }
     }
 
-    protected static String execute(Session mainSession, Class referenceClass, Expression selectionExpression, boolean shouldDeferExecutionInUOW, boolean handleChildren,
-                                    Class rootClass) {
+    protected static String execute(Session mainSession, Class<?> referenceClass, Expression selectionExpression, boolean shouldDeferExecutionInUOW, boolean handleChildren,
+                                    Class<?> rootClass) {
         String errorMsg = "";
         clearCache(mainSession);
 
@@ -170,7 +170,7 @@ protected static String execute(Session mainSession, Class referenceClass, Expre
                 Iterator<ClassDescriptor> it = descriptor.getInheritancePolicy().getChildDescriptors().iterator();
                 while(it.hasNext()) {
                     ClassDescriptor childDescriptor = it.next();
-                    Class childReferenceClass = childDescriptor.getJavaClass();
+                    Class<?> childReferenceClass = childDescriptor.getJavaClass();
                     errorMsg += execute(mainSession, childReferenceClass, selectionExpression, shouldDeferExecutionInUOW, handleChildren, rootClass);
                 }
             }
diff --git a/foundation/org.eclipse.persistence.core.test.framework/src/main/java/org/eclipse/persistence/testing/framework/JUnitTestCase.java b/foundation/org.eclipse.persistence.core.test.framework/src/main/java/org/eclipse/persistence/testing/framework/JUnitTestCase.java
index af9d8c7..d24c8f8 100644
--- a/foundation/org.eclipse.persistence.core.test.framework/src/main/java/org/eclipse/persistence/testing/framework/JUnitTestCase.java
+++ b/foundation/org.eclipse.persistence.core.test.framework/src/main/java/org/eclipse/persistence/testing/framework/JUnitTestCase.java
@@ -105,7 +105,7 @@ public void test() throws Throwable {
      *   void testC() {...
      * }
      */
-    public static Vector suite(Class junitTestCaseClass) {
+    public static Vector suite(Class<?> junitTestCaseClass) {
         if (!(junit.framework.TestCase.class.isAssignableFrom(junitTestCaseClass))) {
             throw new TestProblemException("Class " + junitTestCaseClass + " is not derived from junit.framework.TestCase");
         }
diff --git a/foundation/org.eclipse.persistence.core.test.framework/src/main/java/org/eclipse/persistence/testing/framework/JoinedAttributeTestHelper.java b/foundation/org.eclipse.persistence.core.test.framework/src/main/java/org/eclipse/persistence/testing/framework/JoinedAttributeTestHelper.java
index afed342..58ed01b 100644
--- a/foundation/org.eclipse.persistence.core.test.framework/src/main/java/org/eclipse/persistence/testing/framework/JoinedAttributeTestHelper.java
+++ b/foundation/org.eclipse.persistence.core.test.framework/src/main/java/org/eclipse/persistence/testing/framework/JoinedAttributeTestHelper.java
@@ -379,7 +379,7 @@ protected static String compareAttributes(Object obj1, Object obj2, DatabaseMapp
                 value1 = frm.getRealAttributeValueFromObject(obj1, session);
                 value2 = frm.getRealAttributeValueFromObject(obj2, session);
                 if(frm.isCollectionMapping()) {
-                    Class containerClass = frm.getContainerPolicy().getContainerClass();
+                    Class<?> containerClass = frm.getContainerPolicy().getContainerClass();
                     if(Collection.class.isAssignableFrom(containerClass)) {
                         errorMsg += compareCollections((Collection)value1, (Collection)value2, frm.getReferenceDescriptor(), session, processed);
                     } else if(Map.class.isAssignableFrom(containerClass)) {
diff --git a/foundation/org.eclipse.persistence.core.test.framework/src/main/java/org/eclipse/persistence/testing/framework/OracleDBPlatformHelper.java b/foundation/org.eclipse.persistence.core.test.framework/src/main/java/org/eclipse/persistence/testing/framework/OracleDBPlatformHelper.java
index 11870ec..c589550 100644
--- a/foundation/org.eclipse.persistence.core.test.framework/src/main/java/org/eclipse/persistence/testing/framework/OracleDBPlatformHelper.java
+++ b/foundation/org.eclipse.persistence.core.test.framework/src/main/java/org/eclipse/persistence/testing/framework/OracleDBPlatformHelper.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 @@ public class OracleDBPlatformHelper {
     public static OracleDBPlatformHelper getInstance() {
 
         if (singleton == null) {
-            Class helperClass = null;
+            Class<?> helperClass = null;
 
             try {
                 helperClass = new PrivilegedClassForName("org.eclipse.persistence.testing.framework.oracle.OracleDBPlatformHelper").run();
diff --git a/foundation/org.eclipse.persistence.core.test.framework/src/main/java/org/eclipse/persistence/testing/framework/ReadAllCallTest.java b/foundation/org.eclipse.persistence.core.test.framework/src/main/java/org/eclipse/persistence/testing/framework/ReadAllCallTest.java
index c6ba579..f306cb8 100644
--- a/foundation/org.eclipse.persistence.core.test.framework/src/main/java/org/eclipse/persistence/testing/framework/ReadAllCallTest.java
+++ b/foundation/org.eclipse.persistence.core.test.framework/src/main/java/org/eclipse/persistence/testing/framework/ReadAllCallTest.java
@@ -31,10 +31,10 @@
 public class ReadAllCallTest extends AutoVerifyTestCase {
     protected int originalObjectsSize;
     protected Object objectsFromDatabase;
-    protected Class referenceClass;
+    protected Class<?> referenceClass;
     protected Call call;
 
-    public ReadAllCallTest(Class referenceClass, int originalObjectsSize, Call aCall) {
+    public ReadAllCallTest(Class<?> referenceClass, int originalObjectsSize, Call aCall) {
         setOriginalObjectsSize(originalObjectsSize);
         setReferenceClass(referenceClass);
         setCall(aCall);
@@ -54,7 +54,7 @@ public int getOriginalObjectsSize() {
         return originalObjectsSize;
     }
 
-    public Class getReferenceClass() {
+    public Class<?> getReferenceClass() {
         return referenceClass;
     }
 
@@ -62,7 +62,7 @@ public void setOriginalObjectsSize(int size) {
         originalObjectsSize = size;
     }
 
-    public void setReferenceClass(Class aClass) {
+    public void setReferenceClass(Class<?> aClass) {
         referenceClass = aClass;
     }
 
diff --git a/foundation/org.eclipse.persistence.core.test.framework/src/main/java/org/eclipse/persistence/testing/framework/ReadAllCallWithOrderingTest.java b/foundation/org.eclipse.persistence.core.test.framework/src/main/java/org/eclipse/persistence/testing/framework/ReadAllCallWithOrderingTest.java
index 2eb4f77..675a389 100644
--- a/foundation/org.eclipse.persistence.core.test.framework/src/main/java/org/eclipse/persistence/testing/framework/ReadAllCallWithOrderingTest.java
+++ b/foundation/org.eclipse.persistence.core.test.framework/src/main/java/org/eclipse/persistence/testing/framework/ReadAllCallWithOrderingTest.java
@@ -32,11 +32,11 @@
 public class ReadAllCallWithOrderingTest extends AutoVerifyTestCase {
     protected int originalObjectsSize;
     protected Object objectsFromDatabase;
-    protected Class referenceClass;
+    protected Class<?> referenceClass;
     protected Call call;
     protected Expression orderBy;
 
-    public ReadAllCallWithOrderingTest(Class referenceClass, int originalObjectsSize, Call aCall, Expression orderBy) {
+    public ReadAllCallWithOrderingTest(Class<?> referenceClass, int originalObjectsSize, Call aCall, Expression orderBy) {
         setOriginalObjectsSize(originalObjectsSize);
         setReferenceClass(referenceClass);
         setCall(aCall);
@@ -61,7 +61,7 @@ public int getOriginalObjectsSize() {
         return originalObjectsSize;
     }
 
-    public Class getReferenceClass() {
+    public Class<?> getReferenceClass() {
         return referenceClass;
     }
 
@@ -73,7 +73,7 @@ public void setOriginalObjectsSize(int size) {
         originalObjectsSize = size;
     }
 
-    public void setReferenceClass(Class aClass) {
+    public void setReferenceClass(Class<?> aClass) {
         referenceClass = aClass;
     }
 
diff --git a/foundation/org.eclipse.persistence.core.test.framework/src/main/java/org/eclipse/persistence/testing/framework/ReadAllTest.java b/foundation/org.eclipse.persistence.core.test.framework/src/main/java/org/eclipse/persistence/testing/framework/ReadAllTest.java
index 1fabded..6873aeb 100644
--- a/foundation/org.eclipse.persistence.core.test.framework/src/main/java/org/eclipse/persistence/testing/framework/ReadAllTest.java
+++ b/foundation/org.eclipse.persistence.core.test.framework/src/main/java/org/eclipse/persistence/testing/framework/ReadAllTest.java
@@ -34,9 +34,9 @@ public class ReadAllTest extends AutoVerifyTestCase {
     protected ReadAllQuery query;
     protected int originalObjectsSize;
     protected Object objectsFromDatabase;
-    protected Class referenceClass;
+    protected Class<?> referenceClass;
 
-    public ReadAllTest(Class referenceClass, int originalObjectsSize) {
+    public ReadAllTest(Class<?> referenceClass, int originalObjectsSize) {
         setOriginalObjectsSize(originalObjectsSize);
         setReferenceClass(referenceClass);
         setName("ReadAllTest(" + referenceClass.getName() + ")");
@@ -62,7 +62,7 @@ public ReadAllQuery getQuery() {
         return query;
     }
 
-    public Class getReferenceClass() {
+    public Class<?> getReferenceClass() {
         return referenceClass;
     }
 
@@ -86,7 +86,7 @@ public void setQuery(ReadAllQuery query) {
         this.query = query;
     }
 
-    public void setReferenceClass(Class aClass) {
+    public void setReferenceClass(Class<?> aClass) {
         referenceClass = aClass;
     }
 
diff --git a/foundation/org.eclipse.persistence.core.test.framework/src/main/java/org/eclipse/persistence/testing/framework/ReadObjectCallTest.java b/foundation/org.eclipse.persistence.core.test.framework/src/main/java/org/eclipse/persistence/testing/framework/ReadObjectCallTest.java
index d6cd2da..a5d2f54 100644
--- a/foundation/org.eclipse.persistence.core.test.framework/src/main/java/org/eclipse/persistence/testing/framework/ReadObjectCallTest.java
+++ b/foundation/org.eclipse.persistence.core.test.framework/src/main/java/org/eclipse/persistence/testing/framework/ReadObjectCallTest.java
@@ -30,7 +30,7 @@
 public class ReadObjectCallTest extends AutoVerifyTestCase {
     protected Object objectFromDatabase;
     protected Call call;
-    protected Class referenceClass;
+    protected Class<?> referenceClass;
 
     /**
      * This is required to allow subclassing.
@@ -39,18 +39,18 @@ public ReadObjectCallTest() {
         setDescription("The test reads the intended object from the database through the call and checks if it was read properly");
     }
 
-    public ReadObjectCallTest(Class referenceClass, Call aCall) {
+    public ReadObjectCallTest(Class<?> referenceClass, Call aCall) {
         setReferenceClass(referenceClass);
         setCall(aCall);
         setName("ReadObjectCallTest(" + referenceClass + ")");
         setDescription("The test reads the intended object through the call, '" + referenceClass + "', from the database and checks if it was read properly");
     }
 
-    public Class getReferenceClass() {
+    public Class<?> getReferenceClass() {
         return referenceClass;
     }
 
-    public void setReferenceClass(Class referenceClass) {
+    public void setReferenceClass(Class<?> referenceClass) {
         this.referenceClass = referenceClass;
     }
 
diff --git a/foundation/org.eclipse.persistence.core.test.framework/src/main/java/org/eclipse/persistence/testing/framework/ReflectionHelper.java b/foundation/org.eclipse.persistence.core.test.framework/src/main/java/org/eclipse/persistence/testing/framework/ReflectionHelper.java
index b6d823d..18331e8 100644
--- a/foundation/org.eclipse.persistence.core.test.framework/src/main/java/org/eclipse/persistence/testing/framework/ReflectionHelper.java
+++ b/foundation/org.eclipse.persistence.core.test.framework/src/main/java/org/eclipse/persistence/testing/framework/ReflectionHelper.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2015, 2020 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2015, 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,7 @@ public class ReflectionHelper {
      * @throws IllegalArgumentException If an unwrapping conversion fails.
      * @throws IllegalAccessException If the underlying field is either inaccessible or final.
      */
-    public static final void setPrivateStatic(final Class c, final String name, final Object newValue)
+    public static final void setPrivateStatic(final Class<?> c, final String name, final Object newValue)
             throws ReflectiveOperationException {
         final Field field = c.getDeclaredField(name);
         final boolean accessible = field.isAccessible();
@@ -54,7 +54,7 @@ public static final void setPrivateStatic(final Class c, final String name, fina
      * @throws IllegalArgumentException If an unwrapping conversion fails.
      * @throws IllegalAccessException If the underlying field is either inaccessible or final.
      */
-    public static final <T> T getPrivateStatic(final Class c, final String name)
+    public static final <T> T getPrivateStatic(final Class<?> c, final String name)
             throws ReflectiveOperationException {
         final Field field = c.getDeclaredField(name);
         final boolean accessible = field.isAccessible();
@@ -142,7 +142,7 @@ public static final <T> T invokeMethod(
      * @throws NoSuchMethodException     If a field with the specified name is not found.
      */
     public static final Object invokeStaticMethod(
-            final String name, final Class c, final Class<?>[] parameterTypes, final Object... args)
+            final String name, final Class<?> c, final Class<?>[] parameterTypes, final Object... args)
             throws ReflectiveOperationException {
         Method m = c.getDeclaredMethod(name, parameterTypes);
         boolean accessible = m.isAccessible();
@@ -170,7 +170,7 @@ public static final Object invokeStaticMethod(
      * @throws NoSuchMethodException     If a field with the specified name is not found.
      */
     public static final <T> T invokeStaticMethod(
-            final String name, final Class c, final Class<?>[] parameterTypes, final Class<T> returnType, final Object... args)
+            final String name, final Class<?> c, final Class<?>[] parameterTypes, final Class<T> returnType, final Object... args)
             throws ReflectiveOperationException {
         return returnType.cast(invokeStaticMethod(name, c, parameterTypes, args));
     }
diff --git a/foundation/org.eclipse.persistence.core.test.framework/src/main/java/org/eclipse/persistence/testing/framework/TestCollection.java b/foundation/org.eclipse.persistence.core.test.framework/src/main/java/org/eclipse/persistence/testing/framework/TestCollection.java
index e6b2796..3e9a21f 100644
--- a/foundation/org.eclipse.persistence.core.test.framework/src/main/java/org/eclipse/persistence/testing/framework/TestCollection.java
+++ b/foundation/org.eclipse.persistence.core.test.framework/src/main/java/org/eclipse/persistence/testing/framework/TestCollection.java
@@ -61,6 +61,7 @@ public TestCollection() {
     /**
      * Constructs a TestSuite from the given class with the given name.
      */
+    @SuppressWarnings({"rawtypes", "unchecked"})
     public TestCollection(Class theClass, String name) {
         super(theClass, name);
         initialize();
@@ -70,6 +71,7 @@ public TestCollection(Class theClass, String name) {
      * Constructs a TestSuite from the given class. Adds all the methods
      * starting with "test" as test cases to the suite.
      */
+    @SuppressWarnings({"rawtypes", "unchecked"})
     public TestCollection(final Class theClass) {
         super(theClass);
         initialize();
@@ -137,7 +139,7 @@ public final void addTests(Vector theTests) {
 
     public final void addServerTest(TestCase theTest) {
         TestCase serverTestCase;
-        Class serverTestCaseClass;
+        Class<?> serverTestCaseClass;
         Object[] args = new Object[1];
 
         try {
diff --git a/foundation/org.eclipse.persistence.core.test.framework/src/main/java/org/eclipse/persistence/testing/framework/TestSuite.java b/foundation/org.eclipse.persistence.core.test.framework/src/main/java/org/eclipse/persistence/testing/framework/TestSuite.java
index 9f5e9d7..d25f9e3 100644
--- a/foundation/org.eclipse.persistence.core.test.framework/src/main/java/org/eclipse/persistence/testing/framework/TestSuite.java
+++ b/foundation/org.eclipse.persistence.core.test.framework/src/main/java/org/eclipse/persistence/testing/framework/TestSuite.java
@@ -31,7 +31,7 @@ public TestSuite() {
     /**
      * Constructs a TestSuite from the given class with the given name.
      */
-    public TestSuite(Class theClass, String name) {
+    public TestSuite(Class<?> theClass, String name) {
         super(theClass, name);
     }
 
@@ -39,7 +39,7 @@ public TestSuite(Class theClass, String name) {
      * Constructs a TestSuite from the given class. Adds all the methods
      * starting with "test" as test cases to the suite.
      */
-    public TestSuite(final Class theClass) {
+    public TestSuite(final Class<?> theClass) {
         super(theClass);
     }
 
diff --git a/foundation/org.eclipse.persistence.core.test.framework/src/main/java/org/eclipse/persistence/testing/framework/TestVariation.java b/foundation/org.eclipse.persistence.core.test.framework/src/main/java/org/eclipse/persistence/testing/framework/TestVariation.java
index 969cf9a..c0a2a50 100644
--- a/foundation/org.eclipse.persistence.core.test.framework/src/main/java/org/eclipse/persistence/testing/framework/TestVariation.java
+++ b/foundation/org.eclipse.persistence.core.test.framework/src/main/java/org/eclipse/persistence/testing/framework/TestVariation.java
@@ -136,7 +136,7 @@ protected static InnerTestWrapper createTest(int index, Object object, Vector na
         return out;
     }
 
-    protected static void getMembers(Class cls, Vector names, Vector getters, Vector setters, Vector fields, boolean throwExceptionIfNotFound) {
+    protected static void getMembers(Class<?> cls, Vector names, Vector getters, Vector setters, Vector fields, boolean throwExceptionIfNotFound) {
         Method[] allMethods = cls.getMethods();
         Field[] allFields = cls.getFields();
 
@@ -151,7 +151,7 @@ protected static void getMembers(Class cls, Vector names, Vector getters, Vector
 
         for (int i = 0; i < allMethods.length; i++) {
             Class<?> returnType = allMethods[i].getReturnType();
-            Class[] parameterTypes = allMethods[i].getParameterTypes();
+            Class<?>[] parameterTypes = allMethods[i].getParameterTypes();
             if (returnType.equals(boolean.class) && (parameterTypes.length == 0)) {
                 candidateGetters.addElement(allMethods[i]);
                 candidateGettersNames.addElement(allMethods[i].getName().toLowerCase());
diff --git a/foundation/org.eclipse.persistence.core.test.framework/src/main/java/org/eclipse/persistence/testing/framework/UnitTestCase.java b/foundation/org.eclipse.persistence.core.test.framework/src/main/java/org/eclipse/persistence/testing/framework/UnitTestCase.java
index 4db7683..d35e07f 100644
--- a/foundation/org.eclipse.persistence.core.test.framework/src/main/java/org/eclipse/persistence/testing/framework/UnitTestCase.java
+++ b/foundation/org.eclipse.persistence.core.test.framework/src/main/java/org/eclipse/persistence/testing/framework/UnitTestCase.java
@@ -64,7 +64,7 @@ public void setup() {
     public void test() {
         String methodName = "_test" + getName();
         try {
-            Class[] args = {  };
+            Class<?>[] args = {  };
             java.lang.reflect.Method method = getContainer().getClass().getMethod(methodName, args);
             Object[] objectList = {  };
             method.invoke(getContainer(), objectList);
diff --git a/foundation/org.eclipse.persistence.core.test.framework/src/main/java/org/eclipse/persistence/testing/framework/UpdateAllQueryTestHelper.java b/foundation/org.eclipse.persistence.core.test.framework/src/main/java/org/eclipse/persistence/testing/framework/UpdateAllQueryTestHelper.java
index 58b8a8d..12a1885 100644
--- a/foundation/org.eclipse.persistence.core.test.framework/src/main/java/org/eclipse/persistence/testing/framework/UpdateAllQueryTestHelper.java
+++ b/foundation/org.eclipse.persistence.core.test.framework/src/main/java/org/eclipse/persistence/testing/framework/UpdateAllQueryTestHelper.java
@@ -37,11 +37,11 @@
 
 public class UpdateAllQueryTestHelper {
 
-    public static String execute(Session mainSession, Class referenceClass, HashMap updateClauses, Expression selectionExpression) {
+    public static String execute(Session mainSession, Class<?> referenceClass, HashMap updateClauses, Expression selectionExpression) {
         return execute(mainSession, referenceClass, updateClauses, selectionExpression, true);
     }
 
-    public static String execute(Session mainSession, Class referenceClass, HashMap updateClauses, Expression selectionExpression, boolean handleChildren) {
+    public static String execute(Session mainSession, Class<?> referenceClass, HashMap updateClauses, Expression selectionExpression, boolean handleChildren) {
         return execute(mainSession, createUpdateAllQuery(referenceClass, updateClauses, selectionExpression), true);
     }
 
@@ -60,7 +60,7 @@ public static String execute(Session mainSession, UpdateAllQuery uq,  boolean ha
         // Find the inheritance root class - the test will compare all instances of this class
         // after traditional TopLink update (one-by-one) with all instances of this class
         // after UpdateAllQuery. The test succeeds if the two collections are equal.
-        Class rootClass = uq.getReferenceClass();
+        Class<?> rootClass = uq.getReferenceClass();
         ClassDescriptor descriptor = mainSession.getClassDescriptor(uq.getReferenceClass());
         if(descriptor.hasInheritance()) {
             ClassDescriptor parentDescriptor = descriptor;
@@ -80,7 +80,7 @@ public static String execute(Session mainSession, UpdateAllQuery uq,  boolean ha
     }
 
     protected static String execute(Session mainSession, UpdateAllQuery uq, boolean handleChildren,
-                                  Class rootClass) {
+                                  Class<?> rootClass) {
         String errorMsg = "";
         ClassDescriptor descriptor = mainSession.getDescriptor(uq.getReferenceClass());
 
@@ -220,7 +220,7 @@ protected static String execute(Session mainSession, UpdateAllQuery uq, boolean
                 Iterator<ClassDescriptor> it = descriptor.getInheritancePolicy().getChildDescriptors().iterator();
                 while(it.hasNext()) {
                     ClassDescriptor childDescriptor = it.next();
-                    Class childReferenceClass = childDescriptor.getJavaClass();
+                    Class<?> childReferenceClass = childDescriptor.getJavaClass();
                     UpdateAllQuery childUq = (UpdateAllQuery)uq.clone();
                     childUq.setReferenceClass(childReferenceClass);
                     childUq.setIsPrepared(false);
@@ -235,7 +235,7 @@ protected static void clearCache(Session mainSession) {
         mainSession.getIdentityMapAccessor().initializeAllIdentityMaps();
     }
 
-    public static UpdateAllQuery createUpdateAllQuery(Class referenceClass, HashMap updateClauses, Expression selectionExpression) {
+    public static UpdateAllQuery createUpdateAllQuery(Class<?> referenceClass, HashMap updateClauses, Expression selectionExpression) {
         // Construct UpdateAllQuery
         UpdateAllQuery uq = new UpdateAllQuery(referenceClass, selectionExpression);
         Iterator itEntrySets = updateClauses.entrySet().iterator();
@@ -252,7 +252,7 @@ static protected Object buildCopy(ClassDescriptor descriptor, Object original, U
         return copy;
     }
 
-    static protected String getQualifiedFieldNameFromKey(Object key, Class referenceClass, ClassDescriptor descriptor, Session session) {
+    static protected String getQualifiedFieldNameFromKey(Object key, Class<?> referenceClass, ClassDescriptor descriptor, Session session) {
         DatabaseField field = null;
         if(key instanceof String) {
             // attribute name
diff --git a/foundation/org.eclipse.persistence.core.test.framework/src/main/java/org/eclipse/persistence/testing/framework/ui/LoadBuildDisplayPanel.java b/foundation/org.eclipse.persistence.core.test.framework/src/main/java/org/eclipse/persistence/testing/framework/ui/LoadBuildDisplayPanel.java
index 0fc3543..70161a4 100644
--- a/foundation/org.eclipse.persistence.core.test.framework/src/main/java/org/eclipse/persistence/testing/framework/ui/LoadBuildDisplayPanel.java
+++ b/foundation/org.eclipse.persistence.core.test.framework/src/main/java/org/eclipse/persistence/testing/framework/ui/LoadBuildDisplayPanel.java
@@ -790,7 +790,7 @@ public void initilaizeTestSummaryCache(TestResultsSummary theSummary) {
 
     public void inspect(Object object) {
         try {
-            Class[] argTypes = new Class[1];
+            Class<?>[] argTypes = new Class<?>[1];
             argTypes[0] = Object.class;
             Object[] args = new Object[1];
             args[0] = object;
diff --git a/foundation/org.eclipse.persistence.core.test.framework/src/main/java/org/eclipse/persistence/testing/framework/ui/TestingBrowserPanel.java b/foundation/org.eclipse.persistence.core.test.framework/src/main/java/org/eclipse/persistence/testing/framework/ui/TestingBrowserPanel.java
index 614154e..a29f720 100644
--- a/foundation/org.eclipse.persistence.core.test.framework/src/main/java/org/eclipse/persistence/testing/framework/ui/TestingBrowserPanel.java
+++ b/foundation/org.eclipse.persistence.core.test.framework/src/main/java/org/eclipse/persistence/testing/framework/ui/TestingBrowserPanel.java
@@ -1305,7 +1305,7 @@ public void setup() {
     public void setupDefaultModels() {
         Vector allModels = new Vector();
 
-        Class testModelClass;
+        Class<?> testModelClass;
 
         // Look for standard tests.
         try {
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 9583c35..45783ed 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
@@ -251,7 +251,7 @@ public static TestModel buildOracleTestModel() {
         TestModel model = new TestModel();
         model.setName("Oracle Tests");
         for (int index = 0; index < tests.size(); ++index) {
-            Class cls;
+            Class<?> cls;
             try {
                 cls = Class.forName((String)tests.get(index));
                 if(TestModel.class.isAssignableFrom(cls)) {
@@ -280,7 +280,7 @@ public static TestModel buildOracleNoSQLTestModel() {
         TestModel model = new TestModel();
         model.setName("Oracle NoSQL Tests");
         for (int index = 0; index < tests.size(); ++index) {
-            Class cls;
+            Class<?> cls;
             try {
                 cls = Class.forName((String)tests.get(index));
                 if(TestModel.class.isAssignableFrom(cls)) {
@@ -308,7 +308,7 @@ public static TestModel buildNoSQLTestModel() {
         TestModel model = new TestModel();
         model.setName("NoSQL Tests");
         for (int index = 0; index < tests.size(); ++index) {
-            Class cls;
+            Class<?> cls;
             try {
                 cls = Class.forName((String)tests.get(index));
                 if(TestModel.class.isAssignableFrom(cls)) {
diff --git a/foundation/org.eclipse.persistence.core.test.framework/src/main/java/org/eclipse/persistence/tools/beans/ExpressionPanel.java b/foundation/org.eclipse.persistence.core.test.framework/src/main/java/org/eclipse/persistence/tools/beans/ExpressionPanel.java
index 4127add..bd0f69e 100644
--- a/foundation/org.eclipse.persistence.core.test.framework/src/main/java/org/eclipse/persistence/tools/beans/ExpressionPanel.java
+++ b/foundation/org.eclipse.persistence.core.test.framework/src/main/java/org/eclipse/persistence/tools/beans/ExpressionPanel.java
@@ -105,7 +105,7 @@ public Expression buildExpressionNode() {
         String operator = (String)getOperatorCombo().getSelectedItem();
         String method = ExpressionNode.getMethod(operator);
         String value = getValueText().getText();
-        Class[] types = new Class[1];
+        Class<?>[] types = new Class<?>[1];
         types[0] = Object.class;
         Object[] arguments = new Object[1];
         arguments[0] = value;
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 5f144c5..e372b19 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
@@ -87,7 +87,7 @@ public static long currentDatabaseTimeMillis(org.eclipse.persistence.sessions.Se
      * PUBLIC:
      */
     public static long currentDatabaseTimeMillis(org.eclipse.persistence.sessions.Session session,
-                                   Class domainClass) {
+                                   Class<?> domainClass) {
         Session rootSession = session;
         while (rootSession.isUnitOfWork() || rootSession.isClientSession() ||
                rootSession instanceof HistoricalSession ||
diff --git a/foundation/org.eclipse.persistence.core.test.framework/src/main/java/org/eclipse/persistence/tools/sessionconsole/SessionConsole.java b/foundation/org.eclipse.persistence.core.test.framework/src/main/java/org/eclipse/persistence/tools/sessionconsole/SessionConsole.java
index d36f455..9403da8 100644
--- a/foundation/org.eclipse.persistence.core.test.framework/src/main/java/org/eclipse/persistence/tools/sessionconsole/SessionConsole.java
+++ b/foundation/org.eclipse.persistence.core.test.framework/src/main/java/org/eclipse/persistence/tools/sessionconsole/SessionConsole.java
@@ -2100,7 +2100,7 @@ public static void main(java.lang.String[] args) {
             try {
                 Class<?> aCloserClass =
                     Class.forName("com.ibm.uvm.abt.edit.WindowCloser");
-                Class[] parmTypes = { java.awt.Window.class };
+                Class<?>[] parmTypes = { java.awt.Window.class };
                 Object[] parms = { aSessionInspectorFrame };
                 Constructor<?> aCtor =
                     aCloserClass.getConstructor(parmTypes);
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 5500189..3f9b6d1 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
@@ -771,7 +771,7 @@ public void executeJava() {
                 Object[] params = new Object[1];
                 params[0] = source;
                 Class<?> mainClass = Class.forName("com.sun.tools.javac.Main");
-                Class[] parameterTypes = new Class[1];
+                Class<?>[] parameterTypes = new Class<?>[1];
                 parameterTypes[0] = String[].class;
                 Method method = mainClass.getMethod("compile", parameterTypes);
                 int result = (Integer) method.invoke(null, params);
@@ -785,7 +785,7 @@ public void executeJava() {
                 newClass.getField("session").set(newInstance, getSession());
                 Object value;
                 try {
-                    value = newClass.getMethod("exec", (Class[]) null).invoke(
+                    value = newClass.getMethod("exec", (Class<?>[]) null).invoke(
                             newInstance, (Object[]) null);
                 } catch (java.lang.reflect.InvocationTargetException exception) {
                     throw exception.getCause();
@@ -3757,7 +3757,7 @@ && getLoginEditorPanel().getLogin().getPlatform().isOracle()) {
             try {
                 Class<?> connectionPoolHelperClass = Class
                         .forName("org.eclipse.persistence.tools.sessionconsole.OracleConnectionPoolHelper");
-                Class[] params = new Class[] { java.lang.String.class };
+                Class<?>[] params = new Class<?>[] { java.lang.String.class };
                 java.lang.reflect.Method method = connectionPoolHelperClass
                         .getDeclaredMethod("getOracleDataSource", params);
                 Object[] args = new Object[] { getLoginEditorPanel().getLogin()
diff --git a/foundation/org.eclipse.persistence.nosql/src/it/java/org/eclipse/persistence/testing/oxm/OXTestCase.java b/foundation/org.eclipse.persistence.nosql/src/it/java/org/eclipse/persistence/testing/oxm/OXTestCase.java
index 1174455..67375b2 100644
--- a/foundation/org.eclipse.persistence.nosql/src/it/java/org/eclipse/persistence/testing/oxm/OXTestCase.java
+++ b/foundation/org.eclipse.persistence.nosql/src/it/java/org/eclipse/persistence/testing/oxm/OXTestCase.java
@@ -63,9 +63,9 @@
 public abstract class OXTestCase extends XMLTestCase {
     protected static XMLInputFactory XML_INPUT_FACTORY;
     protected static XMLOutputFactory XML_OUTPUT_FACTORY;
-    protected static Class staxResultClass;
+    protected static Class<?> staxResultClass;
     protected static String staxResultClassName = "javax.xml.transform.stax.StAXResult";
-    protected static Class staxSourceClass;
+    protected static Class<?> staxSourceClass;
     protected static String staxSourceClassName = "javax.xml.transform.stax.StAXSource";
     protected static Constructor staxResultStreamWriterConstructor;
     protected static Constructor staxResultEventWriterConstructor;
@@ -82,16 +82,16 @@ public abstract class OXTestCase extends XMLTestCase {
         }
         try {
             staxResultClass = PrivilegedAccessHelper.getClassForName(staxResultClassName);
-            staxResultStreamWriterConstructor = PrivilegedAccessHelper.getConstructorFor(staxResultClass, new Class[]{XMLStreamWriter.class}, true);
-            staxResultEventWriterConstructor = PrivilegedAccessHelper.getConstructorFor(staxResultClass, new Class[]{XMLEventWriter.class}, true);
+            staxResultStreamWriterConstructor = PrivilegedAccessHelper.getConstructorFor(staxResultClass, new Class<?>[]{XMLStreamWriter.class}, true);
+            staxResultEventWriterConstructor = PrivilegedAccessHelper.getConstructorFor(staxResultClass, new Class<?>[]{XMLEventWriter.class}, true);
         } catch(Exception ex) {
             staxResultClass = null;
         }
 
         try {
             staxSourceClass = PrivilegedAccessHelper.getClassForName(staxSourceClassName);
-            staxSourceStreamReaderConstructor = PrivilegedAccessHelper.getConstructorFor(staxSourceClass, new Class[]{XMLStreamReader.class}, true);
-            staxSourceEventReaderConstructor = PrivilegedAccessHelper.getConstructorFor(staxSourceClass, new Class[]{XMLEventReader.class}, true);
+            staxSourceStreamReaderConstructor = PrivilegedAccessHelper.getConstructorFor(staxSourceClass, new Class<?>[]{XMLStreamReader.class}, true);
+            staxSourceEventReaderConstructor = PrivilegedAccessHelper.getConstructorFor(staxSourceClass, new Class<?>[]{XMLEventReader.class}, true);
         } catch(Exception ex) {
             staxSourceClass = null;
         }
diff --git a/foundation/org.eclipse.persistence.nosql/src/it/java/org/eclipse/persistence/testing/oxm/mappings/EISMappingTestCases.java b/foundation/org.eclipse.persistence.nosql/src/it/java/org/eclipse/persistence/testing/oxm/mappings/EISMappingTestCases.java
index a78f01e..61dc24b 100644
--- a/foundation/org.eclipse.persistence.nosql/src/it/java/org/eclipse/persistence/testing/oxm/mappings/EISMappingTestCases.java
+++ b/foundation/org.eclipse.persistence.nosql/src/it/java/org/eclipse/persistence/testing/oxm/mappings/EISMappingTestCases.java
@@ -47,7 +47,7 @@ public abstract class EISMappingTestCases extends OXTestCase {
     protected Connection connection;
     protected XMLFileConnectionFactory connectionFactory;
     protected RecordFactory recordFactory;
-    protected Class rootClass;
+    protected Class<?> rootClass;
     protected Document controlDocument;
     private String resourceName;
     private DocumentBuilder parser;
@@ -318,7 +318,7 @@ public void testUOWDelete() throws Exception {
         logTestDocument();
     }
 
-    abstract protected Class getSourceClass();
+    abstract protected Class<?> getSourceClass();
 
     protected Document logTestDocument() throws Exception {
         InputStream inputStream = ClassLoader.getSystemResourceAsStream(getTestDocument());
diff --git a/foundation/org.eclipse.persistence.nosql/src/it/java/org/eclipse/persistence/testing/oxm/mappings/onetomany/keyonsource/eis/arraylist/ArrayListTestCases.java b/foundation/org.eclipse.persistence.nosql/src/it/java/org/eclipse/persistence/testing/oxm/mappings/onetomany/keyonsource/eis/arraylist/ArrayListTestCases.java
index b3f00be..4d95229 100644
--- a/foundation/org.eclipse.persistence.nosql/src/it/java/org/eclipse/persistence/testing/oxm/mappings/onetomany/keyonsource/eis/arraylist/ArrayListTestCases.java
+++ b/foundation/org.eclipse.persistence.nosql/src/it/java/org/eclipse/persistence/testing/oxm/mappings/onetomany/keyonsource/eis/arraylist/ArrayListTestCases.java
@@ -82,7 +82,7 @@ protected ArrayList getRootClasses()
   }
 
     @Override
-    protected Class getSourceClass(){
+    protected Class<?> getSourceClass(){
         return Employee.class;
     }
 
diff --git a/foundation/org.eclipse.persistence.nosql/src/it/java/org/eclipse/persistence/testing/oxm/mappings/onetomany/keyonsource/eis/compositekey/nestedownedtoexternalroot/NestedOwnedToExternalRootTestCases.java b/foundation/org.eclipse.persistence.nosql/src/it/java/org/eclipse/persistence/testing/oxm/mappings/onetomany/keyonsource/eis/compositekey/nestedownedtoexternalroot/NestedOwnedToExternalRootTestCases.java
index 8657a54..810f54a 100644
--- a/foundation/org.eclipse.persistence.nosql/src/it/java/org/eclipse/persistence/testing/oxm/mappings/onetomany/keyonsource/eis/compositekey/nestedownedtoexternalroot/NestedOwnedToExternalRootTestCases.java
+++ b/foundation/org.eclipse.persistence.nosql/src/it/java/org/eclipse/persistence/testing/oxm/mappings/onetomany/keyonsource/eis/compositekey/nestedownedtoexternalroot/NestedOwnedToExternalRootTestCases.java
@@ -89,7 +89,7 @@ protected ArrayList getRootClasses()
   }
 
     @Override
-    protected Class getSourceClass(){
+    protected Class<?> getSourceClass(){
         return Company.class;
     }
 
diff --git a/foundation/org.eclipse.persistence.nosql/src/it/java/org/eclipse/persistence/testing/oxm/mappings/onetomany/keyonsource/eis/compositekey/ownedtoexternalroot/OwnedToExternalRootTestCases.java b/foundation/org.eclipse.persistence.nosql/src/it/java/org/eclipse/persistence/testing/oxm/mappings/onetomany/keyonsource/eis/compositekey/ownedtoexternalroot/OwnedToExternalRootTestCases.java
index 4b5c425..351b9b5 100644
--- a/foundation/org.eclipse.persistence.nosql/src/it/java/org/eclipse/persistence/testing/oxm/mappings/onetomany/keyonsource/eis/compositekey/ownedtoexternalroot/OwnedToExternalRootTestCases.java
+++ b/foundation/org.eclipse.persistence.nosql/src/it/java/org/eclipse/persistence/testing/oxm/mappings/onetomany/keyonsource/eis/compositekey/ownedtoexternalroot/OwnedToExternalRootTestCases.java
@@ -85,7 +85,7 @@ protected ArrayList getRootClasses()
   }
 
     @Override
-    protected Class getSourceClass(){
+    protected Class<?> getSourceClass(){
         return Team.class;
     }
 
diff --git a/foundation/org.eclipse.persistence.nosql/src/it/java/org/eclipse/persistence/testing/oxm/mappings/onetomany/keyonsource/eis/compositekey/roottoroot/RootToRootTestCases.java b/foundation/org.eclipse.persistence.nosql/src/it/java/org/eclipse/persistence/testing/oxm/mappings/onetomany/keyonsource/eis/compositekey/roottoroot/RootToRootTestCases.java
index cab3e12..7663600 100644
--- a/foundation/org.eclipse.persistence.nosql/src/it/java/org/eclipse/persistence/testing/oxm/mappings/onetomany/keyonsource/eis/compositekey/roottoroot/RootToRootTestCases.java
+++ b/foundation/org.eclipse.persistence.nosql/src/it/java/org/eclipse/persistence/testing/oxm/mappings/onetomany/keyonsource/eis/compositekey/roottoroot/RootToRootTestCases.java
@@ -84,7 +84,7 @@ protected ArrayList getRootClasses()
   }
 
 @Override
-protected Class getSourceClass(){
+protected Class<?> getSourceClass(){
         return Employee.class;
     }
 
diff --git a/foundation/org.eclipse.persistence.nosql/src/it/java/org/eclipse/persistence/testing/oxm/mappings/onetomany/keyonsource/eis/indirection/IndirectionTestCases.java b/foundation/org.eclipse.persistence.nosql/src/it/java/org/eclipse/persistence/testing/oxm/mappings/onetomany/keyonsource/eis/indirection/IndirectionTestCases.java
index b6f642a..093cf45 100644
--- a/foundation/org.eclipse.persistence.nosql/src/it/java/org/eclipse/persistence/testing/oxm/mappings/onetomany/keyonsource/eis/indirection/IndirectionTestCases.java
+++ b/foundation/org.eclipse.persistence.nosql/src/it/java/org/eclipse/persistence/testing/oxm/mappings/onetomany/keyonsource/eis/indirection/IndirectionTestCases.java
@@ -88,7 +88,7 @@ protected ArrayList getRootClasses()
   }
 
     @Override
-    protected Class getSourceClass(){
+    protected Class<?> getSourceClass(){
         return Employee.class;
     }
 
diff --git a/foundation/org.eclipse.persistence.nosql/src/it/java/org/eclipse/persistence/testing/oxm/mappings/onetomany/keyonsource/eis/indirection/arraylist/IndirectionArrayListTestCases.java b/foundation/org.eclipse.persistence.nosql/src/it/java/org/eclipse/persistence/testing/oxm/mappings/onetomany/keyonsource/eis/indirection/arraylist/IndirectionArrayListTestCases.java
index 9a80860..cde8608 100644
--- a/foundation/org.eclipse.persistence.nosql/src/it/java/org/eclipse/persistence/testing/oxm/mappings/onetomany/keyonsource/eis/indirection/arraylist/IndirectionArrayListTestCases.java
+++ b/foundation/org.eclipse.persistence.nosql/src/it/java/org/eclipse/persistence/testing/oxm/mappings/onetomany/keyonsource/eis/indirection/arraylist/IndirectionArrayListTestCases.java
@@ -81,7 +81,7 @@ protected ArrayList getRootClasses()
   }
 
     @Override
-    protected Class getSourceClass(){
+    protected Class<?> getSourceClass(){
         return Employee.class;
     }
 
diff --git a/foundation/org.eclipse.persistence.nosql/src/it/java/org/eclipse/persistence/testing/oxm/mappings/onetomany/keyonsource/eis/indirection/map/IndirectionMapTestCases.java b/foundation/org.eclipse.persistence.nosql/src/it/java/org/eclipse/persistence/testing/oxm/mappings/onetomany/keyonsource/eis/indirection/map/IndirectionMapTestCases.java
index d9339a3..8076aed 100644
--- a/foundation/org.eclipse.persistence.nosql/src/it/java/org/eclipse/persistence/testing/oxm/mappings/onetomany/keyonsource/eis/indirection/map/IndirectionMapTestCases.java
+++ b/foundation/org.eclipse.persistence.nosql/src/it/java/org/eclipse/persistence/testing/oxm/mappings/onetomany/keyonsource/eis/indirection/map/IndirectionMapTestCases.java
@@ -85,7 +85,7 @@ protected ArrayList getRootClasses()
   }
 
     @Override
-    protected Class getSourceClass(){
+    protected Class<?> getSourceClass(){
         return Employee.class;
     }
 
diff --git a/foundation/org.eclipse.persistence.nosql/src/it/java/org/eclipse/persistence/testing/oxm/mappings/onetomany/keyonsource/eis/map/MapTestCases.java b/foundation/org.eclipse.persistence.nosql/src/it/java/org/eclipse/persistence/testing/oxm/mappings/onetomany/keyonsource/eis/map/MapTestCases.java
index 66ff887..577f65a 100644
--- a/foundation/org.eclipse.persistence.nosql/src/it/java/org/eclipse/persistence/testing/oxm/mappings/onetomany/keyonsource/eis/map/MapTestCases.java
+++ b/foundation/org.eclipse.persistence.nosql/src/it/java/org/eclipse/persistence/testing/oxm/mappings/onetomany/keyonsource/eis/map/MapTestCases.java
@@ -85,7 +85,7 @@ protected ArrayList getRootClasses()
   }
 
     @Override
-    protected Class getSourceClass(){
+    protected Class<?> getSourceClass(){
         return Employee.class;
     }
 
diff --git a/foundation/org.eclipse.persistence.nosql/src/it/java/org/eclipse/persistence/testing/oxm/mappings/onetomany/keyonsource/eis/nestedgroupingelement/nestedforeignkey/NestedForeignKeyTestCases.java b/foundation/org.eclipse.persistence.nosql/src/it/java/org/eclipse/persistence/testing/oxm/mappings/onetomany/keyonsource/eis/nestedgroupingelement/nestedforeignkey/NestedForeignKeyTestCases.java
index e43e1b7..8955ed1 100644
--- a/foundation/org.eclipse.persistence.nosql/src/it/java/org/eclipse/persistence/testing/oxm/mappings/onetomany/keyonsource/eis/nestedgroupingelement/nestedforeignkey/NestedForeignKeyTestCases.java
+++ b/foundation/org.eclipse.persistence.nosql/src/it/java/org/eclipse/persistence/testing/oxm/mappings/onetomany/keyonsource/eis/nestedgroupingelement/nestedforeignkey/NestedForeignKeyTestCases.java
@@ -86,7 +86,7 @@ protected ArrayList getRootClasses()
   }
 
     @Override
-    protected Class getSourceClass(){
+    protected Class<?> getSourceClass(){
         return Team.class;
     }
 
diff --git a/foundation/org.eclipse.persistence.nosql/src/it/java/org/eclipse/persistence/testing/oxm/mappings/onetomany/keyonsource/eis/nestedgroupingelement/nestedownedtoexternalroot/NestedOwnedToExternalRootTestCases.java b/foundation/org.eclipse.persistence.nosql/src/it/java/org/eclipse/persistence/testing/oxm/mappings/onetomany/keyonsource/eis/nestedgroupingelement/nestedownedtoexternalroot/NestedOwnedToExternalRootTestCases.java
index 59d54cc..078dd67 100644
--- a/foundation/org.eclipse.persistence.nosql/src/it/java/org/eclipse/persistence/testing/oxm/mappings/onetomany/keyonsource/eis/nestedgroupingelement/nestedownedtoexternalroot/NestedOwnedToExternalRootTestCases.java
+++ b/foundation/org.eclipse.persistence.nosql/src/it/java/org/eclipse/persistence/testing/oxm/mappings/onetomany/keyonsource/eis/nestedgroupingelement/nestedownedtoexternalroot/NestedOwnedToExternalRootTestCases.java
@@ -90,7 +90,7 @@ protected ArrayList getRootClasses()
   }
 
     @Override
-    protected Class getSourceClass(){
+    protected Class<?> getSourceClass(){
         return Company.class;
     }
   @Override
diff --git a/foundation/org.eclipse.persistence.nosql/src/it/java/org/eclipse/persistence/testing/oxm/mappings/onetomany/keyonsource/eis/nestedgroupingelement/ownedtoexternalroot/OwnedToExternalRootTestCases.java b/foundation/org.eclipse.persistence.nosql/src/it/java/org/eclipse/persistence/testing/oxm/mappings/onetomany/keyonsource/eis/nestedgroupingelement/ownedtoexternalroot/OwnedToExternalRootTestCases.java
index 6492484..01af9fe 100644
--- a/foundation/org.eclipse.persistence.nosql/src/it/java/org/eclipse/persistence/testing/oxm/mappings/onetomany/keyonsource/eis/nestedgroupingelement/ownedtoexternalroot/OwnedToExternalRootTestCases.java
+++ b/foundation/org.eclipse.persistence.nosql/src/it/java/org/eclipse/persistence/testing/oxm/mappings/onetomany/keyonsource/eis/nestedgroupingelement/ownedtoexternalroot/OwnedToExternalRootTestCases.java
@@ -87,7 +87,7 @@ protected ArrayList getRootClasses()
   }
 
     @Override
-    protected Class getSourceClass(){
+    protected Class<?> getSourceClass(){
         return Team.class;
     }
 
diff --git a/foundation/org.eclipse.persistence.nosql/src/it/java/org/eclipse/persistence/testing/oxm/mappings/onetomany/keyonsource/eis/nestedgroupingelement/roottoroot/RootToRootTestCases.java b/foundation/org.eclipse.persistence.nosql/src/it/java/org/eclipse/persistence/testing/oxm/mappings/onetomany/keyonsource/eis/nestedgroupingelement/roottoroot/RootToRootTestCases.java
index 2f8a9bc..0a204b0 100644
--- a/foundation/org.eclipse.persistence.nosql/src/it/java/org/eclipse/persistence/testing/oxm/mappings/onetomany/keyonsource/eis/nestedgroupingelement/roottoroot/RootToRootTestCases.java
+++ b/foundation/org.eclipse.persistence.nosql/src/it/java/org/eclipse/persistence/testing/oxm/mappings/onetomany/keyonsource/eis/nestedgroupingelement/roottoroot/RootToRootTestCases.java
@@ -84,7 +84,7 @@ protected ArrayList getRootClasses()
   }
 
     @Override
-    protected Class getSourceClass(){
+    protected Class<?> getSourceClass(){
         return Employee.class;
     }
 
diff --git a/foundation/org.eclipse.persistence.nosql/src/it/java/org/eclipse/persistence/testing/oxm/mappings/onetomany/keyonsource/eis/nestedownedtoexternalroot/NestedOwnedToExternalRootTestCases.java b/foundation/org.eclipse.persistence.nosql/src/it/java/org/eclipse/persistence/testing/oxm/mappings/onetomany/keyonsource/eis/nestedownedtoexternalroot/NestedOwnedToExternalRootTestCases.java
index 5f6c0f1..d48ad7f 100644
--- a/foundation/org.eclipse.persistence.nosql/src/it/java/org/eclipse/persistence/testing/oxm/mappings/onetomany/keyonsource/eis/nestedownedtoexternalroot/NestedOwnedToExternalRootTestCases.java
+++ b/foundation/org.eclipse.persistence.nosql/src/it/java/org/eclipse/persistence/testing/oxm/mappings/onetomany/keyonsource/eis/nestedownedtoexternalroot/NestedOwnedToExternalRootTestCases.java
@@ -89,7 +89,7 @@ protected ArrayList getRootClasses()
   }
 
     @Override
-    protected Class getSourceClass(){
+    protected Class<?> getSourceClass(){
         return Company.class;
     }
 
diff --git a/foundation/org.eclipse.persistence.nosql/src/it/java/org/eclipse/persistence/testing/oxm/mappings/onetomany/keyonsource/eis/nogroupingelement/arraylist/NoGroupingElementArrayListTestCases.java b/foundation/org.eclipse.persistence.nosql/src/it/java/org/eclipse/persistence/testing/oxm/mappings/onetomany/keyonsource/eis/nogroupingelement/arraylist/NoGroupingElementArrayListTestCases.java
index 32f96e0..ec4f30e 100644
--- a/foundation/org.eclipse.persistence.nosql/src/it/java/org/eclipse/persistence/testing/oxm/mappings/onetomany/keyonsource/eis/nogroupingelement/arraylist/NoGroupingElementArrayListTestCases.java
+++ b/foundation/org.eclipse.persistence.nosql/src/it/java/org/eclipse/persistence/testing/oxm/mappings/onetomany/keyonsource/eis/nogroupingelement/arraylist/NoGroupingElementArrayListTestCases.java
@@ -82,7 +82,7 @@ protected ArrayList getRootClasses()
 
 
     @Override
-    protected Class getSourceClass(){
+    protected Class<?> getSourceClass(){
         return Employee.class;
     }
 
diff --git a/foundation/org.eclipse.persistence.nosql/src/it/java/org/eclipse/persistence/testing/oxm/mappings/onetomany/keyonsource/eis/nogroupingelement/indirection/NoGroupingElementIndirectionTestCases.java b/foundation/org.eclipse.persistence.nosql/src/it/java/org/eclipse/persistence/testing/oxm/mappings/onetomany/keyonsource/eis/nogroupingelement/indirection/NoGroupingElementIndirectionTestCases.java
index b58b0c0..2b6e48f 100644
--- a/foundation/org.eclipse.persistence.nosql/src/it/java/org/eclipse/persistence/testing/oxm/mappings/onetomany/keyonsource/eis/nogroupingelement/indirection/NoGroupingElementIndirectionTestCases.java
+++ b/foundation/org.eclipse.persistence.nosql/src/it/java/org/eclipse/persistence/testing/oxm/mappings/onetomany/keyonsource/eis/nogroupingelement/indirection/NoGroupingElementIndirectionTestCases.java
@@ -85,7 +85,7 @@ protected ArrayList getRootClasses()
   }
 
     @Override
-    protected Class getSourceClass(){
+    protected Class<?> getSourceClass(){
         return Employee.class;
     }
 
diff --git a/foundation/org.eclipse.persistence.nosql/src/it/java/org/eclipse/persistence/testing/oxm/mappings/onetomany/keyonsource/eis/nogroupingelement/indirection/arraylist/NoGroupingElementIndirectionArrayListTestCases.java b/foundation/org.eclipse.persistence.nosql/src/it/java/org/eclipse/persistence/testing/oxm/mappings/onetomany/keyonsource/eis/nogroupingelement/indirection/arraylist/NoGroupingElementIndirectionArrayListTestCases.java
index 41265b4..ae28bab 100644
--- a/foundation/org.eclipse.persistence.nosql/src/it/java/org/eclipse/persistence/testing/oxm/mappings/onetomany/keyonsource/eis/nogroupingelement/indirection/arraylist/NoGroupingElementIndirectionArrayListTestCases.java
+++ b/foundation/org.eclipse.persistence.nosql/src/it/java/org/eclipse/persistence/testing/oxm/mappings/onetomany/keyonsource/eis/nogroupingelement/indirection/arraylist/NoGroupingElementIndirectionArrayListTestCases.java
@@ -81,7 +81,7 @@ protected ArrayList getRootClasses()
   }
 
     @Override
-    protected Class getSourceClass(){
+    protected Class<?> getSourceClass(){
         return Employee.class;
     }
 
diff --git a/foundation/org.eclipse.persistence.nosql/src/it/java/org/eclipse/persistence/testing/oxm/mappings/onetomany/keyonsource/eis/nogroupingelement/indirection/map/NoGroupingElementIndirectionMapTestCases.java b/foundation/org.eclipse.persistence.nosql/src/it/java/org/eclipse/persistence/testing/oxm/mappings/onetomany/keyonsource/eis/nogroupingelement/indirection/map/NoGroupingElementIndirectionMapTestCases.java
index e5649ec..338dd1c 100644
--- a/foundation/org.eclipse.persistence.nosql/src/it/java/org/eclipse/persistence/testing/oxm/mappings/onetomany/keyonsource/eis/nogroupingelement/indirection/map/NoGroupingElementIndirectionMapTestCases.java
+++ b/foundation/org.eclipse.persistence.nosql/src/it/java/org/eclipse/persistence/testing/oxm/mappings/onetomany/keyonsource/eis/nogroupingelement/indirection/map/NoGroupingElementIndirectionMapTestCases.java
@@ -84,7 +84,7 @@ protected ArrayList getRootClasses()
   }
 
  @Override
- protected Class getSourceClass(){
+ protected Class<?> getSourceClass(){
         return Employee.class;
     }
 
diff --git a/foundation/org.eclipse.persistence.nosql/src/it/java/org/eclipse/persistence/testing/oxm/mappings/onetomany/keyonsource/eis/nogroupingelement/map/NoGroupingElementMapTestCases.java b/foundation/org.eclipse.persistence.nosql/src/it/java/org/eclipse/persistence/testing/oxm/mappings/onetomany/keyonsource/eis/nogroupingelement/map/NoGroupingElementMapTestCases.java
index b5027cb..2a8e657 100644
--- a/foundation/org.eclipse.persistence.nosql/src/it/java/org/eclipse/persistence/testing/oxm/mappings/onetomany/keyonsource/eis/nogroupingelement/map/NoGroupingElementMapTestCases.java
+++ b/foundation/org.eclipse.persistence.nosql/src/it/java/org/eclipse/persistence/testing/oxm/mappings/onetomany/keyonsource/eis/nogroupingelement/map/NoGroupingElementMapTestCases.java
@@ -84,7 +84,7 @@ protected ArrayList getRootClasses()
   }
 
     @Override
-    protected Class getSourceClass(){
+    protected Class<?> getSourceClass(){
         return Employee.class;
     }
 
diff --git a/foundation/org.eclipse.persistence.nosql/src/it/java/org/eclipse/persistence/testing/oxm/mappings/onetomany/keyonsource/eis/nogroupingelement/nestedownedtoexternalroot/NestedOwnedToExternalRootTestCases.java b/foundation/org.eclipse.persistence.nosql/src/it/java/org/eclipse/persistence/testing/oxm/mappings/onetomany/keyonsource/eis/nogroupingelement/nestedownedtoexternalroot/NestedOwnedToExternalRootTestCases.java
index 40118a2..8d9b9bc 100644
--- a/foundation/org.eclipse.persistence.nosql/src/it/java/org/eclipse/persistence/testing/oxm/mappings/onetomany/keyonsource/eis/nogroupingelement/nestedownedtoexternalroot/NestedOwnedToExternalRootTestCases.java
+++ b/foundation/org.eclipse.persistence.nosql/src/it/java/org/eclipse/persistence/testing/oxm/mappings/onetomany/keyonsource/eis/nogroupingelement/nestedownedtoexternalroot/NestedOwnedToExternalRootTestCases.java
@@ -90,7 +90,7 @@ protected ArrayList getRootClasses()
   }
 
     @Override
-    protected Class getSourceClass(){
+    protected Class<?> getSourceClass(){
         return Company.class;
     }
 
diff --git a/foundation/org.eclipse.persistence.nosql/src/it/java/org/eclipse/persistence/testing/oxm/mappings/onetomany/keyonsource/eis/nogroupingelement/ownedtoexternalroot/OwnedToExternalRootTestCases.java b/foundation/org.eclipse.persistence.nosql/src/it/java/org/eclipse/persistence/testing/oxm/mappings/onetomany/keyonsource/eis/nogroupingelement/ownedtoexternalroot/OwnedToExternalRootTestCases.java
index ae42d8b..b913d2f 100644
--- a/foundation/org.eclipse.persistence.nosql/src/it/java/org/eclipse/persistence/testing/oxm/mappings/onetomany/keyonsource/eis/nogroupingelement/ownedtoexternalroot/OwnedToExternalRootTestCases.java
+++ b/foundation/org.eclipse.persistence.nosql/src/it/java/org/eclipse/persistence/testing/oxm/mappings/onetomany/keyonsource/eis/nogroupingelement/ownedtoexternalroot/OwnedToExternalRootTestCases.java
@@ -85,7 +85,7 @@ protected ArrayList getRootClasses()
   }
 
     @Override
-    protected Class getSourceClass(){
+    protected Class<?> getSourceClass(){
         return Team.class;
     }
   @Override
diff --git a/foundation/org.eclipse.persistence.nosql/src/it/java/org/eclipse/persistence/testing/oxm/mappings/onetomany/keyonsource/eis/nogroupingelement/roottoroot/RootToRootTestCases.java b/foundation/org.eclipse.persistence.nosql/src/it/java/org/eclipse/persistence/testing/oxm/mappings/onetomany/keyonsource/eis/nogroupingelement/roottoroot/RootToRootTestCases.java
index a10d223..eb6cd9f 100644
--- a/foundation/org.eclipse.persistence.nosql/src/it/java/org/eclipse/persistence/testing/oxm/mappings/onetomany/keyonsource/eis/nogroupingelement/roottoroot/RootToRootTestCases.java
+++ b/foundation/org.eclipse.persistence.nosql/src/it/java/org/eclipse/persistence/testing/oxm/mappings/onetomany/keyonsource/eis/nogroupingelement/roottoroot/RootToRootTestCases.java
@@ -82,7 +82,7 @@ protected ArrayList getRootClasses()
   }
 
     @Override
-    protected Class getSourceClass(){
+    protected Class<?> getSourceClass(){
         return Employee.class;
     }
 
diff --git a/foundation/org.eclipse.persistence.nosql/src/it/java/org/eclipse/persistence/testing/oxm/mappings/onetomany/keyonsource/eis/ownedtoexternalroot/OwnedToExternalRootTestCases.java b/foundation/org.eclipse.persistence.nosql/src/it/java/org/eclipse/persistence/testing/oxm/mappings/onetomany/keyonsource/eis/ownedtoexternalroot/OwnedToExternalRootTestCases.java
index 5032a79..fb5c958 100644
--- a/foundation/org.eclipse.persistence.nosql/src/it/java/org/eclipse/persistence/testing/oxm/mappings/onetomany/keyonsource/eis/ownedtoexternalroot/OwnedToExternalRootTestCases.java
+++ b/foundation/org.eclipse.persistence.nosql/src/it/java/org/eclipse/persistence/testing/oxm/mappings/onetomany/keyonsource/eis/ownedtoexternalroot/OwnedToExternalRootTestCases.java
@@ -86,7 +86,7 @@ protected ArrayList getRootClasses()
   }
 
     @Override
-    protected Class getSourceClass(){
+    protected Class<?> getSourceClass(){
         return Team.class;
     }
   @Override
diff --git a/foundation/org.eclipse.persistence.nosql/src/it/java/org/eclipse/persistence/testing/oxm/mappings/onetomany/keyonsource/eis/roottoroot/RootToRootTestCases.java b/foundation/org.eclipse.persistence.nosql/src/it/java/org/eclipse/persistence/testing/oxm/mappings/onetomany/keyonsource/eis/roottoroot/RootToRootTestCases.java
index a6f88e8..040e99d 100644
--- a/foundation/org.eclipse.persistence.nosql/src/it/java/org/eclipse/persistence/testing/oxm/mappings/onetomany/keyonsource/eis/roottoroot/RootToRootTestCases.java
+++ b/foundation/org.eclipse.persistence.nosql/src/it/java/org/eclipse/persistence/testing/oxm/mappings/onetomany/keyonsource/eis/roottoroot/RootToRootTestCases.java
@@ -83,7 +83,7 @@ protected ArrayList getRootClasses()
   }
 
     @Override
-    protected Class getSourceClass(){
+    protected Class<?> getSourceClass(){
         return Employee.class;
     }
 
diff --git a/foundation/org.eclipse.persistence.nosql/src/it/java/org/eclipse/persistence/testing/oxm/mappings/onetomany/keyontarget/eis/nestedownedtoexternalroot/NestedOwnedToExternalRootTestCases.java b/foundation/org.eclipse.persistence.nosql/src/it/java/org/eclipse/persistence/testing/oxm/mappings/onetomany/keyontarget/eis/nestedownedtoexternalroot/NestedOwnedToExternalRootTestCases.java
index 23b60e8..caf7649 100644
--- a/foundation/org.eclipse.persistence.nosql/src/it/java/org/eclipse/persistence/testing/oxm/mappings/onetomany/keyontarget/eis/nestedownedtoexternalroot/NestedOwnedToExternalRootTestCases.java
+++ b/foundation/org.eclipse.persistence.nosql/src/it/java/org/eclipse/persistence/testing/oxm/mappings/onetomany/keyontarget/eis/nestedownedtoexternalroot/NestedOwnedToExternalRootTestCases.java
@@ -101,7 +101,7 @@ protected ArrayList getRootClasses() {
     }
 
     @Override
-    protected Class getSourceClass() {
+    protected Class<?> getSourceClass() {
         return Company.class;
     }
 
diff --git a/foundation/org.eclipse.persistence.nosql/src/it/java/org/eclipse/persistence/testing/oxm/mappings/onetomany/keyontarget/eis/ownedtoexternalroot/OwnedToExternalRootTestCases.java b/foundation/org.eclipse.persistence.nosql/src/it/java/org/eclipse/persistence/testing/oxm/mappings/onetomany/keyontarget/eis/ownedtoexternalroot/OwnedToExternalRootTestCases.java
index db94c83..767a549 100644
--- a/foundation/org.eclipse.persistence.nosql/src/it/java/org/eclipse/persistence/testing/oxm/mappings/onetomany/keyontarget/eis/ownedtoexternalroot/OwnedToExternalRootTestCases.java
+++ b/foundation/org.eclipse.persistence.nosql/src/it/java/org/eclipse/persistence/testing/oxm/mappings/onetomany/keyontarget/eis/ownedtoexternalroot/OwnedToExternalRootTestCases.java
@@ -91,7 +91,7 @@ protected ArrayList getRootClasses() {
     }
 
     @Override
-    protected Class getSourceClass() {
+    protected Class<?> getSourceClass() {
         return Team.class;
     }
 
diff --git a/foundation/org.eclipse.persistence.nosql/src/it/java/org/eclipse/persistence/testing/oxm/mappings/onetomany/keyontarget/eis/roottoroot/RootToRootTestCases.java b/foundation/org.eclipse.persistence.nosql/src/it/java/org/eclipse/persistence/testing/oxm/mappings/onetomany/keyontarget/eis/roottoroot/RootToRootTestCases.java
index 8567d21..1226cf3 100644
--- a/foundation/org.eclipse.persistence.nosql/src/it/java/org/eclipse/persistence/testing/oxm/mappings/onetomany/keyontarget/eis/roottoroot/RootToRootTestCases.java
+++ b/foundation/org.eclipse.persistence.nosql/src/it/java/org/eclipse/persistence/testing/oxm/mappings/onetomany/keyontarget/eis/roottoroot/RootToRootTestCases.java
@@ -98,7 +98,7 @@ protected ArrayList getRootClasses()
   }
 
     @Override
-    protected Class getSourceClass(){
+    protected Class<?> getSourceClass(){
         return Employee.class;
     }
 
diff --git a/foundation/org.eclipse.persistence.nosql/src/it/java/org/eclipse/persistence/testing/oxm/mappings/onetoone/keyonsource/eis/compositekey/CompositeKeyTestCases.java b/foundation/org.eclipse.persistence.nosql/src/it/java/org/eclipse/persistence/testing/oxm/mappings/onetoone/keyonsource/eis/compositekey/CompositeKeyTestCases.java
index de26eae..42a3715 100644
--- a/foundation/org.eclipse.persistence.nosql/src/it/java/org/eclipse/persistence/testing/oxm/mappings/onetoone/keyonsource/eis/compositekey/CompositeKeyTestCases.java
+++ b/foundation/org.eclipse.persistence.nosql/src/it/java/org/eclipse/persistence/testing/oxm/mappings/onetoone/keyonsource/eis/compositekey/CompositeKeyTestCases.java
@@ -83,7 +83,7 @@ protected ArrayList getRootClasses()
   }
 
     @Override
-    protected Class getSourceClass(){
+    protected Class<?> getSourceClass(){
         return Team.class;
     }
 
diff --git a/foundation/org.eclipse.persistence.nosql/src/it/java/org/eclipse/persistence/testing/oxm/mappings/onetoone/keyonsource/eis/nestedownedtoexternalroot/NestedOwnedToExternalRootTestCases.java b/foundation/org.eclipse.persistence.nosql/src/it/java/org/eclipse/persistence/testing/oxm/mappings/onetoone/keyonsource/eis/nestedownedtoexternalroot/NestedOwnedToExternalRootTestCases.java
index 1d1ea69..a9d5f8e 100644
--- a/foundation/org.eclipse.persistence.nosql/src/it/java/org/eclipse/persistence/testing/oxm/mappings/onetoone/keyonsource/eis/nestedownedtoexternalroot/NestedOwnedToExternalRootTestCases.java
+++ b/foundation/org.eclipse.persistence.nosql/src/it/java/org/eclipse/persistence/testing/oxm/mappings/onetoone/keyonsource/eis/nestedownedtoexternalroot/NestedOwnedToExternalRootTestCases.java
@@ -92,7 +92,7 @@ protected ArrayList getRootClasses()
   }
 
     @Override
-    protected Class getSourceClass(){
+    protected Class<?> getSourceClass(){
         return Company.class;
     }
   @Override
diff --git a/foundation/org.eclipse.persistence.nosql/src/it/java/org/eclipse/persistence/testing/oxm/mappings/onetoone/keyonsource/eis/nointeraction/NoInteractionTestCases.java b/foundation/org.eclipse.persistence.nosql/src/it/java/org/eclipse/persistence/testing/oxm/mappings/onetoone/keyonsource/eis/nointeraction/NoInteractionTestCases.java
index c7f20cb..3d30214 100644
--- a/foundation/org.eclipse.persistence.nosql/src/it/java/org/eclipse/persistence/testing/oxm/mappings/onetoone/keyonsource/eis/nointeraction/NoInteractionTestCases.java
+++ b/foundation/org.eclipse.persistence.nosql/src/it/java/org/eclipse/persistence/testing/oxm/mappings/onetoone/keyonsource/eis/nointeraction/NoInteractionTestCases.java
@@ -79,7 +79,7 @@ protected ArrayList getRootClasses()
   }
 
     @Override
-    protected Class getSourceClass(){
+    protected Class<?> getSourceClass(){
         return Employee.class;
     }
   @Override
diff --git a/foundation/org.eclipse.persistence.nosql/src/it/java/org/eclipse/persistence/testing/oxm/mappings/onetoone/keyonsource/eis/nullkey/NullKeyTestCases.java b/foundation/org.eclipse.persistence.nosql/src/it/java/org/eclipse/persistence/testing/oxm/mappings/onetoone/keyonsource/eis/nullkey/NullKeyTestCases.java
index fd7e6b3..690f264 100644
--- a/foundation/org.eclipse.persistence.nosql/src/it/java/org/eclipse/persistence/testing/oxm/mappings/onetoone/keyonsource/eis/nullkey/NullKeyTestCases.java
+++ b/foundation/org.eclipse.persistence.nosql/src/it/java/org/eclipse/persistence/testing/oxm/mappings/onetoone/keyonsource/eis/nullkey/NullKeyTestCases.java
@@ -80,7 +80,7 @@ protected ArrayList getRootClasses()
   }
 
     @Override
-    protected Class getSourceClass(){
+    protected Class<?> getSourceClass(){
         return Employee.class;
     }
 
diff --git a/foundation/org.eclipse.persistence.nosql/src/it/java/org/eclipse/persistence/testing/oxm/mappings/onetoone/keyonsource/eis/ownedtoexternalroot/OwnedToExternalRootTestCases.java b/foundation/org.eclipse.persistence.nosql/src/it/java/org/eclipse/persistence/testing/oxm/mappings/onetoone/keyonsource/eis/ownedtoexternalroot/OwnedToExternalRootTestCases.java
index f62b7b8..48c8579 100644
--- a/foundation/org.eclipse.persistence.nosql/src/it/java/org/eclipse/persistence/testing/oxm/mappings/onetoone/keyonsource/eis/ownedtoexternalroot/OwnedToExternalRootTestCases.java
+++ b/foundation/org.eclipse.persistence.nosql/src/it/java/org/eclipse/persistence/testing/oxm/mappings/onetoone/keyonsource/eis/ownedtoexternalroot/OwnedToExternalRootTestCases.java
@@ -84,7 +84,7 @@ protected ArrayList getRootClasses()
   }
 
     @Override
-    protected Class getSourceClass(){
+    protected Class<?> getSourceClass(){
         return Team.class;
     }
   @Override
diff --git a/foundation/org.eclipse.persistence.nosql/src/it/java/org/eclipse/persistence/testing/oxm/mappings/onetoone/keyonsource/eis/roottoroot/RootToRootTestCases.java b/foundation/org.eclipse.persistence.nosql/src/it/java/org/eclipse/persistence/testing/oxm/mappings/onetoone/keyonsource/eis/roottoroot/RootToRootTestCases.java
index 2f807ca..6059951 100644
--- a/foundation/org.eclipse.persistence.nosql/src/it/java/org/eclipse/persistence/testing/oxm/mappings/onetoone/keyonsource/eis/roottoroot/RootToRootTestCases.java
+++ b/foundation/org.eclipse.persistence.nosql/src/it/java/org/eclipse/persistence/testing/oxm/mappings/onetoone/keyonsource/eis/roottoroot/RootToRootTestCases.java
@@ -79,7 +79,7 @@ protected ArrayList getRootClasses()
   }
 
     @Override
-    protected Class getSourceClass(){
+    protected Class<?> getSourceClass(){
         return Employee.class;
     }
   @Override
diff --git a/foundation/org.eclipse.persistence.nosql/src/it/java/org/eclipse/persistence/testing/oxm/mappings/onetoone/keyontarget/eis/nestedownedtoexternalroot/NestedOwnedToExternalRootTestCases.java b/foundation/org.eclipse.persistence.nosql/src/it/java/org/eclipse/persistence/testing/oxm/mappings/onetoone/keyontarget/eis/nestedownedtoexternalroot/NestedOwnedToExternalRootTestCases.java
index 4d39bb1..f994eb9 100644
--- a/foundation/org.eclipse.persistence.nosql/src/it/java/org/eclipse/persistence/testing/oxm/mappings/onetoone/keyontarget/eis/nestedownedtoexternalroot/NestedOwnedToExternalRootTestCases.java
+++ b/foundation/org.eclipse.persistence.nosql/src/it/java/org/eclipse/persistence/testing/oxm/mappings/onetoone/keyontarget/eis/nestedownedtoexternalroot/NestedOwnedToExternalRootTestCases.java
@@ -91,7 +91,7 @@ protected ArrayList getRootClasses() {
     }
 
     @Override
-    protected Class getSourceClass() {
+    protected Class<?> getSourceClass() {
         return Company.class;
     }
 
diff --git a/foundation/org.eclipse.persistence.nosql/src/it/java/org/eclipse/persistence/testing/oxm/mappings/onetoone/keyontarget/eis/nullkey/NullKeyTestCases.java b/foundation/org.eclipse.persistence.nosql/src/it/java/org/eclipse/persistence/testing/oxm/mappings/onetoone/keyontarget/eis/nullkey/NullKeyTestCases.java
index ad74359..4cc33eb 100644
--- a/foundation/org.eclipse.persistence.nosql/src/it/java/org/eclipse/persistence/testing/oxm/mappings/onetoone/keyontarget/eis/nullkey/NullKeyTestCases.java
+++ b/foundation/org.eclipse.persistence.nosql/src/it/java/org/eclipse/persistence/testing/oxm/mappings/onetoone/keyontarget/eis/nullkey/NullKeyTestCases.java
@@ -80,7 +80,7 @@ protected ArrayList getRootClasses()
   }
 
     @Override
-    protected Class getSourceClass(){
+    protected Class<?> getSourceClass(){
         return Employee.class;
     }
   @Override
diff --git a/foundation/org.eclipse.persistence.nosql/src/it/java/org/eclipse/persistence/testing/oxm/mappings/onetoone/keyontarget/eis/ownedtoexternalroot/OwnedToExternalRootTestCases.java b/foundation/org.eclipse.persistence.nosql/src/it/java/org/eclipse/persistence/testing/oxm/mappings/onetoone/keyontarget/eis/ownedtoexternalroot/OwnedToExternalRootTestCases.java
index 4c11b83..58af001 100644
--- a/foundation/org.eclipse.persistence.nosql/src/it/java/org/eclipse/persistence/testing/oxm/mappings/onetoone/keyontarget/eis/ownedtoexternalroot/OwnedToExternalRootTestCases.java
+++ b/foundation/org.eclipse.persistence.nosql/src/it/java/org/eclipse/persistence/testing/oxm/mappings/onetoone/keyontarget/eis/ownedtoexternalroot/OwnedToExternalRootTestCases.java
@@ -91,7 +91,7 @@ protected ArrayList getRootClasses() {
     }
 
     @Override
-    protected Class getSourceClass() {
+    protected Class<?> getSourceClass() {
         return Team.class;
     }
 
diff --git a/foundation/org.eclipse.persistence.nosql/src/it/java/org/eclipse/persistence/testing/oxm/mappings/onetoone/keyontarget/eis/roottoroot/RootToRootTestCases.java b/foundation/org.eclipse.persistence.nosql/src/it/java/org/eclipse/persistence/testing/oxm/mappings/onetoone/keyontarget/eis/roottoroot/RootToRootTestCases.java
index e4408e0..146a894 100644
--- a/foundation/org.eclipse.persistence.nosql/src/it/java/org/eclipse/persistence/testing/oxm/mappings/onetoone/keyontarget/eis/roottoroot/RootToRootTestCases.java
+++ b/foundation/org.eclipse.persistence.nosql/src/it/java/org/eclipse/persistence/testing/oxm/mappings/onetoone/keyontarget/eis/roottoroot/RootToRootTestCases.java
@@ -96,7 +96,7 @@ protected ArrayList getRootClasses()
   }
 
     @Override
-    protected Class getSourceClass(){
+    protected Class<?> getSourceClass(){
         return Employee.class;
     }
 
diff --git a/foundation/org.eclipse.persistence.oracle.test/src/it/java/org/eclipse/persistence/testing/tests/conversion/CMAndPlatformWrapper.java b/foundation/org.eclipse.persistence.oracle.test/src/it/java/org/eclipse/persistence/testing/tests/conversion/CMAndPlatformWrapper.java
index a1ef1a7..9baf031 100644
--- a/foundation/org.eclipse.persistence.oracle.test/src/it/java/org/eclipse/persistence/testing/tests/conversion/CMAndPlatformWrapper.java
+++ b/foundation/org.eclipse.persistence.oracle.test/src/it/java/org/eclipse/persistence/testing/tests/conversion/CMAndPlatformWrapper.java
@@ -28,7 +28,7 @@ public CMAndPlatformWrapper(Object object) {
         wrappedObj = object;
     }
 
-    public List getDataTypesConvertedFrom(Class aClass) {
+    public List getDataTypesConvertedFrom(Class<?> aClass) {
         if (wrappedObj instanceof ConversionManager) {
             return ((ConversionManager)wrappedObj).getDataTypesConvertedFrom(aClass);
         } else if (wrappedObj instanceof Oracle9Platform) {
@@ -37,7 +37,7 @@ public List getDataTypesConvertedFrom(Class aClass) {
         return new Vector();
     }
 
-    public List getDataTypesConvertedTo(Class aClass) {
+    public List getDataTypesConvertedTo(Class<?> aClass) {
         if (wrappedObj instanceof ConversionManager) {
             return ((ConversionManager)wrappedObj).getDataTypesConvertedTo(aClass);
         } else if (wrappedObj instanceof Oracle9Platform) {
@@ -46,7 +46,7 @@ public List getDataTypesConvertedTo(Class aClass) {
         return new Vector();
     }
 
-    public Object convertObject(Object object, Class aClass) {
+    public Object convertObject(Object object, Class<?> aClass) {
         if (wrappedObj instanceof ConversionManager) {
             return ((ConversionManager)wrappedObj).convertObject(object, aClass);
         } else if (wrappedObj instanceof Oracle9Platform) {
diff --git a/foundation/org.eclipse.persistence.oracle.test/src/it/java/org/eclipse/persistence/testing/tests/conversion/DataTypesConvertedFromAClassForOracle9Test.java b/foundation/org.eclipse.persistence.oracle.test/src/it/java/org/eclipse/persistence/testing/tests/conversion/DataTypesConvertedFromAClassForOracle9Test.java
index dc9bb65..a88e9b7 100644
--- a/foundation/org.eclipse.persistence.oracle.test/src/it/java/org/eclipse/persistence/testing/tests/conversion/DataTypesConvertedFromAClassForOracle9Test.java
+++ b/foundation/org.eclipse.persistence.oracle.test/src/it/java/org/eclipse/persistence/testing/tests/conversion/DataTypesConvertedFromAClassForOracle9Test.java
@@ -34,7 +34,7 @@ public void setup() {
     }
 
     @Override
-    protected boolean isChar(Class aClass) {
+    protected boolean isChar(Class<?> aClass) {
         return super.isChar(aClass) || aClass == Oracle9Platform.NCHAR || aClass == Oracle9Platform.NSTRING ||
             aClass == Oracle9Platform.NCLOB;
     }
diff --git a/foundation/org.eclipse.persistence.oracle.test/src/it/java/org/eclipse/persistence/testing/tests/conversion/DataTypesConvertedFromAClassTest.java b/foundation/org.eclipse.persistence.oracle.test/src/it/java/org/eclipse/persistence/testing/tests/conversion/DataTypesConvertedFromAClassTest.java
index 3d5d3b2..868fb88 100644
--- a/foundation/org.eclipse.persistence.oracle.test/src/it/java/org/eclipse/persistence/testing/tests/conversion/DataTypesConvertedFromAClassTest.java
+++ b/foundation/org.eclipse.persistence.oracle.test/src/it/java/org/eclipse/persistence/testing/tests/conversion/DataTypesConvertedFromAClassTest.java
@@ -33,8 +33,8 @@ public class DataTypesConvertedFromAClassTest extends AutoVerifyTestCase {
     protected Object cm;
     protected Exception exception1;
     protected Exception exception2;
-    protected Class sourceClass;
-    protected Class targetClass;
+    protected Class<?> sourceClass;
+    protected Class<?> targetClass;
 
     public DataTypesConvertedFromAClassTest() {
         setDescription("Test getDataTypesConvertedFrom() in ConversionManager.");
@@ -51,7 +51,7 @@ public void test() {
         int x;
         int y;
         Object obj;
-        Class type;
+        Class<?> type;
         CMAndPlatformWrapper wrapper = new CMAndPlatformWrapper(cm);
 
         ConversionDataObjectForSupportedTypes example = ConversionDataObjectForSupportedTypes.example();
@@ -97,15 +97,15 @@ protected ConversionManager getCm() {
         return (ConversionManager)cm;
     }
 
-    protected boolean isNumber(Class aClass) {
+    protected boolean isNumber(Class<?> aClass) {
         return Number.class.isAssignableFrom(aClass);
     }
 
-    protected boolean isTimestamp(Class aClass) {
+    protected boolean isTimestamp(Class<?> aClass) {
         return (aClass == java.util.Date.class) || (aClass == Timestamp.class) || (aClass == Calendar.class);
     }
 
-    protected boolean isChar(Class aClass) {
+    protected boolean isChar(Class<?> aClass) {
         return (aClass == Character.class) || (aClass == Character[].class) || (aClass == char[].class) || (aClass == String.class) || (aClass == java.sql.Clob.class);
     }
 }
diff --git a/foundation/org.eclipse.persistence.oracle.test/src/it/java/org/eclipse/persistence/testing/tests/conversion/DataTypesConvertedToAClassForOracle9Test.java b/foundation/org.eclipse.persistence.oracle.test/src/it/java/org/eclipse/persistence/testing/tests/conversion/DataTypesConvertedToAClassForOracle9Test.java
index bd791b0..0bada0c 100644
--- a/foundation/org.eclipse.persistence.oracle.test/src/it/java/org/eclipse/persistence/testing/tests/conversion/DataTypesConvertedToAClassForOracle9Test.java
+++ b/foundation/org.eclipse.persistence.oracle.test/src/it/java/org/eclipse/persistence/testing/tests/conversion/DataTypesConvertedToAClassForOracle9Test.java
@@ -27,8 +27,8 @@
 //calling getDataTypesConvertedTo() in Oracle9Platform.
 public class DataTypesConvertedToAClassForOracle9Test extends DataTypesConvertedToAClassTest {
 
-    protected Class[] convertedToClasses =
-        new Class[] { BigDecimal.class, BigInteger.class, Boolean.class, Byte.class, byte[].class, Byte[].class,
+    protected Class<?>[] convertedToClasses =
+        new Class<?>[] { BigDecimal.class, BigInteger.class, Boolean.class, Byte.class, byte[].class, Byte[].class,
                       Calendar.class, Character.class, Character[].class, char[].class, java.sql.Date.class, Double.class,
                       Float.class, Integer.class, Long.class, Number.class, Short.class, String.class, Timestamp.class,
                       Time.class, java.util.Date.class, oracle.sql.TIMESTAMP.class };
@@ -46,7 +46,7 @@ public void setup() {
     }
 
     @Override
-    protected boolean isChar(Class aClass) {
+    protected boolean isChar(Class<?> aClass) {
         return super.isChar(aClass) || aClass == Oracle9Platform.NCHAR || aClass == Oracle9Platform.NSTRING ||
             aClass == Oracle9Platform.NCLOB;
     }
diff --git a/foundation/org.eclipse.persistence.oracle.test/src/it/java/org/eclipse/persistence/testing/tests/conversion/DataTypesConvertedToAClassTest.java b/foundation/org.eclipse.persistence.oracle.test/src/it/java/org/eclipse/persistence/testing/tests/conversion/DataTypesConvertedToAClassTest.java
index b73a718..896162c 100644
--- a/foundation/org.eclipse.persistence.oracle.test/src/it/java/org/eclipse/persistence/testing/tests/conversion/DataTypesConvertedToAClassTest.java
+++ b/foundation/org.eclipse.persistence.oracle.test/src/it/java/org/eclipse/persistence/testing/tests/conversion/DataTypesConvertedToAClassTest.java
@@ -34,9 +34,9 @@ public class DataTypesConvertedToAClassTest extends AutoVerifyTestCase {
     protected Object cm;
     protected Exception exception1;
     protected Exception exception2;
-    protected Class sourceClass;
-    protected Class targetClass;
-    protected Class[] convertedToClasses = new Class[] { BigDecimal.class, BigInteger.class, Boolean.class, Byte.class, byte[].class, Byte[].class, Calendar.class, Character.class, Character[].class, char[].class, java.sql.Date.class, Double.class, Float.class, Integer.class, Long.class, Number.class, Short.class, String.class, Timestamp.class, Time.class, java.util.Date.class };
+    protected Class<?> sourceClass;
+    protected Class<?> targetClass;
+    protected Class<?>[] convertedToClasses = new Class<?>[] { BigDecimal.class, BigInteger.class, Boolean.class, Byte.class, byte[].class, Byte[].class, Calendar.class, Character.class, Character[].class, char[].class, java.sql.Date.class, Double.class, Float.class, Integer.class, Long.class, Number.class, Short.class, String.class, Timestamp.class, Time.class, java.util.Date.class };
 
     public DataTypesConvertedToAClassTest() {
         setDescription("Test getDataTypesConvertedTo() in ConversionManager.");
@@ -54,7 +54,7 @@ public void test() {
         int y;
         int z;
         Object obj;
-        Class type;
+        Class<?> type;
         CMAndPlatformWrapper wrapper = new CMAndPlatformWrapper(cm);
 
         ConversionDataObjectForSupportedTypes example = ConversionDataObjectForSupportedTypes.example();
@@ -97,15 +97,15 @@ public void verify() {
         }
     }
 
-    protected boolean isNumber(Class aClass) {
+    protected boolean isNumber(Class<?> aClass) {
         return Number.class.isAssignableFrom(aClass);
     }
 
-    protected boolean isTimestamp(Class aClass) {
+    protected boolean isTimestamp(Class<?> aClass) {
         return (aClass == java.util.Date.class) || (aClass == Timestamp.class) || (aClass == Calendar.class);
     }
 
-    protected boolean isChar(Class aClass) {
+    protected boolean isChar(Class<?> aClass) {
         return (aClass == Character.class) || (aClass == Character[].class) || (aClass == char[].class) || (aClass == String.class) || (aClass == java.sql.Clob.class);
     }
 }
diff --git a/foundation/org.eclipse.persistence.oracle.test/src/it/java/org/eclipse/persistence/testing/tests/dbchangenotification/CacheInvalidator.java b/foundation/org.eclipse.persistence.oracle.test/src/it/java/org/eclipse/persistence/testing/tests/dbchangenotification/CacheInvalidator.java
index 33254a3..dcf7a13 100644
--- a/foundation/org.eclipse.persistence.oracle.test/src/it/java/org/eclipse/persistence/testing/tests/dbchangenotification/CacheInvalidator.java
+++ b/foundation/org.eclipse.persistence.oracle.test/src/it/java/org/eclipse/persistence/testing/tests/dbchangenotification/CacheInvalidator.java
@@ -108,7 +108,7 @@ protected void initializeWithTableNames(Session session, Collection tableNames)
             removePrefixFromDatabaseObjectNames(descTableNames);
 
             // handle inheritance: table name should be mapped to the base mapped class
-            Class baseClass = desc.getJavaClass();
+            Class<?> baseClass = desc.getJavaClass();
             while (desc.isChildDescriptor()) {
                 desc = session.getDescriptor(desc.getInheritancePolicy().getParentClass());
                 baseClass = desc.getJavaClass();
@@ -150,7 +150,7 @@ public void invalidateObject(Session session, javax.jms.Message msg) throws java
         if (tableName == null) {
             return;
         }
-        Class baseClass = (Class)tableNameToClass.get(tableName);
+        Class<?> baseClass = (Class)tableNameToClass.get(tableName);
         if (baseClass == null) {
             return;
         }
diff --git a/foundation/org.eclipse.persistence.oracle.test/src/it/java/org/eclipse/persistence/testing/tests/dbchangenotification/DbChangeNotificationAdapter.java b/foundation/org.eclipse.persistence.oracle.test/src/it/java/org/eclipse/persistence/testing/tests/dbchangenotification/DbChangeNotificationAdapter.java
index a22f0fc..d1b08a8 100644
--- a/foundation/org.eclipse.persistence.oracle.test/src/it/java/org/eclipse/persistence/testing/tests/dbchangenotification/DbChangeNotificationAdapter.java
+++ b/foundation/org.eclipse.persistence.oracle.test/src/it/java/org/eclipse/persistence/testing/tests/dbchangenotification/DbChangeNotificationAdapter.java
@@ -170,12 +170,12 @@ protected void createOrReplaceTrigger(Session session, String tableName, List pk
 
     protected String getPkFieldString(DatabaseField field) {
         String name = field.getName();
-        Class type = field.getType();
+        Class<?> type = field.getType();
         String str = "  msg.set_" + getJmsPropertyTypeName(type) + "_property('" + name + "', :old." + name + ");";
         return str;
     }
 
-    protected String getJmsPropertyTypeName(Class type) {
+    protected String getJmsPropertyTypeName(Class<?> type) {
         if (Helper.getShortClassName(type).equals("BigDecimal")) {
             return "double";
         } else if (Helper.getShortClassName(type).equals("String")) {
diff --git a/jpa/eclipselink.jpa.nosql.test/src/it/java-templates/org/eclipse/persistence/testing/framework/server/TestRunnerBean.java b/jpa/eclipselink.jpa.nosql.test/src/it/java-templates/org/eclipse/persistence/testing/framework/server/TestRunnerBean.java
index 14305e5..8582b7e 100644
--- a/jpa/eclipselink.jpa.nosql.test/src/it/java-templates/org/eclipse/persistence/testing/framework/server/TestRunnerBean.java
+++ b/jpa/eclipselink.jpa.nosql.test/src/it/java-templates/org/eclipse/persistence/testing/framework/server/TestRunnerBean.java
@@ -62,15 +62,7 @@ public Throwable runTest(String className, String test, Properties props) {
             Class<? extends TestCase> testClass = (Class<? extends TestCase>) getClass().getClassLoader().loadClass(className);
             Constructor<? extends TestCase> c = testClass.getConstructor(String.class);
             testInstance = c.newInstance(test);
-        } catch (ClassNotFoundException e) {
-            throw new EJBException(e);
-        } catch (NoSuchMethodException e) {
-            throw new EJBException(e);
-        } catch (InstantiationException e) {
-            throw new EJBException(e);
-        } catch (IllegalAccessException e) {
-            throw new EJBException(e);
-        } catch (InvocationTargetException e) {
+        } catch (ReflectiveOperationException e) {
             throw new EJBException(e);
         }
 
diff --git a/jpa/eclipselink.jpa.nosql.test/src/it/java-templates/org/eclipse/persistence/testing/framework/server/TestRunnerBean.java_nonjtaDS b/jpa/eclipselink.jpa.nosql.test/src/it/java-templates/org/eclipse/persistence/testing/framework/server/TestRunnerBean.java_nonjtaDS
index fff6625..68e32a8 100644
--- a/jpa/eclipselink.jpa.nosql.test/src/it/java-templates/org/eclipse/persistence/testing/framework/server/TestRunnerBean.java_nonjtaDS
+++ b/jpa/eclipselink.jpa.nosql.test/src/it/java-templates/org/eclipse/persistence/testing/framework/server/TestRunnerBean.java_nonjtaDS
@@ -57,20 +57,12 @@
     public Throwable runTest(String className, String test, Properties props) {
         // load the test class and create an instance
         TestCase testInstance = null;
-        try {
+       try {
             @SuppressWarnings({"unchecked"})
             Class<? extends TestCase> testClass = (Class<? extends TestCase>) getClass().getClassLoader().loadClass(className);
             Constructor<? extends TestCase> c = testClass.getConstructor(String.class);
             testInstance = c.newInstance(test);
-        } catch (ClassNotFoundException e) {
-            throw new EJBException(e);
-        } catch (NoSuchMethodException e) {
-            throw new EJBException(e);
-        } catch (InstantiationException e) {
-            throw new EJBException(e);
-        } catch (IllegalAccessException e) {
-            throw new EJBException(e);
-        } catch (InvocationTargetException e) {
+        } catch (ReflectiveOperationException e) {
             throw new EJBException(e);
         }
 
diff --git a/jpa/eclipselink.jpa.oracle.test/src/it/java-templates/org/eclipse/persistence/testing/framework/server/TestRunnerBean.java b/jpa/eclipselink.jpa.oracle.test/src/it/java-templates/org/eclipse/persistence/testing/framework/server/TestRunnerBean.java
index cf5589b..a694b3f 100644
--- a/jpa/eclipselink.jpa.oracle.test/src/it/java-templates/org/eclipse/persistence/testing/framework/server/TestRunnerBean.java
+++ b/jpa/eclipselink.jpa.oracle.test/src/it/java-templates/org/eclipse/persistence/testing/framework/server/TestRunnerBean.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
@@ -58,18 +58,11 @@ public Throwable runTest(String className, String test, Properties props) {
         // load the test class and create an instance
         TestCase testInstance = null;
         try {
-            Class testClass = getClass().getClassLoader().loadClass(className);
-            Constructor c = testClass.getConstructor(new Class[] { String.class });
-            testInstance = (TestCase) c.newInstance(new Object[] { test });
-        } catch (ClassNotFoundException e) {
-            throw new EJBException(e);
-        } catch (NoSuchMethodException e) {
-            throw new EJBException(e);
-        } catch (InstantiationException e) {
-            throw new EJBException(e);
-        } catch (IllegalAccessException e) {
-            throw new EJBException(e);
-        } catch (InvocationTargetException e) {
+            @SuppressWarnings({"unchecked"})
+            Class<? extends TestCase> testClass = (Class<? extends TestCase>) getClass().getClassLoader().loadClass(className);
+            Constructor<? extends TestCase> c = testClass.getConstructor(String.class);
+            testInstance = c.newInstance(test);
+        } catch (ReflectiveOperationException e) {
             throw new EJBException(e);
         }
 
diff --git a/jpa/eclipselink.jpa.oracle.test/src/it/java-templates/org/eclipse/persistence/testing/framework/server/TestRunnerBean.java_nonjtaDS b/jpa/eclipselink.jpa.oracle.test/src/it/java-templates/org/eclipse/persistence/testing/framework/server/TestRunnerBean.java_nonjtaDS
index 22c4d05..68e32a8 100644
--- a/jpa/eclipselink.jpa.oracle.test/src/it/java-templates/org/eclipse/persistence/testing/framework/server/TestRunnerBean.java_nonjtaDS
+++ b/jpa/eclipselink.jpa.oracle.test/src/it/java-templates/org/eclipse/persistence/testing/framework/server/TestRunnerBean.java_nonjtaDS
@@ -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
@@ -57,19 +57,12 @@
     public Throwable runTest(String className, String test, Properties props) {
         // load the test class and create an instance
         TestCase testInstance = null;
-        try {
-            Class testClass = getClass().getClassLoader().loadClass(className);
-            Constructor c = testClass.getConstructor(new Class[] { String.class });
-            testInstance = (TestCase) c.newInstance(new Object[] { test });
-        } catch (ClassNotFoundException e) {
-            throw new EJBException(e);
-        } catch (NoSuchMethodException e) {
-            throw new EJBException(e);
-        } catch (InstantiationException e) {
-            throw new EJBException(e);
-        } catch (IllegalAccessException e) {
-            throw new EJBException(e);
-        } catch (InvocationTargetException e) {
+       try {
+            @SuppressWarnings({"unchecked"})
+            Class<? extends TestCase> testClass = (Class<? extends TestCase>) getClass().getClassLoader().loadClass(className);
+            Constructor<? extends TestCase> c = testClass.getConstructor(String.class);
+            testInstance = c.newInstance(test);
+        } catch (ReflectiveOperationException e) {
             throw new EJBException(e);
         }
 
diff --git a/jpa/eclipselink.jpa.test.jse/src/it/java/org/eclipse/persistence/jpa/test/query/TestQueryHints.java b/jpa/eclipselink.jpa.test.jse/src/it/java/org/eclipse/persistence/jpa/test/query/TestQueryHints.java
index c9f6a15..ca8fc2b 100644
--- a/jpa/eclipselink.jpa.test.jse/src/it/java/org/eclipse/persistence/jpa/test/query/TestQueryHints.java
+++ b/jpa/eclipselink.jpa.test.jse/src/it/java/org/eclipse/persistence/jpa/test/query/TestQueryHints.java
@@ -290,7 +290,7 @@ public Object invoke(Object proxy, Method method, Object[] args) throws Throwabl
         }
 
         public static Connector createStatementProxy(Connector toWrap) {
-            return (Connector) Proxy.newProxyInstance(Connector.class.getClassLoader(), new Class[] { Connector.class }, new ConnectorInvocationHandler(toWrap));
+            return (Connector) Proxy.newProxyInstance(Connector.class.getClassLoader(), new Class<?>[] { Connector.class }, new ConnectorInvocationHandler(toWrap));
         }
     }
 
@@ -314,7 +314,7 @@ public Object invoke(Object proxy, Method method, Object[] args) throws Throwabl
         }
 
         public static Connection createStatementProxy(Connection toWrap) {
-            return (Connection) Proxy.newProxyInstance(Connection.class.getClassLoader(), new Class[] { Connection.class }, new ConnectionInvocationHandler(toWrap));
+            return (Connection) Proxy.newProxyInstance(Connection.class.getClassLoader(), new Class<?>[] { Connection.class }, new ConnectionInvocationHandler(toWrap));
         }
     }
 
@@ -342,7 +342,7 @@ public Object invoke(Object proxy, Method method, Object[] args) throws Throwabl
         }
 
         public static PreparedStatement createStatementProxy(PreparedStatement toWrap) {
-            return (PreparedStatement) Proxy.newProxyInstance(PreparedStatement.class.getClassLoader(), new Class[] { PreparedStatement.class }, new PreparedStatementInvocationHandler(toWrap));
+            return (PreparedStatement) Proxy.newProxyInstance(PreparedStatement.class.getClassLoader(), new Class<?>[] { PreparedStatement.class }, new PreparedStatementInvocationHandler(toWrap));
         }
     }
 }
diff --git a/jpa/eclipselink.jpa.test.jse/src/it/java/org/eclipse/persistence/jpa/test/query/TestQueryProperties.java b/jpa/eclipselink.jpa.test.jse/src/it/java/org/eclipse/persistence/jpa/test/query/TestQueryProperties.java
index 4545b69..16aae89 100644
--- a/jpa/eclipselink.jpa.test.jse/src/it/java/org/eclipse/persistence/jpa/test/query/TestQueryProperties.java
+++ b/jpa/eclipselink.jpa.test.jse/src/it/java/org/eclipse/persistence/jpa/test/query/TestQueryProperties.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2015, 2020 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2015, 2021 Oracle and/or its affiliates. All rights reserved.
  * Copyright (c) 2015, 2019 IBM Corporation. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
@@ -183,7 +183,7 @@ public Object invoke(Object proxy, Method method, Object[] args) throws Throwabl
         }
 
         public static Connector createStatementProxy(Connector toWrap) {
-            return (Connector) Proxy.newProxyInstance(Connector.class.getClassLoader(), new Class[] { Connector.class }, new ConnectorInvocationHandler(toWrap));
+            return (Connector) Proxy.newProxyInstance(Connector.class.getClassLoader(), new Class<?>[] { Connector.class }, new ConnectorInvocationHandler(toWrap));
         }
     }
 
@@ -207,7 +207,7 @@ public Object invoke(Object proxy, Method method, Object[] args) throws Throwabl
         }
 
         public static Connection createStatementProxy(Connection toWrap) {
-            return (Connection) Proxy.newProxyInstance(Connection.class.getClassLoader(), new Class[] { Connection.class }, new ConnectionInvocationHandler(toWrap));
+            return (Connection) Proxy.newProxyInstance(Connection.class.getClassLoader(), new Class<?>[] { Connection.class }, new ConnectionInvocationHandler(toWrap));
         }
     }
 
@@ -235,7 +235,7 @@ public Object invoke(Object proxy, Method method, Object[] args) throws Throwabl
         }
 
         public static PreparedStatement createStatementProxy(PreparedStatement toWrap) {
-            return (PreparedStatement) Proxy.newProxyInstance(PreparedStatement.class.getClassLoader(), new Class[] { PreparedStatement.class }, new PreparedStatementInvocationHandler(toWrap));
+            return (PreparedStatement) Proxy.newProxyInstance(PreparedStatement.class.getClassLoader(), new Class<?>[] { PreparedStatement.class }, new PreparedStatementInvocationHandler(toWrap));
         }
     }
 }
diff --git a/jpa/eclipselink.jpa.test/src/it/java-templates/org/eclipse/persistence/testing/framework/server/TestRunnerBean.java b/jpa/eclipselink.jpa.test/src/it/java-templates/org/eclipse/persistence/testing/framework/server/TestRunnerBean.java
index cf5589b..a694b3f 100644
--- a/jpa/eclipselink.jpa.test/src/it/java-templates/org/eclipse/persistence/testing/framework/server/TestRunnerBean.java
+++ b/jpa/eclipselink.jpa.test/src/it/java-templates/org/eclipse/persistence/testing/framework/server/TestRunnerBean.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
@@ -58,18 +58,11 @@ public Throwable runTest(String className, String test, Properties props) {
         // load the test class and create an instance
         TestCase testInstance = null;
         try {
-            Class testClass = getClass().getClassLoader().loadClass(className);
-            Constructor c = testClass.getConstructor(new Class[] { String.class });
-            testInstance = (TestCase) c.newInstance(new Object[] { test });
-        } catch (ClassNotFoundException e) {
-            throw new EJBException(e);
-        } catch (NoSuchMethodException e) {
-            throw new EJBException(e);
-        } catch (InstantiationException e) {
-            throw new EJBException(e);
-        } catch (IllegalAccessException e) {
-            throw new EJBException(e);
-        } catch (InvocationTargetException e) {
+            @SuppressWarnings({"unchecked"})
+            Class<? extends TestCase> testClass = (Class<? extends TestCase>) getClass().getClassLoader().loadClass(className);
+            Constructor<? extends TestCase> c = testClass.getConstructor(String.class);
+            testInstance = c.newInstance(test);
+        } catch (ReflectiveOperationException e) {
             throw new EJBException(e);
         }
 
diff --git a/jpa/eclipselink.jpa.test/src/it/java-templates/org/eclipse/persistence/testing/framework/server/TestRunnerBean.java_nonjtaDS b/jpa/eclipselink.jpa.test/src/it/java-templates/org/eclipse/persistence/testing/framework/server/TestRunnerBean.java_nonjtaDS
index 22c4d05..68e32a8 100644
--- a/jpa/eclipselink.jpa.test/src/it/java-templates/org/eclipse/persistence/testing/framework/server/TestRunnerBean.java_nonjtaDS
+++ b/jpa/eclipselink.jpa.test/src/it/java-templates/org/eclipse/persistence/testing/framework/server/TestRunnerBean.java_nonjtaDS
@@ -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
@@ -57,19 +57,12 @@
     public Throwable runTest(String className, String test, Properties props) {
         // load the test class and create an instance
         TestCase testInstance = null;
-        try {
-            Class testClass = getClass().getClassLoader().loadClass(className);
-            Constructor c = testClass.getConstructor(new Class[] { String.class });
-            testInstance = (TestCase) c.newInstance(new Object[] { test });
-        } catch (ClassNotFoundException e) {
-            throw new EJBException(e);
-        } catch (NoSuchMethodException e) {
-            throw new EJBException(e);
-        } catch (InstantiationException e) {
-            throw new EJBException(e);
-        } catch (IllegalAccessException e) {
-            throw new EJBException(e);
-        } catch (InvocationTargetException e) {
+       try {
+            @SuppressWarnings({"unchecked"})
+            Class<? extends TestCase> testClass = (Class<? extends TestCase>) getClass().getClassLoader().loadClass(className);
+            Constructor<? extends TestCase> c = testClass.getConstructor(String.class);
+            testInstance = c.newInstance(test);
+        } catch (ReflectiveOperationException e) {
             throw new EJBException(e);
         }
 
diff --git a/jpa/eclipselink.jpa.test/src/it/java/org/eclipse/persistence/testing/models/jpa/advanced/Customizer.java b/jpa/eclipselink.jpa.test/src/it/java/org/eclipse/persistence/testing/models/jpa/advanced/Customizer.java
index 28a6265..86f7f72 100644
--- a/jpa/eclipselink.jpa.test/src/it/java/org/eclipse/persistence/testing/models/jpa/advanced/Customizer.java
+++ b/jpa/eclipselink.jpa.test/src/it/java/org/eclipse/persistence/testing/models/jpa/advanced/Customizer.java
@@ -71,8 +71,8 @@ public void postLogin(SessionEvent event) {
                 setIsRecoverableMethod = sopClass.getDeclaredMethod("setIsRecoverable", boolean.class);
             }
 
-            Class[] sopEntities = {Employee.class, Address.class, Project.class};
-            for (Class sopEntity : sopEntities) {
+            Class<?>[] sopEntities = {Employee.class, Address.class, Project.class};
+            for (Class<?> sopEntity : sopEntities) {
                 ClassDescriptor descriptor = session.getDescriptor(sopEntity);
                 Object sop = sopClass.getConstructor().newInstance();
                 if (isRecoverable) {
diff --git a/jpa/eclipselink.jpa.test/src/it/java/org/eclipse/persistence/testing/models/jpa/advanced/EmployeePopulator.java b/jpa/eclipselink.jpa.test/src/it/java/org/eclipse/persistence/testing/models/jpa/advanced/EmployeePopulator.java
index ab80cfd..44c4b6a 100644
--- a/jpa/eclipselink.jpa.test/src/it/java/org/eclipse/persistence/testing/models/jpa/advanced/EmployeePopulator.java
+++ b/jpa/eclipselink.jpa.test/src/it/java/org/eclipse/persistence/testing/models/jpa/advanced/EmployeePopulator.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
@@ -1002,7 +1002,7 @@ public void persistExample(Session session) {
         }
     }
 
-    protected boolean containsObject(Class domainClass, String identifier) {
+    protected boolean containsObject(Class<?> domainClass, String identifier) {
         return populationManager.containsObject(domainClass, identifier);
     }
 
@@ -1459,11 +1459,11 @@ protected Vector getAllObjects() {
         return populationManager.getAllObjects();
     }
 
-    public Vector getAllObjectsForClass(Class domainClass) {
+    public Vector getAllObjectsForClass(Class<?> domainClass) {
         return populationManager.getAllObjectsForClass(domainClass);
     }
 
-    protected Object getObject(Class domainClass, String identifier) {
+    protected Object getObject(Class<?> domainClass, String identifier) {
         return populationManager.getObject(domainClass, identifier);
     }
 
@@ -1565,7 +1565,7 @@ public PhoneNumber phoneNumberExample6() {
         return new PhoneNumber("ISDN", "905", "5553691");
     }
 
-    protected void registerObject(Class domainClass, Object domainObject, String identifier) {
+    protected void registerObject(Class<?> domainClass, Object domainObject, String identifier) {
         populationManager.registerObject(domainClass, domainObject, identifier);
     }
 
diff --git a/jpa/eclipselink.jpa.test/src/it/java/org/eclipse/persistence/testing/models/jpa/advanced/PartnerLinkPopulator.java b/jpa/eclipselink.jpa.test/src/it/java/org/eclipse/persistence/testing/models/jpa/advanced/PartnerLinkPopulator.java
index a821800..152fb65 100644
--- a/jpa/eclipselink.jpa.test/src/it/java/org/eclipse/persistence/testing/models/jpa/advanced/PartnerLinkPopulator.java
+++ b/jpa/eclipselink.jpa.test/src/it/java/org/eclipse/persistence/testing/models/jpa/advanced/PartnerLinkPopulator.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
@@ -117,7 +117,7 @@ public void persistExample(Session session) {
         unitOfWork.commit();
     }
 
-    protected void registerObject(Class domainClass, Object domainObject, String identifier) {
+    protected void registerObject(Class<?> domainClass, Object domainObject, String identifier) {
         populationManager.registerObject(domainClass, domainObject, identifier);
     }
 
@@ -125,7 +125,7 @@ protected void registerObject(Object domainObject, String identifier) {
         populationManager.registerObject(domainObject, identifier);
     }
 
-    protected boolean containsObject(Class domainClass, String identifier) {
+    protected boolean containsObject(Class<?> domainClass, String identifier) {
         return populationManager.containsObject(domainClass, identifier);
     }
 
@@ -133,11 +133,11 @@ protected Vector getAllObjects() {
         return populationManager.getAllObjects();
     }
 
-    public Vector getAllObjectsForClass(Class domainClass) {
+    public Vector getAllObjectsForClass(Class<?> domainClass) {
         return populationManager.getAllObjectsForClass(domainClass);
     }
 
-    protected Object getObject(Class domainClass, String identifier) {
+    protected Object getObject(Class<?> domainClass, String identifier) {
         return populationManager.getObject(domainClass, identifier);
     }
 
diff --git a/jpa/eclipselink.jpa.test/src/it/java/org/eclipse/persistence/testing/models/jpa/advanced/compositepk/CompositePKPopulator.java b/jpa/eclipselink.jpa.test/src/it/java/org/eclipse/persistence/testing/models/jpa/advanced/compositepk/CompositePKPopulator.java
index ce84719..28551a0 100644
--- a/jpa/eclipselink.jpa.test/src/it/java/org/eclipse/persistence/testing/models/jpa/advanced/compositepk/CompositePKPopulator.java
+++ b/jpa/eclipselink.jpa.test/src/it/java/org/eclipse/persistence/testing/models/jpa/advanced/compositepk/CompositePKPopulator.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,7 +123,7 @@ public void persistExample(Session session) {
         }
     }
 
-    protected boolean containsObject(Class domainClass, String identifier) {
+    protected boolean containsObject(Class<?> domainClass, String identifier) {
         return populationManager.containsObject(domainClass, identifier);
     }
 
@@ -167,7 +167,7 @@ protected Vector getAllObjects() {
         return populationManager.getAllObjects();
     }
 
-    public Vector getAllObjectsForClass(Class domainClass) {
+    public Vector getAllObjectsForClass(Class<?> domainClass) {
         return populationManager.getAllObjectsForClass(domainClass);
     }
 
diff --git a/jpa/eclipselink.jpa.test/src/it/java/org/eclipse/persistence/testing/models/jpa/composite/advanced/EmployeePopulator.java b/jpa/eclipselink.jpa.test/src/it/java/org/eclipse/persistence/testing/models/jpa/composite/advanced/EmployeePopulator.java
index 853a68c..0383e93 100644
--- a/jpa/eclipselink.jpa.test/src/it/java/org/eclipse/persistence/testing/models/jpa/composite/advanced/EmployeePopulator.java
+++ b/jpa/eclipselink.jpa.test/src/it/java/org/eclipse/persistence/testing/models/jpa/composite/advanced/EmployeePopulator.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
@@ -992,7 +992,7 @@ public void persistExample(Session session) {
         }
 
     }
-    protected boolean containsObject(Class domainClass, String identifier) {
+    protected boolean containsObject(Class<?> domainClass, String identifier) {
         return populationManager.containsObject(domainClass, identifier);
     }
 
@@ -1449,11 +1449,11 @@ protected Vector getAllObjects() {
         return populationManager.getAllObjects();
     }
 
-    public Vector getAllObjectsForClass(Class domainClass) {
+    public Vector getAllObjectsForClass(Class<?> domainClass) {
         return populationManager.getAllObjectsForClass(domainClass);
     }
 
-    protected Object getObject(Class domainClass, String identifier) {
+    protected Object getObject(Class<?> domainClass, String identifier) {
         return populationManager.getObject(domainClass, identifier);
     }
 
@@ -1555,7 +1555,7 @@ public PhoneNumber phoneNumberExample6() {
         return new PhoneNumber("ISDN", "905", "5553691");
     }
 
-    protected void registerObject(Class domainClass, Object domainObject, String identifier) {
+    protected void registerObject(Class<?> domainClass, Object domainObject, String identifier) {
         populationManager.registerObject(domainClass, domainObject, identifier);
     }
 
diff --git a/jpa/eclipselink.jpa.test/src/it/java/org/eclipse/persistence/testing/models/jpa/datetime/DateTimePopulator.java b/jpa/eclipselink.jpa.test/src/it/java/org/eclipse/persistence/testing/models/jpa/datetime/DateTimePopulator.java
index 2aa9247..64edec0 100644
--- a/jpa/eclipselink.jpa.test/src/it/java/org/eclipse/persistence/testing/models/jpa/datetime/DateTimePopulator.java
+++ b/jpa/eclipselink.jpa.test/src/it/java/org/eclipse/persistence/testing/models/jpa/datetime/DateTimePopulator.java
@@ -55,7 +55,7 @@ public void persistExample(Session session)
                     Method shouldTruncateDateMethod = PrivilegedAccessHelper.getMethod(clazz, "shouldTruncateDate", null, false);
                     boolean shouldTruncateDate = PrivilegedAccessHelper.invokeMethod(shouldTruncateDateMethod, session.getPlatform(), null);
                     if (!shouldTruncateDate) {
-                        Method setShouldTruncateDateMethod = PrivilegedAccessHelper.getMethod(clazz, "setShouldTruncateDate", new Class[]{boolean.class}, false);
+                        Method setShouldTruncateDateMethod = PrivilegedAccessHelper.getMethod(clazz, "setShouldTruncateDate", new Class<?>[]{boolean.class}, false);
                         PrivilegedAccessHelper.invokeMethod(setShouldTruncateDateMethod, session.getPlatform(), new Object[]{true});
                         hasSetTruncateDate = true;
                     }
@@ -73,7 +73,7 @@ public void persistExample(Session session)
             // Now setting shouldTruncateDate flag back to its original value "false".
             try {
                 Class<Object> clazz = PrivilegedAccessHelper.getClassForName("org.eclipse.persistence.platform.database.oracle.Oracle9Platform");
-                Method setShouldTruncateDateMethod = PrivilegedAccessHelper.getMethod(clazz, "setShouldTruncateDate", new Class[]{boolean.class}, false);
+                Method setShouldTruncateDateMethod = PrivilegedAccessHelper.getMethod(clazz, "setShouldTruncateDate", new Class<?>[]{boolean.class}, false);
                 PrivilegedAccessHelper.invokeMethod(setShouldTruncateDateMethod, session.getPlatform(), new Object[]{false});
             } catch (Exception ex) {
                 throw new RuntimeException("Failed oracle9Platform.setShouldTruncateDate(false)", ex);
diff --git a/jpa/eclipselink.jpa.test/src/it/java/org/eclipse/persistence/testing/models/jpa/fieldaccess/advanced/EmployeePopulator.java b/jpa/eclipselink.jpa.test/src/it/java/org/eclipse/persistence/testing/models/jpa/fieldaccess/advanced/EmployeePopulator.java
index 35c3e49..c24f248 100644
--- a/jpa/eclipselink.jpa.test/src/it/java/org/eclipse/persistence/testing/models/jpa/fieldaccess/advanced/EmployeePopulator.java
+++ b/jpa/eclipselink.jpa.test/src/it/java/org/eclipse/persistence/testing/models/jpa/fieldaccess/advanced/EmployeePopulator.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
@@ -959,7 +959,7 @@ public void persistExample(Session session)
             session.getLogin().setShouldForceFieldNamesToUpperCase(true);
         }
     }
-    protected boolean containsObject(Class domainClass, String identifier) {
+    protected boolean containsObject(Class<?> domainClass, String identifier) {
         return populationManager.containsObject(domainClass, identifier);
     }
 
@@ -1409,11 +1409,11 @@ protected Vector getAllObjects() {
         return populationManager.getAllObjects();
     }
 
-    public Vector getAllObjectsForClass(Class domainClass) {
+    public Vector getAllObjectsForClass(Class<?> domainClass) {
         return populationManager.getAllObjectsForClass(domainClass);
     }
 
-    protected Object getObject(Class domainClass, String identifier) {
+    protected Object getObject(Class<?> domainClass, String identifier) {
         return populationManager.getObject(domainClass, identifier);
     }
 
@@ -1515,7 +1515,7 @@ public PhoneNumber phoneNumberExample6() {
         return new PhoneNumber("ISDN", "905", "5553691");
     }
 
-    protected void registerObject(Class domainClass, Object domainObject, String identifier) {
+    protected void registerObject(Class<?> domainClass, Object domainObject, String identifier) {
         populationManager.registerObject(domainClass, domainObject, identifier);
     }
 
diff --git a/jpa/eclipselink.jpa.test/src/it/java/org/eclipse/persistence/testing/models/jpa/inheritance/AppleExtractor.java b/jpa/eclipselink.jpa.test/src/it/java/org/eclipse/persistence/testing/models/jpa/inheritance/AppleExtractor.java
index 430c4dd..077c499 100644
--- a/jpa/eclipselink.jpa.test/src/it/java/org/eclipse/persistence/testing/models/jpa/inheritance/AppleExtractor.java
+++ b/jpa/eclipselink.jpa.test/src/it/java/org/eclipse/persistence/testing/models/jpa/inheritance/AppleExtractor.java
@@ -30,13 +30,14 @@ public class AppleExtractor extends ClassExtractor {
      * field name, the value is the database value.
      */
     @Override
-    public Class extractClassFromRow(DataRecord databaseRow, Session session) {
+    @SuppressWarnings({"unchecked"})
+    public <T> Class<T> extractClassFromRow(DataRecord databaseRow, Session session) {
         if (databaseRow.containsKey("JPA_MACBOOK_PRO.COLOR")) {
-            return MacBookPro.class;
+            return (Class<T>) MacBookPro.class;
         } else if (databaseRow.containsKey("JPA_MACBOOK.RAM")) {
-            return MacBook.class;
+            return (Class<T>) MacBook.class;
         } else {
-            return Apple.class;
+            return (Class<T>) Apple.class;
         }
     }
 
diff --git a/jpa/eclipselink.jpa.test/src/it/java/org/eclipse/persistence/testing/models/jpa/inheritance/InheritancePopulator.java b/jpa/eclipselink.jpa.test/src/it/java/org/eclipse/persistence/testing/models/jpa/inheritance/InheritancePopulator.java
index c737210..a789975 100644
--- a/jpa/eclipselink.jpa.test/src/it/java/org/eclipse/persistence/testing/models/jpa/inheritance/InheritancePopulator.java
+++ b/jpa/eclipselink.jpa.test/src/it/java/org/eclipse/persistence/testing/models/jpa/inheritance/InheritancePopulator.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,7 @@ public void persistExample(Session session)
         unitOfWork.commit();
 
     }
-    protected boolean containsObject(Class domainClass, String identifier) {
+    protected boolean containsObject(Class<?> domainClass, String identifier) {
         return populationManager.containsObject(domainClass, identifier);
     }
 
diff --git a/jpa/eclipselink.jpa.test/src/it/java/org/eclipse/persistence/testing/models/jpa/partitioned/EmployeePopulator.java b/jpa/eclipselink.jpa.test/src/it/java/org/eclipse/persistence/testing/models/jpa/partitioned/EmployeePopulator.java
index ae0803e..2a5ffb5 100644
--- a/jpa/eclipselink.jpa.test/src/it/java/org/eclipse/persistence/testing/models/jpa/partitioned/EmployeePopulator.java
+++ b/jpa/eclipselink.jpa.test/src/it/java/org/eclipse/persistence/testing/models/jpa/partitioned/EmployeePopulator.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
@@ -786,7 +786,7 @@ public void persistExample(EntityManager em) {
         }
     }
 
-    protected boolean containsObject(Class domainClass, String identifier) {
+    protected boolean containsObject(Class<?> domainClass, String identifier) {
         return this.populationManager.containsObject(domainClass, identifier);
     }
 
@@ -1098,11 +1098,11 @@ protected Vector getAllObjects() {
         return populationManager.getAllObjects();
     }
 
-    public Vector getAllObjectsForClass(Class domainClass) {
+    public Vector getAllObjectsForClass(Class<?> domainClass) {
         return populationManager.getAllObjectsForClass(domainClass);
     }
 
-    protected Object getObject(Class domainClass, String identifier) {
+    protected Object getObject(Class<?> domainClass, String identifier) {
         return populationManager.getObject(domainClass, identifier);
     }
 
@@ -1204,7 +1204,7 @@ public PhoneNumber phoneNumberExample6() {
         return new PhoneNumber("ISDN", "905", "5553691");
     }
 
-    protected void registerObject(Class domainClass, Object domainObject, String identifier) {
+    protected void registerObject(Class<?> domainClass, Object domainObject, String identifier) {
         populationManager.registerObject(domainClass, domainObject, identifier);
     }
 
diff --git a/jpa/eclipselink.jpa.test/src/it/java/org/eclipse/persistence/testing/models/jpa/performance2/Populate.java b/jpa/eclipselink.jpa.test/src/it/java/org/eclipse/persistence/testing/models/jpa/performance2/Populate.java
index 61cc064..6c6dcc5 100644
--- a/jpa/eclipselink.jpa.test/src/it/java/org/eclipse/persistence/testing/models/jpa/performance2/Populate.java
+++ b/jpa/eclipselink.jpa.test/src/it/java/org/eclipse/persistence/testing/models/jpa/performance2/Populate.java
@@ -618,7 +618,7 @@ public void verifyCounts(EntityManager em) {
      * native ReportQuery.
      *
      */
-    public void assertCount(EntityManager em, Class entityClass, int count) {
+    public void assertCount(EntityManager em, Class<?> entityClass, int count) {
         CriteriaBuilder cb = em.getCriteriaBuilder();
         CriteriaQuery<Object> criteria = cb.createQuery();
         Root entity = criteria.from(entityClass);
diff --git a/jpa/eclipselink.jpa.test/src/it/java/org/eclipse/persistence/testing/models/jpa/xml/advanced/EmployeePopulator.java b/jpa/eclipselink.jpa.test/src/it/java/org/eclipse/persistence/testing/models/jpa/xml/advanced/EmployeePopulator.java
index 026667c..a6fee07 100644
--- a/jpa/eclipselink.jpa.test/src/it/java/org/eclipse/persistence/testing/models/jpa/xml/advanced/EmployeePopulator.java
+++ b/jpa/eclipselink.jpa.test/src/it/java/org/eclipse/persistence/testing/models/jpa/xml/advanced/EmployeePopulator.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
@@ -826,7 +826,7 @@ public void persistExample(Session session) {
         }
     }
 
-    protected boolean containsObject(Class domainClass, String identifier) {
+    protected boolean containsObject(Class<?> domainClass, String identifier) {
         return populationManager.containsObject(domainClass, identifier);
     }
 
@@ -1188,11 +1188,11 @@ protected Vector getAllObjects() {
         return populationManager.getAllObjects();
     }
 
-    public Vector getAllObjectsForClass(Class domainClass) {
+    public Vector getAllObjectsForClass(Class<?> domainClass) {
         return populationManager.getAllObjectsForClass(domainClass);
     }
 
-    protected Object getObject(Class domainClass, String identifier) {
+    protected Object getObject(Class<?> domainClass, String identifier) {
         return populationManager.getObject(domainClass, identifier);
     }
 
@@ -1294,7 +1294,7 @@ public PhoneNumber phoneNumberExample6() {
         return new PhoneNumber("ISDN", "905", "5553691");
     }
 
-    protected void registerObject(Class domainClass, Object domainObject, String identifier) {
+    protected void registerObject(Class<?> domainClass, Object domainObject, String identifier) {
         populationManager.registerObject(domainClass, domainObject, identifier);
     }
 
diff --git a/jpa/eclipselink.jpa.test/src/it/java/org/eclipse/persistence/testing/models/jpa/xml/composite/advanced/EmployeePopulator.java b/jpa/eclipselink.jpa.test/src/it/java/org/eclipse/persistence/testing/models/jpa/xml/composite/advanced/EmployeePopulator.java
index fb30183..42f5366 100644
--- a/jpa/eclipselink.jpa.test/src/it/java/org/eclipse/persistence/testing/models/jpa/xml/composite/advanced/EmployeePopulator.java
+++ b/jpa/eclipselink.jpa.test/src/it/java/org/eclipse/persistence/testing/models/jpa/xml/composite/advanced/EmployeePopulator.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
@@ -834,7 +834,7 @@ public void persistExample(Session session) {
         }
     }
 
-    protected boolean containsObject(Class domainClass, String identifier) {
+    protected boolean containsObject(Class<?> domainClass, String identifier) {
         return populationManager.containsObject(domainClass, identifier);
     }
 
@@ -1196,11 +1196,11 @@ protected Vector getAllObjects() {
         return populationManager.getAllObjects();
     }
 
-    public Vector getAllObjectsForClass(Class domainClass) {
+    public Vector getAllObjectsForClass(Class<?> domainClass) {
         return populationManager.getAllObjectsForClass(domainClass);
     }
 
-    protected Object getObject(Class domainClass, String identifier) {
+    protected Object getObject(Class<?> domainClass, String identifier) {
         return populationManager.getObject(domainClass, identifier);
     }
 
@@ -1302,7 +1302,7 @@ public PhoneNumber phoneNumberExample6() {
         return new PhoneNumber("ISDN", "905", "5553691");
     }
 
-    protected void registerObject(Class domainClass, Object domainObject, String identifier) {
+    protected void registerObject(Class<?> domainClass, Object domainObject, String identifier) {
         populationManager.registerObject(domainClass, domainObject, identifier);
     }
 
diff --git a/jpa/eclipselink.jpa.test/src/it/java/org/eclipse/persistence/testing/models/jpa/xml/inheritance/AppleExtractor.java b/jpa/eclipselink.jpa.test/src/it/java/org/eclipse/persistence/testing/models/jpa/xml/inheritance/AppleExtractor.java
index 96520a0..822ef52 100644
--- a/jpa/eclipselink.jpa.test/src/it/java/org/eclipse/persistence/testing/models/jpa/xml/inheritance/AppleExtractor.java
+++ b/jpa/eclipselink.jpa.test/src/it/java/org/eclipse/persistence/testing/models/jpa/xml/inheritance/AppleExtractor.java
@@ -30,13 +30,14 @@ public class AppleExtractor extends ClassExtractor {
      * field name, the value is the database value.
      */
     @Override
-    public Class extractClassFromRow(DataRecord databaseRow, Session session) {
+    @SuppressWarnings({"unchecked"})
+    public <T> Class<T> extractClassFromRow(DataRecord databaseRow, Session session) {
         if (databaseRow.containsKey("XML_MACBOOK_PRO.COLOR")) {
-            return MacBookPro.class;
+            return (Class<T>) MacBookPro.class;
         } else if (databaseRow.containsKey("XML_MACBOOK.RAM")) {
-            return MacBook.class;
+            return (Class<T>) MacBook.class;
         } else {
-            return Apple.class;
+            return (Class<T>) Apple.class;
         }
     }
 
diff --git a/jpa/eclipselink.jpa.test/src/it/java/org/eclipse/persistence/testing/models/jpa/xml/inheritance/Bus.java b/jpa/eclipselink.jpa.test/src/it/java/org/eclipse/persistence/testing/models/jpa/xml/inheritance/Bus.java
index 4917981..87a3515 100644
--- a/jpa/eclipselink.jpa.test/src/it/java/org/eclipse/persistence/testing/models/jpa/xml/inheritance/Bus.java
+++ b/jpa/eclipselink.jpa.test/src/it/java/org/eclipse/persistence/testing/models/jpa/xml/inheritance/Bus.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
@@ -37,11 +37,11 @@ public class Bus extends FueledVehicle {
     public ArrayList prePersistCalledListeners = new ArrayList();
     public ArrayList postPersistCalledListeners = new ArrayList();
 
-    public void addPostPersistCalledListener(Class listener) {
+    public void addPostPersistCalledListener(Class<?> listener) {
         postPersistCalledListeners.add(listener);
     }
 
-    public void addPrePersistCalledListener(Class listener) {
+    public void addPrePersistCalledListener(Class<?> listener) {
         prePersistCalledListeners.add(listener);
     }
 
@@ -57,11 +57,11 @@ public int prePersistCalledListenerCount() {
         return prePersistCalledListeners.size();
     }
 
-    public Class getPostPersistCalledListenerAt(int index) {
+    public Class<?> getPostPersistCalledListenerAt(int index) {
         return (Class) postPersistCalledListeners.get(index);
     }
 
-    public Class getPrePersistCalledListenerAt(int index) {
+    public Class<?> getPrePersistCalledListenerAt(int index) {
         return (Class) prePersistCalledListeners.get(index);
     }
 
diff --git a/jpa/eclipselink.jpa.test/src/it/java/org/eclipse/persistence/testing/models/jpa/xml/relationships/unidirectional/EmployeePopulator.java b/jpa/eclipselink.jpa.test/src/it/java/org/eclipse/persistence/testing/models/jpa/xml/relationships/unidirectional/EmployeePopulator.java
index 4076221..e4c1f9a 100644
--- a/jpa/eclipselink.jpa.test/src/it/java/org/eclipse/persistence/testing/models/jpa/xml/relationships/unidirectional/EmployeePopulator.java
+++ b/jpa/eclipselink.jpa.test/src/it/java/org/eclipse/persistence/testing/models/jpa/xml/relationships/unidirectional/EmployeePopulator.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
@@ -764,7 +764,7 @@ public void persistExample(Session session)
         unitOfWork.commit();
 
     }
-    protected boolean containsObject(Class domainClass, String identifier) {
+    protected boolean containsObject(Class<?> domainClass, String identifier) {
         return populationManager.containsObject(domainClass, identifier);
     }
 
@@ -1126,11 +1126,11 @@ protected Vector getAllObjects() {
         return populationManager.getAllObjects();
     }
 
-    public Vector getAllObjectsForClass(Class domainClass) {
+    public Vector getAllObjectsForClass(Class<?> domainClass) {
         return populationManager.getAllObjectsForClass(domainClass);
     }
 
-    protected Object getObject(Class domainClass, String identifier) {
+    protected Object getObject(Class<?> domainClass, String identifier) {
         return populationManager.getObject(domainClass, identifier);
     }
 
@@ -1232,7 +1232,7 @@ public PhoneNumber phoneNumberExample6() {
         return new PhoneNumber("ISDN", "905", "5553691");
     }
 
-    protected void registerObject(Class domainClass, Object domainObject, String identifier) {
+    protected void registerObject(Class<?> domainClass, Object domainObject, String identifier) {
         populationManager.registerObject(domainClass, domainObject, identifier);
     }
 
diff --git a/jpa/eclipselink.jpa.test/src/it/java/org/eclipse/persistence/testing/models/jpa21/advanced/EmployeePopulator.java b/jpa/eclipselink.jpa.test/src/it/java/org/eclipse/persistence/testing/models/jpa21/advanced/EmployeePopulator.java
index 1654512..2a28b51 100644
--- a/jpa/eclipselink.jpa.test/src/it/java/org/eclipse/persistence/testing/models/jpa21/advanced/EmployeePopulator.java
+++ b/jpa/eclipselink.jpa.test/src/it/java/org/eclipse/persistence/testing/models/jpa21/advanced/EmployeePopulator.java
@@ -989,7 +989,7 @@ public StoredProcedureDefinition buildStoredProcedureUpdateFromAddress(DatabaseP
         return proc;
     }
 
-    protected boolean containsObject(Class domainClass, String identifier) {
+    protected boolean containsObject(Class<?> domainClass, String identifier) {
         return populationManager.containsObject(domainClass, identifier);
     }
 
@@ -1368,11 +1368,11 @@ protected Vector getAllObjects() {
         return populationManager.getAllObjects();
     }
 
-    public Vector getAllObjectsForClass(Class domainClass) {
+    public Vector getAllObjectsForClass(Class<?> domainClass) {
         return populationManager.getAllObjectsForClass(domainClass);
     }
 
-    protected Object getObject(Class domainClass, String identifier) {
+    protected Object getObject(Class<?> domainClass, String identifier) {
         return populationManager.getObject(domainClass, identifier);
     }
 
@@ -1537,7 +1537,7 @@ public PhoneNumber phoneNumberExample6() {
         return new PhoneNumber("ISDN", "905", "5553691");
     }
 
-    protected void registerObject(Class domainClass, Object domainObject, String identifier) {
+    protected void registerObject(Class<?> domainClass, Object domainObject, String identifier) {
         populationManager.registerObject(domainClass, domainObject, identifier);
     }
 
diff --git a/jpa/eclipselink.jpa.test/src/it/java/org/eclipse/persistence/testing/models/jpa21/advanced/xml/EmployeePopulator.java b/jpa/eclipselink.jpa.test/src/it/java/org/eclipse/persistence/testing/models/jpa21/advanced/xml/EmployeePopulator.java
index 91e3ef0..914d277 100644
--- a/jpa/eclipselink.jpa.test/src/it/java/org/eclipse/persistence/testing/models/jpa21/advanced/xml/EmployeePopulator.java
+++ b/jpa/eclipselink.jpa.test/src/it/java/org/eclipse/persistence/testing/models/jpa21/advanced/xml/EmployeePopulator.java
@@ -841,7 +841,7 @@ public StoredProcedureDefinition buildStoredProcedureReadUsingUnNamedRefCursor()
         return proc;
     }
 
-    protected boolean containsObject(Class domainClass, String identifier) {
+    protected boolean containsObject(Class<?> domainClass, String identifier) {
         return populationManager.containsObject(domainClass, identifier);
     }
 
@@ -1220,11 +1220,11 @@ protected Vector getAllObjects() {
         return populationManager.getAllObjects();
     }
 
-    public Vector getAllObjectsForClass(Class domainClass) {
+    public Vector getAllObjectsForClass(Class<?> domainClass) {
         return populationManager.getAllObjectsForClass(domainClass);
     }
 
-    protected Object getObject(Class domainClass, String identifier) {
+    protected Object getObject(Class<?> domainClass, String identifier) {
         return populationManager.getObject(domainClass, identifier);
     }
 
@@ -1379,7 +1379,7 @@ public PhoneNumber phoneNumberExample6() {
         return new PhoneNumber("ISDN", "905", "5553691");
     }
 
-    protected void registerObject(Class domainClass, Object domainObject, String identifier) {
+    protected void registerObject(Class<?> domainClass, Object domainObject, String identifier) {
         populationManager.registerObject(domainClass, domainObject, identifier);
     }
 
diff --git a/jpa/eclipselink.jpa.test/src/it/java/org/eclipse/persistence/testing/models/jpa22/advanced/EmployeePopulator.java b/jpa/eclipselink.jpa.test/src/it/java/org/eclipse/persistence/testing/models/jpa22/advanced/EmployeePopulator.java
index f9f8d49..ac42dc4 100644
--- a/jpa/eclipselink.jpa.test/src/it/java/org/eclipse/persistence/testing/models/jpa22/advanced/EmployeePopulator.java
+++ b/jpa/eclipselink.jpa.test/src/it/java/org/eclipse/persistence/testing/models/jpa22/advanced/EmployeePopulator.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
@@ -989,7 +989,7 @@ public StoredProcedureDefinition buildStoredProcedureUpdateFromAddress(DatabaseP
         return proc;
     }
 
-    protected boolean containsObject(Class domainClass, String identifier) {
+    protected boolean containsObject(Class<?> domainClass, String identifier) {
         return populationManager.containsObject(domainClass, identifier);
     }
 
@@ -1368,11 +1368,11 @@ protected Vector getAllObjects() {
         return populationManager.getAllObjects();
     }
 
-    public Vector getAllObjectsForClass(Class domainClass) {
+    public Vector getAllObjectsForClass(Class<?> domainClass) {
         return populationManager.getAllObjectsForClass(domainClass);
     }
 
-    protected Object getObject(Class domainClass, String identifier) {
+    protected Object getObject(Class<?> domainClass, String identifier) {
         return populationManager.getObject(domainClass, identifier);
     }
 
@@ -1537,7 +1537,7 @@ public PhoneNumber phoneNumberExample6() {
         return new PhoneNumber("ISDN", "905", "5553691");
     }
 
-    protected void registerObject(Class domainClass, Object domainObject, String identifier) {
+    protected void registerObject(Class<?> domainClass, Object domainObject, String identifier) {
         populationManager.registerObject(domainClass, domainObject, identifier);
     }
 
diff --git a/jpa/eclipselink.jpa.test/src/it/java/org/eclipse/persistence/testing/models/jpa22/advanced/xml/EmployeePopulator.java b/jpa/eclipselink.jpa.test/src/it/java/org/eclipse/persistence/testing/models/jpa22/advanced/xml/EmployeePopulator.java
index c2832ac..e47dd9c 100644
--- a/jpa/eclipselink.jpa.test/src/it/java/org/eclipse/persistence/testing/models/jpa22/advanced/xml/EmployeePopulator.java
+++ b/jpa/eclipselink.jpa.test/src/it/java/org/eclipse/persistence/testing/models/jpa22/advanced/xml/EmployeePopulator.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
@@ -841,7 +841,7 @@ public StoredProcedureDefinition buildStoredProcedureReadUsingUnNamedRefCursor()
         return proc;
     }
 
-    protected boolean containsObject(Class domainClass, String identifier) {
+    protected boolean containsObject(Class<?> domainClass, String identifier) {
         return populationManager.containsObject(domainClass, identifier);
     }
 
@@ -1220,11 +1220,11 @@ protected Vector getAllObjects() {
         return populationManager.getAllObjects();
     }
 
-    public Vector getAllObjectsForClass(Class domainClass) {
+    public Vector getAllObjectsForClass(Class<?> domainClass) {
         return populationManager.getAllObjectsForClass(domainClass);
     }
 
-    protected Object getObject(Class domainClass, String identifier) {
+    protected Object getObject(Class<?> domainClass, String identifier) {
         return populationManager.getObject(domainClass, identifier);
     }
 
@@ -1379,7 +1379,7 @@ public PhoneNumber phoneNumberExample6() {
         return new PhoneNumber("ISDN", "905", "5553691");
     }
 
-    protected void registerObject(Class domainClass, Object domainObject, String identifier) {
+    protected void registerObject(Class<?> domainClass, Object domainObject, String identifier) {
         populationManager.registerObject(domainClass, domainObject, identifier);
     }
 
diff --git a/jpa/eclipselink.jpa.test/src/it/java/org/eclipse/persistence/testing/tests/jpa/advanced/AdvancedJPAJunitTest.java b/jpa/eclipselink.jpa.test/src/it/java/org/eclipse/persistence/testing/tests/jpa/advanced/AdvancedJPAJunitTest.java
index 26a24c2..0a2c9e9 100644
--- a/jpa/eclipselink.jpa.test/src/it/java/org/eclipse/persistence/testing/tests/jpa/advanced/AdvancedJPAJunitTest.java
+++ b/jpa/eclipselink.jpa.test/src/it/java/org/eclipse/persistence/testing/tests/jpa/advanced/AdvancedJPAJunitTest.java
@@ -2516,13 +2516,13 @@ public void testProperty() {
             fail(errorMsg);
         }
     }
-    protected String verifyPropertyValue(ClassDescriptor descriptor, String propertyName, Class expectedPropertyValueType, Object expectedPropertyValue) {
+    protected String verifyPropertyValue(ClassDescriptor descriptor, String propertyName, Class<?> expectedPropertyValueType, Object expectedPropertyValue) {
         return verifyPropertyValue(propertyName, descriptor.getProperty(propertyName), expectedPropertyValueType, expectedPropertyValue, Helper.getShortClassName(descriptor.getJavaClass()) + " descriptor");
     }
-    protected String verifyPropertyValue(DatabaseMapping mapping, String propertyName, Class expectedPropertyValueType, Object expectedPropertyValue) {
+    protected String verifyPropertyValue(DatabaseMapping mapping, String propertyName, Class<?> expectedPropertyValueType, Object expectedPropertyValue) {
         return verifyPropertyValue(propertyName, mapping.getProperty(propertyName), expectedPropertyValueType, expectedPropertyValue, mapping.getAttributeName() + " attribute");
     }
-    protected String verifyPropertyValue(String propertyName, Object propertyValue, Class expectedPropertyValueType, Object expectedPropertyValue, String masterName) {
+    protected String verifyPropertyValue(String propertyName, Object propertyValue, Class<?> expectedPropertyValueType, Object expectedPropertyValue, String masterName) {
         String errorMsg = "";
         String errorPrefix = " property " + propertyName + " for " + masterName;
         if(expectedPropertyValueType == null) {
diff --git a/jpa/eclipselink.jpa.test/src/it/java/org/eclipse/persistence/testing/tests/jpa/advanced/EntityManagerJUnitTestSuite.java b/jpa/eclipselink.jpa.test/src/it/java/org/eclipse/persistence/testing/tests/jpa/advanced/EntityManagerJUnitTestSuite.java
index 010a0bc..f6efcc9 100644
--- a/jpa/eclipselink.jpa.test/src/it/java/org/eclipse/persistence/testing/tests/jpa/advanced/EntityManagerJUnitTestSuite.java
+++ b/jpa/eclipselink.jpa.test/src/it/java/org/eclipse/persistence/testing/tests/jpa/advanced/EntityManagerJUnitTestSuite.java
@@ -5267,23 +5267,23 @@ public void testPersistenceProperties() {
             fail("departmentCacheSize is wrong: "+departmentCacheSize);
         }
 
-        Class defaultCacheType = ss.getDescriptor(Project.class).getIdentityMapClass();
+        Class<?> defaultCacheType = ss.getDescriptor(Project.class).getIdentityMapClass();
         if(! Helper.getShortClassName(defaultCacheType).equals("FullIdentityMap")) {
             fail("defaultCacheType is wrong: "+Helper.getShortClassName(defaultCacheType));
         }
 
-        Class employeeCacheType = ss.getDescriptor(Employee.class).getIdentityMapClass();
+        Class<?> employeeCacheType = ss.getDescriptor(Employee.class).getIdentityMapClass();
         if(! Helper.getShortClassName(employeeCacheType).equals("WeakIdentityMap")) {
             fail("employeeCacheType is wrong: "+Helper.getShortClassName(employeeCacheType));
         }
 
-        Class addressCacheType = ss.getDescriptor(Address.class).getIdentityMapClass();
+        Class<?> addressCacheType = ss.getDescriptor(Address.class).getIdentityMapClass();
         if(! Helper.getShortClassName(addressCacheType).equals("HardCacheWeakIdentityMap")) {
             fail("addressCacheType is wrong: "+Helper.getShortClassName(addressCacheType));
         }
 
         // Department cache type specified in @Cache annotation - that should override default property
-        Class departmentCacheType = ss.getDescriptor(Department.class).getIdentityMapClass();
+        Class<?> departmentCacheType = ss.getDescriptor(Department.class).getIdentityMapClass();
         if(! Helper.getShortClassName(departmentCacheType).equals("SoftCacheWeakIdentityMap")) {
             fail("departmentCacheType is wrong: "+Helper.getShortClassName(departmentCacheType));
         }
@@ -7714,7 +7714,7 @@ public void testDeleteAllSpecialHugeProjectsWithNullTeamLeader() {
          internalDeleteAllProjectsWithNullTeamLeader(SpecialHugeProject.class);
      }
 
-     protected void internalDeleteAllProjectsWithNullTeamLeader(Class cls) {
+     protected void internalDeleteAllProjectsWithNullTeamLeader(Class<?> cls) {
          String name = "testDeleteAllProjectsWithNull";
          Collection<Project> projectsToRemove = null;
          String className = cls.getSimpleName();
@@ -7994,7 +7994,7 @@ public void testUpdateAllSpecialHugeProjects() {
     public void testUpdateAllProjects() {
         internalTestUpdateAllProjects(Project.class);
     }
-    protected void internalTestUpdateAllProjects(Class cls) {
+    protected void internalTestUpdateAllProjects(Class<?> cls) {
         if ((JUnitTestCase.getServerSession()).getPlatform().isSymfoware()) {
             getServerSession().logMessage("Test testUpdateAll*Projects skipped for this platform, "
                     + "Symfoware doesn't support UpdateAll/DeleteAll on multi-table objects (see rfe 298193).");
@@ -8130,7 +8130,7 @@ public void testUpdateAllSpecialHugeProjectsWithName() {
     public void testUpdateAllProjectsWithName() {
         internalTestUpdateAllProjectsWithName(Project.class);
     }
-    protected void internalTestUpdateAllProjectsWithName(Class cls) {
+    protected void internalTestUpdateAllProjectsWithName(Class<?> cls) {
         if ((JUnitTestCase.getServerSession()).getPlatform().isSymfoware()) {
             getServerSession().logMessage("Test testUpdateAll*ProjectsWithName skipped for this platform, "
                     + "Symfoware doesn't support UpdateAll/DeleteAll on multi-table objects (see rfe 298193).");
@@ -8234,7 +8234,7 @@ public void testUpdateAllProjectsWithNullTeamLeader() {
     public void testUpdateAllSpecialHugeProjectsWithNullTeamLeader() {
         internalTestUpdateAllProjectsWithNullTeamLeader(SpecialHugeProject.class);
     }
-    protected void internalTestUpdateAllProjectsWithNullTeamLeader(Class cls) {
+    protected void internalTestUpdateAllProjectsWithNullTeamLeader(Class<?> cls) {
         if ((JUnitTestCase.getServerSession()).getPlatform().isSymfoware()) {
             getServerSession().logMessage("Test testUpdateAll*ProjectsWithNullTeamLeader skipped for this platform, "
                     + "Symfoware doesn't support UpdateAll/DeleteAll on multi-table objects (see rfe 298193).");
diff --git a/jpa/eclipselink.jpa.test/src/it/java/org/eclipse/persistence/testing/tests/jpa/advanced/JoinedAttributeAdvancedJunitTest.java b/jpa/eclipselink.jpa.test/src/it/java/org/eclipse/persistence/testing/tests/jpa/advanced/JoinedAttributeAdvancedJunitTest.java
index 646f259..2dd0b82 100644
--- a/jpa/eclipselink.jpa.test/src/it/java/org/eclipse/persistence/testing/tests/jpa/advanced/JoinedAttributeAdvancedJunitTest.java
+++ b/jpa/eclipselink.jpa.test/src/it/java/org/eclipse/persistence/testing/tests/jpa/advanced/JoinedAttributeAdvancedJunitTest.java
@@ -42,7 +42,7 @@
 
 public class JoinedAttributeAdvancedJunitTest extends JUnitTestCase {
 
-    static protected Class[] classes = {Employee.class, Address.class, PhoneNumber.class, Project.class};
+    static protected Class<?>[] classes = {Employee.class, Address.class, PhoneNumber.class, Project.class};
     static protected Vector[] objectVectors = {null, null, null, null};
 
     static protected EmployeePopulator populator = new EmployeePopulator();
diff --git a/jpa/eclipselink.jpa.test/src/it/java/org/eclipse/persistence/testing/tests/jpa/advanced/ReportQueryAdvancedJUnitTest.java b/jpa/eclipselink.jpa.test/src/it/java/org/eclipse/persistence/testing/tests/jpa/advanced/ReportQueryAdvancedJUnitTest.java
index 83cab9d..c55e6f2 100644
--- a/jpa/eclipselink.jpa.test/src/it/java/org/eclipse/persistence/testing/tests/jpa/advanced/ReportQueryAdvancedJUnitTest.java
+++ b/jpa/eclipselink.jpa.test/src/it/java/org/eclipse/persistence/testing/tests/jpa/advanced/ReportQueryAdvancedJUnitTest.java
@@ -37,7 +37,7 @@
 
 public class ReportQueryAdvancedJUnitTest  extends JUnitTestCase {
 
-    static protected Class[] classes = {Employee.class, Address.class, PhoneNumber.class, Project.class};
+    static protected Class<?>[] classes = {Employee.class, Address.class, PhoneNumber.class, Project.class};
     static protected Vector[] objectVectors = {null, null, null, null};
 
     static protected EmployeePopulator populator = new EmployeePopulator();
diff --git a/jpa/eclipselink.jpa.test/src/it/java/org/eclipse/persistence/testing/tests/jpa/advanced/ReportQueryConstructorExpressionTestSuite.java b/jpa/eclipselink.jpa.test/src/it/java/org/eclipse/persistence/testing/tests/jpa/advanced/ReportQueryConstructorExpressionTestSuite.java
index 09138a0..4c05d7c 100644
--- a/jpa/eclipselink.jpa.test/src/it/java/org/eclipse/persistence/testing/tests/jpa/advanced/ReportQueryConstructorExpressionTestSuite.java
+++ b/jpa/eclipselink.jpa.test/src/it/java/org/eclipse/persistence/testing/tests/jpa/advanced/ReportQueryConstructorExpressionTestSuite.java
@@ -106,7 +106,7 @@ public void testSimpleConstructorExpression(){
         employees = new ExpressionBuilder();
         query = new ReportQuery(Employee.class, employees);
 
-        Class[] argTypes = new Class[]{String.class, String.class};
+        Class<?>[] argTypes = new Class<?>[]{String.class, String.class};
         query.beginAddingConstructorArguments(Employee.class, argTypes);
         query.addAttribute("firstName");
         query.addAttribute("lastName");
@@ -170,7 +170,7 @@ public void testMultipleTypeConstructorExpression(){
         Vector reportResults = (Vector)getServerSession().executeQuery(query);
         query = new ReportQuery(Employee.class, employees);
 
-        Class[] argTypes = new Class[]{String.class, java.sql.Date.class, Integer.class};
+        Class<?>[] argTypes = new Class<?>[]{String.class, java.sql.Date.class, Integer.class};
         query.beginAddingConstructorArguments(DataHolder.class, argTypes);
         query.addAttribute("firstName");
         query.addItem("endDate", employees.get("period").get("endDate"));
@@ -199,7 +199,7 @@ public void testNonExistantConstructorConstructorExpression(){
         ExpressionBuilder employees = new ExpressionBuilder();
         ReportQuery query = new ReportQuery(Employee.class, employees);
 
-        Class[] argTypes = new Class[]{String.class, java.sql.Date.class, Integer.class};
+        Class<?>[] argTypes = new Class<?>[]{String.class, java.sql.Date.class, Integer.class};
         query.beginAddingConstructorArguments(Employee.class, argTypes);
         query.addAttribute("firstName");
         query.addItem("endDate", employees.get("period").get("endDate"));
@@ -225,7 +225,7 @@ public void testPrimitiveConstructorExpression(){
         Vector reportResults = (Vector)getServerSession().executeQuery(query);
 
         query = new ReportQuery(Employee.class, employees);
-        Class[] argTypes = new Class[]{int.class};
+        Class<?>[] argTypes = new Class<?>[]{int.class};
         query.beginAddingConstructorArguments(DataHolder.class, argTypes);
         query.addAttribute("salary");
         query.endAddingToConstructorItem();
diff --git a/jpa/eclipselink.jpa.test/src/it/java/org/eclipse/persistence/testing/tests/jpa/advanced/UpdateAllQueryAdvancedJunitTest.java b/jpa/eclipselink.jpa.test/src/it/java/org/eclipse/persistence/testing/tests/jpa/advanced/UpdateAllQueryAdvancedJunitTest.java
index 72f746e..7e927e7 100644
--- a/jpa/eclipselink.jpa.test/src/it/java/org/eclipse/persistence/testing/tests/jpa/advanced/UpdateAllQueryAdvancedJunitTest.java
+++ b/jpa/eclipselink.jpa.test/src/it/java/org/eclipse/persistence/testing/tests/jpa/advanced/UpdateAllQueryAdvancedJunitTest.java
@@ -36,7 +36,7 @@
 
 public class UpdateAllQueryAdvancedJunitTest extends JUnitTestCase {
 
-    static protected Class[] classes = {Employee.class, Address.class, PhoneNumber.class, Project.class};
+    static protected Class<?>[] classes = {Employee.class, Address.class, PhoneNumber.class, Project.class};
     static protected Vector[] objectVectors = {null, null, null, null};
 
     static protected EmployeePopulator populator = new EmployeePopulator();
@@ -220,7 +220,7 @@ public static void testAggregate() {
         updateAllQueryInternal(updateQuery);
     }
 
-    protected static void updateAllQueryInternal(Class referenceClass, HashMap updateClauses, Expression selectionExpression) {
+    protected static void updateAllQueryInternal(Class<?> referenceClass, HashMap updateClauses, Expression selectionExpression) {
         if (getServerSession().getPlatform().isSymfoware()) {
             getServerSession().logMessage("UpdateAllQueryAdvancedJunitTest skipped for this platform, "
                     + "Symfoware doesn't support UpdateAll/DeleteAll on multi-table objects (see rfe 298193).");
diff --git a/jpa/eclipselink.jpa.test/src/it/java/org/eclipse/persistence/testing/tests/jpa/composite/advanced/EntityManagerJUnitTestSuite.java b/jpa/eclipselink.jpa.test/src/it/java/org/eclipse/persistence/testing/tests/jpa/composite/advanced/EntityManagerJUnitTestSuite.java
index 94c4080..170322f 100644
--- a/jpa/eclipselink.jpa.test/src/it/java/org/eclipse/persistence/testing/tests/jpa/composite/advanced/EntityManagerJUnitTestSuite.java
+++ b/jpa/eclipselink.jpa.test/src/it/java/org/eclipse/persistence/testing/tests/jpa/composite/advanced/EntityManagerJUnitTestSuite.java
@@ -6916,7 +6916,7 @@ public void testUpdateAllLargeProjects() {
     public void testUpdateAllProjects() {
         internalTestUpdateAllProjects(Project.class);
     }
-    protected void internalTestUpdateAllProjects(Class cls) {
+    protected void internalTestUpdateAllProjects(Class<?> cls) {
         if (getPlatform(Project.class).isSymfoware()) {
             getDatabaseSession().logMessage("Test testUpdateAll*Projects skipped for this platform, "
                     + "Symfoware doesn't support UpdateAll/DeleteAll on multi-table objects (see rfe 298193).");
@@ -7024,7 +7024,7 @@ public void testUpdateAllLargeProjectsWithName() {
     public void testUpdateAllProjectsWithName() {
         internalTestUpdateAllProjectsWithName(Project.class);
     }
-    protected void internalTestUpdateAllProjectsWithName(Class cls) {
+    protected void internalTestUpdateAllProjectsWithName(Class<?> cls) {
         if (getPlatform(Project.class).isSymfoware()) {
             getDatabaseSession().logMessage("Test testUpdateAll*ProjectsWithName skipped for this platform, "
                     + "Symfoware doesn't support UpdateAll/DeleteAll on multi-table objects (see rfe 298193).");
@@ -7106,7 +7106,7 @@ public void testUpdateAllLargeProjectsWithNullTeamLeader() {
     public void testUpdateAllProjectsWithNullTeamLeader() {
         internalTestUpdateAllProjectsWithNullTeamLeader(Project.class);
     }
-    protected void internalTestUpdateAllProjectsWithNullTeamLeader(Class cls) {
+    protected void internalTestUpdateAllProjectsWithNullTeamLeader(Class<?> cls) {
         if (getPlatform(Project.class).isSymfoware()) {
             getDatabaseSession().logMessage("Test testUpdateAll*ProjectsWithNullTeamLeader skipped for this platform, "
                     + "Symfoware doesn't support UpdateAll/DeleteAll on multi-table objects (see rfe 298193).");
@@ -7813,7 +7813,7 @@ public void testSequencePreallocationUsingCallbackTest() {
         // setup
         SessionBroker broker = getSessionBroker();
         for (int i=1; i<=3; i++ ) {
-            Class cls;
+            Class<?> cls;
             if (i == 1) {
                 // defined in member_1
                 cls = Customer.class;
@@ -10775,7 +10775,7 @@ public void testSessionEventListeners() {
 
         // classes mapped by member persistence units
         int n = 3;
-        Class[] classes = {Address.class, Employee.class, Project.class};
+        Class<?>[] classes = {Address.class, Employee.class, Project.class};
         for (int i=0; i<n; i++) {
             ClientSession clientSession = (ClientSession)clientBroker.getSessionForClass(classes[i]);
             List<SessionEventListener> clientSessionListeners = getCompositeAndMemberListeners(clientSession);
diff --git a/jpa/eclipselink.jpa.test/src/it/java/org/eclipse/persistence/testing/tests/jpa/criteria/JUnitCriteriaUnitTestSuite.java b/jpa/eclipselink.jpa.test/src/it/java/org/eclipse/persistence/testing/tests/jpa/criteria/JUnitCriteriaUnitTestSuite.java
index 40ff3e5..0aa9eab 100644
--- a/jpa/eclipselink.jpa.test/src/it/java/org/eclipse/persistence/testing/tests/jpa/criteria/JUnitCriteriaUnitTestSuite.java
+++ b/jpa/eclipselink.jpa.test/src/it/java/org/eclipse/persistence/testing/tests/jpa/criteria/JUnitCriteriaUnitTestSuite.java
@@ -149,7 +149,7 @@ public void testSetup() {
         employeePopulator.persistExample(session);
     }
 
-    public Vector getAttributeFromAll(String attributeName, Vector objects, Class referenceClass) {
+    public Vector getAttributeFromAll(String attributeName, Vector objects, Class<?> referenceClass) {
         ClassDescriptor descriptor = getServerSession().getClassDescriptor(referenceClass);
         DirectToFieldMapping mapping = (DirectToFieldMapping)descriptor.getMappingForAttributeName(attributeName);
 
diff --git a/jpa/eclipselink.jpa.test/src/it/java/org/eclipse/persistence/testing/tests/jpa/fieldaccess/advanced/EntityManagerJUnitTestSuite.java b/jpa/eclipselink.jpa.test/src/it/java/org/eclipse/persistence/testing/tests/jpa/fieldaccess/advanced/EntityManagerJUnitTestSuite.java
index 7d74157..f338186 100644
--- a/jpa/eclipselink.jpa.test/src/it/java/org/eclipse/persistence/testing/tests/jpa/fieldaccess/advanced/EntityManagerJUnitTestSuite.java
+++ b/jpa/eclipselink.jpa.test/src/it/java/org/eclipse/persistence/testing/tests/jpa/fieldaccess/advanced/EntityManagerJUnitTestSuite.java
@@ -2406,17 +2406,17 @@ public void testPersistenceProperties() {
             fail("addressCacheSize is wrong");
         }
 
-        Class defaultCacheType = ss.getDescriptor(Project.class).getIdentityMapClass();
+        Class<?> defaultCacheType = ss.getDescriptor(Project.class).getIdentityMapClass();
         if(! Helper.getShortClassName(defaultCacheType).equals("FullIdentityMap")) {
             fail("defaultCacheType is wrong");
         }
 
-        Class employeeCacheType = ss.getDescriptor(Employee.class).getIdentityMapClass();
+        Class<?> employeeCacheType = ss.getDescriptor(Employee.class).getIdentityMapClass();
         if(! Helper.getShortClassName(employeeCacheType).equals("WeakIdentityMap")) {
             fail("employeeCacheType is wrong");
         }
 
-        Class addressCacheType = ss.getDescriptor(Address.class).getIdentityMapClass();
+        Class<?> addressCacheType = ss.getDescriptor(Address.class).getIdentityMapClass();
         if(! Helper.getShortClassName(addressCacheType).equals("HardCacheWeakIdentityMap")) {
             fail("addressCacheType is wrong");
         }
@@ -4051,7 +4051,7 @@ public void testUpdateAllLargeProjects() {
     public void testUpdateAllProjects() {
         internalTestUpdateAllProjects(Project.class);
     }
-    protected void internalTestUpdateAllProjects(Class cls) {
+    protected void internalTestUpdateAllProjects(Class<?> cls) {
         if (getDatabaseSession().getPlatform().isSymfoware()) {
             getDatabaseSession().logMessage("Test testUpdateAll*Projects skipped for this platform, "
                     + "Symfoware doesn't support UpdateAll/DeleteAll on multi-table objects (see rfe 298193).");
@@ -4159,7 +4159,7 @@ public void testUpdateAllLargeProjectsWithName() {
     public void testUpdateAllProjectsWithName() {
         internalTestUpdateAllProjectsWithName(Project.class);
     }
-    protected void internalTestUpdateAllProjectsWithName(Class cls) {
+    protected void internalTestUpdateAllProjectsWithName(Class<?> cls) {
         if (getDatabaseSession().getPlatform().isSymfoware()) {
             getDatabaseSession().logMessage("Test testUpdateAll*ProjectsWithName skipped for this platform, "
                     + "Symfoware doesn't support UpdateAll/DeleteAll on multi-table objects (see rfe 298193).");
@@ -4241,7 +4241,7 @@ public void testUpdateAllLargeProjectsWithNullTeamLeader() {
     public void testUpdateAllProjectsWithNullTeamLeader() {
         internalTestUpdateAllProjectsWithNullTeamLeader(Project.class);
     }
-    protected void internalTestUpdateAllProjectsWithNullTeamLeader(Class cls) {
+    protected void internalTestUpdateAllProjectsWithNullTeamLeader(Class<?> cls) {
         if (getDatabaseSession().getPlatform().isSymfoware()) {
             getDatabaseSession().logMessage("Test testUpdateAll*ProjectsWithNullTeamLeader skipped for this platform, "
                     + "Symfoware doesn't support UpdateAll/DeleteAll on multi-table objects (see rfe 298193).");
diff --git a/jpa/eclipselink.jpa.test/src/it/java/org/eclipse/persistence/testing/tests/jpa/fieldaccess/advanced/EntityManagerTLRJUnitTestSuite.java b/jpa/eclipselink.jpa.test/src/it/java/org/eclipse/persistence/testing/tests/jpa/fieldaccess/advanced/EntityManagerTLRJUnitTestSuite.java
index 5a52167..60bde62 100644
--- a/jpa/eclipselink.jpa.test/src/it/java/org/eclipse/persistence/testing/tests/jpa/fieldaccess/advanced/EntityManagerTLRJUnitTestSuite.java
+++ b/jpa/eclipselink.jpa.test/src/it/java/org/eclipse/persistence/testing/tests/jpa/fieldaccess/advanced/EntityManagerTLRJUnitTestSuite.java
@@ -2268,17 +2268,17 @@ public void testPersistenceProperties() {
             fail("addressCacheSize is wrong");
         }
 
-        Class defaultCacheType = ss.getDescriptor(Project.class).getIdentityMapClass();
+        Class<?> defaultCacheType = ss.getDescriptor(Project.class).getIdentityMapClass();
         if(! Helper.getShortClassName(defaultCacheType).equals("FullIdentityMap")) {
             fail("defaultCacheType is wrong");
         }
 
-        Class employeeCacheType = ss.getDescriptor(Employee.class).getIdentityMapClass();
+        Class<?> employeeCacheType = ss.getDescriptor(Employee.class).getIdentityMapClass();
         if(! Helper.getShortClassName(employeeCacheType).equals("WeakIdentityMap")) {
             fail("employeeCacheType is wrong");
         }
 
-        Class addressCacheType = ss.getDescriptor(Address.class).getIdentityMapClass();
+        Class<?> addressCacheType = ss.getDescriptor(Address.class).getIdentityMapClass();
         if(! Helper.getShortClassName(addressCacheType).equals("HardCacheWeakIdentityMap")) {
             fail("addressCacheType is wrong");
         }
@@ -3852,7 +3852,7 @@ public void testUpdateAllLargeProjects() {
     public void testUpdateAllProjects() {
         internalTestUpdateAllProjects(Project.class);
     }
-    protected void internalTestUpdateAllProjects(Class cls) {
+    protected void internalTestUpdateAllProjects(Class<?> cls) {
         if ((JUnitTestCase.getServerSession()).getPlatform().isSymfoware()) {
             getServerSession().logMessage("Test testUpdateAll*Projects skipped for this platform, "
                     + "Symfoware doesn't support UpdateAll/DeleteAll on multi-table objects (see rfe 298193).");
@@ -3960,7 +3960,7 @@ public void testUpdateAllLargeProjectsWithName() {
     public void testUpdateAllProjectsWithName() {
         internalTestUpdateAllProjectsWithName(Project.class);
     }
-    protected void internalTestUpdateAllProjectsWithName(Class cls) {
+    protected void internalTestUpdateAllProjectsWithName(Class<?> cls) {
         if ((JUnitTestCase.getServerSession()).getPlatform().isSymfoware()) {
             getServerSession().logMessage("Test testUpdateAll*ProjectsWithName skipped for this platform, "
                     + "Symfoware doesn't support UpdateAll/DeleteAll on multi-table objects (see rfe 298193).");
@@ -4042,7 +4042,7 @@ public void testUpdateAllLargeProjectsWithNullTeamLeader() {
     public void testUpdateAllProjectsWithNullTeamLeader() {
         internalTestUpdateAllProjectsWithNullTeamLeader(Project.class);
     }
-    protected void internalTestUpdateAllProjectsWithNullTeamLeader(Class cls) {
+    protected void internalTestUpdateAllProjectsWithNullTeamLeader(Class<?> cls) {
         if ((JUnitTestCase.getServerSession()).getPlatform().isSymfoware()) {
             getServerSession().logMessage("Test testUpdateAll*ProjectsWithNullTeamLeader skipped for this platform, "
                     + "Symfoware doesn't support UpdateAll/DeleteAll on multi-table objects (see rfe 298193).");
diff --git a/jpa/eclipselink.jpa.test/src/it/java/org/eclipse/persistence/testing/tests/jpa/fieldaccess/advanced/JoinedAttributeAdvancedJunitTest.java b/jpa/eclipselink.jpa.test/src/it/java/org/eclipse/persistence/testing/tests/jpa/fieldaccess/advanced/JoinedAttributeAdvancedJunitTest.java
index 2fd374f..1df54e2 100644
--- a/jpa/eclipselink.jpa.test/src/it/java/org/eclipse/persistence/testing/tests/jpa/fieldaccess/advanced/JoinedAttributeAdvancedJunitTest.java
+++ b/jpa/eclipselink.jpa.test/src/it/java/org/eclipse/persistence/testing/tests/jpa/fieldaccess/advanced/JoinedAttributeAdvancedJunitTest.java
@@ -40,7 +40,7 @@
 
 public class JoinedAttributeAdvancedJunitTest extends JUnitTestCase {
 
-    static protected Class[] classes = {Employee.class, Address.class, PhoneNumber.class, Project.class};
+    static protected Class<?>[] classes = {Employee.class, Address.class, PhoneNumber.class, Project.class};
     static protected Vector[] objectVectors = {null, null, null, null};
 
     static protected EmployeePopulator populator = new EmployeePopulator();
diff --git a/jpa/eclipselink.jpa.test/src/it/java/org/eclipse/persistence/testing/tests/jpa/fieldaccess/advanced/ReportQueryAdvancedJUnitTest.java b/jpa/eclipselink.jpa.test/src/it/java/org/eclipse/persistence/testing/tests/jpa/fieldaccess/advanced/ReportQueryAdvancedJUnitTest.java
index 94bd935..699a0cf 100644
--- a/jpa/eclipselink.jpa.test/src/it/java/org/eclipse/persistence/testing/tests/jpa/fieldaccess/advanced/ReportQueryAdvancedJUnitTest.java
+++ b/jpa/eclipselink.jpa.test/src/it/java/org/eclipse/persistence/testing/tests/jpa/fieldaccess/advanced/ReportQueryAdvancedJUnitTest.java
@@ -37,7 +37,7 @@
 
 public class ReportQueryAdvancedJUnitTest  extends JUnitTestCase {
 
-    static protected Class[] classes = {Employee.class, Address.class, PhoneNumber.class, Project.class};
+    static protected Class<?>[] classes = {Employee.class, Address.class, PhoneNumber.class, Project.class};
     static protected Vector[] objectVectors = {null, null, null, null};
 
     static protected EmployeePopulator populator = new EmployeePopulator();
diff --git a/jpa/eclipselink.jpa.test/src/it/java/org/eclipse/persistence/testing/tests/jpa/fieldaccess/advanced/ReportQueryConstructorExpressionTestSuite.java b/jpa/eclipselink.jpa.test/src/it/java/org/eclipse/persistence/testing/tests/jpa/fieldaccess/advanced/ReportQueryConstructorExpressionTestSuite.java
index 32aedc7..ccda9d4 100644
--- a/jpa/eclipselink.jpa.test/src/it/java/org/eclipse/persistence/testing/tests/jpa/fieldaccess/advanced/ReportQueryConstructorExpressionTestSuite.java
+++ b/jpa/eclipselink.jpa.test/src/it/java/org/eclipse/persistence/testing/tests/jpa/fieldaccess/advanced/ReportQueryConstructorExpressionTestSuite.java
@@ -106,7 +106,7 @@ public void testSimpleConstructorExpression(){
         employees = new ExpressionBuilder();
         query = new ReportQuery(Employee.class, employees);
 
-        Class[] argTypes = new Class[]{String.class, String.class};
+        Class<?>[] argTypes = new Class<?>[]{String.class, String.class};
         query.beginAddingConstructorArguments(Employee.class, argTypes);
         query.addAttribute("firstName");
         query.addAttribute("lastName");
@@ -168,7 +168,7 @@ public void testMultipleTypeConstructorExpression(){
         List reportResults = (List)getServerSession("fieldaccess").executeQuery(query);
         query = new ReportQuery(Employee.class, employees);
 
-        Class[] argTypes = new Class[]{String.class, java.sql.Date.class, Integer.class};
+        Class<?>[] argTypes = new Class<?>[]{String.class, java.sql.Date.class, Integer.class};
         query.beginAddingConstructorArguments(DataHolder.class, argTypes);
         query.addAttribute("firstName");
         query.addItem("endDate", employees.get("period").get("endDate"));
@@ -197,7 +197,7 @@ public void testNonExistantConstructorConstructorExpression(){
         ExpressionBuilder employees = new ExpressionBuilder();
         ReportQuery query = new ReportQuery(Employee.class, employees);
 
-        Class[] argTypes = new Class[]{String.class, java.sql.Date.class, Integer.class};
+        Class<?>[] argTypes = new Class<?>[]{String.class, java.sql.Date.class, Integer.class};
         query.beginAddingConstructorArguments(Employee.class, argTypes);
         query.addAttribute("firstName");
         query.addItem("endDate", employees.get("period").get("endDate"));
@@ -220,7 +220,7 @@ public void testPrimitiveConstructorExpression(){
         List reportResults = (List)getServerSession("fieldaccess").executeQuery(query);
 
         query = new ReportQuery(Employee.class, employees);
-        Class[] argTypes = new Class[]{int.class};
+        Class<?>[] argTypes = new Class<?>[]{int.class};
         query.beginAddingConstructorArguments(DataHolder.class, argTypes);
         query.addAttribute("salary");
         query.endAddingToConstructorItem();
diff --git a/jpa/eclipselink.jpa.test/src/it/java/org/eclipse/persistence/testing/tests/jpa/fieldaccess/advanced/UpdateAllQueryAdvancedJunitTest.java b/jpa/eclipselink.jpa.test/src/it/java/org/eclipse/persistence/testing/tests/jpa/fieldaccess/advanced/UpdateAllQueryAdvancedJunitTest.java
index d867346..e092cde 100644
--- a/jpa/eclipselink.jpa.test/src/it/java/org/eclipse/persistence/testing/tests/jpa/fieldaccess/advanced/UpdateAllQueryAdvancedJunitTest.java
+++ b/jpa/eclipselink.jpa.test/src/it/java/org/eclipse/persistence/testing/tests/jpa/fieldaccess/advanced/UpdateAllQueryAdvancedJunitTest.java
@@ -37,7 +37,7 @@
 
 public class UpdateAllQueryAdvancedJunitTest extends JUnitTestCase {
 
-    static protected Class[] classes = {Employee.class, Address.class, PhoneNumber.class, Project.class};
+    static protected Class<?>[] classes = {Employee.class, Address.class, PhoneNumber.class, Project.class};
     static protected Vector[] objectVectors = {null, null, null, null};
 
     static protected EmployeePopulator populator = new EmployeePopulator();
@@ -418,7 +418,7 @@ public void testAggregate() {
         }
     }
 
-    protected static void updateAllQueryInternal(Class referenceClass, HashMap updateClauses, Expression selectionExpression) {
+    protected static void updateAllQueryInternal(Class<?> referenceClass, HashMap updateClauses, Expression selectionExpression) {
         String errorMsg = UpdateAllQueryTestHelper.execute(getDbSession(), referenceClass, updateClauses, selectionExpression);
         if(errorMsg != null) {
             fail(errorMsg);
diff --git a/jpa/eclipselink.jpa.test/src/it/java/org/eclipse/persistence/testing/tests/jpa/inheritance/DeleteAllQueryInheritanceJunitTest.java b/jpa/eclipselink.jpa.test/src/it/java/org/eclipse/persistence/testing/tests/jpa/inheritance/DeleteAllQueryInheritanceJunitTest.java
index eb1cb9c..81722b7 100644
--- a/jpa/eclipselink.jpa.test/src/it/java/org/eclipse/persistence/testing/tests/jpa/inheritance/DeleteAllQueryInheritanceJunitTest.java
+++ b/jpa/eclipselink.jpa.test/src/it/java/org/eclipse/persistence/testing/tests/jpa/inheritance/DeleteAllQueryInheritanceJunitTest.java
@@ -154,19 +154,19 @@ public static void test_ownerOwnsNonFueledVehicle() {
         deleteAllQueryInternal_Deferred_Children(FueledVehicle.class, exp);
     }
 
-    protected static void deleteAllQueryInternal_Deferred_Children(Class referenceClass, Expression selectionExpression) {
+    protected static void deleteAllQueryInternal_Deferred_Children(Class<?> referenceClass, Expression selectionExpression) {
         deleteAllQueryInternal(referenceClass, selectionExpression, true, true);
     }
 
-    protected static void deleteAllQueryInternal_NonDeferred_Children(Class referenceClass, Expression selectionExpression) {
+    protected static void deleteAllQueryInternal_NonDeferred_Children(Class<?> referenceClass, Expression selectionExpression) {
         deleteAllQueryInternal(referenceClass, selectionExpression, false, true);
     }
 
-    protected static void deleteAllQueryInternal_Deferred_NoChildren(Class referenceClass, Expression selectionExpression) {
+    protected static void deleteAllQueryInternal_Deferred_NoChildren(Class<?> referenceClass, Expression selectionExpression) {
         deleteAllQueryInternal(referenceClass, selectionExpression, true, false);
     }
 
-    protected static void deleteAllQueryInternal_NonDeferred_NoChildren(Class referenceClass, Expression selectionExpression) {
+    protected static void deleteAllQueryInternal_NonDeferred_NoChildren(Class<?> referenceClass, Expression selectionExpression) {
         deleteAllQueryInternal(referenceClass, selectionExpression, false, false);
     }
 
@@ -180,7 +180,7 @@ protected static void deleteAllQueryInternal_NonDeferred_NoChildren(Class refere
     // and all its subclasses
     // Example: for Vehicle.class  9 DeleteAllQueries will be tested.
     // shouldHandleChildren==false means the test will be executed with the specified class only.
-    protected static void deleteAllQueryInternal(Class referenceClass, Expression selectionExpression, boolean shouldDeferExecutionInUOW, boolean handleChildren) {
+    protected static void deleteAllQueryInternal(Class<?> referenceClass, Expression selectionExpression, boolean shouldDeferExecutionInUOW, boolean handleChildren) {
         if (getServerSession().getDatasourcePlatform().isSymfoware()) {
             getServerSession().logMessage("DeleteAllQueryInheritanceJunitTest test skipped for this platform, "
                                     + "Symfoware doesn't support UpdateAll/DeleteAll on multi-table objects (see rfe 298193).");
diff --git a/jpa/eclipselink.jpa.test/src/it/java/org/eclipse/persistence/testing/tests/jpa/inheritance/JoinedAttributeInheritanceJunitTest.java b/jpa/eclipselink.jpa.test/src/it/java/org/eclipse/persistence/testing/tests/jpa/inheritance/JoinedAttributeInheritanceJunitTest.java
index 2d53015..3d99326 100644
--- a/jpa/eclipselink.jpa.test/src/it/java/org/eclipse/persistence/testing/tests/jpa/inheritance/JoinedAttributeInheritanceJunitTest.java
+++ b/jpa/eclipselink.jpa.test/src/it/java/org/eclipse/persistence/testing/tests/jpa/inheritance/JoinedAttributeInheritanceJunitTest.java
@@ -31,7 +31,7 @@
 
 public class JoinedAttributeInheritanceJunitTest extends JUnitTestCase {
 
-    static protected Class[] classes = {Company.class, Vehicle.class};
+    static protected Class<?>[] classes = {Company.class, Vehicle.class};
     static protected Vector[] objectVectors = {null, null};
 
     protected DatabaseSession dbSession;
diff --git a/jpa/eclipselink.jpa.test/src/it/java/org/eclipse/persistence/testing/tests/jpa/inherited/InheritedModelJunitTest.java b/jpa/eclipselink.jpa.test/src/it/java/org/eclipse/persistence/testing/tests/jpa/inherited/InheritedModelJunitTest.java
index 3d40f2d..008cc1c 100644
--- a/jpa/eclipselink.jpa.test/src/it/java/org/eclipse/persistence/testing/tests/jpa/inherited/InheritedModelJunitTest.java
+++ b/jpa/eclipselink.jpa.test/src/it/java/org/eclipse/persistence/testing/tests/jpa/inherited/InheritedModelJunitTest.java
@@ -1842,9 +1842,9 @@ public void testEmbeddableAggregateCollectionAndAggregate(){
     // Bug 370975
     public void testNodeImplWeaving(){
         if (isWeavingEnabled()) {
-            Class[] interfaces = NodeImpl.class.getInterfaces();
+            Class<?>[] interfaces = NodeImpl.class.getInterfaces();
             boolean found = false;
-            for (Class c : interfaces){
+            for (Class<?> c : interfaces){
                 if (c == PersistenceWeaved.class){
                     found = true;
                 }
@@ -1891,10 +1891,10 @@ public void testInterfaces(){
         // ensure weaving has occured
         EntityManager em = createEntityManager();
         em.getCriteriaBuilder();
-        Class[] testClasses = new Class[]{BeerConsumer.class, Alpine.class, NoviceBeerConsumer.class, Bluish.class, Blue.class, Corona.class, ExpertBeerConsumer.class, Heineken.class};
+        Class<?>[] testClasses = new Class<?>[]{BeerConsumer.class, Alpine.class, NoviceBeerConsumer.class, Bluish.class, Blue.class, Corona.class, ExpertBeerConsumer.class, Heineken.class};
 
         for (int index = 0;index<testClasses.length;index++){
-            Class[] interfaces = testClasses[index].getInterfaces();
+            Class<?>[] interfaces = testClasses[index].getInterfaces();
             Type[] genericInterfaces = testClasses[index].getGenericInterfaces();
 
             if (interfaces.length != genericInterfaces.length){
diff --git a/jpa/eclipselink.jpa.test/src/it/java/org/eclipse/persistence/testing/tests/jpa/jpql/JUnitJPQLUnitTestSuite.java b/jpa/eclipselink.jpa.test/src/it/java/org/eclipse/persistence/testing/tests/jpa/jpql/JUnitJPQLUnitTestSuite.java
index bec1892..1ea90c9 100644
--- a/jpa/eclipselink.jpa.test/src/it/java/org/eclipse/persistence/testing/tests/jpa/jpql/JUnitJPQLUnitTestSuite.java
+++ b/jpa/eclipselink.jpa.test/src/it/java/org/eclipse/persistence/testing/tests/jpa/jpql/JUnitJPQLUnitTestSuite.java
@@ -140,7 +140,7 @@ public void testSetup() {
         employeePopulator.persistExample(session);
     }
 
-    public Vector getAttributeFromAll(String attributeName, Vector objects, Class referenceClass){
+    public Vector getAttributeFromAll(String attributeName, Vector objects, Class<?> referenceClass){
 
         EntityManager em = createEntityManager();
 
diff --git a/jpa/eclipselink.jpa.test/src/it/java/org/eclipse/persistence/testing/tests/jpa/metamodel/MetamodelMetamodelTest.java b/jpa/eclipselink.jpa.test/src/it/java/org/eclipse/persistence/testing/tests/jpa/metamodel/MetamodelMetamodelTest.java
index cc3ccab..57f60af 100644
--- a/jpa/eclipselink.jpa.test/src/it/java/org/eclipse/persistence/testing/tests/jpa/metamodel/MetamodelMetamodelTest.java
+++ b/jpa/eclipselink.jpa.test/src/it/java/org/eclipse/persistence/testing/tests/jpa/metamodel/MetamodelMetamodelTest.java
@@ -3599,7 +3599,7 @@ public void testManagedType_getMap_Type_param_Method() {
             MapAttribute<? super Manufacturer, ?, ?> anAttribute =
             entityManufacturer_.getMap("hardwareDesignersMap", Integer.class,  HardwareDesigner.class);
             // verify the default key type is the not the Map key - rather that is is the managedType PK
-            Class keyJavaType = anAttribute.getKeyJavaType();
+            Class<?> keyJavaType = anAttribute.getKeyJavaType();
             //@OneToMany(cascade=ALL, mappedBy="mappedEmployer")
             //private Map<String, HardwareDesigner> hardwareDesignersMap;// = new HashMap<String, HardwareDesigner>();
             // http://wiki.eclipse.org/EclipseLink/Development/JPA_2.0/metamodel_api#DI_63:_20090824:_Add_Map_support_for_.40MapKey_to_MapAttribute
@@ -3667,7 +3667,7 @@ public void testManagedType_getDeclaredMap_Type_param_Method() {
             MapAttribute<? super Manufacturer, ?, ?> anAttribute =
             entityManufacturer_.getDeclaredMap("hardwareDesignersMap", Integer.class,  HardwareDesigner.class);
             // verify the default key type is the not the Map key - rather that is is the managedType PK
-            Class keyJavaType = anAttribute.getKeyJavaType();
+            Class<?> keyJavaType = anAttribute.getKeyJavaType();
             //@OneToMany(cascade=ALL, mappedBy="mappedEmployer")
             //private Map<String, HardwareDesigner> hardwareDesignersMap;// = new HashMap<String, HardwareDesigner>();
             // http://wiki.eclipse.org/EclipseLink/Development/JPA_2.0/metamodel_api#DI_63:_20090824:_Add_Map_support_for_.40MapKey_to_MapAttribute
@@ -4628,7 +4628,7 @@ public void testMapAttribute_getKeyJavaType_UC0_Method() {
             MapAttribute<? super Manufacturer, ?, ?> anAttribute =
             entityManufacturer_.getMap("hardwareDesignersMap");
             // verify the default key type is the not the Map key - rather that is is the managedType PK
-            Class keyJavaType = anAttribute.getKeyJavaType();
+            Class<?> keyJavaType = anAttribute.getKeyJavaType();
             //@OneToMany(cascade=ALL, mappedBy="mappedEmployer")
             //private Map<String, HardwareDesigner> hardwareDesignersMap;// = new HashMap<String, HardwareDesigner>();
             // http://wiki.eclipse.org/EclipseLink/Development/JPA_2.0/metamodel_api#DI_63:_20090824:_Add_Map_support_for_.40MapKey_to_MapAttribute
@@ -4667,7 +4667,7 @@ public void testMapAttribute_getKeyJavaType_UC1a_Method() {
             MapAttribute<? super Manufacturer, ?, ?> anAttribute =
             entityManufacturer_.getMap("hardwareDesignersMapUC1a");
             // verify the key type is the Map key - not the managedType PK
-            Class keyJavaType = anAttribute.getKeyJavaType();
+            Class<?> keyJavaType = anAttribute.getKeyJavaType();
             // UC 1a: Generics KV set, no @MapKey present, PK is singular field
             //@OneToMany(cascade=ALL, mappedBy="mappedEmployerUC1a")
             //private Map<String, HardwareDesigner> hardwareDesignersMapUC1a;
@@ -4705,7 +4705,7 @@ public void testMapAttribute_getKeyJavaType_UC2_Method() {
             MapAttribute<? super Manufacturer, ?, ?> anAttribute =
             entityManufacturer_.getMap("hardwareDesignersMapUC2");
             // verify the key type is the Map key - not the managedType PK
-            Class keyJavaType = anAttribute.getKeyJavaType();
+            Class<?> keyJavaType = anAttribute.getKeyJavaType();
             // UC 2: Generics KV set, @MapKey is present
             //@OneToMany(cascade=ALL, mappedBy="mappedEmployerUC2")
             //@MapKey(name="name")
@@ -4744,7 +4744,7 @@ public void testMapAttribute_getKeyJavaType_UC4_Method() {
             MapAttribute<? super Manufacturer, ?, ?> anAttribute =
             entityManufacturer_.getMap("hardwareDesignersMapUC4");
             // verify the key type is the Map key - not the managedType PK
-            Class keyJavaType = anAttribute.getKeyJavaType();
+            Class<?> keyJavaType = anAttribute.getKeyJavaType();
             // UC 4: No Generics KV set, @MapKey is present
             //@OneToMany(targetEntity=HardwareDesigner.class, cascade=ALL, mappedBy="mappedEmployerUC4")
             //@MapKey(name="name")
@@ -4784,7 +4784,7 @@ public void testMapAttribute_getKeyJavaType_UC7_Method() {
             MapAttribute<? super Manufacturer, ?, ?> anAttribute =
             entityManufacturer_.getMap("hardwareDesignersMapUC7");
             // verify the key type is the Map key - not the managedType PK
-            Class keyJavaType = anAttribute.getKeyJavaType();
+            Class<?> keyJavaType = anAttribute.getKeyJavaType();
             // UC 7: Generics KV set, targetEntity is also set, @MapKey is *(set/unset)
             //@OneToMany(targetEntity=HardwareDesigner.class, cascade=ALL, mappedBy="mappedEmployerUC7")
             // Same as UC1a - that is missing the @MapKey
@@ -4824,7 +4824,7 @@ public void testMapAttribute_getKeyJavaType_UC8_Method() {
             MapAttribute<? super Manufacturer, ?, ?> anAttribute =
             entityManufacturer_.getMap("hardwareDesignersMapUC8");
             // verify the key type is the Map key - not the managedType PK
-            Class keyJavaType = anAttribute.getKeyJavaType();
+            Class<?> keyJavaType = anAttribute.getKeyJavaType();
             // UC 8: Generics KV set, targetEntity not set, @MapKey is set but name attribute is defaulted
             //@OneToMany(targetEntity=HardwareDesigner.class, cascade=ALL, mappedBy="mappedEmployerUC8")
             // Same as UC1a - that is missing the @MapKey name attribute
@@ -4866,7 +4866,7 @@ public void testMapAttribute_getKeyJavaType_UC9_DI86_Embeddable_IdClass_keyType_
             MapAttribute<? super Manufacturer, ?, ?> anAttribute =
             entityManufacturer_.getMap("enclosureByBoardMapUC9");
             // verify the key type is the Map key - not the managedType PK
-            Class keyJavaType = anAttribute.getKeyJavaType();
+            Class<?> keyJavaType = anAttribute.getKeyJavaType();
             // UC9: no targetEntity, no MapKey, but generics are set (MapKey has an IdClass with an Embeddable)
             //@OneToMany(cascade=CascadeType.ALL, mappedBy="mappedManufacturerUC9")
             //private Map<Board, Enclosure> enclosureByBoardMapUC9;
@@ -4904,7 +4904,7 @@ public void testMapAttribute_getKeyType_UC0_Method() {
             MapAttribute<? super Manufacturer, ?, ?> anAttribute =
             entityManufacturer_.getMap("hardwareDesignersMap");
             // verify the default key type is the not the Map key - rather that is is the managedType PK
-            Class keyJavaType = anAttribute.getKeyJavaType();
+            Class<?> keyJavaType = anAttribute.getKeyJavaType();
             //@OneToMany(cascade=ALL, mappedBy="mappedEmployer")
             //private Map<String, HardwareDesigner> hardwareDesignersMap;// = new HashMap<String, HardwareDesigner>();
             // http://wiki.eclipse.org/EclipseLink/Development/JPA_2.0/metamodel_api#DI_63:_20090824:_Add_Map_support_for_.40MapKey_to_MapAttribute
@@ -4943,7 +4943,7 @@ public void testMapAttribute_getKeyType_UC1a_Method() {
             MapAttribute<? super Manufacturer, ?, ?> anAttribute =
             entityManufacturer_.getMap("hardwareDesignersMapUC1a");
             // verify the key type is the Map key - not the managedType PK
-            Class keyJavaType = anAttribute.getKeyJavaType();
+            Class<?> keyJavaType = anAttribute.getKeyJavaType();
             // UC 1a: Generics KV set, no @MapKey present, PK is singular field
             //@OneToMany(cascade=ALL, mappedBy="mappedEmployerUC1a")
             //private Map<String, HardwareDesigner> hardwareDesignersMapUC1a;
@@ -4981,7 +4981,7 @@ public void testMapAttribute_getKeyType_UC2_Method() {
             MapAttribute<? super Manufacturer, ?, ?> anAttribute =
             entityManufacturer_.getMap("hardwareDesignersMapUC2");
             // verify the key type is the Map key - not the managedType PK
-            Class keyJavaType = anAttribute.getKeyJavaType();
+            Class<?> keyJavaType = anAttribute.getKeyJavaType();
             // UC 2: Generics KV set, @MapKey is present
             //@OneToMany(cascade=ALL, mappedBy="mappedEmployerUC2")
             //@MapKey(name="name")
@@ -5020,7 +5020,7 @@ public void testMapAttribute_getKeyType_UC4_Method() {
             MapAttribute<? super Manufacturer, ?, ?> anAttribute =
             entityManufacturer_.getMap("hardwareDesignersMapUC4");
             // verify the key type is the Map key - not the managedType PK
-            Class keyJavaType = anAttribute.getKeyJavaType();
+            Class<?> keyJavaType = anAttribute.getKeyJavaType();
             // UC 4: No Generics KV set, @MapKey is present
             //@OneToMany(targetEntity=HardwareDesigner.class, cascade=ALL, mappedBy="mappedEmployerUC4")
             //@MapKey(name="name")
@@ -5059,7 +5059,7 @@ public void testMapAttribute_getKeyType_UC7_Method() {
             MapAttribute<? super Manufacturer, ?, ?> anAttribute =
             entityManufacturer_.getMap("hardwareDesignersMapUC7");
             // verify the key type is the Map key - not the managedType PK
-            Class keyJavaType = anAttribute.getKeyJavaType();
+            Class<?> keyJavaType = anAttribute.getKeyJavaType();
             // UC 7: Generics KV set, targetEntity is also set, @MapKey is *(set/unset)
             //@OneToMany(targetEntity=HardwareDesigner.class, cascade=ALL, mappedBy="mappedEmployerUC7")
             // Same as UC1a - that is missing the @MapKey
@@ -5098,7 +5098,7 @@ public void testMapAttribute_getKeyType_UC8_Method() {
             MapAttribute<? super Manufacturer, ?, ?> anAttribute =
             entityManufacturer_.getMap("hardwareDesignersMapUC8");
             // verify the key type is the Map key - not the managedType PK
-            Class keyJavaType = anAttribute.getKeyJavaType();
+            Class<?> keyJavaType = anAttribute.getKeyJavaType();
             // UC 8: Generics KV set, targetEntity not set, @MapKey is set but name attribute is defaulted
             //@OneToMany(targetEntity=HardwareDesigner.class, cascade=ALL, mappedBy="mappedEmployerUC8")
             // Same as UC1a - that is missing the @MapKey name attribute
@@ -5139,7 +5139,7 @@ public void testMapAttribute_getKeyType_UC9_DI86_Embeddable_IdClass_keyType_Meth
             MapAttribute<? super Manufacturer, ?, ?> anAttribute =
             entityManufacturer_.getMap("enclosureByBoardMapUC9");
             // verify the key type is the Map key - not the managedType PK
-            Class keyJavaType = anAttribute.getKeyJavaType();
+            Class<?> keyJavaType = anAttribute.getKeyJavaType();
             // UC9: no targetEntity, no MapKey, but generics are set (MapKey has an IdClass with an Embeddable)
             //@OneToMany(cascade=CascadeType.ALL, mappedBy="mappedManufacturerUC9")
             //private Map<Board, Enclosure> enclosureByBoardMapUC9;
@@ -5178,7 +5178,7 @@ public void testMapAttribute_getKeyType_294811_UC10_DI86_Embeddable_IdClass_keyT
             MapAttribute<? super Computer, ?, ?> anAttribute =
             entityComputer_.getMap("enclosuresUC10");
             // verify the key type is the Map key - not the managedType PK
-            Class keyJavaType = anAttribute.getKeyJavaType();
+            Class<?> keyJavaType = anAttribute.getKeyJavaType();
             // UC10: no targetEntity, no MapKey attribute, but generics are set (MapKey has an IdClass with an Embeddable)
             //@OneToMany(mappedBy="computerUC10", cascade=ALL, fetch=EAGER)
             //@MapKey // key defaults to an instance of the composite pk class
@@ -5216,7 +5216,7 @@ public void testMapAttribute_getKeyType_294811_UC13_DI86_Embedded_keyType_Method
             MapAttribute<? super Computer, ?, ?> anAttribute =
             entityComputer_.getMap("positionUniUC13");
             // verify the key type is the Map key - not the managedType PK
-            Class keyJavaType = anAttribute.getKeyJavaType();
+            Class<?> keyJavaType = anAttribute.getKeyJavaType();
             // UC13:  mapKey defined via generics and is an Embeddable (EmbeddedId) java class defined as an IdClass on the element(value) class
             // However, here we make the owning OneToMany - unidirectional and an effective ManyToMany
             //@MapKey // key defaults to an instance of the composite pk class
@@ -5254,7 +5254,7 @@ public void testMapAttribute_getKeyType_294811_UC12_DI86_Embedded_keyType_Method
             MapAttribute<? super Computer, ?, ?> anAttribute =
             entityComputer_.getMap("positionUC12");
             // verify the key type is the Map key - not the managedType PK
-            Class keyJavaType = anAttribute.getKeyJavaType();
+            Class<?> keyJavaType = anAttribute.getKeyJavaType();
             // UC12:  mapKey defined via generics and is an Embeddable (EmbeddedId) java class defined as an IdClass on the element(value) class
             //@OneToMany(mappedBy="computerUC12", cascade=ALL, fetch=EAGER)
             //@MapKey // key defaults to an instance of the composite pk class
@@ -6213,7 +6213,7 @@ public void testOutOfSpecificationInternalAPI() {
             }
             assertNotNull("elementType should not be null", elementType);
             // Since the javaType may be computed off the elementType - it must not be null or we will get a NPE below
-            Class javaType = anAttribute.getJavaType();
+            Class<?> javaType = anAttribute.getJavaType();
             }
 
         boolean expectedIAExceptionThrown = false;
diff --git a/jpa/eclipselink.jpa.test/src/it/java/org/eclipse/persistence/testing/tests/jpa/performance/JPAPerformanceComparisonModel.java b/jpa/eclipselink.jpa.test/src/it/java/org/eclipse/persistence/testing/tests/jpa/performance/JPAPerformanceComparisonModel.java
index 2d17028..bee9b1e 100644
--- a/jpa/eclipselink.jpa.test/src/it/java/org/eclipse/persistence/testing/tests/jpa/performance/JPAPerformanceComparisonModel.java
+++ b/jpa/eclipselink.jpa.test/src/it/java/org/eclipse/persistence/testing/tests/jpa/performance/JPAPerformanceComparisonModel.java
@@ -195,8 +195,8 @@ public Map getPersistenceProperties() {
     }
 
     static class PerformanceComparisonTestCaseWithTargetClass extends PerformanceComparisonTestCase {
-        Class targetClass;
-        public PerformanceComparisonTestCaseWithTargetClass(Class targetClass) {
+        Class<?> targetClass;
+        public PerformanceComparisonTestCaseWithTargetClass(Class<?> targetClass) {
             super();
             this.targetClass = targetClass;
         }
@@ -204,7 +204,7 @@ public PerformanceComparisonTestCaseWithTargetClass(Class targetClass) {
     /**
      * Add a test to see if the provider is using change tracking.
      */
-    public TestCase buildReadAllVsReadAllResultSet(Class targetClass) {
+    public TestCase buildReadAllVsReadAllResultSet(Class<?> targetClass) {
         PerformanceComparisonTestCase test = new PerformanceComparisonTestCaseWithTargetClass(targetClass) {
             ReadAllQuery query;
             ReadAllQuery resultSetQuery;
@@ -942,7 +942,7 @@ public void reset() {
      * Useful for side-by-side profiling regular vs ResultSet Access optimization.
      */
     static class ResultSetSideBySideTest extends TestCase {
-        Class targetClass;
+        Class<?> targetClass;
         boolean withCache;
         ReadAllQuery query;
         ReadAllQuery resultSetQuery;
@@ -951,7 +951,7 @@ static class ResultSetSideBySideTest extends TestCase {
         long time1;
         long time0square;
         long time1square;
-        public ResultSetSideBySideTest(Class targetClass, boolean withCache) {
+        public ResultSetSideBySideTest(Class<?> targetClass, boolean withCache) {
             super();
             this.targetClass = targetClass;
             this.withCache = withCache;
diff --git a/jpa/eclipselink.jpa.test/src/it/java/org/eclipse/persistence/testing/tests/jpa/performance/misc/JPAMetadataPerformanceTest.java b/jpa/eclipselink.jpa.test/src/it/java/org/eclipse/persistence/testing/tests/jpa/performance/misc/JPAMetadataPerformanceTest.java
index bcfa5eb..a2aa4ae 100644
--- a/jpa/eclipselink.jpa.test/src/it/java/org/eclipse/persistence/testing/tests/jpa/performance/misc/JPAMetadataPerformanceTest.java
+++ b/jpa/eclipselink.jpa.test/src/it/java/org/eclipse/persistence/testing/tests/jpa/performance/misc/JPAMetadataPerformanceTest.java
@@ -34,7 +34,7 @@ public JPAMetadataPerformanceTest() {
     @Override
     public void test() throws Exception {
         MetadataAsmFactory factory = new MetadataAsmFactory(new MetadataLogger(getAbstractSession()), getClass().getClassLoader());
-        for (Class javaClass : ((EntityManagerFactoryImpl)getExecutor().getEntityManagerFactory()).getServerSession().getDescriptors().keySet()) {
+        for (Class<?> javaClass : ((EntityManagerFactoryImpl)getExecutor().getEntityManagerFactory()).getServerSession().getDescriptors().keySet()) {
             factory.getMetadataClass(javaClass.getName());
         }
     }
diff --git a/jpa/eclipselink.jpa.test/src/it/java/org/eclipse/persistence/testing/tests/jpa/xml/advanced/EntityMappingsAdvancedJUnitTestCase.java b/jpa/eclipselink.jpa.test/src/it/java/org/eclipse/persistence/testing/tests/jpa/xml/advanced/EntityMappingsAdvancedJUnitTestCase.java
index 235e6d6..567dffd 100644
--- a/jpa/eclipselink.jpa.test/src/it/java/org/eclipse/persistence/testing/tests/jpa/xml/advanced/EntityMappingsAdvancedJUnitTestCase.java
+++ b/jpa/eclipselink.jpa.test/src/it/java/org/eclipse/persistence/testing/tests/jpa/xml/advanced/EntityMappingsAdvancedJUnitTestCase.java
@@ -1335,13 +1335,13 @@ public void testProperty() {
             fail(errorMsg);
         }
     }
-    protected String verifyPropertyValue(ClassDescriptor descriptor, String propertyName, Class expectedPropertyValueType, Object expectedPropertyValue) {
+    protected String verifyPropertyValue(ClassDescriptor descriptor, String propertyName, Class<?> expectedPropertyValueType, Object expectedPropertyValue) {
         return verifyPropertyValue(propertyName, descriptor.getProperty(propertyName), expectedPropertyValueType, expectedPropertyValue, Helper.getShortClassName(descriptor.getJavaClass()) + " descriptor");
     }
-    protected String verifyPropertyValue(DatabaseMapping mapping, String propertyName, Class expectedPropertyValueType, Object expectedPropertyValue) {
+    protected String verifyPropertyValue(DatabaseMapping mapping, String propertyName, Class<?> expectedPropertyValueType, Object expectedPropertyValue) {
         return verifyPropertyValue(propertyName, mapping.getProperty(propertyName), expectedPropertyValueType, expectedPropertyValue, mapping.getAttributeName() + " attribute");
     }
-    protected String verifyPropertyValue(String propertyName, Object propertyValue, Class expectedPropertyValueType, Object expectedPropertyValue, String masterName) {
+    protected String verifyPropertyValue(String propertyName, Object propertyValue, Class<?> expectedPropertyValueType, Object expectedPropertyValue, String masterName) {
         String errorMsg = "";
         String errorPrefix = " property " + propertyName + " for " + masterName;
         if(expectedPropertyValueType == null) {
diff --git a/jpa/eclipselink.jpa.test/src/it/java/org/eclipse/persistence/testing/tests/jpa/xml/composite/advanced/EntityMappingsAdvancedJUnitTestCase.java b/jpa/eclipselink.jpa.test/src/it/java/org/eclipse/persistence/testing/tests/jpa/xml/composite/advanced/EntityMappingsAdvancedJUnitTestCase.java
index 805199c..4e20a56 100644
--- a/jpa/eclipselink.jpa.test/src/it/java/org/eclipse/persistence/testing/tests/jpa/xml/composite/advanced/EntityMappingsAdvancedJUnitTestCase.java
+++ b/jpa/eclipselink.jpa.test/src/it/java/org/eclipse/persistence/testing/tests/jpa/xml/composite/advanced/EntityMappingsAdvancedJUnitTestCase.java
@@ -1365,13 +1365,13 @@ public void testProperty() {
             fail(errorMsg);
         }
     }
-    protected String verifyPropertyValue(ClassDescriptor descriptor, String propertyName, Class expectedPropertyValueType, Object expectedPropertyValue) {
+    protected String verifyPropertyValue(ClassDescriptor descriptor, String propertyName, Class<?> expectedPropertyValueType, Object expectedPropertyValue) {
         return verifyPropertyValue(propertyName, descriptor.getProperty(propertyName), expectedPropertyValueType, expectedPropertyValue, Helper.getShortClassName(descriptor.getJavaClass()) + " descriptor");
     }
-    protected String verifyPropertyValue(DatabaseMapping mapping, String propertyName, Class expectedPropertyValueType, Object expectedPropertyValue) {
+    protected String verifyPropertyValue(DatabaseMapping mapping, String propertyName, Class<?> expectedPropertyValueType, Object expectedPropertyValue) {
         return verifyPropertyValue(propertyName, mapping.getProperty(propertyName), expectedPropertyValueType, expectedPropertyValue, mapping.getAttributeName() + " attribute");
     }
-    protected String verifyPropertyValue(String propertyName, Object propertyValue, Class expectedPropertyValueType, Object expectedPropertyValue, String masterName) {
+    protected String verifyPropertyValue(String propertyName, Object propertyValue, Class<?> expectedPropertyValueType, Object expectedPropertyValue, String masterName) {
         String errorMsg = "";
         String errorPrefix = " property " + propertyName + " for " + masterName;
         if(expectedPropertyValueType == null) {
diff --git a/jpa/eclipselink.jpa.test/src/it/java/org/eclipse/persistence/testing/tests/jpa/xml/merge/advanced/EntityMappingsMergeAdvancedJUnitTestCase.java b/jpa/eclipselink.jpa.test/src/it/java/org/eclipse/persistence/testing/tests/jpa/xml/merge/advanced/EntityMappingsMergeAdvancedJUnitTestCase.java
index 369ed24..be4e4c2 100644
--- a/jpa/eclipselink.jpa.test/src/it/java/org/eclipse/persistence/testing/tests/jpa/xml/merge/advanced/EntityMappingsMergeAdvancedJUnitTestCase.java
+++ b/jpa/eclipselink.jpa.test/src/it/java/org/eclipse/persistence/testing/tests/jpa/xml/merge/advanced/EntityMappingsMergeAdvancedJUnitTestCase.java
@@ -62,7 +62,7 @@ public void testInheritanceDiscriminatorFieldValue() {
         if(!classIndicatorFieldName.equals("XML_MERGE_PROJ_TYPE")) {
             fail("Wrong classIndicatorField name '"+classIndicatorFieldName+"'");
         }
-        Class classIndicatorFieldType = classIndicatorField.getType();
+        Class<?> classIndicatorFieldType = classIndicatorField.getType();
         if(!classIndicatorFieldType.equals(String.class)) {
             fail("Wrong classIndicatorField type '"+classIndicatorFieldType.getName()+"'");
         }
diff --git a/jpa/eclipselink.jpa.test/src/it/java/org/eclipse/persistence/testing/tests/jpa21/advanced/DDLTestSuite.java b/jpa/eclipselink.jpa.test/src/it/java/org/eclipse/persistence/testing/tests/jpa21/advanced/DDLTestSuite.java
index cd797a0..a5edad3 100644
--- a/jpa/eclipselink.jpa.test/src/it/java/org/eclipse/persistence/testing/tests/jpa21/advanced/DDLTestSuite.java
+++ b/jpa/eclipselink.jpa.test/src/it/java/org/eclipse/persistence/testing/tests/jpa21/advanced/DDLTestSuite.java
@@ -485,7 +485,7 @@ public void testContainerGenerateSchema() {
         PersistenceProvider provider = new PersistenceProvider();
         JPAInitializer initializer = provider.getInitializer(puName, properties);
         SEPersistenceUnitInfo sePUImpl = initializer.findPersistenceUnitInfo(puName, properties);
-        PersistenceUnitInfo puinfo = (PersistenceUnitInfo) Proxy.newProxyInstance(SEPersistenceUnitInfo.class.getClassLoader(), new Class[] { PersistenceUnitInfo.class }, new PUInfoInvocationHandler(sePUImpl));
+        PersistenceUnitInfo puinfo = (PersistenceUnitInfo) Proxy.newProxyInstance(SEPersistenceUnitInfo.class.getClassLoader(), new Class<?>[] { PersistenceUnitInfo.class }, new PUInfoInvocationHandler(sePUImpl));
         provider.generateSchema(puinfo, properties);
 
         // Now create an entity manager and build some objects for this PU using
diff --git a/jpa/eclipselink.jpa.test/src/it/java/org/eclipse/persistence/testing/tests/jpa22/advanced/DDLTestSuite.java b/jpa/eclipselink.jpa.test/src/it/java/org/eclipse/persistence/testing/tests/jpa22/advanced/DDLTestSuite.java
index 5908bd1..1836d90 100644
--- a/jpa/eclipselink.jpa.test/src/it/java/org/eclipse/persistence/testing/tests/jpa22/advanced/DDLTestSuite.java
+++ b/jpa/eclipselink.jpa.test/src/it/java/org/eclipse/persistence/testing/tests/jpa22/advanced/DDLTestSuite.java
@@ -479,7 +479,7 @@ public void testContainerGenerateSchema() {
         PersistenceProvider provider = new PersistenceProvider();
         JPAInitializer initializer = provider.getInitializer(puName, properties);
         SEPersistenceUnitInfo sePUImpl = initializer.findPersistenceUnitInfo(puName, properties);
-        PersistenceUnitInfo puinfo = (PersistenceUnitInfo) Proxy.newProxyInstance(SEPersistenceUnitInfo.class.getClassLoader(), new Class[] { PersistenceUnitInfo.class }, new PUInfoInvocationHandler(sePUImpl));
+        PersistenceUnitInfo puinfo = (PersistenceUnitInfo) Proxy.newProxyInstance(SEPersistenceUnitInfo.class.getClassLoader(), new Class<?>[] { PersistenceUnitInfo.class }, new PUInfoInvocationHandler(sePUImpl));
         provider.generateSchema(puinfo, properties);
 
         // Now create an entity manager and build some objects for this PU using
diff --git a/jpa/eclipselink.jpa.test/src/it/java/org/eclipse/persistence/testing/tests/weaving/SimpleWeaverTestSuite.java b/jpa/eclipselink.jpa.test/src/it/java/org/eclipse/persistence/testing/tests/weaving/SimpleWeaverTestSuite.java
index 97d36b5..820dd93 100644
--- a/jpa/eclipselink.jpa.test/src/it/java/org/eclipse/persistence/testing/tests/weaving/SimpleWeaverTestSuite.java
+++ b/jpa/eclipselink.jpa.test/src/it/java/org/eclipse/persistence/testing/tests/weaving/SimpleWeaverTestSuite.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
@@ -198,7 +198,7 @@ public PersistenceWeaver buildWeaver(Session session, Collection entities) {
 
     public void buildWeavedClass(byte[] weavedBytes) {
 
-        Class weavedClass = null;
+        Class<?> weavedClass = null;
         try {
             weavedClass = simpleClassLoader.define_class(SimpleObject.class.getName(), weavedBytes, 0, weavedBytes.length);
         }
@@ -207,7 +207,7 @@ public void buildWeavedClass(byte[] weavedBytes) {
         }
         assertNotNull("could not build weaved class", weavedClass);
 
-        Class[] interfaces = null;
+        Class<?>[] interfaces = null;
         try {
             interfaces = weavedClass.getInterfaces();
         }
@@ -219,7 +219,7 @@ public void buildWeavedClass(byte[] weavedBytes) {
         boolean containsTopLinkWeaved = false;
         boolean containsChangeTracker = false;
         for (int i = 0; i < interfaces.length; i++) {
-            Class c = interfaces[i];
+            Class<?> c = interfaces[i];
             if (c.equals(Serializable.class)) {
                 containsSerializable = true;
             }
diff --git a/jpa/org.eclipse.persistence.jpa.test.framework/src/main/java/org/eclipse/persistence/testing/framework/junit/JUnitTestCase.java b/jpa/org.eclipse.persistence.jpa.test.framework/src/main/java/org/eclipse/persistence/testing/framework/junit/JUnitTestCase.java
index 4200c1b..a1cd929 100644
--- a/jpa/org.eclipse.persistence.jpa.test.framework/src/main/java/org/eclipse/persistence/testing/framework/junit/JUnitTestCase.java
+++ b/jpa/org.eclipse.persistence.jpa.test.framework/src/main/java/org/eclipse/persistence/testing/framework/junit/JUnitTestCase.java
@@ -684,7 +684,7 @@ public Platform getPlatform() {
         return getPlatform(getPersistenceUnitName());
     }
 
-    public Platform getPlatform(Class cls) {
+    public Platform getPlatform(Class<?> cls) {
         return getPlatform(getPersistenceUnitName(), cls);
     }
 
@@ -692,7 +692,7 @@ public static Platform getPlatform(String puName) {
         return getDatabaseSession(puName).getPlatform();
     }
 
-    public static Platform getPlatform(String puName, Class cls) {
+    public static Platform getPlatform(String puName, Class<?> cls) {
         return getDatabaseSession(puName).getPlatform(cls);
     }
 
diff --git a/jpa/org.eclipse.persistence.jpa.test.framework/src/main/java/org/eclipse/persistence/testing/framework/junit/JUnitTestCase.java_nonjtaDS b/jpa/org.eclipse.persistence.jpa.test.framework/src/main/java/org/eclipse/persistence/testing/framework/junit/JUnitTestCase.java_nonjtaDS
index 079d1c6..d7d80a5 100644
--- a/jpa/org.eclipse.persistence.jpa.test.framework/src/main/java/org/eclipse/persistence/testing/framework/junit/JUnitTestCase.java_nonjtaDS
+++ b/jpa/org.eclipse.persistence.jpa.test.framework/src/main/java/org/eclipse/persistence/testing/framework/junit/JUnitTestCase.java_nonjtaDS
@@ -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
@@ -599,7 +599,7 @@
         return getPlatform(getPersistenceUnitName());
     }
 
-    public Platform getPlatform(Class cls) {
+    public Platform getPlatform(Class<?> cls) {
         return getPlatform(getPersistenceUnitName(), cls);
     }
 
@@ -607,7 +607,7 @@
         return getDatabaseSession(puName).getPlatform();
     }
 
-    public static Platform getPlatform(String puName, Class cls) {
+    public static Platform getPlatform(String puName, Class<?> cls) {
         return getDatabaseSession(puName).getPlatform(cls);
     }
 
diff --git a/jpa/org.eclipse.persistence.jpa/src/main/java/org/eclipse/persistence/internal/jpa/CMP3Policy.java b/jpa/org.eclipse.persistence.jpa/src/main/java/org/eclipse/persistence/internal/jpa/CMP3Policy.java
index 8c718b7..5a23924 100644
--- a/jpa/org.eclipse.persistence.jpa/src/main/java/org/eclipse/persistence/internal/jpa/CMP3Policy.java
+++ b/jpa/org.eclipse.persistence.jpa/src/main/java/org/eclipse/persistence/internal/jpa/CMP3Policy.java
@@ -173,8 +173,9 @@ public void setPrimaryKeyClassName(String pkClassName) {
      * Return the java Class representing the primary key class name
      */
     @Override
-    public Class<?> getPKClass() {
-        return this.pkClass;
+    @SuppressWarnings({"unchecked"})
+    public <T> Class<T> getPKClass() {
+        return (Class<T>) this.pkClass;
     }
 
     /**
diff --git a/jpa/org.eclipse.persistence.jpa/src/main/java/org/eclipse/persistence/internal/jpa/EntityManagerSetupImpl.java b/jpa/org.eclipse.persistence.jpa/src/main/java/org/eclipse/persistence/internal/jpa/EntityManagerSetupImpl.java
index cedee1b..1dce1f5 100644
--- a/jpa/org.eclipse.persistence.jpa/src/main/java/org/eclipse/persistence/internal/jpa/EntityManagerSetupImpl.java
+++ b/jpa/org.eclipse.persistence.jpa/src/main/java/org/eclipse/persistence/internal/jpa/EntityManagerSetupImpl.java
@@ -1102,7 +1102,7 @@ protected boolean updateServerPlatform(Map m, ClassLoader loader) {
      */
     private static void updateJTAControllerInPlatform(
             final ServerPlatform serverPlatform, final String jtaControllerClassName, final ClassLoader loader) {
-        Class<? extends ExternalTransactionController> jtaCls = (Class<? extends ExternalTransactionController>) findClassForProperty(jtaControllerClassName, PersistenceUnitProperties.JTA_CONTROLLER, loader);
+        Class<? extends ExternalTransactionController> jtaCls = findClassForProperty (jtaControllerClassName, PersistenceUnitProperties.JTA_CONTROLLER, loader);
         serverPlatform.setExternalTransactionControllerClass(jtaCls);
     }
 
@@ -1122,11 +1122,11 @@ protected void updatePartitioning(Map m, ClassLoader loader) {
 
         String callbackClassName = getConfigPropertyAsStringLogDebug(PersistenceUnitProperties.PARTITIONING_CALLBACK, m, this.session);
         if (callbackClassName != null) {
-            Class<?> cls = findClassForProperty(callbackClassName, PersistenceUnitProperties.PARTITIONING_CALLBACK, loader);
             DataPartitioningCallback callback = null;
             try {
-                Constructor constructor = cls.getConstructor();
-                callback = (DataPartitioningCallback)constructor.newInstance();
+                Class<? extends DataPartitioningCallback> cls = findClassForProperty(callbackClassName, PersistenceUnitProperties.PARTITIONING_CALLBACK, loader);
+                Constructor<? extends DataPartitioningCallback> constructor = cls.getConstructor();
+                callback = constructor.newInstance();
             } catch (Exception exception) {
                 throw EntityManagerSetupException.failedToInstantiateProperty(callbackClassName, PersistenceUnitProperties.PARTITIONING_CALLBACK, exception);
             }
@@ -1155,10 +1155,10 @@ protected void updateRemote(Map m, ClassLoader loader) {
                         throw ValidationException.invalidValueForProperty(url, PersistenceUnitProperties.REMOTE_URL, exception);
                     }
                 } else {
-                    Class<?> cls = findClassForProperty(protocol, PersistenceUnitProperties.REMOTE_PROTOCOL, loader);
                     try {
-                        Constructor constructor = cls.getConstructor();
-                        connection = (RemoteConnection)constructor.newInstance();
+                        Class<? extends RemoteConnection> cls = findClassForProperty(protocol, PersistenceUnitProperties.REMOTE_PROTOCOL, loader);
+                        Constructor<? extends RemoteConnection> constructor = cls.getConstructor();
+                        connection = constructor.newInstance();
                     } catch (Exception exception) {
                         throw ValidationException.invalidValueForProperty(protocol, PersistenceUnitProperties.REMOTE_PROTOCOL, exception);
                     }
@@ -1217,11 +1217,11 @@ protected void updateDatabaseEventListener(Map m, ClassLoader loader) {
             if (listenerClassName.equalsIgnoreCase("DCN") || listenerClassName.equalsIgnoreCase("QCN")) {
                 listenerClassName = "org.eclipse.persistence.platform.database.oracle.dcn.OracleChangeNotificationListener";
             }
-            Class<?> cls = findClassForProperty(listenerClassName, PersistenceUnitProperties.DATABASE_EVENT_LISTENER, loader);
             DatabaseEventListener listener = null;
             try {
-                Constructor constructor = cls.getConstructor();
-                listener = (DatabaseEventListener)constructor.newInstance();
+                Class<? extends DatabaseEventListener> cls = findClassForProperty(listenerClassName, PersistenceUnitProperties.DATABASE_EVENT_LISTENER, loader);
+                Constructor<? extends DatabaseEventListener> constructor = cls.getConstructor();
+                listener = constructor.newInstance();
             } catch (Exception exception) {
                 throw EntityManagerSetupException.failedToInstantiateProperty(listenerClassName, PersistenceUnitProperties.DATABASE_EVENT_LISTENER, exception);
             }
@@ -1250,10 +1250,10 @@ protected void updateLoggers(Map persistenceProperties, boolean serverPlatformCh
                 sessionLog = serverPlatform.getServerLog();
             } else if (!currentLog.getClass().getName().equals(loggerClassName)) {
                 // Logger class was specified and it's not what's already there.
-                Class<?> sessionLogClass = findClassForProperty(loggerClassName, PersistenceUnitProperties.LOGGING_LOGGER, loader);
                 try {
-                    singletonLog = (SessionLog)sessionLogClass.getConstructor().newInstance();
-                    sessionLog = (SessionLog)sessionLogClass.getConstructor().newInstance();
+                    Class<? extends SessionLog> sessionLogClass = findClassForProperty(loggerClassName, PersistenceUnitProperties.LOGGING_LOGGER, loader);
+                    singletonLog = sessionLogClass.getConstructor().newInstance();
+                    sessionLog = sessionLogClass.getConstructor().newInstance();
                 } catch (Exception ex) {
                     throw EntityManagerSetupException.failedToInstantiateLogger(loggerClassName, PersistenceUnitProperties.LOGGING_LOGGER, ex);
                 }
@@ -1343,7 +1343,7 @@ protected void updateProfiler(Map persistenceProperties,ClassLoader loader) {
 
             // New profiler - create the new instance and set it.
             try {
-                Class<?> newProfilerClass = findClassForProperty(newProfilerClassName, PersistenceUnitProperties.PROFILER, loader);
+                Class<? extends SessionProfiler> newProfilerClass = findClassForProperty(newProfilerClassName, PersistenceUnitProperties.PROFILER, loader);
 
                 SessionProfiler sessionProfiler = (SessionProfiler)buildObjectForClass(newProfilerClass, SessionProfiler.class);
 
@@ -1371,7 +1371,7 @@ protected static Class<?> findClass(String className, ClassLoader loader) throws
         }
     }
 
-    protected static Class<?> findClassForProperty(String className, String propertyName, ClassLoader loader) {
+    protected static <T> Class<T> findClassForProperty(String className, String propertyName, ClassLoader loader) {
         ClassLoader eclipselinkLoader = EntityManagerSetupImpl.class.getClassLoader();
         boolean multipleLoaders = eclipselinkLoader != loader;
         if (multipleLoaders) {
@@ -1381,11 +1381,12 @@ protected static Class<?> findClassForProperty(String className, String property
         }
     }
 
-    private static Class<?> findClassForPropertyInternal(String clsName, String propName, ClassLoader... loaders) {
+    @SuppressWarnings({"unchecked"})
+    private static <T> Class<T> findClassForPropertyInternal(String clsName, String propName, ClassLoader... loaders) {
         RuntimeException e = null;
         for (ClassLoader loader : loaders) {
             try {
-                return findClass(clsName, loader);
+                return (Class<T>) findClass(clsName, loader);
             } catch (PrivilegedActionException exception1) {
                 e = EntityManagerSetupException.classNotFoundForProperty(clsName, propName, exception1.getException());
             } catch (ClassNotFoundException exception2) {
@@ -1512,7 +1513,7 @@ protected void updateDescriptorCacheSettings(Map m, ClassLoader loader) {
         String defaultTypeName = (String)typeMap.remove(PersistenceUnitProperties.DEFAULT);
         if (defaultTypeName != null) {
             // Always use the EclipseLink class loader, otherwise can have loader/redeployment issues.
-            Class<? extends IdentityMap> defaultType = (Class<? extends IdentityMap>) findClassForProperty(defaultTypeName, PersistenceUnitProperties.CACHE_TYPE_DEFAULT, getClass().getClassLoader());
+            Class<? extends IdentityMap> defaultType = findClassForProperty(defaultTypeName, PersistenceUnitProperties.CACHE_TYPE_DEFAULT, getClass().getClassLoader());
             session.getProject().setDefaultIdentityMapClass(defaultType);
         }
 
@@ -1551,8 +1552,7 @@ protected void updateDescriptorCacheSettings(Map m, ClassLoader loader) {
                     typeName = (String)typeMap.remove(name);
                 }
                 if (typeName != null) {
-                    @SuppressWarnings({"unchecked"})
-                    Class<? extends IdentityMap> type = (Class<? extends IdentityMap>) findClassForProperty(typeName, PersistenceUnitProperties.CACHE_TYPE_ + name, getClass().getClassLoader());
+                    Class<? extends IdentityMap> type = findClassForProperty(typeName, PersistenceUnitProperties.CACHE_TYPE_ + name, getClass().getClassLoader());
                     descriptor.setIdentityMapClass(type);
                 }
 
@@ -2407,11 +2407,11 @@ protected void updateTenancy(Map m, ClassLoader loader) {
                 session.getProject().setMultitenantPolicy(policy);
             } else {
                 //assume it is a class with default constructor implementing existing interface
-                Class<?> cls = findClassForProperty(tenantStrategy, PersistenceUnitProperties.MULTITENANT_STRATEGY, loader);
+                Class<? extends MultitenantPolicy> cls = findClassForProperty(tenantStrategy, PersistenceUnitProperties.MULTITENANT_STRATEGY, loader);
                 MultitenantPolicy policy = null;
                 try {
-                    Constructor constructor = cls.getConstructor();
-                    policy = (MultitenantPolicy) constructor.newInstance();
+                    Constructor<? extends MultitenantPolicy> constructor = cls.getConstructor();
+                    policy = constructor.newInstance();
                 } catch (NoSuchMethodException | SecurityException | InstantiationException | IllegalAccessException | IllegalArgumentException | InvocationTargetException ex) {
                     throw EntityManagerSetupException.failedToInstantiateProperty(tenantStrategy, PersistenceUnitProperties.MULTITENANT_STRATEGY, ex);
                 }
@@ -2469,17 +2469,17 @@ protected void updateLogins(Map m){
         if (connectorValue instanceof Connector) {
             login.setConnector((Connector)connectorValue);
         } else if (connectorValue instanceof String) {
-            Class<?> cls = null;
-            // Try both class loaders.
-            try {
-                cls = findClassForProperty((String)connectorValue, connectorProperty, this.persistenceUnitInfo.getClassLoader());
-            } catch (Throwable failed) {
-                cls = findClassForProperty((String)connectorValue, connectorProperty, getClass().getClassLoader());
-            }
             Connector connector = null;
             try {
-                Constructor constructor = cls.getConstructor();
-                connector = (Connector)constructor.newInstance();
+                Class<? extends Connector> cls = null;
+                // Try both class loaders.
+                try {
+                    cls = findClassForProperty((String)connectorValue, connectorProperty, this.persistenceUnitInfo.getClassLoader());
+                } catch (Throwable failed) {
+                    cls = findClassForProperty((String)connectorValue, connectorProperty, getClass().getClassLoader());
+                }
+                Constructor<? extends Connector> constructor = cls.getConstructor();
+                connector = constructor.newInstance();
             } catch (Exception exception) {
                 throw EntityManagerSetupException.failedToInstantiateProperty((String)connectorValue, connectorProperty, exception);
             }
@@ -2960,9 +2960,9 @@ protected void processSessionCustomizer(Map m, ClassLoader loader) {
             return;
         }
         if (customizer instanceof String) {
-            Class<?> sessionCustomizerClass = findClassForProperty((String) customizer, PersistenceUnitProperties.SESSION_CUSTOMIZER, loader);
             try {
-                sessionCustomizer = (SessionCustomizer) sessionCustomizerClass.getConstructor().newInstance();
+                Class<? extends SessionCustomizer> sessionCustomizerClass = findClassForProperty((String) customizer, PersistenceUnitProperties.SESSION_CUSTOMIZER, loader);
+                sessionCustomizer = sessionCustomizerClass.getConstructor().newInstance();
             } catch (Exception ex) {
                 throw EntityManagerSetupException.failedWhileProcessingProperty(PersistenceUnitProperties.SESSION_CUSTOMIZER, (String) customizer, ex);
             }
@@ -3041,9 +3041,9 @@ protected void processDescriptorCustomizers(Map m, ClassLoader loader) {
                 }
             }
             if (descriptor != null) {
-                Class<?> customizerClass = findClassForProperty(customizerClassName, PersistenceUnitProperties.DESCRIPTOR_CUSTOMIZER_ + name, loader);
                 try {
-                    DescriptorCustomizer customizer = (DescriptorCustomizer)customizerClass.getConstructor().newInstance();
+                    Class<? extends DescriptorCustomizer> customizerClass = findClassForProperty(customizerClassName, PersistenceUnitProperties.DESCRIPTOR_CUSTOMIZER_ + name, loader);
+                    DescriptorCustomizer customizer = customizerClass.getConstructor().newInstance();
                     customizer.customize(descriptor);
                 } catch (Exception ex) {
                     throw EntityManagerSetupException.failedWhileProcessingProperty(PersistenceUnitProperties.DESCRIPTOR_CUSTOMIZER_ + name, customizerClassName, ex);
@@ -3179,8 +3179,8 @@ protected void setSessionEventListener(Map m, ClassLoader loader){
         //Set event listener if it has been specified.
         String sessionEventListenerClassName = EntityManagerFactoryProvider.getConfigPropertyAsStringLogDebug(PersistenceUnitProperties.SESSION_EVENT_LISTENER_CLASS, m, session);
         if(sessionEventListenerClassName!=null){
-            Class<?> sessionEventListenerClass = findClassForProperty(sessionEventListenerClassName,PersistenceUnitProperties.SESSION_EVENT_LISTENER_CLASS, loader);
             try {
+                Class<? extends SessionEventListener> sessionEventListenerClass = findClassForProperty(sessionEventListenerClassName,PersistenceUnitProperties.SESSION_EVENT_LISTENER_CLASS, loader);
                 SessionEventListener sessionEventListener = (SessionEventListener)buildObjectForClass(sessionEventListenerClass, SessionEventListener.class);
                 if(sessionEventListener!=null){
                     session.getEventManager().addListener(sessionEventListener);
@@ -3205,8 +3205,8 @@ protected void setExceptionHandler(Map m, ClassLoader loader){
         //Set exception handler if it was specified.
         String exceptionHandlerClassName = EntityManagerFactoryProvider.getConfigPropertyAsStringLogDebug(PersistenceUnitProperties.EXCEPTION_HANDLER_CLASS, m, session);
         if(exceptionHandlerClassName!=null){
-            Class<?> exceptionHandlerClass = findClassForProperty(exceptionHandlerClassName,PersistenceUnitProperties.EXCEPTION_HANDLER_CLASS, loader);
             try {
+                Class<? extends ExceptionHandler> exceptionHandlerClass = findClassForProperty(exceptionHandlerClassName,PersistenceUnitProperties.EXCEPTION_HANDLER_CLASS, loader);
                 ExceptionHandler exceptionHandler = (ExceptionHandler)buildObjectForClass(exceptionHandlerClass, ExceptionHandler.class);
                 if (exceptionHandler!=null){
                     session.setExceptionHandler(exceptionHandler);
@@ -3246,11 +3246,11 @@ protected void updateBatchWritingSetting(Map persistenceProperties, ClassLoader
                  if (batchWritingSettingString.equalsIgnoreCase("ExaLogic")) {
                      batchWritingSettingString = "oracle.toplink.exalogic.batch.DynamicParameterizedBatchWritingMechanism";
                  }
-                 Class<?> cls = findClassForProperty(batchWritingSettingString, PersistenceUnitProperties.BATCH_WRITING, loader);
                  BatchWritingMechanism mechanism = null;
                  try {
-                     Constructor constructor = cls.getConstructor();
-                     mechanism = (BatchWritingMechanism)constructor.newInstance();
+                     Class<? extends BatchWritingMechanism> cls = findClassForProperty(batchWritingSettingString, PersistenceUnitProperties.BATCH_WRITING, loader);
+                     Constructor<? extends BatchWritingMechanism> constructor = cls.getConstructor();
+                     mechanism = constructor.newInstance();
                  } catch (Exception exception) {
                      if (batchWritingSettingString.indexOf('.') == -1) {
                          throw new IllegalArgumentException(ExceptionLocalization.buildMessage("ejb30-illegal-property-value", new Object[]{PersistenceUnitProperties.BATCH_WRITING, batchWritingSettingString}));
@@ -3285,9 +3285,9 @@ protected void updateMetadataRepository(Map m, ClassLoader loader){
                 if (repository.equalsIgnoreCase("XML")) {
                     processor.setMetadataSource(new XMLMetadataSource());
                 } else {
-                    Class<?> transportClass = findClassForProperty(repository, PersistenceUnitProperties.METADATA_SOURCE, loader);
                     try {
-                        processor.setMetadataSource((MetadataSource)transportClass.getConstructor().newInstance());
+                        Class<? extends MetadataSource> transportClass = findClassForProperty(repository, PersistenceUnitProperties.METADATA_SOURCE, loader);
+                        processor.setMetadataSource(transportClass.getConstructor().newInstance());
                     } catch (Exception invalid) {
                         session.handleException(EntityManagerSetupException.failedToInstantiateProperty(repository, PersistenceUnitProperties.METADATA_SOURCE,invalid));
                     }
@@ -3311,9 +3311,9 @@ protected void updateTunerPreDeploy(Map m, ClassLoader loader) {
                 if (tuning.equalsIgnoreCase("ExaLogic")) {
                     tuning = "oracle.toplink.exalogic.tuning.ExaLogicTuner";
                 }
-                Class<?> tunerClass = findClassForProperty(tuning, PersistenceUnitProperties.TUNING, loader);
                 try {
-                    tuner = (SessionTuner)tunerClass.getConstructor().newInstance();
+                    Class<? extends SessionTuner> tunerClass = findClassForProperty(tuning, PersistenceUnitProperties.TUNING, loader);
+                    tuner = tunerClass.getConstructor().newInstance();
                 } catch (Exception invalid) {
                     this.session.handleException(EntityManagerSetupException.failedToInstantiateProperty(tuning, PersistenceUnitProperties.TUNING, invalid));
                 }
@@ -3417,9 +3417,9 @@ protected void updateProjectCache(Map m, ClassLoader loader){
                 if (accessorType.equalsIgnoreCase("java-serialization")) {
                     projectCacheAccessor = new FileBasedProjectCache();
                 } else {
-                    Class<?> transportClass = findClassForProperty(accessorType, PersistenceUnitProperties.PROJECT_CACHE, loader);
                     try {
-                        projectCacheAccessor = (ProjectCache)transportClass.getConstructor().newInstance();
+                        Class<? extends ProjectCache> transportClass = findClassForProperty(accessorType, PersistenceUnitProperties.PROJECT_CACHE, loader);
+                        projectCacheAccessor = transportClass.getConstructor().newInstance();
                     } catch (Exception invalid) {
                         session.handleException(EntityManagerSetupException.failedToInstantiateProperty(accessorType, PersistenceUnitProperties.METADATA_SOURCE,invalid));
                     }
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/JAXBTestCases.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/JAXBTestCases.java
index 9275289..94bb563 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/JAXBTestCases.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/JAXBTestCases.java
@@ -87,7 +87,7 @@ public abstract class JAXBTestCases extends XMLMappingTestCases {
     protected JAXBContext jaxbContext;
     protected Marshaller jaxbMarshaller;
     protected Unmarshaller jaxbUnmarshaller;
-    protected Class[] classes;
+    protected Class<?>[] classes;
     protected Type[] types;
     protected String contextPath;
 
@@ -133,7 +133,7 @@ protected void setProject(Project project) {
         this.project = project;
     }
 
-    public void setClasses(Class[] newClasses) throws Exception {
+    public void setClasses(Class<?>[] newClasses) throws Exception {
 
         classLoader = Thread.currentThread().getContextClassLoader();
         jaxbContext = JAXBContextFactory.createContext(newClasses, getProperties(), classLoader);
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/annotations/PropertyTypeTestCases.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/annotations/PropertyTypeTestCases.java
index 529acde..6ce7172 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/annotations/PropertyTypeTestCases.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/annotations/PropertyTypeTestCases.java
@@ -38,7 +38,7 @@ public class PropertyTypeTestCases extends JAXBWithJSONTestCases {
 
     public PropertyTypeTestCases(String name) throws Exception {
         super(name);
-        setClasses(new Class[] { TestObject.class });
+        setClasses(new Class<?>[] { TestObject.class });
         setControlDocument(XML_RESOURCE);
         setControlJSON(JSON_RESOURCE);
         initXsiType();
@@ -71,7 +71,7 @@ public Object getControlObject() {
 
     public void testPropertyTypes() throws Exception {
         JaxbClassLoader classLoader = new JaxbClassLoader(Thread.currentThread().getContextClassLoader());
-        Generator generator = new Generator(new JavaModelInputImpl(new Class[] { TestObject.class }, new JavaModelImpl(this.classLoader)));
+        Generator generator = new Generator(new JavaModelInputImpl(new Class<?>[] { TestObject.class }, new JavaModelImpl(this.classLoader)));
 
         CoreProject proj = generator.generateProject();
         TypeInfo info = generator.getAnnotationsProcessor().getTypeInfos().get("org.eclipse.persistence.testing.jaxb.annotations.TestObject");
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/annotations/cdata/UnmappedCDATATestCases.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/annotations/cdata/UnmappedCDATATestCases.java
index f60794c..7006e02 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/annotations/cdata/UnmappedCDATATestCases.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/annotations/cdata/UnmappedCDATATestCases.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,7 +23,7 @@ public class UnmappedCDATATestCases extends JAXBTestCases {
 
     public UnmappedCDATATestCases(String name) throws Exception {
         super(name);
-        setClasses(new Class[] {Employee.class});
+        setClasses(new Class<?>[] {Employee.class});
         setControlDocument(XML_RESOURCE_UNMARSHAL);
         setWriteControlDocument(XML_RESOURCE_MARSHAL);
     }
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/annotations/cdata/XmlCDATAOverrideTestCases.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/annotations/cdata/XmlCDATAOverrideTestCases.java
index 57b2e7a..b5efaa8 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/annotations/cdata/XmlCDATAOverrideTestCases.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/annotations/cdata/XmlCDATAOverrideTestCases.java
@@ -42,7 +42,7 @@ public XmlCDATAOverrideTestCases(String name) throws Exception {
     @Override
     public void setUp() throws Exception {
         super.setUp();
-        setTypes(new Class[]{Employee.class});
+        setTypes(new Class<?>[]{Employee.class});
     }
 
     @Override
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/annotations/cdata/XmlCDATATestCases.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/annotations/cdata/XmlCDATATestCases.java
index 87d4eb6..5d135e3 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/annotations/cdata/XmlCDATATestCases.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/annotations/cdata/XmlCDATATestCases.java
@@ -22,7 +22,7 @@ public class XmlCDATATestCases extends JAXBWithJSONTestCases {
     private static final String JSON_RESOURCE = "org/eclipse/persistence/testing/jaxb/annotations/xmlcdata/employee.json";
     public XmlCDATATestCases(String name) throws Exception {
         super(name);
-        setClasses(new Class[] {Employee.class});
+        setClasses(new Class<?>[] {Employee.class});
         setControlDocument(XML_RESOURCE);
         setControlJSON(JSON_RESOURCE);
     }
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/annotations/required/RequiredAnnotationTestCases.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/annotations/required/RequiredAnnotationTestCases.java
index 11abe4b..b84b152 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/annotations/required/RequiredAnnotationTestCases.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/annotations/required/RequiredAnnotationTestCases.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
@@ -31,7 +31,7 @@ public class RequiredAnnotationTestCases extends TestCase {
     public void testAnnotationsProcessor() throws Exception {
         try {
             JaxbClassLoader classLoader = new JaxbClassLoader(Thread.currentThread().getContextClassLoader());
-            Generator generator = new Generator(new JavaModelInputImpl(new Class[] { RequiredTestObject.class, RequiredTestSubObject.class }, new JavaModelImpl(classLoader)));
+            Generator generator = new Generator(new JavaModelInputImpl(new Class<?>[] { RequiredTestObject.class, RequiredTestSubObject.class }, new JavaModelImpl(classLoader)));
 
             Project proj = (Project)generator.generateProject();
 
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/annotations/xmlaccessmethods/XmlAccessMethodsTestCases.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/annotations/xmlaccessmethods/XmlAccessMethodsTestCases.java
index 8dcd181..b4db39e 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/annotations/xmlaccessmethods/XmlAccessMethodsTestCases.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/annotations/xmlaccessmethods/XmlAccessMethodsTestCases.java
@@ -26,7 +26,7 @@ public class XmlAccessMethodsTestCases extends JAXBWithJSONTestCases {
 
     public XmlAccessMethodsTestCases(String name) throws Exception {
         super(name);
-        setClasses(new Class[]{Employee.class});
+        setClasses(new Class<?>[]{Employee.class});
         setControlDocument(XML_RESOURCE);
         setWriteControlDocument(WRITE_XML_RESOURCE);
         setControlJSON(JSON_RESOURCE);
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/annotations/xmlaccessorfactory/ClassLevelAccessorTestCases.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/annotations/xmlaccessorfactory/ClassLevelAccessorTestCases.java
index c742e9a..cca9881 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/annotations/xmlaccessorfactory/ClassLevelAccessorTestCases.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/annotations/xmlaccessorfactory/ClassLevelAccessorTestCases.java
@@ -29,7 +29,7 @@ public class ClassLevelAccessorTestCases extends JAXBWithJSONTestCases {
 
     public ClassLevelAccessorTestCases(String name) throws Exception {
         super(name);
-        setClasses(new Class[] { CustomerClassOverride.class });
+        setClasses(new Class<?>[] { CustomerClassOverride.class });
         setControlDocument(XML_RESOURCE);
         setControlJSON(JSON_RESOURCE);
     }
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/annotations/xmlaccessorfactory/PackageLevelAccessorTestCases.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/annotations/xmlaccessorfactory/PackageLevelAccessorTestCases.java
index 47c1ab6..eab1d8f 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/annotations/xmlaccessorfactory/PackageLevelAccessorTestCases.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/annotations/xmlaccessorfactory/PackageLevelAccessorTestCases.java
@@ -29,7 +29,7 @@ public class PackageLevelAccessorTestCases extends JAXBWithJSONTestCases {
 
     public PackageLevelAccessorTestCases(String name) throws Exception {
         super(name);
-        setClasses(new Class[] { CustomerPackageLevel.class });
+        setClasses(new Class<?>[] { CustomerPackageLevel.class });
         setControlDocument(XML_RESOURCE);
         setControlJSON(JSON_RESOURCE);
     }
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/annotations/xmlaccessorfactory/XmlAccessorFactorySupportTestCases.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/annotations/xmlaccessorfactory/XmlAccessorFactorySupportTestCases.java
index 838bad5..0459957 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/annotations/xmlaccessorfactory/XmlAccessorFactorySupportTestCases.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/annotations/xmlaccessorfactory/XmlAccessorFactorySupportTestCases.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
@@ -45,7 +45,7 @@ public void testXmlAccessorFactorySupport() throws Exception {
         Map<String, Object> properties = new HashMap<String, Object>();
         properties.put(JAXBContextProperties.XML_ACCESSOR_FACTORY_SUPPORT, true);
 
-        JAXBContext ctx = JAXBContextFactory.createContext(new Class[] { CustomerClassOverride.class }, properties);
+        JAXBContext ctx = JAXBContextFactory.createContext(new Class<?>[] { CustomerClassOverride.class }, properties);
 
         InputStream is = ClassLoader.getSystemResourceAsStream(XML_RESOURCE);
         CustomerClassOverride cust = (CustomerClassOverride) ctx.createUnmarshaller().unmarshal(is);
@@ -59,7 +59,7 @@ public void testXmlAccessorFactorySupportRI() throws Exception {
         Map<String, Object> properties = new HashMap<String, Object>();
         properties.put("org.glassfish.jaxb.XmlAccessorFactory", true);
 
-        JAXBContext ctx = JAXBContextFactory.createContext(new Class[] { CustomerClassOverride.class }, properties);
+        JAXBContext ctx = JAXBContextFactory.createContext(new Class<?>[] { CustomerClassOverride.class }, properties);
 
         InputStream is = ClassLoader.getSystemResourceAsStream(XML_RESOURCE);
         CustomerClassOverride cust = (CustomerClassOverride) ctx.createUnmarshaller().unmarshal(is);
@@ -74,7 +74,7 @@ public void testXmlAccessorFactorySupportNotSet() throws Exception {
         // properties.put("org.glassfish.jaxb.XmlAccessorFactory", true);
         // properties.put(JAXBContextProperties.XML_ACCESSOR_FACTORY_SUPPORT, true);
 
-        JAXBContext ctx = JAXBContextFactory.createContext(new Class[] { CustomerClassOverride.class }, properties);
+        JAXBContext ctx = JAXBContextFactory.createContext(new Class<?>[] { CustomerClassOverride.class }, properties);
 
         InputStream is = ClassLoader.getSystemResourceAsStream(XML_RESOURCE);
         CustomerClassOverride cust = (CustomerClassOverride) ctx.createUnmarshaller().unmarshal(is);
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/annotations/xmlclassextractor/XmlClassExtractorTestCases.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/annotations/xmlclassextractor/XmlClassExtractorTestCases.java
index 033c3b7..e9c0598 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/annotations/xmlclassextractor/XmlClassExtractorTestCases.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/annotations/xmlclassextractor/XmlClassExtractorTestCases.java
@@ -24,7 +24,7 @@ public class XmlClassExtractorTestCases extends JAXBWithJSONTestCases {
     private static final String JSON_RESOURCE = "org/eclipse/persistence/testing/jaxb/annotations/xmlclassextractor/parkinglot.json";
     public XmlClassExtractorTestCases(String name) throws Exception {
         super(name);
-        setClasses(new Class[]{Car.class, Vehicle.class, ParkingLot.class});
+        setClasses(new Class<?>[]{Car.class, Vehicle.class, ParkingLot.class});
         setControlDocument(XML_RESOURCE);
         setControlJSON(JSON_RESOURCE);
     }
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/annotations/xmlcontainerproperty/ContainerPropertyTestCases.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/annotations/xmlcontainerproperty/ContainerPropertyTestCases.java
index 7e8346d..5dd904d 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/annotations/xmlcontainerproperty/ContainerPropertyTestCases.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/annotations/xmlcontainerproperty/ContainerPropertyTestCases.java
@@ -27,7 +27,7 @@ public class ContainerPropertyTestCases extends JAXBWithJSONTestCases {
 
     public ContainerPropertyTestCases(String name) throws Exception {
         super(name);
-        setClasses(new Class[] {Employee.class, Address.class, PhoneNumber.class});
+        setClasses(new Class<?>[] {Employee.class, Address.class, PhoneNumber.class});
         setControlDocument(XML_RESOURCE);
         setControlJSON(JSON_RESOURCE);
     }
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/annotations/xmldiscriminator/XmlDiscriminatorTestCases.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/annotations/xmldiscriminator/XmlDiscriminatorTestCases.java
index 35cb357..932e66b 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/annotations/xmldiscriminator/XmlDiscriminatorTestCases.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/annotations/xmldiscriminator/XmlDiscriminatorTestCases.java
@@ -26,7 +26,7 @@ public class XmlDiscriminatorTestCases extends JAXBWithJSONTestCases {
     private static final String JSON_RESOURCE_WRITE = "org/eclipse/persistence/testing/jaxb/annotations/xmldiscriminator/vehicle-write.json";
     public XmlDiscriminatorTestCases(String name) throws Exception {
         super(name);
-        setClasses(new Class[]{ Car.class, Vehicle.class });
+        setClasses(new Class<?>[]{ Car.class, Vehicle.class });
         setControlDocument(XML_RESOURCE);
         setWriteControlDocument(XML_RESOURCE_WRITE);
         setControlJSON(JSON_RESOURCE);
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/annotations/xmldiscriminator/ns/XmlDiscriminatorNSTestCases.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/annotations/xmldiscriminator/ns/XmlDiscriminatorNSTestCases.java
index def2211..50a5543 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/annotations/xmldiscriminator/ns/XmlDiscriminatorNSTestCases.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/annotations/xmldiscriminator/ns/XmlDiscriminatorNSTestCases.java
@@ -23,7 +23,7 @@ public class XmlDiscriminatorNSTestCases extends JAXBWithJSONTestCases {
 
     public XmlDiscriminatorNSTestCases(String name) throws Exception {
         super(name);
-        setClasses(new Class[]{ Root.class, Car.class});
+        setClasses(new Class<?>[]{ Root.class, Car.class});
         setControlDocument(XML_RESOURCE);
         setControlJSON(JSON_RESOURCE);
     }
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/annotations/xmldiscriminator/ns/XmlDiscriminatorRootNSTestCases.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/annotations/xmldiscriminator/ns/XmlDiscriminatorRootNSTestCases.java
index 880be7a..e134602 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/annotations/xmldiscriminator/ns/XmlDiscriminatorRootNSTestCases.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/annotations/xmldiscriminator/ns/XmlDiscriminatorRootNSTestCases.java
@@ -23,7 +23,7 @@ public class XmlDiscriminatorRootNSTestCases extends JAXBWithJSONTestCases {
 
     public XmlDiscriminatorRootNSTestCases(String name) throws Exception {
         super(name);
-        setClasses(new Class[]{ Root.class, Car.class});
+        setClasses(new Class<?>[]{ Root.class, Car.class});
         setControlDocument(XML_RESOURCE);
         setControlJSON(JSON_RESOURCE);
     }
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/annotations/xmlelementdecl/emptystringns/EmptyStringNSTestCases.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/annotations/xmlelementdecl/emptystringns/EmptyStringNSTestCases.java
index 8e060e1..f6514e2 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/annotations/xmlelementdecl/emptystringns/EmptyStringNSTestCases.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/annotations/xmlelementdecl/emptystringns/EmptyStringNSTestCases.java
@@ -28,7 +28,7 @@ public EmptyStringNSTestCases(String name) throws Exception {
         super(name);
         setControlDocument(XML_RESOURCE);
         setControlJSON(JSON_RESOURCE);
-        setClasses(new Class[] {TestObject.class, ObjectFactory.class});
+        setClasses(new Class<?>[] {TestObject.class, ObjectFactory.class});
     }
 
     @Override
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/annotations/xmlelementdecl/noxmlrootelement/NoRootElementTestCases.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/annotations/xmlelementdecl/noxmlrootelement/NoRootElementTestCases.java
index 676d6e6..6b239bd 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/annotations/xmlelementdecl/noxmlrootelement/NoRootElementTestCases.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/annotations/xmlelementdecl/noxmlrootelement/NoRootElementTestCases.java
@@ -35,7 +35,7 @@ public NoRootElementTestCases(String name) throws Exception {
         super(name);
         setControlDocument(XML_RESOURCE);
         setControlJSON(JSON_RESOURCE);
-        setClasses(new Class[] {Foo.class, ObjectFactory.class});
+        setClasses(new Class<?>[] {Foo.class, ObjectFactory.class});
         jaxbMarshaller.setProperty(Marshaller.JAXB_FRAGMENT, Boolean.TRUE);
     }
 
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/annotations/xmlelementdecl/qname/XmlElementDeclQNameNSTestCases.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/annotations/xmlelementdecl/qname/XmlElementDeclQNameNSTestCases.java
index 20b6219..9b696ff 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/annotations/xmlelementdecl/qname/XmlElementDeclQNameNSTestCases.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/annotations/xmlelementdecl/qname/XmlElementDeclQNameNSTestCases.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,7 @@ public XmlElementDeclQNameNSTestCases(String name) throws Exception {
          setControlJSON(JSON_RESOURCE);
          setWriteControlDocument(XML_WRITE_RESOURCE);
          setWriteControlJSON(JSON_WRITE_RESOURCE);
-         setClasses(new Class[] {ObjectFactory.class});
+         setClasses(new Class<?>[] {ObjectFactory.class});
 
          Map<String, String> namespaces = new HashMap<String, String>();
          namespaces.put(javax.xml.XMLConstants.W3C_XML_SCHEMA_NS_URI, "xsd");
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/annotations/xmlelementdecl/qname/XmlElementDeclQNameTestCases.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/annotations/xmlelementdecl/qname/XmlElementDeclQNameTestCases.java
index fccaf3f..1998a78 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/annotations/xmlelementdecl/qname/XmlElementDeclQNameTestCases.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/annotations/xmlelementdecl/qname/XmlElementDeclQNameTestCases.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
@@ -41,7 +41,7 @@ public XmlElementDeclQNameTestCases(String name) throws Exception {
          setControlJSON(JSON_RESOURCE);
          setWriteControlDocument(XML_WRITE_RESOURCE);
          setWriteControlJSON(JSON_WRITE_RESOURCE);
-         setClasses(new Class[] {ObjectFactory.class});
+         setClasses(new Class<?>[] {ObjectFactory.class});
 
     }
 
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/annotations/xmlelementdecl/qualified/QualfiedTestCases.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/annotations/xmlelementdecl/qualified/QualfiedTestCases.java
index cb9a4ea..aceeecf 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/annotations/xmlelementdecl/qualified/QualfiedTestCases.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/annotations/xmlelementdecl/qualified/QualfiedTestCases.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,7 @@ public QualfiedTestCases(String name) throws Exception {
         super(name);
         setControlDocument(XML_RESOURCE);
         setControlJSON(JSON_RESOURCE);
-        setClasses(new Class[] {ComplexType.class, ObjectFactory.class});
+        setClasses(new Class<?>[] {ComplexType.class, ObjectFactory.class});
     }
 
     @Override
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/annotations/xmlelementdecl/unqualified/UnqualfiedTestCases.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/annotations/xmlelementdecl/unqualified/UnqualfiedTestCases.java
index 0abbf06..c0b9eef 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/annotations/xmlelementdecl/unqualified/UnqualfiedTestCases.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/annotations/xmlelementdecl/unqualified/UnqualfiedTestCases.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,7 @@ public UnqualfiedTestCases(String name) throws Exception {
         super(name);
         setControlDocument(XML_RESOURCE);
         setControlJSON(JSON_RESOURCE);
-        setClasses(new Class[] {ComplexType.class, ObjectFactory.class});
+        setClasses(new Class<?>[] {ComplexType.class, ObjectFactory.class});
     }
 
     @Override
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/annotations/xmlelementdecl/xsitype/XsiTypeTestCases.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/annotations/xmlelementdecl/xsitype/XsiTypeTestCases.java
index 2b77af0..09e887f 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/annotations/xmlelementdecl/xsitype/XsiTypeTestCases.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/annotations/xmlelementdecl/xsitype/XsiTypeTestCases.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,7 @@ public XsiTypeTestCases(String name) throws Exception {
         super(name);
         setControlDocument(XML_RESOURCE);
         setControlJSON(JSON_RESOURCE);
-        setClasses(new Class[] {ExampleType.class, ObjectFactory.class});
+        setClasses(new Class<?>[] {ExampleType.class, ObjectFactory.class});
     }
 
     @Override
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/annotations/xmlelementdecl/xsitype2/FooBarXsiTypeTestCases.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/annotations/xmlelementdecl/xsitype2/FooBarXsiTypeTestCases.java
index 4bfd093..4bca775 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/annotations/xmlelementdecl/xsitype2/FooBarXsiTypeTestCases.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/annotations/xmlelementdecl/xsitype2/FooBarXsiTypeTestCases.java
@@ -36,7 +36,7 @@ public FooBarXsiTypeTestCases(String name) throws Exception {
         setControlJSON(JSON_RESOURCE);
         setWriteControlDocument(XML_WRITE_RESOURCE);
         setWriteControlJSON(JSON_WRITE_RESOURCE);
-        setClasses(new Class[] {Foo.class, Bar.class, ObjectFactory.class});
+        setClasses(new Class<?>[] {Foo.class, Bar.class, ObjectFactory.class});
     }
 
     @Override
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/annotations/xmlelementnillable/XmlElementNillableFieldLevelOverrideTestCases.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/annotations/xmlelementnillable/XmlElementNillableFieldLevelOverrideTestCases.java
index dd9bf15..7e6d4be 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/annotations/xmlelementnillable/XmlElementNillableFieldLevelOverrideTestCases.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/annotations/xmlelementnillable/XmlElementNillableFieldLevelOverrideTestCases.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,7 @@ public class XmlElementNillableFieldLevelOverrideTestCases extends JAXBTestCases
     public XmlElementNillableFieldLevelOverrideTestCases(String name) throws Exception {
         super(name);
         setControlDocument(XML_CONTROL_RESOURCE);
-        setClasses(new Class[] { FieldRoot.class });
+        setClasses(new Class<?>[] { FieldRoot.class });
     }
 
     @Override
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/annotations/xmlelementnillable/XmlElementNillablePackageLevelTestCases.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/annotations/xmlelementnillable/XmlElementNillablePackageLevelTestCases.java
index 83bf9dd..77bee4a 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/annotations/xmlelementnillable/XmlElementNillablePackageLevelTestCases.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/annotations/xmlelementnillable/XmlElementNillablePackageLevelTestCases.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,7 @@ public class XmlElementNillablePackageLevelTestCases extends JAXBTestCases {
     public XmlElementNillablePackageLevelTestCases(String name) throws Exception {
         super(name);
         setControlDocument(XML_CONTROL_RESOURCE);
-        setClasses(new Class[] { Root.class });
+        setClasses(new Class<?>[] { Root.class });
     }
 
     @Override
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/annotations/xmlelementnillable/XmlElementNillableTypeLevelOverrideTestCases.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/annotations/xmlelementnillable/XmlElementNillableTypeLevelOverrideTestCases.java
index ad7ff99..83df591 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/annotations/xmlelementnillable/XmlElementNillableTypeLevelOverrideTestCases.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/annotations/xmlelementnillable/XmlElementNillableTypeLevelOverrideTestCases.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,7 @@ public class XmlElementNillableTypeLevelOverrideTestCases extends JAXBTestCases
     public XmlElementNillableTypeLevelOverrideTestCases(String name) throws Exception {
         super(name);
         setControlDocument(XML_CONTROL_RESOURCE);
-        setClasses(new Class[] { OverrideRoot.class });
+        setClasses(new Class<?>[] { OverrideRoot.class });
     }
 
     @Override
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/annotations/xmlelementnillable/XmlElementNillableTypeLevelTestCases.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/annotations/xmlelementnillable/XmlElementNillableTypeLevelTestCases.java
index 5ac641a..d92e881 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/annotations/xmlelementnillable/XmlElementNillableTypeLevelTestCases.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/annotations/xmlelementnillable/XmlElementNillableTypeLevelTestCases.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,7 @@ public class XmlElementNillableTypeLevelTestCases extends JAXBTestCases {
     public XmlElementNillableTypeLevelTestCases(String name) throws Exception {
         super(name);
         setControlDocument(XML_CONTROL_RESOURCE);
-        setClasses(new Class[] { NillableRoot.class });
+        setClasses(new Class<?>[] { NillableRoot.class });
     }
 
     @Override
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/annotations/xmlelementsjoinnodes/XmlElementsJoinNodeTestCases.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/annotations/xmlelementsjoinnodes/XmlElementsJoinNodeTestCases.java
index 6fec513..fbc1587 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/annotations/xmlelementsjoinnodes/XmlElementsJoinNodeTestCases.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/annotations/xmlelementsjoinnodes/XmlElementsJoinNodeTestCases.java
@@ -27,7 +27,7 @@ public class XmlElementsJoinNodeTestCases extends JAXBWithJSONTestCases {
 
     public XmlElementsJoinNodeTestCases(String name) throws Exception {
         super(name);
-        setClasses(new Class[]{ Root.class });
+        setClasses(new Class<?>[]{ Root.class });
         setControlDocument(XML_RESOURCE);
         setControlJSON(JSON_RESOURCE);
         jaxbMarshaller.setProperty(MarshallerProperties.JSON_VALUE_WRAPPER, "value");
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/annotations/xmlelementsjoinnodes/collection/XmlElementsJoinNodeTestCases.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/annotations/xmlelementsjoinnodes/collection/XmlElementsJoinNodeTestCases.java
index 778ea39..1543417 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/annotations/xmlelementsjoinnodes/collection/XmlElementsJoinNodeTestCases.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/annotations/xmlelementsjoinnodes/collection/XmlElementsJoinNodeTestCases.java
@@ -29,7 +29,7 @@ public class XmlElementsJoinNodeTestCases extends JAXBWithJSONTestCases {
 
     public XmlElementsJoinNodeTestCases(String name) throws Exception {
         super(name);
-        setClasses(new Class[]{ Root.class });
+        setClasses(new Class<?>[]{ Root.class });
         setControlDocument(XML_RESOURCE);
         setControlJSON(JSON_RESOURCE);
         jaxbMarshaller.setProperty(MarshallerProperties.JSON_VALUE_WRAPPER, "value");
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/annotations/xmlidref/XmlIdRefMissingIdEventHandlerTestCases.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/annotations/xmlidref/XmlIdRefMissingIdEventHandlerTestCases.java
index 1f1ed41..2cc7437 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/annotations/xmlidref/XmlIdRefMissingIdEventHandlerTestCases.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/annotations/xmlidref/XmlIdRefMissingIdEventHandlerTestCases.java
@@ -28,7 +28,7 @@ public class XmlIdRefMissingIdEventHandlerTestCases extends JAXBWithJSONTestCase
 
     public XmlIdRefMissingIdEventHandlerTestCases(String name) throws Exception {
         super(name);
-        setClasses(new Class[]{Owner.class});
+        setClasses(new Class<?>[]{Owner.class});
         setControlDocument(XML_RESOURCE);
         setControlJSON(JSON_RESOURCE);
         jaxbUnmarshaller.setEventHandler(new MyValidationEventHandler());
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/annotations/xmlidref/XmlIdRefMissingIdTestCases.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/annotations/xmlidref/XmlIdRefMissingIdTestCases.java
index 4f596fd..3d86893 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/annotations/xmlidref/XmlIdRefMissingIdTestCases.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/annotations/xmlidref/XmlIdRefMissingIdTestCases.java
@@ -27,7 +27,7 @@ public class XmlIdRefMissingIdTestCases extends JAXBWithJSONTestCases{
 
     public XmlIdRefMissingIdTestCases(String name) throws Exception {
         super(name);
-        setClasses(new Class[]{Owner.class});
+        setClasses(new Class<?>[]{Owner.class});
         setControlDocument(XML_RESOURCE);
         setControlJSON(JSON_RESOURCE);
     }
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/annotations/xmlidref/XmlIdSystemPropertyNonDefaultTestCase.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/annotations/xmlidref/XmlIdSystemPropertyNonDefaultTestCase.java
index c464ff8..bc0ca99 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/annotations/xmlidref/XmlIdSystemPropertyNonDefaultTestCase.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/annotations/xmlidref/XmlIdSystemPropertyNonDefaultTestCase.java
@@ -31,7 +31,7 @@ public class XmlIdSystemPropertyNonDefaultTestCase extends JAXBWithJSONTestCases
 
     public XmlIdSystemPropertyNonDefaultTestCase(String name) throws Exception {
         super(name);
-        setClasses(new Class[]{OwnerIntegerId.class, ThingIntegerId.class});
+        setClasses(new Class<?>[]{OwnerIntegerId.class, ThingIntegerId.class});
         setControlDocument(XML_RESOURCE);
         setControlJSON(JSON_RESOURCE);
     }
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/annotations/xmlidref/inheritance/XmlIdRefInheritanceTestCases.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/annotations/xmlidref/inheritance/XmlIdRefInheritanceTestCases.java
index e0b1d2e..580acd7 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/annotations/xmlidref/inheritance/XmlIdRefInheritanceTestCases.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/annotations/xmlidref/inheritance/XmlIdRefInheritanceTestCases.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
@@ -27,7 +27,7 @@ public class XmlIdRefInheritanceTestCases extends JAXBWithJSONTestCases {
 
     public XmlIdRefInheritanceTestCases(String name) throws Exception {
         super(name);
-        setClasses(new Class[] {RootNode.class});
+        setClasses(new Class<?>[] {RootNode.class});
         setControlJSON(CONTROL_JSON);
         setControlDocument(CONTROL_XML);
         jaxbMarshaller.setProperty(MarshallerProperties.JSON_MARSHAL_EMPTY_COLLECTIONS, Boolean.TRUE);
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/annotations/xmlidref/self/XmlIdRefSelfTestCases.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/annotations/xmlidref/self/XmlIdRefSelfTestCases.java
index 80336a4..dfca70d 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/annotations/xmlidref/self/XmlIdRefSelfTestCases.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/annotations/xmlidref/self/XmlIdRefSelfTestCases.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
@@ -26,7 +26,7 @@ public class XmlIdRefSelfTestCases extends JAXBWithJSONTestCases {
 
     public XmlIdRefSelfTestCases(String name) throws Exception {
         super(name);
-        setClasses(new Class[] {Customer.class});
+        setClasses(new Class<?>[] {Customer.class});
         setControlJSON(CONTROL_JSON);
         setControlDocument(CONTROL_XML);
     }
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/annotations/xmlinlinebinarydata/InlineHexBinaryTestCases.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/annotations/xmlinlinebinarydata/InlineHexBinaryTestCases.java
index 6a0209c..19678f6 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/annotations/xmlinlinebinarydata/InlineHexBinaryTestCases.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/annotations/xmlinlinebinarydata/InlineHexBinaryTestCases.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
@@ -29,7 +29,7 @@ public class InlineHexBinaryTestCases extends JAXBWithJSONTestCases {
 
     public InlineHexBinaryTestCases(String name) throws Exception {
         super(name);
-        setClasses(new Class[]{HexRoot.class});
+        setClasses(new Class<?>[]{HexRoot.class});
         setControlDocument(XML_RESOURCE);
         setControlJSON(JSON_RESOURCE);
         // TODO Auto-generated constructor stub
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/annotations/xmlinlinebinarydata/XmlInlineBinaryDataTestCases.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/annotations/xmlinlinebinarydata/XmlInlineBinaryDataTestCases.java
index bacd2c6..3474033 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/annotations/xmlinlinebinarydata/XmlInlineBinaryDataTestCases.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/annotations/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
@@ -33,7 +33,7 @@ public XmlInlineBinaryDataTestCases(String name) {
 
     @Override
     protected void setUp() throws Exception {
-        jc = JAXBContextFactory.createContext(new Class[] {FieldRoot.class, PropertyRoot.class}, null);
+        jc = JAXBContextFactory.createContext(new Class<?>[] {FieldRoot.class, PropertyRoot.class}, null);
     }
 
     public void testFieldAnnotation() throws Exception {
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/annotations/xmlinversereference/InverseRefChoiceAdapterTestCases.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/annotations/xmlinversereference/InverseRefChoiceAdapterTestCases.java
index 89b350c..fd52f6b 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/annotations/xmlinversereference/InverseRefChoiceAdapterTestCases.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/annotations/xmlinversereference/InverseRefChoiceAdapterTestCases.java
@@ -30,7 +30,7 @@ public class InverseRefChoiceAdapterTestCases extends JAXBWithJSONTestCases {
 
     public InverseRefChoiceAdapterTestCases(String name) throws Exception {
         super(name);
-        setClasses(new Class[]{ Owner.class });
+        setClasses(new Class<?>[]{ Owner.class });
         setControlDocument(XML_RESOURCE);
         setControlJSON(JSON_RESOURCE);;
     }
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/annotations/xmlinversereference/InverseReferenceAdapterTestCases.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/annotations/xmlinversereference/InverseReferenceAdapterTestCases.java
index 333c127..9a1d5b9 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/annotations/xmlinversereference/InverseReferenceAdapterTestCases.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/annotations/xmlinversereference/InverseReferenceAdapterTestCases.java
@@ -49,7 +49,7 @@ protected void setUp() throws Exception {
 
         Map<String, Object> properties = new HashMap<String, Object>();
         properties.put(JAXBContextProperties.OXM_METADATA_SOURCE, OXM_METADATA);
-        jc = JAXBContextFactory.createContext(new Class[] { Customer.class, Address.class, PhoneNumber.class }, properties);
+        jc = JAXBContextFactory.createContext(new Class<?>[] { Customer.class, Address.class, PhoneNumber.class }, properties);
     }
 
 
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/annotations/xmlinversereference/InverseReferenceWithRefTestCases.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/annotations/xmlinversereference/InverseReferenceWithRefTestCases.java
index 73f635b..92a44f5 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/annotations/xmlinversereference/InverseReferenceWithRefTestCases.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/annotations/xmlinversereference/InverseReferenceWithRefTestCases.java
@@ -24,7 +24,7 @@ public class InverseReferenceWithRefTestCases extends JAXBWithJSONTestCases {
 
     public InverseReferenceWithRefTestCases(String name) throws Exception {
         super(name);
-        setClasses(new Class[]{ Parent.class, Child.class, ChildSubclass.class });
+        setClasses(new Class<?>[]{ Parent.class, Child.class, ChildSubclass.class });
         setControlDocument(XML_RESOURCE);
         setControlJSON(JSON_RESOURCE);
     }
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/annotations/xmljoinnode/XmlJoinNodeTestCases.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/annotations/xmljoinnode/XmlJoinNodeTestCases.java
index 3cd1498..62765d5 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/annotations/xmljoinnode/XmlJoinNodeTestCases.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/annotations/xmljoinnode/XmlJoinNodeTestCases.java
@@ -24,7 +24,7 @@ public class XmlJoinNodeTestCases extends JAXBWithJSONTestCases {
 
     public XmlJoinNodeTestCases(String name) throws Exception {
         super(name);
-        setClasses(new Class[]{ Company.class });
+        setClasses(new Class<?>[]{ Company.class });
         setControlDocument(XML_RESOURCE);
         setControlJSON(JSON_RESOURCE);
     }
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/annotations/xmljoinnode/xmlvalue/XmlJoinNodesWithValueTestCases.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/annotations/xmljoinnode/xmlvalue/XmlJoinNodesWithValueTestCases.java
index a3ac96c..f9b64ce 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/annotations/xmljoinnode/xmlvalue/XmlJoinNodesWithValueTestCases.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/annotations/xmljoinnode/xmlvalue/XmlJoinNodesWithValueTestCases.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
@@ -26,7 +26,7 @@ public class XmlJoinNodesWithValueTestCases extends JAXBWithJSONTestCases {
     private static final String JSON_RESOURCE="org/eclipse/persistence/testing/jaxb/annotations/xmljoinnode/xmlvalue/root.json";
     public XmlJoinNodesWithValueTestCases(String name) throws Exception {
         super(name);
-        setClasses(new Class[]{Root.class, Order.class, Customer.class});
+        setClasses(new Class<?>[]{Root.class, Order.class, Customer.class});
         setControlDocument(XML_RESOURCE);
         setControlJSON(JSON_RESOURCE);
         jaxbMarshaller.setProperty(MarshallerProperties.JSON_VALUE_WRAPPER, "value");
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/annotations/xmllocation/XmlLocationErrorTestCases.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/annotations/xmllocation/XmlLocationErrorTestCases.java
index d48c18d..2095317 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/annotations/xmllocation/XmlLocationErrorTestCases.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/annotations/xmllocation/XmlLocationErrorTestCases.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
@@ -26,7 +26,7 @@ public class XmlLocationErrorTestCases extends TestCase {
     public void testInvalidXmlLocationType() {
         Exception caughtEx = null;
         try {
-            JAXBContext c = JAXBContextFactory.createContext(new Class[] { DataError.class }, null);
+            JAXBContext c = JAXBContextFactory.createContext(new Class<?>[] { DataError.class }, null);
         } catch (Exception e) {
             caughtEx = e;
         }
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/annotations/xmllocation/XmlLocationNonTransientTestCases.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/annotations/xmllocation/XmlLocationNonTransientTestCases.java
index 688308d..e5f53d0 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/annotations/xmllocation/XmlLocationNonTransientTestCases.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/annotations/xmllocation/XmlLocationNonTransientTestCases.java
@@ -25,7 +25,7 @@ public class XmlLocationNonTransientTestCases extends JAXBTestCases {
 
     public XmlLocationNonTransientTestCases(String name) throws Exception {
         super(name);
-        setClasses(new Class[]{ DataNT.class, SubDataNT.class, DetailDataNT.class, LeafDataNT.class });
+        setClasses(new Class<?>[]{ DataNT.class, SubDataNT.class, DetailDataNT.class, LeafDataNT.class });
         setControlDocument(XML_RESOURCE);
     }
 
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/annotations/xmllocation/XmlLocationSchemaGenTests.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/annotations/xmllocation/XmlLocationSchemaGenTests.java
index 8547353..047bba5 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/annotations/xmllocation/XmlLocationSchemaGenTests.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/annotations/xmllocation/XmlLocationSchemaGenTests.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
@@ -48,7 +48,7 @@ public XmlLocationSchemaGenTests(String name) {
     }
 
     public void testSchemaGen() throws Exception {
-        JAXBContext ctx = JAXBContextFactory.createContext(new Class[]{ Data.class, SubData.class, DetailData.class, LeafData.class }, null);
+        JAXBContext ctx = JAXBContextFactory.createContext(new Class<?>[]{ Data.class, SubData.class, DetailData.class, LeafData.class }, null);
         StringOutputResolver sor = new StringOutputResolver();
         ctx.generateSchema(sor);
 
@@ -78,7 +78,7 @@ public void testSchemaGen() throws Exception {
     }
 
     public void testSchemaGenNonTransient() throws Exception {
-        JAXBContext ctx = JAXBContextFactory.createContext(new Class[]{ DataNT.class, SubDataNT.class, DetailDataNT.class, LeafDataNT.class }, null);
+        JAXBContext ctx = JAXBContextFactory.createContext(new Class<?>[]{ DataNT.class, SubDataNT.class, DetailDataNT.class, LeafDataNT.class }, null);
         StringOutputResolver sor = new StringOutputResolver();
         ctx.generateSchema(sor);
 
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/annotations/xmllocation/XmlLocationTestCases.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/annotations/xmllocation/XmlLocationTestCases.java
index af54828..fad5b40 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/annotations/xmllocation/XmlLocationTestCases.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/annotations/xmllocation/XmlLocationTestCases.java
@@ -27,7 +27,7 @@ public class XmlLocationTestCases extends JAXBTestCases {
 
     public XmlLocationTestCases(String name) throws Exception {
         super(name);
-        setClasses(new Class[]{ Data.class, SubData.class, DetailData.class, LeafData.class });
+        setClasses(new Class<?>[]{ Data.class, SubData.class, DetailData.class, LeafData.class });
         setControlDocument(XML_RESOURCE);
     }
 
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/annotations/xmlnametransformer/JAXBDefaultNameTransformerTestCases.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/annotations/xmlnametransformer/JAXBDefaultNameTransformerTestCases.java
index 80ae26b..e9a404e 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/annotations/xmlnametransformer/JAXBDefaultNameTransformerTestCases.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/annotations/xmlnametransformer/JAXBDefaultNameTransformerTestCases.java
@@ -41,7 +41,7 @@ public JAXBDefaultNameTransformerTestCases(String name) throws Exception {
         super(name);
         setControlDocument(XML_RESOURCE);
         setControlJSON(JSON_RESOURCE);
-        Class[] classes = new Class[1];
+        Class<?>[] classes = new Class<?>[1];
         classes[0] = Employee.class;
         setClasses(classes);
         initXsiType();
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/annotations/xmlnametransformer/classlevel/upper/JAXBClassLevelUpperNameTransformerTestCases.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/annotations/xmlnametransformer/classlevel/upper/JAXBClassLevelUpperNameTransformerTestCases.java
index eb178e1..00d7c21 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/annotations/xmlnametransformer/classlevel/upper/JAXBClassLevelUpperNameTransformerTestCases.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/annotations/xmlnametransformer/classlevel/upper/JAXBClassLevelUpperNameTransformerTestCases.java
@@ -42,7 +42,7 @@ public JAXBClassLevelUpperNameTransformerTestCases(String name) throws Exception
         super(name);
         setControlDocument(XML_RESOURCE);
         setControlJSON(JSON_RESOURCE);
-        Class[] classes = new Class[1];
+        Class<?>[] classes = new Class<?>[1];
         classes[0] = Employee.class;
         setClasses(classes);
         initXsiType();
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/annotations/xmlnametransformer/upper/JAXBUpperNameTransformerTestCases.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/annotations/xmlnametransformer/upper/JAXBUpperNameTransformerTestCases.java
index 03a1fd6..9760e50 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/annotations/xmlnametransformer/upper/JAXBUpperNameTransformerTestCases.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/annotations/xmlnametransformer/upper/JAXBUpperNameTransformerTestCases.java
@@ -42,7 +42,7 @@ public JAXBUpperNameTransformerTestCases(String name) throws Exception {
         super(name);
         setControlDocument(XML_RESOURCE);
         setControlJSON(JSON_RESOURCE);
-        Class[] classes = new Class[1];
+        Class<?>[] classes = new Class<?>[1];
         classes[0] = Employee.class;
         setClasses(classes);
         initXsiType();
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/annotations/xmlnullpolicy/DefaultNoNodeTestCases.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/annotations/xmlnullpolicy/DefaultNoNodeTestCases.java
index f3dadc4..a81a5d8 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/annotations/xmlnullpolicy/DefaultNoNodeTestCases.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/annotations/xmlnullpolicy/DefaultNoNodeTestCases.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
@@ -23,7 +23,7 @@ public class DefaultNoNodeTestCases extends JAXBWithJSONTestCases {
 
     public DefaultNoNodeTestCases(String name) throws Exception {
         super(name);
-        setClasses(new Class[] {DefaultNoNodeEmployee.class});
+        setClasses(new Class<?>[] {DefaultNoNodeEmployee.class});
         setControlDocument(XML_RESOURCE);
         setControlJSON(JSON_RESOURCE);
     }
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 04f4781..24edbfd 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
@@ -54,7 +54,7 @@ public class XmlNullPolicyNoXmlElementTestCases extends JAXBTestCases {
      */
     public XmlNullPolicyNoXmlElementTestCases(String name) throws Exception{
         super(name);
-        setClasses(new Class[] { EmployeeNoXmlElement.class });
+        setClasses(new Class<?>[] { EmployeeNoXmlElement.class });
         setControlDocument(XML_RESOURCE);
         setWriteControlDocument(XML_WRITE_RESOURCE);
     }
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/annotations/xmlnullpolicy/XmlNullPolicyPackageLevelTestCases.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/annotations/xmlnullpolicy/XmlNullPolicyPackageLevelTestCases.java
index 1335c41..4047d83 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/annotations/xmlnullpolicy/XmlNullPolicyPackageLevelTestCases.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/annotations/xmlnullpolicy/XmlNullPolicyPackageLevelTestCases.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,7 @@ public class XmlNullPolicyPackageLevelTestCases extends JAXBTestCases {
     public XmlNullPolicyPackageLevelTestCases(String name) throws Exception {
         super(name);
         setControlDocument(XML_CONTROL_RESOURCE);
-        setClasses(new Class[] { Root.class });
+        setClasses(new Class<?>[] { Root.class });
     }
 
     @Override
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 9222ab8..a7a4a84 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
@@ -54,7 +54,7 @@ public class XmlNullPolicyTestCases extends JAXBTestCases {
      */
     public XmlNullPolicyTestCases(String name) throws Exception{
         super(name);
-        setClasses(new Class[] { Employee.class });
+        setClasses(new Class<?>[] { Employee.class });
         setControlDocument(XML_RESOURCE);
         setWriteControlDocument(XML_WRITE_RESOURCE);
     }
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/annotations/xmlnullpolicy/XmlNullPolicyTypeLevelOverrideTestCases.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/annotations/xmlnullpolicy/XmlNullPolicyTypeLevelOverrideTestCases.java
index 7d36672..7783cba 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/annotations/xmlnullpolicy/XmlNullPolicyTypeLevelOverrideTestCases.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/annotations/xmlnullpolicy/XmlNullPolicyTypeLevelOverrideTestCases.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,7 @@ public class XmlNullPolicyTypeLevelOverrideTestCases extends JAXBTestCases {
     public XmlNullPolicyTypeLevelOverrideTestCases(String name) throws Exception {
         super(name);
         setControlDocument(XML_CONTROL_RESOURCE);
-        setClasses(new Class[] { OverrideRoot.class });
+        setClasses(new Class<?>[] { OverrideRoot.class });
     }
 
     @Override
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/annotations/xmlnullpolicy/XmlNullPolicyTypeLevelTestCases.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/annotations/xmlnullpolicy/XmlNullPolicyTypeLevelTestCases.java
index 4d56fd2..dee33cc 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/annotations/xmlnullpolicy/XmlNullPolicyTypeLevelTestCases.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/annotations/xmlnullpolicy/XmlNullPolicyTypeLevelTestCases.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,7 @@ public class XmlNullPolicyTypeLevelTestCases extends JAXBTestCases {
     public XmlNullPolicyTypeLevelTestCases(String name) throws Exception {
         super(name);
         setControlDocument(XML_CONTROL_RESOURCE);
-        setClasses(new Class[] { NillableRoot.class });
+        setClasses(new Class<?>[] { NillableRoot.class });
     }
 
     @Override
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/annotations/xmlpath/XmlPathOverrideTestCases.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/annotations/xmlpath/XmlPathOverrideTestCases.java
index cffada6..e8240e0 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/annotations/xmlpath/XmlPathOverrideTestCases.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/annotations/xmlpath/XmlPathOverrideTestCases.java
@@ -42,7 +42,7 @@ public XmlPathOverrideTestCases(String name) throws Exception {
     @Override
     public void setUp() throws Exception {
         super.setUp();
-        setTypes(new Class[]{Employee.class, Address.class, Root.class, PhoneNumber.class});
+        setTypes(new Class<?>[]{Employee.class, Address.class, Root.class, PhoneNumber.class});
     }
 
     @Override
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/annotations/xmlpath/XmlPathTestCases.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/annotations/xmlpath/XmlPathTestCases.java
index ecdce09..cfdb41d 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/annotations/xmlpath/XmlPathTestCases.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/annotations/xmlpath/XmlPathTestCases.java
@@ -31,7 +31,7 @@ public class XmlPathTestCases extends JAXBWithJSONTestCases {
     private static final String JSON_SCHEMA_RESOURCE = "org/eclipse/persistence/testing/jaxb/annotations/xmlpath/xmlpathschema.json";
     public XmlPathTestCases(String name) throws Exception {
         super(name);
-        setClasses(new Class[] {Root.class, Employee.class, Address.class, PhoneNumber.class});
+        setClasses(new Class<?>[] {Root.class, Employee.class, Address.class, PhoneNumber.class});
         setControlDocument(XML_RESOURCE);
         setControlJSON(JSON_RESOURCE);
     }
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/annotations/xmlpath/XmlPathUnmappedTestCases.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/annotations/xmlpath/XmlPathUnmappedTestCases.java
index 49d0096..d9e74cb 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/annotations/xmlpath/XmlPathUnmappedTestCases.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/annotations/xmlpath/XmlPathUnmappedTestCases.java
@@ -30,7 +30,7 @@ public class XmlPathUnmappedTestCases extends JAXBWithJSONTestCases {
 
     public XmlPathUnmappedTestCases(String name) throws Exception {
         super(name);
-        setClasses(new Class[] {Root.class, Employee.class, Address.class, PhoneNumber.class});
+        setClasses(new Class<?>[] {Root.class, Employee.class, Address.class, PhoneNumber.class});
         setControlDocument(XML_RESOURCE_UNMAPPED);
         setWriteControlDocument(XML_RESOURCE);
         setControlJSON(JSON_RESOURCE_UNMAPPED);
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/annotations/xmlpath/attributecollection/XmlPathCollectionAttributeTestCases.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/annotations/xmlpath/attributecollection/XmlPathCollectionAttributeTestCases.java
index cb2e962..e94c787 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/annotations/xmlpath/attributecollection/XmlPathCollectionAttributeTestCases.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/annotations/xmlpath/attributecollection/XmlPathCollectionAttributeTestCases.java
@@ -32,7 +32,7 @@ public class XmlPathCollectionAttributeTestCases extends JAXBTestCases {
     public XmlPathCollectionAttributeTestCases(String name) throws Exception {
         super(name);
         setControlDocument(XML_RESOURCE);
-        setTypes(new Class[] { TestClass.class });
+        setTypes(new Class<?>[] { TestClass.class });
     }
 
     @Override
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/annotations/xmlpath/attributecollection/XmlPathCollectionRefAttributeTestCases.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/annotations/xmlpath/attributecollection/XmlPathCollectionRefAttributeTestCases.java
index 28cd895..05790a6 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/annotations/xmlpath/attributecollection/XmlPathCollectionRefAttributeTestCases.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/annotations/xmlpath/attributecollection/XmlPathCollectionRefAttributeTestCases.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
@@ -27,7 +27,7 @@ public class XmlPathCollectionRefAttributeTestCases extends JAXBTestCases {
 
     public XmlPathCollectionRefAttributeTestCases(String name) throws Exception {
         super(name);
-        setClasses(new Class[] {XmlPathCollectionRefAttributeRoot.class});
+        setClasses(new Class<?>[] {XmlPathCollectionRefAttributeRoot.class});
         setControlDocument(XML_RESOURCE);
     }
 
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/annotations/xmlpath/enumtype/EnumTestCases.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/annotations/xmlpath/enumtype/EnumTestCases.java
index 525b70d..3db4315 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/annotations/xmlpath/enumtype/EnumTestCases.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/annotations/xmlpath/enumtype/EnumTestCases.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,7 +23,7 @@ public class EnumTestCases extends JAXBWithJSONTestCases {
 
     public EnumTestCases(String name) throws Exception {
         super(name);
-        setClasses(new Class[] {Customer.class});
+        setClasses(new Class<?>[] {Customer.class});
         setControlDocument(XML_RESOURCE);
         setControlJSON(JSON_RESOURCE);
     }
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/annotations/xmlpath/predicate/AttributeTestCases.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/annotations/xmlpath/predicate/AttributeTestCases.java
index 9f9ff0c..2aadf79 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/annotations/xmlpath/predicate/AttributeTestCases.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/annotations/xmlpath/predicate/AttributeTestCases.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
@@ -22,7 +22,7 @@ public class AttributeTestCases extends JAXBTestCases {
 
     public AttributeTestCases(String name) throws Exception {
         super(name);
-        this.setClasses(new Class[] {AttributeRoot.class});
+        this.setClasses(new Class<?>[] {AttributeRoot.class});
         this.setControlDocument(XML_RESOURCE);
     }
 
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/annotations/xmlpath/predicate/BinderTestCases.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/annotations/xmlpath/predicate/BinderTestCases.java
index fb7fc99..6672839 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/annotations/xmlpath/predicate/BinderTestCases.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/annotations/xmlpath/predicate/BinderTestCases.java
@@ -45,7 +45,7 @@ public BinderTestCases(String name) {
     }
 
     public void testUnmarshal() throws Exception {
-        JAXBContext jc = JAXBContextFactory.createContext(new Class[] {Customer.class}, null);
+        JAXBContext jc = JAXBContextFactory.createContext(new Class<?>[] {Customer.class}, null);
         Binder<Node> binder = jc.createBinder();
         Customer test = (Customer) binder.unmarshal(getControlDocument());
 
@@ -53,7 +53,7 @@ public void testUnmarshal() throws Exception {
     }
 
     public void testMarshal() throws Exception {
-        JAXBContext jc = JAXBContextFactory.createContext(new Class[] {Customer.class}, null);
+        JAXBContext jc = JAXBContextFactory.createContext(new Class<?>[] {Customer.class}, null);
         Binder<Node> binder = jc.createBinder();
 
         DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/annotations/xmlpath/predicate/ElementTestCases.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/annotations/xmlpath/predicate/ElementTestCases.java
index bea6585..cfd96a1 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/annotations/xmlpath/predicate/ElementTestCases.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/annotations/xmlpath/predicate/ElementTestCases.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
@@ -30,7 +30,7 @@ public class ElementTestCases extends JAXBTestCases {
 
     public ElementTestCases(String name) throws Exception {
         super(name);
-        setClasses(new Class[] {Customer.class});
+        setClasses(new Class<?>[] {Customer.class});
         setControlDocument(XML_RESOURCE);
     }
 
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/annotations/xmlpath/predicate/JAXBContextXPathTestCases.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/annotations/xmlpath/predicate/JAXBContextXPathTestCases.java
index 1cf8237..16a1996 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/annotations/xmlpath/predicate/JAXBContextXPathTestCases.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/annotations/xmlpath/predicate/JAXBContextXPathTestCases.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
@@ -42,7 +42,7 @@ public JAXBContextXPathTestCases(String name) {
 
     @Override
     protected void setUp() throws Exception {
-        jaxbContext = (JAXBContext) JAXBContextFactory.createContext(new Class[] {Customer.class}, null);
+        jaxbContext = (JAXBContext) JAXBContextFactory.createContext(new Class<?>[] {Customer.class}, null);
     }
 
     public void testDirectXPath() {
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/annotations/xmlpath/predicate/PositionalTestCases.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/annotations/xmlpath/predicate/PositionalTestCases.java
index 990c611..18bc2ca 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/annotations/xmlpath/predicate/PositionalTestCases.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/annotations/xmlpath/predicate/PositionalTestCases.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
@@ -26,7 +26,7 @@ public class PositionalTestCases extends JAXBTestCases {
 
     public PositionalTestCases(String name) throws Exception {
         super(name);
-        setClasses(new Class[] {PositionalRoot.class});
+        setClasses(new Class<?>[] {PositionalRoot.class});
         setControlDocument(XML_RESOURCE);
     }
 
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/annotations/xmlpath/predicate/PredicateWithSlashTestCases.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/annotations/xmlpath/predicate/PredicateWithSlashTestCases.java
index 0638116..2be93d1 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/annotations/xmlpath/predicate/PredicateWithSlashTestCases.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/annotations/xmlpath/predicate/PredicateWithSlashTestCases.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
@@ -30,7 +30,7 @@ public class PredicateWithSlashTestCases extends JAXBTestCases {
 
     public PredicateWithSlashTestCases(String name) throws Exception {
         super(name);
-        setClasses(new Class[] {CustomerWithSlash.class});
+        setClasses(new Class<?>[] {CustomerWithSlash.class});
         setControlDocument(XML_RESOURCE);
     }
 
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/annotations/xmlpath/predicate/QNameTestCases.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/annotations/xmlpath/predicate/QNameTestCases.java
index b7ba2fc..a133362 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/annotations/xmlpath/predicate/QNameTestCases.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/annotations/xmlpath/predicate/QNameTestCases.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,7 @@ public class QNameTestCases extends JAXBTestCases {
 
     public QNameTestCases(String name) throws Exception {
         super(name);
-        setClasses(new Class[] {QNameRoot.class});
+        setClasses(new Class<?>[] {QNameRoot.class});
         setControlDocument(XML_RESOURCE);
     }
 
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/annotations/xmlpath/predicate/ReferenceTestCases.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/annotations/xmlpath/predicate/ReferenceTestCases.java
index 412023a..81e0cf7 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/annotations/xmlpath/predicate/ReferenceTestCases.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/annotations/xmlpath/predicate/ReferenceTestCases.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
@@ -22,7 +22,7 @@ public class ReferenceTestCases extends JAXBTestCases {
 
     public ReferenceTestCases(String name) throws Exception {
         super(name);
-        setClasses(new Class[] {ReferenceRoot.class});
+        setClasses(new Class<?>[] {ReferenceRoot.class});
         setControlDocument(XML_RESOURCE);
     }
 
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/annotations/xmlpath/predicate/XPathsTestCases.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/annotations/xmlpath/predicate/XPathsTestCases.java
index 1210fbb..c1a788c 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/annotations/xmlpath/predicate/XPathsTestCases.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/annotations/xmlpath/predicate/XPathsTestCases.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
@@ -25,7 +25,7 @@ public class XPathsTestCases extends JAXBTestCases {
 
     public XPathsTestCases(String name) throws Exception {
         super(name);
-        setClasses(new Class[] {XPathsRoot.class, Address.class});
+        setClasses(new Class<?>[] {XPathsRoot.class, Address.class});
         setControlDocument(XML_RESOURCE);
     }
 
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/annotations/xmlpath/predicate/adapter/CustomerTestCases.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/annotations/xmlpath/predicate/adapter/CustomerTestCases.java
index 8367699..500a4d7 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/annotations/xmlpath/predicate/adapter/CustomerTestCases.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/annotations/xmlpath/predicate/adapter/CustomerTestCases.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
@@ -35,7 +35,7 @@ public class CustomerTestCases extends JAXBTestCases {
 
     public CustomerTestCases(String name) throws Exception {
         super(name);
-        this.setClasses(new Class[] {Customer.class});
+        this.setClasses(new Class<?>[] {Customer.class});
         this.setControlDocument(XML_RESOURCE);
     }
 
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/annotations/xmlpath/predicate/ns/BinderTestCases.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/annotations/xmlpath/predicate/ns/BinderTestCases.java
index d3fdcfe..1bc36d1 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/annotations/xmlpath/predicate/ns/BinderTestCases.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/annotations/xmlpath/predicate/ns/BinderTestCases.java
@@ -43,7 +43,7 @@ public BinderTestCases(String name) {
     }
 
     public void testUnmarshal() throws Exception {
-        JAXBContext jc = JAXBContextFactory.createContext(new Class[] {Customer.class}, null);
+        JAXBContext jc = JAXBContextFactory.createContext(new Class<?>[] {Customer.class}, null);
         Binder<Node> binder = jc.createBinder();
         Customer test = (Customer) binder.unmarshal(getControlDocument());
 
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/annotations/xmlpath/predicate/ns/ElementTestCases.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/annotations/xmlpath/predicate/ns/ElementTestCases.java
index 05bc8ed..c4e0a1b 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/annotations/xmlpath/predicate/ns/ElementTestCases.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/annotations/xmlpath/predicate/ns/ElementTestCases.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
@@ -30,7 +30,7 @@ public class ElementTestCases extends JAXBTestCases {
 
     public ElementTestCases(String name) throws Exception {
         super(name);
-        setClasses(new Class[] {Customer.class});
+        setClasses(new Class<?>[] {Customer.class});
         setControlDocument(XML_RESOURCE);
     }
 
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/annotations/xmlpath/predicate/ns/JAXBContextXPathTestCases.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/annotations/xmlpath/predicate/ns/JAXBContextXPathTestCases.java
index 158b085..6184587 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/annotations/xmlpath/predicate/ns/JAXBContextXPathTestCases.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/annotations/xmlpath/predicate/ns/JAXBContextXPathTestCases.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
@@ -44,7 +44,7 @@ public JAXBContextXPathTestCases(String name) {
 
     @Override
     protected void setUp() throws Exception {
-        jaxbContext = (JAXBContext) JAXBContextFactory.createContext(new Class[] {Customer.class}, null);
+        jaxbContext = (JAXBContext) JAXBContextFactory.createContext(new Class<?>[] {Customer.class}, null);
         nsResolver = new NamespaceResolver();
         nsResolver.setDefaultNamespaceURI("http://www.example.org");
     }
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/annotations/xmlpath/predicate/ns/PositionalTestCases.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/annotations/xmlpath/predicate/ns/PositionalTestCases.java
index 13ececd..8878529 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/annotations/xmlpath/predicate/ns/PositionalTestCases.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/annotations/xmlpath/predicate/ns/PositionalTestCases.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
@@ -26,7 +26,7 @@ public class PositionalTestCases extends JAXBTestCases {
 
     public PositionalTestCases(String name) throws Exception {
         super(name);
-        setClasses(new Class[] {PositionalRoot.class});
+        setClasses(new Class<?>[] {PositionalRoot.class});
         setControlDocument(XML_RESOURCE);
     }
 
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/annotations/xmlpath/predicate/ns/QNameTestCases.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/annotations/xmlpath/predicate/ns/QNameTestCases.java
index dc4c949..73c8893 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/annotations/xmlpath/predicate/ns/QNameTestCases.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/annotations/xmlpath/predicate/ns/QNameTestCases.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,7 @@ public class QNameTestCases extends JAXBTestCases {
 
     public QNameTestCases(String name) throws Exception {
         super(name);
-        setClasses(new Class[] {QNameRoot.class});
+        setClasses(new Class<?>[] {QNameRoot.class});
         setControlDocument(XML_RESOURCE);
     }
 
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/annotations/xmlpath/predicate/ns/ReferenceTestCases.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/annotations/xmlpath/predicate/ns/ReferenceTestCases.java
index 28e94a3..db7fffd 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/annotations/xmlpath/predicate/ns/ReferenceTestCases.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/annotations/xmlpath/predicate/ns/ReferenceTestCases.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
@@ -22,7 +22,7 @@ public class ReferenceTestCases extends JAXBTestCases {
 
     public ReferenceTestCases(String name) throws Exception {
         super(name);
-        setClasses(new Class[] {ReferenceRoot.class});
+        setClasses(new Class<?>[] {ReferenceRoot.class});
         setControlDocument(XML_RESOURCE);
     }
 
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/annotations/xmlpath/predicate/ns/XPathsTestCases.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/annotations/xmlpath/predicate/ns/XPathsTestCases.java
index 929dca1..1d235bf 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/annotations/xmlpath/predicate/ns/XPathsTestCases.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/annotations/xmlpath/predicate/ns/XPathsTestCases.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
@@ -25,7 +25,7 @@ public class XPathsTestCases extends JAXBTestCases {
 
     public XPathsTestCases(String name) throws Exception {
         super(name);
-        setClasses(new Class[] {XPathsRoot.class, Address.class});
+        setClasses(new Class<?>[] {XPathsRoot.class, Address.class});
         setControlDocument(XML_RESOURCE);
     }
 
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/annotations/xmlpath/schematype/SchemaTypeTestCases.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/annotations/xmlpath/schematype/SchemaTypeTestCases.java
index 7c1241b..09378c5 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/annotations/xmlpath/schematype/SchemaTypeTestCases.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/annotations/xmlpath/schematype/SchemaTypeTestCases.java
@@ -29,7 +29,7 @@ public class SchemaTypeTestCases extends JAXBWithJSONTestCases {
 
     public SchemaTypeTestCases(String name) throws Exception {
         super(name);
-        setTypes(new Class[] {Root.class});
+        setTypes(new Class<?>[] {Root.class});
     }
 
     @Override
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/annotations/xmlpath/self/SelfTestCases.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/annotations/xmlpath/self/SelfTestCases.java
index 08a3156..00dd091 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/annotations/xmlpath/self/SelfTestCases.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/annotations/xmlpath/self/SelfTestCases.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,7 @@ public SelfTestCases(String name) throws Exception {
         super(name);
         setControlDocument(XML_RESOURCE);
         setControlJSON(JSON_RESOURCE);
-        setTypes(new Class[] {PaymentInf.class});
+        setTypes(new Class<?>[] {PaymentInf.class});
     }
 
     @Override
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 6b2271a..3a83191 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
@@ -42,7 +42,7 @@ public XmlPathsTestCases(String name) throws Exception {
         super(name);
         setControlDocument(XML_RESOURCE);
         setControlJSON(JSON_RESOURCE);
-        setClasses(new Class[]{Employee.class});
+        setClasses(new Class<?>[]{Employee.class});
     }
 
 
@@ -78,7 +78,7 @@ public void testInstanceDocValidation() {
 
     public void testInvalidXmlPaths() {
         try {
-            JAXBContext jaxbCtx = (JAXBContext) JAXBContextFactory.createContext(new Class[] { InvalidEmployee.class }, null);
+            JAXBContext jaxbCtx = (JAXBContext) JAXBContextFactory.createContext(new Class<?>[] { InvalidEmployee.class }, null);
         } catch (JAXBException e) {
             //e.printStackTrace();
             return;
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 5c5c653..74e01ac 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
@@ -45,7 +45,7 @@ public XmlPathsOverrideTestCases(String name) throws Exception {
         super(name);
         setControlDocument(XML_RESOURCE);
         setControlJSON(JSON_RESOURCE);
-        setClasses(new Class[]{});
+        setClasses(new Class<?>[]{});
     }
 
     @Override
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/annotations/xmlproperty/XmlPropertyTestCases.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/annotations/xmlproperty/XmlPropertyTestCases.java
index 97b4327..1e03428 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/annotations/xmlproperty/XmlPropertyTestCases.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/annotations/xmlproperty/XmlPropertyTestCases.java
@@ -36,7 +36,7 @@ public class XmlPropertyTestCases extends TestCase {
 
     @Override
     public void setUp() throws Exception {
-        JAXBContext ctx = (JAXBContext)JAXBContextFactory.createContext(new Class[]{Foo.class}, null);
+        JAXBContext ctx = (JAXBContext)JAXBContextFactory.createContext(new Class<?>[]{Foo.class}, null);
         this.project = ctx.getXMLContext().getSession(0).getProject();
     }
 
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/annotations/xmlreadonly/XmlReadOnlyOverrideTestCases.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/annotations/xmlreadonly/XmlReadOnlyOverrideTestCases.java
index 78ba85b..776ccaa 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/annotations/xmlreadonly/XmlReadOnlyOverrideTestCases.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/annotations/xmlreadonly/XmlReadOnlyOverrideTestCases.java
@@ -39,7 +39,7 @@ public XmlReadOnlyOverrideTestCases(String name) throws Exception {
     @Override
     public void setUp() throws Exception {
         super.setUp();
-        setTypes(new Class[] {Employee.class});
+        setTypes(new Class<?>[] {Employee.class});
     }
 
     @Override
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/annotations/xmlreadonly/XmlReadOnlyTestCases.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/annotations/xmlreadonly/XmlReadOnlyTestCases.java
index ef2d956..9192295 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/annotations/xmlreadonly/XmlReadOnlyTestCases.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/annotations/xmlreadonly/XmlReadOnlyTestCases.java
@@ -26,7 +26,7 @@ public class XmlReadOnlyTestCases extends JAXBWithJSONTestCases {
     private static final String JSON_WRITE_RESOURCE = "org/eclipse/persistence/testing/jaxb/annotations/xmlreadonly/employee_write.json";
     public XmlReadOnlyTestCases(String name) throws Exception {
         super(name);
-        setClasses(new Class[] {Employee.class});
+        setClasses(new Class<?>[] {Employee.class});
         setControlDocument(XML_READ_RESOURCE);
         setWriteControlDocument(XML_WRITE_RESOURCE);
         setControlJSON(JSON_READ_RESOURCE);
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/annotations/xmltransformation/SimpleRootTestCases.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/annotations/xmltransformation/SimpleRootTestCases.java
index 673589b..7d59048 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/annotations/xmltransformation/SimpleRootTestCases.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/annotations/xmltransformation/SimpleRootTestCases.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,7 +25,7 @@ public SimpleRootTestCases(String name) throws Exception {
         super(name);
         setControlDocument("org/eclipse/persistence/testing/jaxb/annotations/xmltransformation/simpleRoot.xml");
         setControlJSON("org/eclipse/persistence/testing/jaxb/annotations/xmltransformation/simpleRoot.json");
-        setClasses(new Class[]{SimpleRoot.class});
+        setClasses(new Class<?>[]{SimpleRoot.class});
     }
 
     @Override
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/annotations/xmltransformation/XMLTransformationNoArgCtorTestCases.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/annotations/xmltransformation/XMLTransformationNoArgCtorTestCases.java
index 6e3a52d..d43d464 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/annotations/xmltransformation/XMLTransformationNoArgCtorTestCases.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/annotations/xmltransformation/XMLTransformationNoArgCtorTestCases.java
@@ -20,7 +20,7 @@
 public class XMLTransformationNoArgCtorTestCases extends JAXBWithJSONTestCases{
     public XMLTransformationNoArgCtorTestCases(String name) throws Exception {
         super(name);
-        setClasses(new Class[] {EmployeeWithAddressAndTransformer.class});
+        setClasses(new Class<?>[] {EmployeeWithAddressAndTransformer.class});
         setControlDocument("org/eclipse/persistence/testing/jaxb/annotations/xmltransformation/employee.xml");
         setControlJSON("org/eclipse/persistence/testing/jaxb/annotations/xmltransformation/employee.json");
     }
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/annotations/xmltransformation/XMLTransformationNoArgCtorXMLBindingsTestCases.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/annotations/xmltransformation/XMLTransformationNoArgCtorXMLBindingsTestCases.java
index 48d8f66..bb3ba13 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/annotations/xmltransformation/XMLTransformationNoArgCtorXMLBindingsTestCases.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/annotations/xmltransformation/XMLTransformationNoArgCtorXMLBindingsTestCases.java
@@ -29,7 +29,7 @@
 public class XMLTransformationNoArgCtorXMLBindingsTestCases extends JAXBWithJSONTestCases {
     public XMLTransformationNoArgCtorXMLBindingsTestCases(String name) throws Exception {
         super(name);
-        setClasses(new Class[] {EmployeeWithAddress.class});
+        setClasses(new Class<?>[] {EmployeeWithAddress.class});
         setControlDocument("org/eclipse/persistence/testing/jaxb/annotations/xmltransformation/employee.xml");
         setControlJSON("org/eclipse/persistence/testing/jaxb/annotations/xmltransformation/employee.json");
     }
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/annotations/xmltransformation/XmlTransformationMethodTestCases.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/annotations/xmltransformation/XmlTransformationMethodTestCases.java
index a3ea598..2a02a9e 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/annotations/xmltransformation/XmlTransformationMethodTestCases.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/annotations/xmltransformation/XmlTransformationMethodTestCases.java
@@ -20,7 +20,7 @@
 public class XmlTransformationMethodTestCases extends JAXBWithJSONTestCases{
 public XmlTransformationMethodTestCases(String name) throws Exception {
       super(name);
-      setClasses(new Class[] {EmployeeTransformationMethod.class});
+      setClasses(new Class<?>[] {EmployeeTransformationMethod.class});
       setControlDocument("org/eclipse/persistence/testing/oxm/mappings/transformation/employee1.xml");
       setControlJSON("org/eclipse/persistence/testing/oxm/mappings/transformation/employee1.json");
    }
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/annotations/xmltransformation/XmlTransformationTestCases.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/annotations/xmltransformation/XmlTransformationTestCases.java
index b21e997..c9f4918 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/annotations/xmltransformation/XmlTransformationTestCases.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/annotations/xmltransformation/XmlTransformationTestCases.java
@@ -25,7 +25,7 @@
 public class XmlTransformationTestCases extends JAXBWithJSONTestCases {
     public XmlTransformationTestCases(String name) throws Exception {
         super(name);
-        setClasses(new Class[] {Employee.class});
+        setClasses(new Class<?>[] {Employee.class});
         setControlDocument("org/eclipse/persistence/testing/oxm/mappings/transformation/employee1.xml");
         setControlJSON("org/eclipse/persistence/testing/oxm/mappings/transformation/employee1.json");
     }
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/annotations/xmltransient/DoubleTransientTestCases.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/annotations/xmltransient/DoubleTransientTestCases.java
index 838c328..2b4d5a9 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/annotations/xmltransient/DoubleTransientTestCases.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/annotations/xmltransient/DoubleTransientTestCases.java
@@ -41,7 +41,7 @@ public class DoubleTransientTestCases extends JAXBWithJSONTestCases {
 
     public DoubleTransientTestCases(String name) throws Exception {
         super(name);
-        setClasses(new Class[] { DoubleTransient.class });
+        setClasses(new Class<?>[] { DoubleTransient.class });
         setControlDocument(XML_RESOURCE);
         setControlJSON(JSON_RESOURCE);
     }
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/annotations/xmltransient/ObjectWithTransientListTestCases.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/annotations/xmltransient/ObjectWithTransientListTestCases.java
index c54c55f..0477376 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/annotations/xmltransient/ObjectWithTransientListTestCases.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/annotations/xmltransient/ObjectWithTransientListTestCases.java
@@ -25,7 +25,7 @@ public class ObjectWithTransientListTestCases extends JAXBWithJSONTestCases{
 
     public ObjectWithTransientListTestCases(String name) throws Exception {
         super(name);
-        setClasses(new Class[] { ObjectWithTransient.class });
+        setClasses(new Class<?>[] { ObjectWithTransient.class });
         expectsMarshalException = true;
     }
 
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/annotations/xmltransient/ObjectWithTransientTestCases.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/annotations/xmltransient/ObjectWithTransientTestCases.java
index 85623e7..52da46f 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/annotations/xmltransient/ObjectWithTransientTestCases.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/annotations/xmltransient/ObjectWithTransientTestCases.java
@@ -26,7 +26,7 @@ public class ObjectWithTransientTestCases extends JAXBWithJSONTestCases{
 
     public ObjectWithTransientTestCases(String name) throws Exception {
         super(name);
-        setClasses(new Class[] { ObjectWithTransient.class });
+        setClasses(new Class<?>[] { ObjectWithTransient.class });
         expectsMarshalException = true;
     }
 
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/annotations/xmltransient/PropOrderTestCases.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/annotations/xmltransient/PropOrderTestCases.java
index b685a72..ab5c88b 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/annotations/xmltransient/PropOrderTestCases.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/annotations/xmltransient/PropOrderTestCases.java
@@ -39,7 +39,7 @@ public String getName() {
     }
 
     public void testContextCreation() throws Exception {
-        JAXBContext ctx = JAXBContextFactory.createContext(new Class[] { PurchaseOrder.class }, null);
+        JAXBContext ctx = JAXBContextFactory.createContext(new Class<?>[] { PurchaseOrder.class }, null);
     }
 
 }
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/annotations/xmltransient/PropertyOverrideTestCases.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/annotations/xmltransient/PropertyOverrideTestCases.java
index 6a6096d..c3dacb9 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/annotations/xmltransient/PropertyOverrideTestCases.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/annotations/xmltransient/PropertyOverrideTestCases.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,7 +23,7 @@ public class PropertyOverrideTestCases extends JAXBWithJSONTestCases{
 
     public PropertyOverrideTestCases(String name) throws Exception {
         super(name);
-        setClasses(new Class[] {ChildClass.class});
+        setClasses(new Class<?>[] {ChildClass.class});
         setControlDocument(XML_RESOURCE);
         setControlJSON(JSON_RESOURCE);
     }
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/annotations/xmltransient/TransientClassTestCases.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/annotations/xmltransient/TransientClassTestCases.java
index cda3c64..8f11d26 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/annotations/xmltransient/TransientClassTestCases.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/annotations/xmltransient/TransientClassTestCases.java
@@ -44,7 +44,7 @@ public class TransientClassTestCases extends JAXBWithJSONTestCases {
 
     public TransientClassTestCases(String name) throws Exception {
         super(name);
-        setClasses(new Class[] { TransientClass.class });
+        setClasses(new Class<?>[] { TransientClass.class });
         setControlDocument(XML_RESOURCE);
         setControlJSON(JSON_RESOURCE);
     }
@@ -70,7 +70,7 @@ protected Map getProperties() {
     }
 
     public void testTransientClassNoOverride() throws JAXBException {
-        JAXBContext ctx = JAXBContextFactory.createContext(new Class[] { TransientClass.class }, null);
+        JAXBContext ctx = JAXBContextFactory.createContext(new Class<?>[] { TransientClass.class }, null);
         // With no overrides, no errors should be thrown.
 
         ByteArrayOutputStream out = new ByteArrayOutputStream();
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/annotations/xmltransient/XmlTransientFieldTestCases.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/annotations/xmltransient/XmlTransientFieldTestCases.java
index 432d5fb..e16aa23 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/annotations/xmltransient/XmlTransientFieldTestCases.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/annotations/xmltransient/XmlTransientFieldTestCases.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,7 +23,7 @@ public class XmlTransientFieldTestCases extends JAXBWithJSONTestCases{
 
     public XmlTransientFieldTestCases(String name) throws Exception {
         super(name);
-        setClasses(new Class[] {FieldRoot.class});
+        setClasses(new Class<?>[] {FieldRoot.class});
         setControlDocument(XML_RESOURCE);
         setControlJSON(JSON_RESOURCE);
     }
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/annotations/xmltransient/XmlTransientPropertyTestCases.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/annotations/xmltransient/XmlTransientPropertyTestCases.java
index b8e9576..fb71901 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/annotations/xmltransient/XmlTransientPropertyTestCases.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/annotations/xmltransient/XmlTransientPropertyTestCases.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,7 +23,7 @@ public class XmlTransientPropertyTestCases extends JAXBWithJSONTestCases {
 
     public XmlTransientPropertyTestCases(String name) throws Exception {
         super(name);
-        setClasses(new Class[] {PropertyRoot.class});
+        setClasses(new Class<?>[] {PropertyRoot.class});
         setControlDocument(XML_RESOURCE);
         setControlJSON(JSON_RESOURCE);
     }
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/annotations/xmlvalue/ObjectValueTestCases.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/annotations/xmlvalue/ObjectValueTestCases.java
index 735f401..cddbdfb 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/annotations/xmlvalue/ObjectValueTestCases.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/annotations/xmlvalue/ObjectValueTestCases.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
@@ -25,7 +25,7 @@ public class ObjectValueTestCases extends JAXBWithJSONTestCases {
 
     public ObjectValueTestCases(String name) throws Exception {
         super(name);
-        setClasses(new Class[] {Top.class});
+        setClasses(new Class<?>[] {Top.class});
         setControlDocument(XML_RESOURCE);
         setControlJSON(JSON_RESOURCE);
     }
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/annotations/xmlvalue/XmlValueSystemPropertyNonDefaultTestCase.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/annotations/xmlvalue/XmlValueSystemPropertyNonDefaultTestCase.java
index bb76872..f82a3fc 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/annotations/xmlvalue/XmlValueSystemPropertyNonDefaultTestCase.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/annotations/xmlvalue/XmlValueSystemPropertyNonDefaultTestCase.java
@@ -31,7 +31,7 @@ public class XmlValueSystemPropertyNonDefaultTestCase extends JAXBWithJSONTestCa
 
     public XmlValueSystemPropertyNonDefaultTestCase(String name) throws Exception {
         super(name);
-        setClasses(new Class[]{Parent.class, Child.class});
+        setClasses(new Class<?>[]{Parent.class, Child.class});
         setControlDocument(XML_RESOURCE);
         setControlJSON(JSON_RESOURCE);
     }
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/annotations/xmlvalue/XsiTypeTestCases.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/annotations/xmlvalue/XsiTypeTestCases.java
index 803944f..15fa12d 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/annotations/xmlvalue/XsiTypeTestCases.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/annotations/xmlvalue/XsiTypeTestCases.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 @@ public class XsiTypeTestCases extends JAXBWithJSONTestCases {
 
     public XsiTypeTestCases(String name) throws Exception {
         super(name);
-        setClasses(new Class[] {XsiTypeRoot.class});
+        setClasses(new Class<?>[] {XsiTypeRoot.class});
         setControlDocument(XML_RESOURCE);
         setControlJSON(JSON_RESOURCE);
         initXsiType();
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/annotations/xmlvalue/adapter/AdapterTestCases.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/annotations/xmlvalue/adapter/AdapterTestCases.java
index 747ea79..4f8fbc4 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/annotations/xmlvalue/adapter/AdapterTestCases.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/annotations/xmlvalue/adapter/AdapterTestCases.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
@@ -25,7 +25,7 @@ public class AdapterTestCases extends JAXBWithJSONTestCases {
 
     public AdapterTestCases(String name) throws Exception {
         super(name);
-        setClasses(new Class[] {Top.class});
+        setClasses(new Class<?>[] {Top.class});
         setControlDocument(XML_RESOURCE);
         setControlJSON(JSON_RESOURCE);
     }
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/annotations/xmlvalue/attribute/NestedAttributeNullTestCases.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/annotations/xmlvalue/attribute/NestedAttributeNullTestCases.java
index 1397448..c55b0f5 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/annotations/xmlvalue/attribute/NestedAttributeNullTestCases.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/annotations/xmlvalue/attribute/NestedAttributeNullTestCases.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
@@ -23,7 +23,7 @@ public class NestedAttributeNullTestCases extends JAXBWithJSONTestCases {
 
     public NestedAttributeNullTestCases(String name) throws Exception {
         super(name);
-        setClasses(new Class[] {Top.class});
+        setClasses(new Class<?>[] {Top.class});
         setControlDocument(XML_RESOURCE);
         setControlJSON(JSON_RESOURCE);
     }
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/annotations/xmlvalue/attribute/NestedAttributeTestCases.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/annotations/xmlvalue/attribute/NestedAttributeTestCases.java
index 62912d6..7d5948c 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/annotations/xmlvalue/attribute/NestedAttributeTestCases.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/annotations/xmlvalue/attribute/NestedAttributeTestCases.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
@@ -24,7 +24,7 @@ public class NestedAttributeTestCases extends JAXBWithJSONTestCases {
 
     public NestedAttributeTestCases(String name) throws Exception {
         super(name);
-        setClasses(new Class[] {Top.class});
+        setClasses(new Class<?>[] {Top.class});
         setControlDocument(XML_RESOURCE);
         setControlJSON(JSON_RESOURCE);
     }
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/annotations/xmlvalue/integer/IntegerTestCases.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/annotations/xmlvalue/integer/IntegerTestCases.java
index cddd792..0fc7683 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/annotations/xmlvalue/integer/IntegerTestCases.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/annotations/xmlvalue/integer/IntegerTestCases.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
@@ -25,7 +25,7 @@ public class IntegerTestCases extends JAXBWithJSONTestCases {
 
     public IntegerTestCases(String name) throws Exception {
         super(name);
-        setClasses(new Class[] {Top.class});
+        setClasses(new Class<?>[] {Top.class});
         setControlDocument(XML_RESOURCE);
         setControlJSON(JSON_RESOURCE);
     }
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/annotations/xmlvalue/text/NestedTextTestCases.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/annotations/xmlvalue/text/NestedTextTestCases.java
index 1f82b59..e346b15 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/annotations/xmlvalue/text/NestedTextTestCases.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/annotations/xmlvalue/text/NestedTextTestCases.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,7 @@ public class NestedTextTestCases extends JAXBWithJSONTestCases {
 
     public NestedTextTestCases(String name) throws Exception {
         super(name);
-        setClasses(new Class[] {Top.class});
+        setClasses(new Class<?>[] {Top.class});
         setControlDocument(XML_RESOURCE);
          setControlJSON(JSON_RESOURCE);
     }
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/annotations/xmlwriteonly/XmlWriteOnlyOverrideTestCases.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/annotations/xmlwriteonly/XmlWriteOnlyOverrideTestCases.java
index 28d3861..ccdd0a2 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/annotations/xmlwriteonly/XmlWriteOnlyOverrideTestCases.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/annotations/xmlwriteonly/XmlWriteOnlyOverrideTestCases.java
@@ -38,7 +38,7 @@ public XmlWriteOnlyOverrideTestCases(String name) throws Exception {
     @Override
     public void setUp() throws Exception {
         super.setUp();
-        setTypes(new Class[] {Employee.class});
+        setTypes(new Class<?>[] {Employee.class});
     }
 
     @Override
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/annotations/xmlwriteonly/XmlWriteOnlyTestCases.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/annotations/xmlwriteonly/XmlWriteOnlyTestCases.java
index ec087c4..5b95d47 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/annotations/xmlwriteonly/XmlWriteOnlyTestCases.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/annotations/xmlwriteonly/XmlWriteOnlyTestCases.java
@@ -24,7 +24,7 @@ public class XmlWriteOnlyTestCases extends JAXBWithJSONTestCases{
 
     public XmlWriteOnlyTestCases(String name) throws Exception {
         super(name);
-        setClasses(new Class[] {Employee.class});
+        setClasses(new Class<?>[] {Employee.class});
         setControlDocument(XML_RESOURCE);
         setControlJSON(JSON_RESOURCE);
     }
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/any/AnyWithJAXBElementTestCases.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/any/AnyWithJAXBElementTestCases.java
index 4754c08..6500a54 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/any/AnyWithJAXBElementTestCases.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/any/AnyWithJAXBElementTestCases.java
@@ -32,7 +32,7 @@ public AnyWithJAXBElementTestCases(String name) throws Exception {
             super(name);
             setControlDocument(XML_RESOURCE);
             setControlJSON(JSON_RESOURCE);
-            Class[] classes = new Class[2];
+            Class<?>[] classes = new Class<?>[2];
             classes[0] = ObjectFactory.class;
             classes[1] = Root.class;
             setClasses(classes);
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/attachments/contenttype/ContentTypeTestCases.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/attachments/contenttype/ContentTypeTestCases.java
index 49ec040..39d65ee 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/attachments/contenttype/ContentTypeTestCases.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/attachments/contenttype/ContentTypeTestCases.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
@@ -44,7 +44,7 @@ public class ContentTypeTestCases extends TestCase {
 
     @Override
     protected void setUp() throws Exception {
-        JAXBContext jc = JAXBContextFactory.createContext(new Class[] {Root.class, RootImageStar.class, RootImageJpeg.class, RootSource.class}, null);
+        JAXBContext jc = JAXBContextFactory.createContext(new Class<?>[] {Root.class, RootImageStar.class, RootImageJpeg.class, RootSource.class}, null);
         marshaller = jc.createMarshaller();
         attachmentMarshaller = new TestAttachmentMarshaller();
         marshaller.setAttachmentMarshaller(attachmentMarshaller);
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/beanvalidation/BeanValidationBindingsTestCase.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/beanvalidation/BeanValidationBindingsTestCase.java
index 93785d7..404b1fe 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/beanvalidation/BeanValidationBindingsTestCase.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/beanvalidation/BeanValidationBindingsTestCase.java
@@ -416,7 +416,7 @@ private List<File> getPath(String property) {
     private Class<?>[] loadCompiledClasses(String... loadList) throws Throwable {
         ClassLoader cl = new URLClassLoader(new URL[] {new File(TARGET_PATH).toURI().toURL()},
                 Thread.currentThread().getContextClassLoader());
-        Class<?>[] loadedClasses = new Class[loadList.length];
+        Class<?>[] loadedClasses = new Class<?>[loadList.length];
         for (int i = 0; i < loadedClasses.length; i++)
             loadedClasses[i] = cl.loadClass(loadList[i]);
         return loadedClasses;
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/beanvalidation/BeanValidationRuntimeTestCase.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/beanvalidation/BeanValidationRuntimeTestCase.java
index 4e149dc..3fa81a7 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/beanvalidation/BeanValidationRuntimeTestCase.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/beanvalidation/BeanValidationRuntimeTestCase.java
@@ -61,7 +61,7 @@ public class BeanValidationRuntimeTestCase extends junit.framework.TestCase {
     private static final String JAVAX_PATTERN_MESSAGE = "{jakarta.validation.constraints.Pattern.message}";
     private static final String JAVAX_FUTURE_MESSAGE = "{jakarta.validation.constraints.Future.message}";
     private static final String JAVAX_DIGITS_MESSAGE = "{jakarta.validation.constraints.Digits.message}";
-    private static final Class[] EMPLOYEE = new Class[]{Employee.class};
+    private static final Class<?>[] EMPLOYEE = new Class<?>[]{Employee.class};
     private static final boolean DEBUG = false;
 
     private static File FILE_VALID;
@@ -203,13 +203,13 @@ private void checkValidationMessages(Set<ConstraintViolationWrapper<Object>> con
 
     private void toggleDriversGroupOnOff() throws PropertyException {
         if (toggle ^= true) {
-            marshallerValidOn.setProperty(MarshallerProperties.BEAN_VALIDATION_GROUPS, new Class[]{Default.class,
+            marshallerValidOn.setProperty(MarshallerProperties.BEAN_VALIDATION_GROUPS, new Class<?>[]{Default.class,
                     Drivers.class});
-            unmarshallerValidOn.setProperty(MarshallerProperties.BEAN_VALIDATION_GROUPS, new Class[] { Default.class,
+            unmarshallerValidOn.setProperty(MarshallerProperties.BEAN_VALIDATION_GROUPS, new Class<?>[] { Default.class,
                    Drivers.class });
         } else {
-            marshallerValidOn.setProperty(MarshallerProperties.BEAN_VALIDATION_GROUPS, new Class[0]);
-            unmarshallerValidOn.setProperty(MarshallerProperties.BEAN_VALIDATION_GROUPS, new Class[0]);
+            marshallerValidOn.setProperty(MarshallerProperties.BEAN_VALIDATION_GROUPS, new Class<?>[0]);
+            unmarshallerValidOn.setProperty(MarshallerProperties.BEAN_VALIDATION_GROUPS, new Class<?>[0]);
         }
     }
 
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/beanvalidation/BeanValidationSpecialtiesTestCase.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/beanvalidation/BeanValidationSpecialtiesTestCase.java
index 7d51625..08c4051 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/beanvalidation/BeanValidationSpecialtiesTestCase.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/beanvalidation/BeanValidationSpecialtiesTestCase.java
@@ -79,7 +79,7 @@ public void testGenerator() throws Exception {
 
             Map<String, Object> props = new HashMap<>();
             props.put(JAXBContextProperties.BEAN_VALIDATION_FACETS, true);
-            jakarta.xml.bind.JAXBContext jaxbContext = JAXBContextFactory.createContext(new Class[] {Employee.class}, props);
+            jakarta.xml.bind.JAXBContext jaxbContext = JAXBContextFactory.createContext(new Class<?>[] {Employee.class}, props);
 
             String generatorSchemaWithFacetsPath = Thread.currentThread().getContextClassLoader().getResource(GENERATOR_SCHEMA_WITH_FACETS).getPath();
             GENERATOR_SCHEMA = generatorSchemaWithFacetsPath.substring(0, generatorSchemaWithFacetsPath.lastIndexOf('/') + 1) + GENERATOR_SCHEMA_SUFFIX;
@@ -105,7 +105,7 @@ public void testGenerator() throws Exception {
      */
     public void testCustomAnnotations() throws Exception {
         JAXBMarshaller marshaller = (JAXBMarshaller) JAXBContextFactory.createContext(new
-                Class[]{CustomAnnotatedEmployee.class}, null).createMarshaller();
+                Class<?>[]{CustomAnnotatedEmployee.class}, null).createMarshaller();
         CustomAnnotatedEmployee employee = new CustomAnnotatedEmployee().withId(0xCAFEBABE);
 
         try {
@@ -130,7 +130,7 @@ public void testCustomAnnotations() throws Exception {
      */
     public void testMethodAnnotations() throws Exception {
         JAXBMarshaller marshaller = (JAXBMarshaller) JAXBContextFactory.createContext(new
-                Class[]{MethodAnnotatedEmployee.class}, null).createMarshaller();
+                Class<?>[]{MethodAnnotatedEmployee.class}, null).createMarshaller();
         MethodAnnotatedEmployee employee = new MethodAnnotatedEmployee().withId(null);
 
         try {
@@ -154,7 +154,7 @@ public void testMethodAnnotations() throws Exception {
      */
     public void testInheritedAnnotations() throws Exception {
         JAXBMarshaller marshaller = (JAXBMarshaller) JAXBContextFactory.createContext(new
-                Class[]{InheritanceAnnotatedEmployee.class}, null).createMarshaller();
+                Class<?>[]{InheritanceAnnotatedEmployee.class}, null).createMarshaller();
 
         InheritanceAnnotatedEmployee employee = (InheritanceAnnotatedEmployee) new InheritanceAnnotatedEmployee()
                 .withId(null);
@@ -180,7 +180,7 @@ public void testInheritedAnnotations() throws Exception {
      * methods but have some on constructors.
      */
     public void testConstructorAnnotations() throws Exception {
-        JAXBContext context = (JAXBContext)JAXBContextFactory.createContext(new Class[]{ConstructorAnnotatedEmployee.class}, null);
+        JAXBContext context = (JAXBContext)JAXBContextFactory.createContext(new Class<?>[]{ConstructorAnnotatedEmployee.class}, null);
         JAXBMarshaller marshaller = context.createMarshaller();
 
         ConstructorAnnotatedEmployee employee = new ConstructorAnnotatedEmployee(null);
@@ -211,7 +211,7 @@ public void testConstructorAnnotations() throws Exception {
      */
     public void testNoOptimisationOption() throws Exception {
         JAXBMarshaller marshaller = (JAXBMarshaller) JAXBContextFactory.createContext(
-                new Class[]{ NonConstrainedClass.class },
+                new Class<?>[]{ NonConstrainedClass.class },
                 new HashMap<String, Object>(){{
                     put(JAXBContextProperties.BEAN_VALIDATION_NO_OPTIMISATION, true);
                     put(JAXBContextProperties.BEAN_VALIDATION_FACTORY, new CustomValidatorFactory());
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/beanvalidation/ValidationXMLTestCase.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/beanvalidation/ValidationXMLTestCase.java
index 060fcee..b2e7f26 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/beanvalidation/ValidationXMLTestCase.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/beanvalidation/ValidationXMLTestCase.java
@@ -105,7 +105,7 @@ public void testEndlessLoopInvocations() throws Exception {
      */
     public void testExternalConstraints() throws Exception {
         JAXBMarshaller marshaller = (JAXBMarshaller) JAXBContextFactory.createContext(new
-                Class[]{ExternallyConstrainedEmployee.class, ExternallyConstrainedEmployee2.class},
+                Class<?>[]{ExternallyConstrainedEmployee.class, ExternallyConstrainedEmployee2.class},
                 null).createMarshaller();
         ExternallyConstrainedEmployee employee = new ExternallyConstrainedEmployee().withId(null).withAge(15);
         ExternallyConstrainedEmployee2 employee2 = new ExternallyConstrainedEmployee2().withId(null).withAge(15);
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/binder/adapter/BinderWithAdapterTestCases.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/binder/adapter/BinderWithAdapterTestCases.java
index 119c908..2b63bdf 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/binder/adapter/BinderWithAdapterTestCases.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/binder/adapter/BinderWithAdapterTestCases.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
@@ -47,7 +47,7 @@ public class BinderWithAdapterTestCases  extends TestCase {
     public BinderWithAdapterTestCases(String name) throws Exception {
         super(name);
         try {
-            binder = JAXBContextFactory.createContext(new Class[] { Element.class }, null).createBinder();
+            binder = JAXBContextFactory.createContext(new Class<?>[] { Element.class }, null).createBinder();
         } catch (JAXBException x) {
             fail("Binder creation failed: " + x.getMessage());
         }
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/binder/hashcode/BinderWithHashCodeTestCases.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/binder/hashcode/BinderWithHashCodeTestCases.java
index a4bd6f6..d1f2060 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/binder/hashcode/BinderWithHashCodeTestCases.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/binder/hashcode/BinderWithHashCodeTestCases.java
@@ -42,7 +42,7 @@ public void testAbsentNode() throws Exception {
         String controlSource = "org/eclipse/persistence/testing/jaxb/binder/nullpolicy/absentnode.xml";
         Document controlDocument = parser.parse(Thread.currentThread().getContextClassLoader().getResource(controlSource));
 
-        JAXBContext ctx = JAXBContextFactory.createContext(new Class[]{Employee.class}, null);
+        JAXBContext ctx = JAXBContextFactory.createContext(new Class<?>[]{Employee.class}, null);
 
         Binder<Node> binder = ctx.createBinder();
 
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/binder/jaxbelement/BinderWithJAXBElementTestCases.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/binder/jaxbelement/BinderWithJAXBElementTestCases.java
index 1ff5a5e..b51a633 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/binder/jaxbelement/BinderWithJAXBElementTestCases.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/binder/jaxbelement/BinderWithJAXBElementTestCases.java
@@ -43,7 +43,7 @@ public void testAbsentNode() throws Exception {
         String controlSource = "org/eclipse/persistence/testing/jaxb/binder/jaxbelement/employee.xml";
         Document controlDocument = parser.parse(Thread.currentThread().getContextClassLoader().getResource(controlSource));
 
-        JAXBContext ctx = JAXBContextFactory.createContext(new Class[]{Employee.class}, null);
+        JAXBContext ctx = JAXBContextFactory.createContext(new Class<?>[]{Employee.class}, null);
 
         Binder<Node> binder = ctx.createBinder();
 
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/binder/nscollison/NamespaceCollisionTestCases.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/binder/nscollison/NamespaceCollisionTestCases.java
index 95e2f55..735e062 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/binder/nscollison/NamespaceCollisionTestCases.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/binder/nscollison/NamespaceCollisionTestCases.java
@@ -43,7 +43,7 @@ public void testNamespaceCollision() throws Exception {
         String controlSource = "org/eclipse/persistence/testing/jaxb/binder/nscollision/employee.xml";
         Document controlDocument = parser.parse(Thread.currentThread().getContextClassLoader().getResource(controlSource));
 
-        JAXBContext ctx = JAXBContextFactory.createContext(new Class[]{Employee.class}, null);
+        JAXBContext ctx = JAXBContextFactory.createContext(new Class<?>[]{Employee.class}, null);
 
         Binder<Node> binder = ctx.createBinder();
 
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/binder/nullpolicy/BinderWithNullPolicyCompositeTestCases.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/binder/nullpolicy/BinderWithNullPolicyCompositeTestCases.java
index 135e00b..106241c 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/binder/nullpolicy/BinderWithNullPolicyCompositeTestCases.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/binder/nullpolicy/BinderWithNullPolicyCompositeTestCases.java
@@ -44,7 +44,7 @@ public void testEmptyNode() throws Exception {
         String controlSource = "org/eclipse/persistence/testing/jaxb/binder/nullpolicy/emptynodecomposite.xml";
         Document controlDocument = parser.parse(Thread.currentThread().getContextClassLoader().getResource(controlSource));
 
-        JAXBContext ctx = JAXBContextFactory.createContext(new Class[]{EmployeeCompositeA.class}, null);
+        JAXBContext ctx = JAXBContextFactory.createContext(new Class<?>[]{EmployeeCompositeA.class}, null);
 
         Binder<Node> binder = ctx.createBinder();
 
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/binder/nullpolicy/BinderWithNullPolicyTestCases.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/binder/nullpolicy/BinderWithNullPolicyTestCases.java
index 258ab19..3395cd6 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/binder/nullpolicy/BinderWithNullPolicyTestCases.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/binder/nullpolicy/BinderWithNullPolicyTestCases.java
@@ -43,7 +43,7 @@ public void testAbsentNode() throws Exception {
         String controlSource = "org/eclipse/persistence/testing/jaxb/binder/nullpolicy/absentnode.xml";
         Document controlDocument = parser.parse(Thread.currentThread().getContextClassLoader().getResource(controlSource));
 
-        JAXBContext ctx = JAXBContextFactory.createContext(new Class[]{EmployeeA.class}, null);
+        JAXBContext ctx = JAXBContextFactory.createContext(new Class<?>[]{EmployeeA.class}, null);
 
         Binder<Node> binder = ctx.createBinder();
 
@@ -63,7 +63,7 @@ public void testXsiNilNullMarshal() throws Exception {
         String controlSource = "org/eclipse/persistence/testing/jaxb/binder/nullpolicy/xsinil.xml";
         Document controlDocument = parser.parse(Thread.currentThread().getContextClassLoader().getResource(controlSource));
 
-        JAXBContext ctx = JAXBContextFactory.createContext(new Class[]{EmployeeB.class}, null);
+        JAXBContext ctx = JAXBContextFactory.createContext(new Class<?>[]{EmployeeB.class}, null);
 
         Binder<Node> binder = ctx.createBinder();
 
@@ -83,7 +83,7 @@ public void testXsiNilUnmarshalMarshalValue() throws Exception {
         String controlSource = "org/eclipse/persistence/testing/jaxb/binder/nullpolicy/nilwithvalue.xml";
         Document controlDocument = parser.parse(Thread.currentThread().getContextClassLoader().getResource(controlSource));
 
-        JAXBContext ctx = JAXBContextFactory.createContext(new Class[]{EmployeeB.class}, null);
+        JAXBContext ctx = JAXBContextFactory.createContext(new Class<?>[]{EmployeeB.class}, null);
 
         Binder<Node> binder = ctx.createBinder();
 
@@ -103,7 +103,7 @@ public void testEmptyNode() throws Exception {
         String controlSource = "org/eclipse/persistence/testing/jaxb/binder/nullpolicy/emptynode.xml";
         Document controlDocument = parser.parse(Thread.currentThread().getContextClassLoader().getResource(controlSource));
 
-        JAXBContext ctx = JAXBContextFactory.createContext(new Class[]{EmployeeC.class}, null);
+        JAXBContext ctx = JAXBContextFactory.createContext(new Class<?>[]{EmployeeC.class}, null);
 
         Binder<Node> binder = ctx.createBinder();
 
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/binder/xmlanyelement/XMLBinderTestCases.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/binder/xmlanyelement/XMLBinderTestCases.java
index 253f1dc..e8855a6 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/binder/xmlanyelement/XMLBinderTestCases.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/binder/xmlanyelement/XMLBinderTestCases.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,7 @@ public XMLBinderTestCases(String name) throws Exception {
         super(name);
         setControlDocument(XML_RESOURCE);
         setControlJSON(JSON_RESOURCE);
-        setClasses(new Class[]{Input.class});
+        setClasses(new Class<?>[]{Input.class});
     }
 
     public void testXMLBinder() throws Exception{
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/casesensitivity/JAXBCaseInsensitivityTestCase.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/casesensitivity/JAXBCaseInsensitivityTestCase.java
index 9faa4ad..b680de0 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/casesensitivity/JAXBCaseInsensitivityTestCase.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/casesensitivity/JAXBCaseInsensitivityTestCase.java
@@ -40,9 +40,9 @@ public class JAXBCaseInsensitivityTestCase extends junit.framework.TestCase {
 
     private static final URL CUSTOMER_FILE_URL = Thread.currentThread().getContextClassLoader().getResource("org/eclipse/persistence/testing/jaxb/casesensitivity/customer.xml");
     @SuppressWarnings({"unchecked"})
-    private static final Class<Customer>[] CAMEL_CASE_CUSTOMER = (Class<Customer>[]) new Class[]{CustomerImpl.class};
+    private static final Class<Customer>[] CAMEL_CASE_CUSTOMER = (Class<Customer>[]) new Class<?>[]{CustomerImpl.class};
     @SuppressWarnings({"unchecked"})
-    private static final Class<Customer>[] UPPER_CASE_CUSTOMER = (Class<Customer>[]) new Class[]{org.eclipse.persistence.testing.jaxb.casesensitivity.otherCase.CustomerImpl.class};
+    private static final Class<Customer>[] UPPER_CASE_CUSTOMER = (Class<Customer>[]) new Class<?>[]{org.eclipse.persistence.testing.jaxb.casesensitivity.otherCase.CustomerImpl.class};
     private static final boolean DEBUG = false;
 
     private CustomerImpl baseCustomer;
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 fcea256..2421f6e 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
@@ -34,7 +34,7 @@ public DifferentClassLoaderTestCases(String name) throws Exception {
         setControlDocument(XML_RESOURCE);
         setControlJSON(JSON_RESOURCE);
 
-        Class[] classes = new Class[2];
+        Class<?>[] classes = new Class<?>[2];
 
         URL[] urls = new URL[1];
         urls[0] = Thread.currentThread().getContextClassLoader().getResource("org/eclipse/persistence/testing/jaxb/classloader/test.jar");
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/classloader/InnerClassTestCases.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/classloader/InnerClassTestCases.java
index 5be5694..ab7aac6 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/classloader/InnerClassTestCases.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/classloader/InnerClassTestCases.java
@@ -26,7 +26,7 @@
 public class InnerClassTestCases extends TestCase {
 
     public void testCreateContext() throws Exception {
-        Class[] classes = new Class[1];
+        Class<?>[] classes = new Class<?>[1];
 
         URL[] urls = new URL[1];
         urls[0] = Thread.currentThread().getContextClassLoader().getResource("org/eclipse/persistence/testing/jaxb/classloader/innerClass.jar");
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/classloader/XmlElementsEnumTestCases.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/classloader/XmlElementsEnumTestCases.java
index f0bfc7a..f4158fd 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/classloader/XmlElementsEnumTestCases.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/classloader/XmlElementsEnumTestCases.java
@@ -26,7 +26,7 @@
 public class XmlElementsEnumTestCases extends TestCase {
 
     public void testCreateContext() throws Exception {
-        Class[] classes = new Class[1];
+        Class<?>[] classes = new Class<?>[1];
 
         URL[] urls = new URL[1];
         urls[0] = Thread.currentThread().getContextClassLoader().getResource("org/eclipse/persistence/testing/jaxb/classloader/enum.jar");
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/collections/CollectionHolderELTestCases.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/collections/CollectionHolderELTestCases.java
index fe291d1..ede6065 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/collections/CollectionHolderELTestCases.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/collections/CollectionHolderELTestCases.java
@@ -30,7 +30,7 @@ public CollectionHolderELTestCases(String name) throws Exception {
         super(name);
         setControlDocument(XML_RESOURCE);
         setControlJSON(JSON_RESOURCE);
-        Class[] classes = new Class[1];
+        Class<?>[] classes = new Class<?>[1];
         classes[0] = CollectionHolder.class;
         setClasses(classes);
         jaxbMarshaller.setProperty(MarshallerProperties.JSON_ATTRIBUTE_PREFIX, "@");
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/collections/CollectionHolderInitializedELTestCases.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/collections/CollectionHolderInitializedELTestCases.java
index 04cdcc3..249a5ff 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/collections/CollectionHolderInitializedELTestCases.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/collections/CollectionHolderInitializedELTestCases.java
@@ -27,7 +27,7 @@ public CollectionHolderInitializedELTestCases(String name) throws Exception {
         super(name);
         setControlDocument(XML_RESOURCE);
         setControlJSON(JSON_RESOURCE);
-        Class[] classes = new Class[1];
+        Class<?>[] classes = new Class<?>[1];
         classes[0] = CollectionHolderInitialized.class;
         setClasses(classes);
         jaxbMarshaller.setProperty(MarshallerProperties.JSON_ATTRIBUTE_PREFIX, "@");
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/collections/CollectionHolderInitializedTestCases.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/collections/CollectionHolderInitializedTestCases.java
index 11e4d02..ecd9c6f 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/collections/CollectionHolderInitializedTestCases.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/collections/CollectionHolderInitializedTestCases.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
@@ -27,7 +27,7 @@ public CollectionHolderInitializedTestCases(String name) throws Exception {
         super(name);
         setControlDocument(XML_RESOURCE);
         setControlJSON(JSON_RESOURCE);
-        Class[] classes = new Class[1];
+        Class<?>[] classes = new Class<?>[1];
         classes[0] = CollectionHolderInitialized.class;
         setClasses(classes);
         jaxbMarshaller.setProperty(MarshallerProperties.JSON_ATTRIBUTE_PREFIX, "@");
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/collections/CollectionHolderInitializedWithNullsTestCases.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/collections/CollectionHolderInitializedWithNullsTestCases.java
index 49b7728..cc8d737 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/collections/CollectionHolderInitializedWithNullsTestCases.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/collections/CollectionHolderInitializedWithNullsTestCases.java
@@ -32,7 +32,7 @@ public CollectionHolderInitializedWithNullsTestCases(String name) throws Excepti
         super(name);
         setControlDocument(XML_RESOURCE);
         setControlJSON(JSON_RESOURCE);
-        Class[] classes = new Class[1];
+        Class<?>[] classes = new Class<?>[1];
         classes[0] = CollectionHolderInitialized.class;
         setClasses(classes);
         jaxbMarshaller.setProperty(MarshallerProperties.JSON_ATTRIBUTE_PREFIX, "@");
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/collections/CollectionHolderNillableTestCases.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/collections/CollectionHolderNillableTestCases.java
index 425f1b8..64c91a4 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/collections/CollectionHolderNillableTestCases.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/collections/CollectionHolderNillableTestCases.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 @@ public CollectionHolderNillableTestCases(String name) throws Exception {
         super(name);
         setControlDocument(XML_RESOURCE);
         setControlJSON(JSON_RESOURCE);
-        Class[] classes = new Class[1];
+        Class<?>[] classes = new Class<?>[1];
         classes[0] = CollectionHolderNillable.class;
         setClasses(classes);
     }
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/collections/CollectionHolderNillableWithNullsTestCases.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/collections/CollectionHolderNillableWithNullsTestCases.java
index 7c83e99..7d1bd03 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/collections/CollectionHolderNillableWithNullsTestCases.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/collections/CollectionHolderNillableWithNullsTestCases.java
@@ -32,7 +32,7 @@ public CollectionHolderNillableWithNullsTestCases(String name) throws Exception
         super(name);
         setControlDocument(XML_RESOURCE);
         setControlJSON(JSON_RESOURCE);
-        Class[] classes = new Class[1];
+        Class<?>[] classes = new Class<?>[1];
         classes[0] = CollectionHolderNillable.class;
         setClasses(classes);
         jaxbMarshaller.setProperty(MarshallerProperties.JSON_ATTRIBUTE_PREFIX, "@");
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/collections/CollectionHolderPopulatedSingleItemReducedTestCases.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/collections/CollectionHolderPopulatedSingleItemReducedTestCases.java
index 0adda57..d107220 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/collections/CollectionHolderPopulatedSingleItemReducedTestCases.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/collections/CollectionHolderPopulatedSingleItemReducedTestCases.java
@@ -32,7 +32,7 @@ public CollectionHolderPopulatedSingleItemReducedTestCases(String name) throws E
         super(name);
         setControlDocument(XML_RESOURCE);
         setControlJSON(JSON_RESOURCE);
-        Class[] classes = new Class[1];
+        Class<?>[] classes = new Class<?>[1];
         classes[0] = CollectionHolderInitialized.class;
         setClasses(classes);
         jaxbMarshaller.setProperty(MarshallerProperties.JSON_ATTRIBUTE_PREFIX, "@");
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/collections/CollectionHolderPopulatedSingleItemTestCases.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/collections/CollectionHolderPopulatedSingleItemTestCases.java
index 07c4ad7..73e6d58 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/collections/CollectionHolderPopulatedSingleItemTestCases.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/collections/CollectionHolderPopulatedSingleItemTestCases.java
@@ -32,7 +32,7 @@ public CollectionHolderPopulatedSingleItemTestCases(String name) throws Exceptio
         super(name);
         setControlDocument(XML_RESOURCE);
         setControlJSON(JSON_RESOURCE);
-        Class[] classes = new Class[1];
+        Class<?>[] classes = new Class<?>[1];
         classes[0] = CollectionHolderInitialized.class;
         setClasses(classes);
         jaxbMarshaller.setProperty(MarshallerProperties.JSON_ATTRIBUTE_PREFIX, "@");
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/collections/CollectionHolderPopulatedTestCases.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/collections/CollectionHolderPopulatedTestCases.java
index 847aca6..52ad4b4 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/collections/CollectionHolderPopulatedTestCases.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/collections/CollectionHolderPopulatedTestCases.java
@@ -32,7 +32,7 @@ public CollectionHolderPopulatedTestCases(String name) throws Exception {
         super(name);
         setControlDocument(XML_RESOURCE);
         setControlJSON(JSON_RESOURCE);
-        Class[] classes = new Class[1];
+        Class<?>[] classes = new Class<?>[1];
         classes[0] = CollectionHolderInitialized.class;
         setClasses(classes);
         jaxbMarshaller.setProperty(MarshallerProperties.JSON_ATTRIBUTE_PREFIX, "@");
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/collections/CollectionHolderTestCases.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/collections/CollectionHolderTestCases.java
index 374f9d5..91e6565 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/collections/CollectionHolderTestCases.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/collections/CollectionHolderTestCases.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 @@ public CollectionHolderTestCases(String name) throws Exception {
         super(name);
         setControlDocument(XML_RESOURCE);
         setControlJSON(JSON_RESOURCE);
-        Class[] classes = new Class[1];
+        Class<?>[] classes = new Class<?>[1];
         classes[0] = CollectionHolder.class;
         setClasses(classes);
     }
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/collections/CollectionHolderWrappersInitializedELTestCases.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/collections/CollectionHolderWrappersInitializedELTestCases.java
index a5f9846..b956c8a 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/collections/CollectionHolderWrappersInitializedELTestCases.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/collections/CollectionHolderWrappersInitializedELTestCases.java
@@ -27,7 +27,7 @@ public CollectionHolderWrappersInitializedELTestCases(String name) throws Except
         setControlDocument(XML_RESOURCE);
         setControlJSON(JSON_RESOURCE);
 
-        Class[] classes = new Class[1];
+        Class<?>[] classes = new Class<?>[1];
         classes[0] = CollectionHolderWrappersInitialized.class;
         setClasses(classes);
         jaxbMarshaller.setProperty(MarshallerProperties.JSON_MARSHAL_EMPTY_COLLECTIONS, Boolean.TRUE);
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/collections/CollectionHolderWrappersInitializedTestCases.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/collections/CollectionHolderWrappersInitializedTestCases.java
index 44abc47..0a8060b 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/collections/CollectionHolderWrappersInitializedTestCases.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/collections/CollectionHolderWrappersInitializedTestCases.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,7 @@ public CollectionHolderWrappersInitializedTestCases(String name) throws Exceptio
         setControlDocument(XML_RESOURCE);
         setControlJSON(JSON_RESOURCE);
 
-        Class[] classes = new Class[1];
+        Class<?>[] classes = new Class<?>[1];
         classes[0] = CollectionHolderWrappersInitialized.class;
         setClasses(classes);
         jaxbMarshaller.setProperty(MarshallerProperties.JSON_MARSHAL_EMPTY_COLLECTIONS, Boolean.FALSE);
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/collections/CollectionHolderWrappersNillableInitializedELTestCases.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/collections/CollectionHolderWrappersNillableInitializedELTestCases.java
index 19dad69..638f319 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/collections/CollectionHolderWrappersNillableInitializedELTestCases.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/collections/CollectionHolderWrappersNillableInitializedELTestCases.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,7 @@ public CollectionHolderWrappersNillableInitializedELTestCases(String name) throw
         setControlDocument(XML_RESOURCE);
         setControlJSON(JSON_RESOURCE);
 
-        Class[] classes = new Class[1];
+        Class<?>[] classes = new Class<?>[1];
         classes[0] = CollectionHolderWrappersNillableInitialized.class;
         setClasses(classes);
         jaxbMarshaller.setProperty(MarshallerProperties.JSON_MARSHAL_EMPTY_COLLECTIONS, Boolean.TRUE);
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/collections/CollectionHolderWrappersNillableInitializedTestCases.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/collections/CollectionHolderWrappersNillableInitializedTestCases.java
index 1eeca9c..724920c 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/collections/CollectionHolderWrappersNillableInitializedTestCases.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/collections/CollectionHolderWrappersNillableInitializedTestCases.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,7 @@ public CollectionHolderWrappersNillableInitializedTestCases(String name) throws
         setControlDocument(XML_RESOURCE);
         setControlJSON(JSON_RESOURCE);
 
-        Class[] classes = new Class[1];
+        Class<?>[] classes = new Class<?>[1];
         classes[0] = CollectionHolderWrappersNillableInitialized.class;
         setClasses(classes);
         jaxbMarshaller.setProperty(MarshallerProperties.JSON_MARSHAL_EMPTY_COLLECTIONS, Boolean.FALSE);
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/collections/CollectionHolderWrappersNillableTestCases.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/collections/CollectionHolderWrappersNillableTestCases.java
index 2fb4cb3..34d9a22 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/collections/CollectionHolderWrappersNillableTestCases.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/collections/CollectionHolderWrappersNillableTestCases.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,7 @@ public CollectionHolderWrappersNillableTestCases(String name) throws Exception {
         setControlDocument(XML_RESOURCE);
         setControlJSON(JSON_RESOURCE);
 
-        Class[] classes = new Class[1];
+        Class<?>[] classes = new Class<?>[1];
         classes[0] = CollectionHolderWrappersNillable.class;
         setClasses(classes);
     }
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/collections/CollectionHolderWrappersOverrideTestCases.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/collections/CollectionHolderWrappersOverrideTestCases.java
index 1af5413..3b7c8a2 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/collections/CollectionHolderWrappersOverrideTestCases.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/collections/CollectionHolderWrappersOverrideTestCases.java
@@ -39,7 +39,7 @@ public CollectionHolderWrappersOverrideTestCases(String name) throws Exception {
         setControlDocument(XML_RESOURCE);
         setControlJSON(JSON_RESOURCE);
 
-        Class[] classes = new Class[1];
+        Class<?>[] classes = new Class<?>[1];
         classes[0] = CollectionHolderWrappersInitialized.class;
         setClasses(classes);
         jaxbMarshaller.setProperty(MarshallerProperties.JSON_MARSHAL_EMPTY_COLLECTIONS, Boolean.FALSE);
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/collections/CollectionHolderWrappersPopulatedTestCases.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/collections/CollectionHolderWrappersPopulatedTestCases.java
index 8edbebb..124dc3f 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/collections/CollectionHolderWrappersPopulatedTestCases.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/collections/CollectionHolderWrappersPopulatedTestCases.java
@@ -37,7 +37,7 @@ public CollectionHolderWrappersPopulatedTestCases(String name) throws Exception
         setControlDocument(XML_RESOURCE);
         setControlJSON(JSON_RESOURCE);
 
-        Class[] classes = new Class[1];
+        Class<?>[] classes = new Class<?>[1];
         classes[0] = CollectionHolderWrappers.class;
         setClasses(classes);
         initXsiType();
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/collections/CollectionHolderWrappersTestCases.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/collections/CollectionHolderWrappersTestCases.java
index 8f2452d..5785a24 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/collections/CollectionHolderWrappersTestCases.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/collections/CollectionHolderWrappersTestCases.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,7 @@ public CollectionHolderWrappersTestCases(String name) throws Exception {
         setControlDocument(XML_RESOURCE);
         setControlJSON(JSON_RESOURCE);
 
-        Class[] classes = new Class[1];
+        Class<?>[] classes = new Class<?>[1];
         classes[0] = CollectionHolderWrappers.class;
 
         setClasses(classes);
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/collections/DequeHolderTestCases.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/collections/DequeHolderTestCases.java
index 8c8d238..78027be 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/collections/DequeHolderTestCases.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/collections/DequeHolderTestCases.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
@@ -34,7 +34,7 @@ public DequeHolderTestCases(String name) throws Exception {
         super(name);
         setControlDocument(XML_RESOURCE);
         setControlJSON(JSON_RESOURCE);
-        Class[] classes = new Class[1];
+        Class<?>[] classes = new Class<?>[1];
         classes[0] = DequeHolder.class;
         setClasses(classes);
         jaxbMarshaller.setProperty(MarshallerProperties.JSON_ATTRIBUTE_PREFIX, "@");
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/collections/NavigableSetHolderTestCases.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/collections/NavigableSetHolderTestCases.java
index 3a674af..8054fc7 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/collections/NavigableSetHolderTestCases.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/collections/NavigableSetHolderTestCases.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
@@ -37,7 +37,7 @@ public NavigableSetHolderTestCases(String name) throws Exception {
         super(name);
         setControlDocument(XML_RESOURCE);
         setControlJSON(JSON_RESOURCE);
-        Class[] classes = new Class[1];
+        Class<?>[] classes = new Class<?>[1];
         classes[0] = NavigableSetHolder.class;
         setClasses(classes);
         jaxbMarshaller.setProperty(MarshallerProperties.JSON_ATTRIBUTE_PREFIX, "@");
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/collections/QueueHolderTestCases.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/collections/QueueHolderTestCases.java
index 373027d..02f4243 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/collections/QueueHolderTestCases.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/collections/QueueHolderTestCases.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
@@ -36,7 +36,7 @@ public QueueHolderTestCases(String name) throws Exception {
         super(name);
         setControlDocument(XML_RESOURCE);
         setControlJSON(JSON_RESOURCE);
-        Class[] classes = new Class[1];
+        Class<?>[] classes = new Class<?>[1];
         classes[0] = QueueHolder.class;
         setClasses(classes);
         jaxbMarshaller.setProperty(MarshallerProperties.JSON_ATTRIBUTE_PREFIX, "@");
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/collections/SetHolderTestCases.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/collections/SetHolderTestCases.java
index 9b9f258..d8fcdc4 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/collections/SetHolderTestCases.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/collections/SetHolderTestCases.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
@@ -37,7 +37,7 @@ public SetHolderTestCases(String name) throws Exception {
         super(name);
         setControlDocument(XML_RESOURCE);
         setControlJSON(JSON_RESOURCE);
-        Class[] classes = new Class[1];
+        Class<?>[] classes = new Class<?>[1];
         classes[0] = SetHolder.class;
         setClasses(classes);
         jaxbMarshaller.setProperty(MarshallerProperties.JSON_ATTRIBUTE_PREFIX, "@");
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/collections/SortedSetHolderTestCases.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/collections/SortedSetHolderTestCases.java
index cbe4f57..e61bbc0 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/collections/SortedSetHolderTestCases.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/collections/SortedSetHolderTestCases.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
@@ -38,7 +38,7 @@ public SortedSetHolderTestCases(String name) throws Exception {
         super(name);
         setControlDocument(XML_RESOURCE);
         setControlJSON(JSON_RESOURCE);
-        Class[] classes = new Class[1];
+        Class<?>[] classes = new Class<?>[1];
         classes[0] = SortedSetHolder.class;
         setClasses(classes);
         jaxbMarshaller.setProperty(MarshallerProperties.JSON_ATTRIBUTE_PREFIX, "@");
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/cycle/CycleRecoverableTestCases.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/cycle/CycleRecoverableTestCases.java
index 5318908..af6c082 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/cycle/CycleRecoverableTestCases.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/cycle/CycleRecoverableTestCases.java
@@ -31,7 +31,7 @@ public CycleRecoverableTestCases(String name) throws Exception {
 
         setControlDocument(XML_RESOURCE);
         setControlJSON(JSON_RESOURCE);
-        setClasses(new Class[] { Company.class, EmployeePointer.class });
+        setClasses(new Class<?>[] { Company.class, EmployeePointer.class });
     }
 
     @Override
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/cycle/inverse/InverseTestCases.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/cycle/inverse/InverseTestCases.java
index adf27e7..d5b0174 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/cycle/inverse/InverseTestCases.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/cycle/inverse/InverseTestCases.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
@@ -23,7 +23,7 @@ public class InverseTestCases extends JAXBWithJSONTestCases{
 
     public InverseTestCases(String name) throws Exception {
         super(name);
-        setClasses(new Class[] {Root.class});
+        setClasses(new Class<?>[] {Root.class});
         setControlDocument(XML);
         setControlJSON(JSON);
     }
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/defaultvalue/DefaultValueTestCases.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/defaultvalue/DefaultValueTestCases.java
index 2176e04..601ca76 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/defaultvalue/DefaultValueTestCases.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/defaultvalue/DefaultValueTestCases.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
@@ -29,7 +29,7 @@ public DefaultValueTestCases(String name) throws Exception {
         setWriteControlDocument(XML_WRITE_RESOURCE);
         setControlJSON(JSON_RESOURCE);
         setWriteControlJSON(JSON_WRITE_RESOURCE);
-        Class[] classes = new Class[1];
+        Class<?>[] classes = new Class<?>[1];
         classes[0] = TestObject.class;
         setClasses(classes);
     }
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/defaultvalue/DefaultValueXmlValueEnumTestCases.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/defaultvalue/DefaultValueXmlValueEnumTestCases.java
index 7aaac08..3da41be 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/defaultvalue/DefaultValueXmlValueEnumTestCases.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/defaultvalue/DefaultValueXmlValueEnumTestCases.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
@@ -24,7 +24,7 @@ public DefaultValueXmlValueEnumTestCases(String name) throws Exception {
         super(name);
         setControlDocument(XML_RESOURCE);
         setWriteControlDocument(XML_WRITE_RESOURCE);
-        Class[] classes = new Class[1];
+        Class<?>[] classes = new Class<?>[1];
         classes[0] = TestXmlValueEnumObject.class;
         setClasses(classes);
     }
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/defaultvalue/DefaultValueXmlValueTestCases.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/defaultvalue/DefaultValueXmlValueTestCases.java
index c01ce31..f3aa390 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/defaultvalue/DefaultValueXmlValueTestCases.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/defaultvalue/DefaultValueXmlValueTestCases.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
@@ -24,7 +24,7 @@ public DefaultValueXmlValueTestCases(String name) throws Exception {
         super(name);
         setControlDocument(XML_RESOURCE);
         setWriteControlDocument(XML_WRITE_RESOURCE);
-        Class[] classes = new Class[1];
+        Class<?>[] classes = new Class<?>[1];
         classes[0] = TestXmlValueObject.class;
         setClasses(classes);
     }
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/dynamic/DynamicJAXBContextCreationTestCases.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/dynamic/DynamicJAXBContextCreationTestCases.java
index 9baa3c5..3ec81fb 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/dynamic/DynamicJAXBContextCreationTestCases.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/dynamic/DynamicJAXBContextCreationTestCases.java
@@ -77,7 +77,7 @@ public void testNewInstanceStringLoaderProps() throws JAXBException {
     }
 
     public void testNewInstanceClassesError() throws JAXBException {
-        Class[] classes = new Class[] { this.getClass() };
+        Class<?>[] classes = new Class<?>[] { this.getClass() };
 
         JAXBException caughtException = null;
         try {
@@ -91,7 +91,7 @@ public void testNewInstanceClassesError() throws JAXBException {
     }
 
     public void testNewInstanceClassesPropsError() throws JAXBException {
-        Class[] classes = new Class[] { this.getClass() };
+        Class<?>[] classes = new Class<?>[] { this.getClass() };
 
         JAXBException ex = null;
         try {
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 6fd46a3..bcfdec0 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
@@ -1008,7 +1008,7 @@ public void testDateTimeArray() throws Exception {
         // Tests to ensure that XSD dateTime is always unmarshalled as XMLGregorianCalendar, and never
         // as GregorianCalendar.  This can fail intermittently so is tested in a loop.
 
-        HashSet<Class> elemClasses = new HashSet<Class>();
+        HashSet<Class<?>> elemClasses = new HashSet<Class<?>>();
 
         for (int i = 0; i < 50; i++) {
             InputStream inputStream = ClassLoader.getSystemResourceAsStream(DATETIME_ARRAY);
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/employee/EmployeeNamespaceCancellationTestCases.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/employee/EmployeeNamespaceCancellationTestCases.java
index 46be32a..59636a7 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/employee/EmployeeNamespaceCancellationTestCases.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/employee/EmployeeNamespaceCancellationTestCases.java
@@ -41,7 +41,7 @@ public EmployeeNamespaceCancellationTestCases(String name) throws Exception {
         setControlDocument(XML_RESOURCE);
         setWriteControlDocument(XML_WRITE_RESOURCE);
 
-        Class[] classes = new Class[1];
+        Class<?>[] classes = new Class<?>[1];
         classes[0] = Employee.class;
         setClasses(classes);
     }
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/employee/EmployeeNullInCollectionTestCases.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/employee/EmployeeNullInCollectionTestCases.java
index 44c8add..a2756e6 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/employee/EmployeeNullInCollectionTestCases.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/employee/EmployeeNullInCollectionTestCases.java
@@ -46,7 +46,7 @@ public EmployeeNullInCollectionTestCases(String name) throws Exception {
         setWriteControlDocument(XML_WRITE_RESOURCE);
         setControlJSON(JSON_RESOURCE);
 
-        Class[] classes = new Class[1];
+        Class<?>[] classes = new Class<?>[1];
         classes[0] = Employee_B.class;
         setClasses(classes);
         jaxbUnmarshaller.setProperty(UnmarshallerProperties.JSON_INCLUDE_ROOT, Boolean.TRUE);
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/employee/JAXBEmployeeNSTestCases.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/employee/JAXBEmployeeNSTestCases.java
index 9ddec40..1d2d59d 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/employee/JAXBEmployeeNSTestCases.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/employee/JAXBEmployeeNSTestCases.java
@@ -39,7 +39,7 @@ public JAXBEmployeeNSTestCases(String name) throws Exception {
         super(name);
         setControlDocument(XML_RESOURCE);
         setControlJSON(JSON_RESOURCE);
-        Class[] classes = new Class[1];
+        Class<?>[] classes = new Class<?>[1];
         classes[0] = Employee.class;
         setClasses(classes);
 
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/employee/JAXBEmployeeNoWrapperTestCases.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/employee/JAXBEmployeeNoWrapperTestCases.java
index 2831216..963e4b5 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/employee/JAXBEmployeeNoWrapperTestCases.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/employee/JAXBEmployeeNoWrapperTestCases.java
@@ -40,7 +40,7 @@ public JAXBEmployeeNoWrapperTestCases(String name) throws Exception {
         super(name);
         setControlDocument(XML_RESOURCE);
         setControlJSON(JSON_RESOURCE);
-        Class[] classes = new Class[1];
+        Class<?>[] classes = new Class<?>[1];
         classes[0] = EmployeeNoWrapper.class;
         setClasses(classes);
 
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/employee/JAXBEmployeeTestCases.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/employee/JAXBEmployeeTestCases.java
index f640967..64325d4 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/employee/JAXBEmployeeTestCases.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/employee/JAXBEmployeeTestCases.java
@@ -49,7 +49,7 @@ public JAXBEmployeeTestCases(String name) throws Exception {
         super(name);
         setControlDocument(XML_RESOURCE);
         setControlJSON(JSON_RESOURCE);
-        Class[] classes = new Class[1];
+        Class<?>[] classes = new Class<?>[1];
         classes[0] = Employee.class;
         setClasses(classes);
         initXsiType();
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/emptystring/EmptyStringTestCases.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/emptystring/EmptyStringTestCases.java
index fd470b5..e2475e3 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/emptystring/EmptyStringTestCases.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/emptystring/EmptyStringTestCases.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,7 @@ public EmptyStringTestCases(String name) throws Exception {
 
     @Override
     protected void setUp() throws Exception {
-        Class[] classes = new Class[1];
+        Class<?>[] classes = new Class<?>[1];
         classes[0] = Customer.class;
         jaxbContext = JAXBContextFactory.createContext(classes, null);
     }
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/emptystring/ListsTestCases.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/emptystring/ListsTestCases.java
index e3c255f..ba748e5 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/emptystring/ListsTestCases.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/emptystring/ListsTestCases.java
@@ -32,7 +32,7 @@ public ListsTestCases(String name) throws Exception {
         setControlDocument(XML_RESOURCE);
         setControlJSON(JSON_RESOURCE);
         setWriteControlDocument(XML_RESOURCE_WRITE);
-        Class[] classes = new Class[1];
+        Class<?>[] classes = new Class<?>[1];
         classes[0] = ListsTestObject.class;
         setClasses(classes);
     }
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/eventhandler/AttributeEnumInvalidTypeTestCases.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/eventhandler/AttributeEnumInvalidTypeTestCases.java
index a31b14e..e9da1a6 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/eventhandler/AttributeEnumInvalidTypeTestCases.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/eventhandler/AttributeEnumInvalidTypeTestCases.java
@@ -22,7 +22,7 @@ public class AttributeEnumInvalidTypeTestCases extends JAXBWithJSONTestCases{
     MyEventHandler handler;
     public AttributeEnumInvalidTypeTestCases(String name) throws Exception {
         super(name);
-        setClasses(new Class[] {MyClass.class});
+        setClasses(new Class<?>[] {MyClass.class});
         setControlDocument("org/eclipse/persistence/testing/jaxb/eventhandler/attributeEnumWrongType.xml");
         setControlJSON("org/eclipse/persistence/testing/jaxb/eventhandler/attributeEnumWrongType.json");
         setWriteControlDocument("org/eclipse/persistence/testing/jaxb/eventhandler/valid.xml");
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/eventhandler/AttributeEnumInvalidValueTestCases.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/eventhandler/AttributeEnumInvalidValueTestCases.java
index f7a9e7b..a3cc457 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/eventhandler/AttributeEnumInvalidValueTestCases.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/eventhandler/AttributeEnumInvalidValueTestCases.java
@@ -22,7 +22,7 @@ public class AttributeEnumInvalidValueTestCases extends JAXBWithJSONTestCases{
     MyEventHandler handler;
     public AttributeEnumInvalidValueTestCases(String name) throws Exception {
         super(name);
-        setClasses(new Class[] {MyClass.class});
+        setClasses(new Class<?>[] {MyClass.class});
         setControlDocument("org/eclipse/persistence/testing/jaxb/eventhandler/attributeEnumInvalidValue.xml");
         setControlJSON("org/eclipse/persistence/testing/jaxb/eventhandler/attributeEnumInvalidValue.json");
         setWriteControlDocument("org/eclipse/persistence/testing/jaxb/eventhandler/valid.xml");
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/eventhandler/AttributeInvalidTypeTestCases.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/eventhandler/AttributeInvalidTypeTestCases.java
index 7efac6e..7636ea5 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/eventhandler/AttributeInvalidTypeTestCases.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/eventhandler/AttributeInvalidTypeTestCases.java
@@ -22,7 +22,7 @@ public class AttributeInvalidTypeTestCases extends JAXBWithJSONTestCases{
     MyEventHandler handler;
     public AttributeInvalidTypeTestCases(String name) throws Exception {
         super(name);
-        setClasses(new Class[] {MyClass.class});
+        setClasses(new Class<?>[] {MyClass.class});
         setControlDocument("org/eclipse/persistence/testing/jaxb/eventhandler/attributeWrongType.xml");
         setControlJSON("org/eclipse/persistence/testing/jaxb/eventhandler/attributeWrongType.json");
         setWriteControlDocument("org/eclipse/persistence/testing/jaxb/eventhandler/valid.xml");
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/eventhandler/ElementEnumInvalidTypeTestCases.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/eventhandler/ElementEnumInvalidTypeTestCases.java
index 69d3208..6e7f08a 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/eventhandler/ElementEnumInvalidTypeTestCases.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/eventhandler/ElementEnumInvalidTypeTestCases.java
@@ -22,7 +22,7 @@ public class ElementEnumInvalidTypeTestCases extends JAXBWithJSONTestCases{
     MyEventHandler handler;
     public ElementEnumInvalidTypeTestCases(String name) throws Exception {
         super(name);
-        setClasses(new Class[] {MyClass.class});
+        setClasses(new Class<?>[] {MyClass.class});
         setControlDocument("org/eclipse/persistence/testing/jaxb/eventhandler/elementEnumWrongType.xml");
         setControlJSON("org/eclipse/persistence/testing/jaxb/eventhandler/elementEnumWrongType.json");
         setWriteControlDocument("org/eclipse/persistence/testing/jaxb/eventhandler/valid.xml");
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/eventhandler/ElementEnumInvalidValueTestCases.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/eventhandler/ElementEnumInvalidValueTestCases.java
index ddd0680..b7c5f6c 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/eventhandler/ElementEnumInvalidValueTestCases.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/eventhandler/ElementEnumInvalidValueTestCases.java
@@ -22,7 +22,7 @@ public class ElementEnumInvalidValueTestCases extends JAXBWithJSONTestCases{
     MyEventHandler handler;
     public ElementEnumInvalidValueTestCases(String name) throws Exception {
         super(name);
-        setClasses(new Class[] {MyClass.class});
+        setClasses(new Class<?>[] {MyClass.class});
         setControlDocument("org/eclipse/persistence/testing/jaxb/eventhandler/elementEnumInvalidValue.xml");
         setControlJSON("org/eclipse/persistence/testing/jaxb/eventhandler/elementEnumInvalidValue.json");
         setWriteControlDocument("org/eclipse/persistence/testing/jaxb/eventhandler/valid.xml");
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/eventhandler/ElementInvalidTypeTestCases.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/eventhandler/ElementInvalidTypeTestCases.java
index 1ccb005..4fe33f5 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/eventhandler/ElementInvalidTypeTestCases.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/eventhandler/ElementInvalidTypeTestCases.java
@@ -22,7 +22,7 @@ public class ElementInvalidTypeTestCases extends JAXBWithJSONTestCases{
     MyEventHandler handler;
     public ElementInvalidTypeTestCases(String name) throws Exception {
         super(name);
-        setClasses(new Class[] {MyClass.class});
+        setClasses(new Class<?>[] {MyClass.class});
         setControlDocument("org/eclipse/persistence/testing/jaxb/eventhandler/elementWrongType.xml");
         setControlJSON("org/eclipse/persistence/testing/jaxb/eventhandler/elementWrongType.json");
         setWriteControlDocument("org/eclipse/persistence/testing/jaxb/eventhandler/valid.xml");
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/eventhandler/ValidDocTestCases.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/eventhandler/ValidDocTestCases.java
index f362d1d..ba9c70e 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/eventhandler/ValidDocTestCases.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/eventhandler/ValidDocTestCases.java
@@ -20,7 +20,7 @@ public class ValidDocTestCases extends JAXBWithJSONTestCases{
     MyEventHandler handler;
     public ValidDocTestCases(String name) throws Exception {
         super(name);
-        setClasses(new Class[] {MyClass.class});
+        setClasses(new Class<?>[] {MyClass.class});
         setControlDocument("org/eclipse/persistence/testing/jaxb/eventhandler/valid.xml");
         setControlJSON("org/eclipse/persistence/testing/jaxb/eventhandler/valid.json");
     }
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 957d8b2..677d8cd 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
@@ -59,7 +59,7 @@ protected void setUp() throws Exception {
 
         JaxbClassLoader classLoader = new JaxbClassLoader(ClassLoaderRoot.class.getClassLoader());
         classLoaderChildClass = classLoader.generateClass(CLASS_NAME, cw.toByteArray());
-        jaxbContext = JAXBContextFactory.createContext(new Class[] {classLoaderChildClass}, null);
+        jaxbContext = JAXBContextFactory.createContext(new Class<?>[] {classLoaderChildClass}, null);
     }
 
     public void testMarshalJSON() throws Exception {
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/events/JAXBElementTestCases.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/events/JAXBElementTestCases.java
index 46e62d8..897af58 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/events/JAXBElementTestCases.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/events/JAXBElementTestCases.java
@@ -47,7 +47,7 @@ public void setUp() throws Exception {
 
         mListener = new MarshalListenerImpl();
 
-        JAXBContext context = JAXBContextFactory.createContext(new Class[] { Employee.class }, null);
+        JAXBContext context = JAXBContextFactory.createContext(new Class<?>[] { Employee.class }, null);
 
         marshaller = context.createMarshaller();
         marshaller.setListener(mListener);
@@ -113,12 +113,12 @@ public void testAfterMarshalMappedJAXBElement() throws Exception {
     // ========================================================================
 
     private class MarshalListenerImpl extends Marshaller.Listener {
-        public List<Class> beforeClasses;
-        public List<Class> afterClasses;
+        public List<Class<?>> beforeClasses;
+        public List<Class<?>> afterClasses;
 
         public MarshalListenerImpl(){
-            beforeClasses = new ArrayList<Class>();
-            afterClasses = new ArrayList<Class>();
+            beforeClasses = new ArrayList<Class<?>>();
+            afterClasses = new ArrayList<Class<?>>();
         }
 
         @Override
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/events/RootWithCompositeCollectionTestCases.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/events/RootWithCompositeCollectionTestCases.java
index 898d190..37047c2 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/events/RootWithCompositeCollectionTestCases.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/events/RootWithCompositeCollectionTestCases.java
@@ -41,7 +41,7 @@ public class RootWithCompositeCollectionTestCases extends JAXBWithJSONTestCases
 
     public RootWithCompositeCollectionTestCases(String name) throws Exception {
         super(name);
-        setClasses(new Class[] {Employee.class, Address.class, PhoneNumber.class});
+        setClasses(new Class<?>[] {Employee.class, Address.class, PhoneNumber.class});
         setControlDocument("org/eclipse/persistence/testing/jaxb/events/composite_collection.xml");
         setControlJSON("org/eclipse/persistence/testing/jaxb/events/composite_collection.json");
 
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/events/RootWithCompositeObjectTestCases.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/events/RootWithCompositeObjectTestCases.java
index 01421ce..90e8f15 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/events/RootWithCompositeObjectTestCases.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/events/RootWithCompositeObjectTestCases.java
@@ -39,7 +39,7 @@ public class RootWithCompositeObjectTestCases extends JAXBWithJSONTestCases {
 
     public RootWithCompositeObjectTestCases(String name) throws Exception {
         super(name);
-        setClasses(new Class[] {Employee.class});
+        setClasses(new Class<?>[] {Employee.class});
         setControlDocument("org/eclipse/persistence/testing/jaxb/events/composite_object.xml");
         setControlJSON("org/eclipse/persistence/testing/jaxb/events/composite_object.json");
 
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/events/sessionevents/SessionEventTestCases.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/events/sessionevents/SessionEventTestCases.java
index 2ff9812..a7b3bfc 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/events/sessionevents/SessionEventTestCases.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/events/sessionevents/SessionEventTestCases.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
@@ -47,7 +47,7 @@ public SessionEventTestCases(String name) throws Exception {
      * Test expects an exception.
      */
     public void testInstantiationPolicyValidationFailure() {
-        Class[] classesToBeBound = new Class[] { Subclass.class, Superclass.class };
+        Class<?>[] classesToBeBound = new Class<?>[] { Subclass.class, Superclass.class };
 
         // ensure instantiation policy validation is enabled during descriptor initialization
         SessionEventListener eventListener = new SessionEventListener();
@@ -66,7 +66,7 @@ public void testInstantiationPolicyValidationFailure() {
      * initialization. Test should pass w/o any exceptions.
      */
     public void testInstantiationPolicyValidationDisabled() {
-        Class[] classesToBeBound = new Class[] { Subclass.class, Superclass.class };
+        Class<?>[] classesToBeBound = new Class<?>[] { Subclass.class, Superclass.class };
 
         // disable instantiation policy validation during descriptor initialization
         SessionEventListener eventListener = new SessionEventListener();
@@ -79,7 +79,7 @@ public void testInstantiationPolicyValidationDisabled() {
         }
     }
 
-    protected JAXBContext setupContext(Class[] classesToBeBound, SessionEventListener sel) throws Exception {
+    protected JAXBContext setupContext(Class<?>[] classesToBeBound, SessionEventListener sel) throws Exception {
         jakarta.xml.bind.JAXBContext jaxbContext = null;
         XMLContext xmlContext = null;
         JaxbClassLoader loader = new JaxbClassLoader(Thread.currentThread().getContextClassLoader());
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 40d855a..807f4e2 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
@@ -107,7 +107,7 @@ public JAXBContext getJAXBContext() {
      * found in the package(s) will be applied by default.
      *
      */
-    public MySchemaOutputResolver generateSchema(Class[] classes, int expectedSchemaCount) {
+    public MySchemaOutputResolver generateSchema(Class<?>[] classes, int expectedSchemaCount) {
         ClassLoader classLoader = Thread.currentThread().getContextClassLoader();
         MySchemaOutputResolver outputResolver = new MySchemaOutputResolver();
         try {
@@ -223,7 +223,7 @@ public MySchemaOutputResolver generateSchemaWithFileName(String contextPath, Str
      * @param contextPath used as key for storing eclipselink-oxm.xml file Source in properties map
      * @param iStream eclipselink-oxm.xml file as a stream
      */
-    private MySchemaOutputResolver generateSchema(Class[] classes, String contextPath, InputStream iStream, int expectedSchemaCount) {
+    private MySchemaOutputResolver generateSchema(Class<?>[] classes, String contextPath, InputStream iStream, int expectedSchemaCount) {
         HashMap<String, Source> metadataSourceMap = new HashMap<String, Source>();
         metadataSourceMap.put(contextPath, new StreamSource(iStream));
         Map<String, Map<String, Source>> properties = new HashMap<String, Map<String, Source>>();
@@ -248,12 +248,12 @@ private MySchemaOutputResolver generateSchema(Class[] classes, String contextPat
      * @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
      */
-    public MySchemaOutputResolver generateSchema(Class[] classes, String contextPath, String path, int expectedSchemaCount) {
+    public MySchemaOutputResolver generateSchema(Class<?>[] classes, String contextPath, String path, int expectedSchemaCount) {
         String metadataFile = path + "eclipselink-oxm.xml";
         return generateSchemaWithFileName(classes, contextPath, metadataFile, expectedSchemaCount);
     }
 
-    public void generateSchemaWithFileName(Class[] classes, String contextPath, String metadataFile, int expectedSchemaCount, MyStreamSchemaOutputResolver outputResolver) {
+    public void generateSchemaWithFileName(Class<?>[] classes, String contextPath, String metadataFile, int expectedSchemaCount, MyStreamSchemaOutputResolver outputResolver) {
         InputStream iStream = loader.getResourceAsStream(metadataFile);
         InputStream iStreamCopy = loader.getResourceAsStream(metadataFile);
         if (iStream == null) {
@@ -278,7 +278,7 @@ public void generateSchemaWithFileName(Class[] classes, String contextPath, Stri
         assertTrue("Expected schema generation count to be ["+expectedSchemaCount+"], but was [" + outputResolver.schemaFiles.size() + "]", outputResolver.schemaFiles.size() == expectedSchemaCount);
     }
 
-    public MySchemaOutputResolver generateSchemaWithFileName(Class[] classes, String contextPath, String metadataFile, int expectedSchemaCount) {
+    public MySchemaOutputResolver generateSchemaWithFileName(Class<?>[] classes, String contextPath, String metadataFile, int expectedSchemaCount) {
         InputStream iStream = loader.getResourceAsStream(metadataFile);
         InputStream iStreamCopy = loader.getResourceAsStream(metadataFile);
         if (iStream == null) {
@@ -371,7 +371,7 @@ protected void generateSchema(String contextPath, SchemaOutputResolver outputRes
      * eclipselink-oxm.xml entries.
      *
      */
-    protected void generateSchema(Class[] classesToBeBound, java.util.Map properties, SchemaOutputResolver outputResolver, ClassLoader classLoader) throws Exception {
+    protected void generateSchema(Class<?>[] classesToBeBound, java.util.Map properties, SchemaOutputResolver outputResolver, ClassLoader classLoader) throws Exception {
         try {
             jaxbContext = (JAXBContext) JAXBContextFactory.createContext(classesToBeBound, properties, classLoader);
             jaxbContext.generateSchema(outputResolver);
@@ -726,7 +726,7 @@ public Result createOutput(String namespaceURI, String suggestedFileName) throws
      * Convenience method that returns a newly created XMLContext based on an array of classes.
      *
      */
-    protected XMLContext createXmlContext(Class[] classes) {
+    protected XMLContext createXmlContext(Class<?>[] classes) {
         try {
             ClassLoader classLoader = new JaxbClassLoader(Thread.currentThread().getContextClassLoader());
             Generator generator = new Generator(new JavaModelInputImpl(classes, new JavaModelImpl(classLoader)));
@@ -759,7 +759,7 @@ protected Document getControlDocument(String xmlResource) throws Exception {
      * validated against the metadata schema.
      *
      */
-    public JAXBContext createContext(Class[] classes, String contextPath, String metadataFile) throws JAXBException {
+    public JAXBContext createContext(Class<?>[] classes, String contextPath, String metadataFile) throws JAXBException {
         // validate instance document against the metadata schema
         InputStream iStream = loader.getResourceAsStream(metadataFile);
         InputStream iStreamCopy = loader.getResourceAsStream(metadataFile);
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 0c7e645..30ff795 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
@@ -128,7 +128,7 @@ public void setUp() throws Exception {
      * Positive test.
      */
     public void testLoadXmlFileViaPackage() throws IOException {
-        outputResolver = generateSchema(new Class[] { Employee.class }, CONTEXT_PATH, PATH, 1);
+        outputResolver = generateSchema(new Class<?>[] { Employee.class }, CONTEXT_PATH, PATH, 1);
         InputStream src = Thread.currentThread().getContextClassLoader().getResource(PATH + "employee.xml").openStream();
         String result = validateAgainstSchema(src, EMPTY_NAMESPACE, outputResolver);
         assertTrue("Schema validation failed unxepectedly: " + result, result == null);
@@ -143,7 +143,7 @@ public void testLoadXmlFileViaPackage() throws IOException {
      * 1 x Positive test, 1x Negative test
      */
     public void testLoadMultipleXmlFilesViaSamePackage() throws IOException {
-        outputResolver = generateSchema(new Class[] { Employee.class, Address.class }, CONTEXT_PATH, PATH, 1);
+        outputResolver = generateSchema(new Class<?>[] { Employee.class, Address.class }, CONTEXT_PATH, PATH, 1);
         InputStream src = Thread.currentThread().getContextClassLoader().getResource(PATH + "address.xml").openStream();
         String result = validateAgainstSchema(src, null, outputResolver);
         // address is set to transient in Xml, should fail
@@ -162,7 +162,7 @@ public void testLoadMultipleXmlFilesViaSamePackage() throws IOException {
      * 1 x Positive tests, 1x Negative test
      */
     public void testLoadMultipleXmlFilesViaDifferentPackage() throws IOException {
-        outputResolver = generateSchema(new Class[] { Employee.class, Address.class, }, CONTEXT_PATH, PATH, 1);
+        outputResolver = generateSchema(new Class<?>[] { Employee.class, Address.class, }, CONTEXT_PATH, PATH, 1);
 
         InputStream src = Thread.currentThread().getContextClassLoader().getResource(PATH + "employee.xml").openStream();
         String result = validateAgainstSchema(src, EMPTY_NAMESPACE, outputResolver);
@@ -236,7 +236,7 @@ public void testArrayOfTypes() {
      */
     public void testBindingsFileWithNoTypes() {
         String metadataFile = PATH + "eclipselink-oxm-no-types.xml";
-        generateSchemaWithFileName(new Class[] {}, "org.eclipse.persistence.testing.jaxb.externalizedmetadata.jaxbcontextfactory", metadataFile, 0);
+        generateSchemaWithFileName(new Class<?>[] {}, "org.eclipse.persistence.testing.jaxb.externalizedmetadata.jaxbcontextfactory", metadataFile, 0);
     }
 
     /**
@@ -336,7 +336,7 @@ public void testStringArrayInClassesToBeBound() {
     public void testBindingFormatFile() throws Exception {
         Map<String, Object> properties = new HashMap<>();
         properties.put(JAXBContextProperties.OXM_METADATA_SOURCE, new File(FILE_OXM_XML));
-        Class[] classes = new Class[] { org.eclipse.persistence.testing.jaxb.externalizedmetadata.jaxbcontextfactory.bindingformat.file.Foo.class };
+        Class<?>[] classes = new Class<?>[] { org.eclipse.persistence.testing.jaxb.externalizedmetadata.jaxbcontextfactory.bindingformat.file.Foo.class };
         JAXBContext jCtx = (JAXBContext) JAXBContextFactory.createContext(classes, properties, loader);
         doTestFile(jCtx);
     }
@@ -344,7 +344,7 @@ public void testBindingFormatFile() throws Exception {
     public void testBindingFormatXMLMetadataSource() throws Exception {
         Map<String, Object> properties = new HashMap<>();
         properties.put(JAXBContextProperties.OXM_METADATA_SOURCE, new XMLMetadataSource(new File(FILE_OXM_XML)));
-        Class[] classes = new Class[] { org.eclipse.persistence.testing.jaxb.externalizedmetadata.jaxbcontextfactory.bindingformat.file.Foo.class };
+        Class<?>[] classes = new Class<?>[] { org.eclipse.persistence.testing.jaxb.externalizedmetadata.jaxbcontextfactory.bindingformat.file.Foo.class };
         JAXBContext jCtx = (JAXBContext) JAXBContextFactory.createContext(classes, properties, loader);
         doTestFile(jCtx);
     }
@@ -352,7 +352,7 @@ public void testBindingFormatXMLMetadataSource() throws Exception {
     public void testBindingFormatInputSource() throws Exception {
         Map<String, Object> properties = new HashMap<>();
         properties.put(JAXBContextProperties.OXM_METADATA_SOURCE, new InputSource(INPUT_SRC_OXM_XML.openStream()));
-        Class[] classes = new Class[] { org.eclipse.persistence.testing.jaxb.externalizedmetadata.jaxbcontextfactory.bindingformat.inputsource.Foo.class };
+        Class<?>[] classes = new Class<?>[] { org.eclipse.persistence.testing.jaxb.externalizedmetadata.jaxbcontextfactory.bindingformat.inputsource.Foo.class };
         JAXBContext jCtx = (JAXBContext) JAXBContextFactory.createContext(classes, properties, loader);
         doTestInputSrc(jCtx);
     }
@@ -360,7 +360,7 @@ public void testBindingFormatInputSource() throws Exception {
     public void testBindingFormatString() throws Exception {
         Map<String, Object> properties = new HashMap<>();
         properties.put(JAXBContextProperties.OXM_METADATA_SOURCE, INPUT_SRC_OXM_XML);
-        Class[] classes = new Class[] { org.eclipse.persistence.testing.jaxb.externalizedmetadata.jaxbcontextfactory.bindingformat.inputsource.Foo.class };
+        Class<?>[] classes = new Class<?>[] { org.eclipse.persistence.testing.jaxb.externalizedmetadata.jaxbcontextfactory.bindingformat.inputsource.Foo.class };
         JAXBContext jCtx = (JAXBContext) JAXBContextFactory.createContext(classes, properties, loader);
         doTestInputSrc(jCtx);
     }
@@ -376,7 +376,7 @@ public void testBindingFormatStringClasspath() throws Exception {
         Map<String, Object> properties = new HashMap<>();
         properties.put(JAXBContextProperties.OXM_METADATA_SOURCE, "subfolder/foo-oxm.xml");
 
-        Class[] classes = new Class[] { org.eclipse.persistence.testing.jaxb.externalizedmetadata.jaxbcontextfactory.bindingformat.inputsource.Foo.class };
+        Class<?>[] classes = new Class<?>[] { org.eclipse.persistence.testing.jaxb.externalizedmetadata.jaxbcontextfactory.bindingformat.inputsource.Foo.class };
         JAXBContext jCtx = (JAXBContext) JAXBContextFactory.createContext(classes, properties, testLoader);
         doTestInputSrc(jCtx);
     }
@@ -384,7 +384,7 @@ public void testBindingFormatStringClasspath() throws Exception {
     public void testBindingFormatStringInvalid() throws Exception {
         Map<String, Object> properties = new HashMap<>();
         properties.put(JAXBContextProperties.OXM_METADATA_SOURCE, "foobar");
-        Class[] classes = new Class[] { org.eclipse.persistence.testing.jaxb.externalizedmetadata.jaxbcontextfactory.bindingformat.inputsource.Foo.class };
+        Class<?>[] classes = new Class<?>[] { org.eclipse.persistence.testing.jaxb.externalizedmetadata.jaxbcontextfactory.bindingformat.inputsource.Foo.class };
         boolean exceptionThrown = false;
         try {
             JAXBContextFactory.createContext(classes, properties, loader);
@@ -402,7 +402,7 @@ public void testBindingFormatStringURL() throws Exception {
         File file = new File(INPUT_SRC_OXM_XML.toURI());
         URL url = file.toURI().toURL();
         properties.put(JAXBContextProperties.OXM_METADATA_SOURCE, url.toExternalForm());
-        Class[] classes = new Class[] { org.eclipse.persistence.testing.jaxb.externalizedmetadata.jaxbcontextfactory.bindingformat.inputsource.Foo.class };
+        Class<?>[] classes = new Class<?>[] { org.eclipse.persistence.testing.jaxb.externalizedmetadata.jaxbcontextfactory.bindingformat.inputsource.Foo.class };
         JAXBContext jCtx = (JAXBContext) JAXBContextFactory.createContext(classes, properties, loader);
         doTestInputSrc(jCtx);
 
@@ -410,7 +410,7 @@ public void testBindingFormatStringURL() throws Exception {
     public void testBindingFormatMetadataSourceString() throws Exception {
         Map<String, Object> properties = new HashMap<>();
         properties.put(JAXBContextProperties.OXM_METADATA_SOURCE, new XMLMetadataSource(INPUT_SRC_OXM_XML));
-        Class[] classes = new Class[] { org.eclipse.persistence.testing.jaxb.externalizedmetadata.jaxbcontextfactory.bindingformat.inputsource.Foo.class };
+        Class<?>[] classes = new Class<?>[] { org.eclipse.persistence.testing.jaxb.externalizedmetadata.jaxbcontextfactory.bindingformat.inputsource.Foo.class };
         JAXBContext jCtx = (JAXBContext) JAXBContextFactory.createContext(classes, properties, loader);
         doTestInputSrc(jCtx);
     }
@@ -428,7 +428,7 @@ public void testBindingFormatMetadatSourceNull() throws Exception {
     public void testBindingFormatMetadataSourceStringInvalid() throws Exception {
         Map<String, Object> properties = new HashMap<>();
         properties.put(JAXBContextProperties.OXM_METADATA_SOURCE, new XMLMetadataSource("foobar"));
-        Class[] classes = new Class[] { org.eclipse.persistence.testing.jaxb.externalizedmetadata.jaxbcontextfactory.bindingformat.inputsource.Foo.class };
+        Class<?>[] classes = new Class<?>[] { org.eclipse.persistence.testing.jaxb.externalizedmetadata.jaxbcontextfactory.bindingformat.inputsource.Foo.class };
         boolean exceptionThrown = false;
         try {
             JAXBContextFactory.createContext(classes, properties, loader);
@@ -446,7 +446,7 @@ public void testBindingFormatMetadataSourceURLString() throws Exception {
         File file = new File(INPUT_SRC_OXM_XML.toURI());
         URL url = file.toURI().toURL();
         properties.put(JAXBContextProperties.OXM_METADATA_SOURCE, new XMLMetadataSource(url.toExternalForm()));
-        Class[] classes = new Class[] { org.eclipse.persistence.testing.jaxb.externalizedmetadata.jaxbcontextfactory.bindingformat.inputsource.Foo.class };
+        Class<?>[] classes = new Class<?>[] { org.eclipse.persistence.testing.jaxb.externalizedmetadata.jaxbcontextfactory.bindingformat.inputsource.Foo.class };
         JAXBContext jCtx = (JAXBContext) JAXBContextFactory.createContext(classes, properties, loader);
         doTestInputSrc(jCtx);
     }
@@ -454,7 +454,7 @@ public void testBindingFormatMetadataSourceURLString() throws Exception {
     public void testBindingFormatInputStream() throws Exception {
         Map<String, Object> properties = new HashMap<>();
         properties.put(JAXBContextProperties.OXM_METADATA_SOURCE, INPUT_STRM_OXM_XML.openStream());
-        Class[] classes = new Class[] { org.eclipse.persistence.testing.jaxb.externalizedmetadata.jaxbcontextfactory.bindingformat.inputstream.Foo.class };
+        Class<?>[] classes = new Class<?>[] { org.eclipse.persistence.testing.jaxb.externalizedmetadata.jaxbcontextfactory.bindingformat.inputstream.Foo.class };
         JAXBContext jCtx = (JAXBContext) JAXBContextFactory.createContext(classes, properties, loader);
         doTestInputStrm(jCtx);
     }
@@ -462,7 +462,7 @@ public void testBindingFormatInputStream() throws Exception {
     public void testBindingsEmptyXML() throws Exception {
         Map<String, Object> properties = new HashMap<>();
         properties.put(JAXBContextProperties.OXM_METADATA_SOURCE, new InputStreamReader(READER_EMPTY_OXM_XML.openStream()));
-        Class[] classes = new Class[] { org.eclipse.persistence.testing.jaxb.externalizedmetadata.jaxbcontextfactory.bindingformat.reader.FooWithRootElement.class };
+        Class<?>[] classes = new Class<?>[] { org.eclipse.persistence.testing.jaxb.externalizedmetadata.jaxbcontextfactory.bindingformat.reader.FooWithRootElement.class };
         JAXBContext jCtx = (JAXBContext) JAXBContextFactory.createContext(classes, null, loader);
 
         org.eclipse.persistence.testing.jaxb.externalizedmetadata.jaxbcontextfactory.bindingformat.reader.FooWithRootElement fooWithRoot = new org.eclipse.persistence.testing.jaxb.externalizedmetadata.jaxbcontextfactory.bindingformat.reader.FooWithRootElement("a123");
@@ -473,7 +473,7 @@ public void testBindingsEmptyXML() throws Exception {
     public void testBindingsEmptyJSON() throws Exception {
         Map<String, Object> properties = new HashMap<>();
         properties.put(JAXBContextProperties.OXM_METADATA_SOURCE, new InputStreamReader(READER_EMPTY_OXM_JSON.openStream()));
-        Class[] classes = new Class[] { org.eclipse.persistence.testing.jaxb.externalizedmetadata.jaxbcontextfactory.bindingformat.reader.FooWithRootElement.class };
+        Class<?>[] classes = new Class<?>[] { org.eclipse.persistence.testing.jaxb.externalizedmetadata.jaxbcontextfactory.bindingformat.reader.FooWithRootElement.class };
         JAXBContext jCtx = (JAXBContext) JAXBContextFactory.createContext(classes, null, loader);
 
         org.eclipse.persistence.testing.jaxb.externalizedmetadata.jaxbcontextfactory.bindingformat.reader.FooWithRootElement fooWithRoot = new org.eclipse.persistence.testing.jaxb.externalizedmetadata.jaxbcontextfactory.bindingformat.reader.FooWithRootElement("a123");
@@ -484,7 +484,7 @@ public void testBindingsEmptyJSON() throws Exception {
     public void testBindingFormatReader() throws Exception {
         Map<String, Object> properties = new HashMap<>();
         properties.put(JAXBContextProperties.OXM_METADATA_SOURCE, new InputStreamReader(READER_OXM_XML.openStream()));
-        Class[] classes = new Class[] { org.eclipse.persistence.testing.jaxb.externalizedmetadata.jaxbcontextfactory.bindingformat.reader.Foo.class };
+        Class<?>[] classes = new Class<?>[] { org.eclipse.persistence.testing.jaxb.externalizedmetadata.jaxbcontextfactory.bindingformat.reader.Foo.class };
         JAXBContext jCtx = (JAXBContext) JAXBContextFactory.createContext(classes, properties, loader);
         doTestReader(jCtx);
     }
@@ -493,7 +493,7 @@ public void testBindingFormatSource() throws Exception {
         Map<String, Object> properties = new HashMap<>();
         InputStream is = ClassLoader.getSystemResourceAsStream(SOURCE_OXM_XML);
         properties.put(JAXBContextProperties.OXM_METADATA_SOURCE, new StreamSource(is));
-        Class[] classes = new Class[] { org.eclipse.persistence.testing.jaxb.externalizedmetadata.jaxbcontextfactory.bindingformat.source.Foo.class };
+        Class<?>[] classes = new Class<?>[] { org.eclipse.persistence.testing.jaxb.externalizedmetadata.jaxbcontextfactory.bindingformat.source.Foo.class };
         JAXBContext jCtx = (JAXBContext) JAXBContextFactory.createContext(classes, properties, loader);
         doTestSource(jCtx);
     }
@@ -507,7 +507,7 @@ public void testBindingFormatList() throws Exception {
         inputFiles.add(new StreamSource(ClassLoader.getSystemResourceAsStream(SOURCE_OXM_XML)));
         Map<String, Object> properties = new HashMap<>();
         properties.put(JAXBContextProperties.OXM_METADATA_SOURCE, inputFiles);
-        Class[] listClasses = new Class[] {
+        Class<?>[] listClasses = new Class<?>[] {
                 org.eclipse.persistence.testing.jaxb.externalizedmetadata.jaxbcontextfactory.bindingformat.file.Foo.class,
                 org.eclipse.persistence.testing.jaxb.externalizedmetadata.jaxbcontextfactory.bindingformat.inputsource.Foo.class,
                 org.eclipse.persistence.testing.jaxb.externalizedmetadata.jaxbcontextfactory.bindingformat.inputstream.Foo.class,
@@ -536,7 +536,7 @@ public void testBindingFormatList2() throws Exception {
 
         Map<String, Object> properties = new HashMap<>();
         properties.put(JAXBContextProperties.OXM_METADATA_SOURCE, inputFiles);
-        Class[] listClasses = new Class[] {
+        Class<?>[] listClasses = new Class<?>[] {
                 org.eclipse.persistence.testing.jaxb.externalizedmetadata.jaxbcontextfactory.bindingformat.file.Foo.class,
                 org.eclipse.persistence.testing.jaxb.externalizedmetadata.jaxbcontextfactory.bindingformat.inputsource.Foo.class,
                 org.eclipse.persistence.testing.jaxb.externalizedmetadata.jaxbcontextfactory.bindingformat.inputstream.Foo.class,
@@ -555,7 +555,7 @@ public void testBindingFormatXMLInvalid() throws Exception {
         inputFiles.add(new File(FILE_PATH + "foo-oxm-invalid.xml"));
         Map<String, Object> properties = new HashMap<>();
         properties.put(JAXBContextProperties.OXM_METADATA_SOURCE, inputFiles);
-        Class[] listClasses = new Class[] {
+        Class<?>[] listClasses = new Class<?>[] {
                 org.eclipse.persistence.testing.jaxb.externalizedmetadata.jaxbcontextfactory.bindingformat.file.Foo.class};
 
         try{
@@ -572,7 +572,7 @@ public void testBindingFormatJSONInvalid() throws Exception {
         inputFiles.add(new File(FILE_OXM_JSON_INVALID));
         Map<String, Object> properties = new HashMap<>();
         properties.put(JAXBContextProperties.OXM_METADATA_SOURCE, inputFiles);
-        Class[] listClasses = new Class[] {
+        Class<?>[] listClasses = new Class<?>[] {
                 org.eclipse.persistence.testing.jaxb.externalizedmetadata.jaxbcontextfactory.bindingformat.file.Foo.class};
 
         try{
@@ -589,7 +589,7 @@ public void testBindingFormatJSONInvalid2() throws Exception {
         inputFiles.add(new File(FILE_PATH + "foo-oxm-invalid2.json"));
         Map<String, Object> properties = new HashMap<>();
         properties.put(JAXBContextProperties.OXM_METADATA_SOURCE, inputFiles);
-        Class[] listClasses = new Class[] {
+        Class<?>[] listClasses = new Class<?>[] {
                 org.eclipse.persistence.testing.jaxb.externalizedmetadata.jaxbcontextfactory.bindingformat.file.Foo.class};
         try{
             JAXBContextFactory.createContext(listClasses, properties, loader);
@@ -611,7 +611,7 @@ public void IGNORED_testBindingFormatListJSONWhitespace() throws Exception {
          inputFiles.add(new StreamSource(ClassLoader.getSystemResourceAsStream(SOURCE_OXM_JSON)));
          Map<String, Object> properties = new HashMap<>();
          properties.put(JAXBContextProperties.OXM_METADATA_SOURCE, inputFiles);
-         Class[] listClasses = new Class[] {
+         Class<?>[] listClasses = new Class<?>[] {
                  org.eclipse.persistence.testing.jaxb.externalizedmetadata.jaxbcontextfactory.bindingformat.file.Foo.class,
                  org.eclipse.persistence.testing.jaxb.externalizedmetadata.jaxbcontextfactory.bindingformat.inputsource.Foo.class,
                  org.eclipse.persistence.testing.jaxb.externalizedmetadata.jaxbcontextfactory.bindingformat.inputstream.Foo.class,
@@ -636,7 +636,7 @@ public void testBindingFormatListJSON() throws Exception {
         inputFiles.add(new StreamSource(ClassLoader.getSystemResourceAsStream(SOURCE_OXM_JSON)));
         Map<String, Object> properties = new HashMap<>();
         properties.put(JAXBContextProperties.OXM_METADATA_SOURCE, inputFiles);
-        Class[] listClasses = new Class[] {
+        Class<?>[] listClasses = new Class<?>[] {
                 org.eclipse.persistence.testing.jaxb.externalizedmetadata.jaxbcontextfactory.bindingformat.file.Foo.class,
                 org.eclipse.persistence.testing.jaxb.externalizedmetadata.jaxbcontextfactory.bindingformat.inputsource.Foo.class,
                 org.eclipse.persistence.testing.jaxb.externalizedmetadata.jaxbcontextfactory.bindingformat.inputstream.Foo.class,
@@ -665,7 +665,7 @@ public void testBindingFormatListJSON2() throws Exception {
 
         Map<String, Object> properties = new HashMap<>();
         properties.put(JAXBContextProperties.OXM_METADATA_SOURCE, inputFiles);
-        Class[] listClasses = new Class[] {
+        Class<?>[] listClasses = new Class<?>[] {
                 org.eclipse.persistence.testing.jaxb.externalizedmetadata.jaxbcontextfactory.bindingformat.file.Foo.class,
                 org.eclipse.persistence.testing.jaxb.externalizedmetadata.jaxbcontextfactory.bindingformat.inputsource.Foo.class,
                 org.eclipse.persistence.testing.jaxb.externalizedmetadata.jaxbcontextfactory.bindingformat.inputstream.Foo.class,
@@ -688,7 +688,7 @@ public void testBindingFormatListXMLandJSON() throws Exception {
         inputFiles.add(new StreamSource(ClassLoader.getSystemResourceAsStream(SOURCE_OXM_XML)));
         Map<String, Object> properties = new HashMap<>();
         properties.put(JAXBContextProperties.OXM_METADATA_SOURCE, inputFiles);
-        Class[] listClasses = new Class[] {
+        Class<?>[] listClasses = new Class<?>[] {
                 org.eclipse.persistence.testing.jaxb.externalizedmetadata.jaxbcontextfactory.bindingformat.file.Foo.class,
                 org.eclipse.persistence.testing.jaxb.externalizedmetadata.jaxbcontextfactory.bindingformat.inputsource.Foo.class,
                 org.eclipse.persistence.testing.jaxb.externalizedmetadata.jaxbcontextfactory.bindingformat.inputstream.Foo.class,
@@ -711,7 +711,7 @@ public void testBindingFormatListJSONandXML() throws Exception {
         inputFiles.add(new StreamSource(ClassLoader.getSystemResourceAsStream(SOURCE_OXM_JSON)));
         Map<String, Object> properties = new HashMap<>();
         properties.put(JAXBContextProperties.OXM_METADATA_SOURCE, inputFiles);
-        Class[] listClasses = new Class[] {
+        Class<?>[] listClasses = new Class<?>[] {
                 org.eclipse.persistence.testing.jaxb.externalizedmetadata.jaxbcontextfactory.bindingformat.file.Foo.class,
                 org.eclipse.persistence.testing.jaxb.externalizedmetadata.jaxbcontextfactory.bindingformat.inputsource.Foo.class,
                 org.eclipse.persistence.testing.jaxb.externalizedmetadata.jaxbcontextfactory.bindingformat.inputstream.Foo.class,
@@ -729,7 +729,7 @@ public void testBindingFormatNoPackageSet() {
         try {
             Map<String, Object> properties = new HashMap<>();
             properties.put(JAXBContextProperties.OXM_METADATA_SOURCE, Thread.currentThread().getContextClassLoader().getResource((NO_PKG_OXM_XML)).openStream());
-            JAXBContextFactory.createContext(new Class[] {}, properties, loader);
+            JAXBContextFactory.createContext(new Class<?>[] {}, properties, loader);
         } catch (org.eclipse.persistence.exceptions.JAXBException jaxbe) {
             return;
         } catch (Exception e) {
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 a816f1c..58179b5 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
@@ -50,7 +50,7 @@ public AnyAttributeMappingTestCases(String name) throws Exception {
         super(name);
         setControlDocument(XML_RESOURCE);
         setControlJSON(JSON_RESOURCE);
-        setClasses(new Class[]{Employee.class});
+        setClasses(new Class<?>[]{Employee.class});
         Map<String, String> namespaces = new HashMap<String, String>();
         namespaces.put("http://www.example.com/other", "ns0");
         namespaces.put("http://www.example.com/stuff", "s");
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/externalizedmetadata/mappings/anyattribute/AnyAttributeReadOnlyMappingTestCases.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/externalizedmetadata/mappings/anyattribute/AnyAttributeReadOnlyMappingTestCases.java
index 38c869c..1e30699 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/externalizedmetadata/mappings/anyattribute/AnyAttributeReadOnlyMappingTestCases.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/externalizedmetadata/mappings/anyattribute/AnyAttributeReadOnlyMappingTestCases.java
@@ -44,7 +44,7 @@ public AnyAttributeReadOnlyMappingTestCases(String name) throws Exception {
         setWriteControlDocument(XML_WRITE_RESOURCE);
         setControlJSON(JSON_RESOURCE);
         setWriteControlJSON(JSON_WRITE_RESOURCE);
-        setClasses(new Class[] { Employee.class });
+        setClasses(new Class<?>[] { Employee.class });
 
         Map<String, String> namespaces = new HashMap<String, String>();
         namespaces.put("http://www.example.com/other", "ns0");
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 19a8a22..6554f4d 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
@@ -52,7 +52,7 @@ public AnyAttributeSubTypeMappingTestCases(String name) throws Exception {
         super(name);
         setControlDocument(XML_RESOURCE);
         setControlJSON(JSON_RESOURCE);
-        setClasses(new Class[]{XmlAnyAttributeSubTypeMapModel.class});
+        setClasses(new Class<?>[]{XmlAnyAttributeSubTypeMapModel.class});
 
         Map<String, String> namespaces = new HashMap<String, String>();
         namespaces.put("http://www.example.com/other", "ns0");
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/externalizedmetadata/mappings/anyattribute/AnyAttributeWriteOnlyMappingTestCases.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/externalizedmetadata/mappings/anyattribute/AnyAttributeWriteOnlyMappingTestCases.java
index 2d2fe8a..066c6af 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/externalizedmetadata/mappings/anyattribute/AnyAttributeWriteOnlyMappingTestCases.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/externalizedmetadata/mappings/anyattribute/AnyAttributeWriteOnlyMappingTestCases.java
@@ -43,7 +43,7 @@ public AnyAttributeWriteOnlyMappingTestCases(String name) throws Exception {
         setControlDocument(XML_RESOURCE);
         setWriteControlDocument(XML_WRITE_RESOURCE);
         setControlJSON(JSON_RESOURCE);
-        setClasses(new Class[] { Employee.class });
+        setClasses(new Class<?>[] { Employee.class });
 
         Map<String, String> namespaces = new HashMap<String, String>();
         namespaces.put("http://www.example.com/other", "ns0");
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 70493a1..dcb90c4 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
@@ -46,7 +46,7 @@ public AnyCollectionMappingTestCases(String name) throws Exception {
         super(name);
         setControlDocument(XML_RESOURCE);
         setControlJSON(JSON_RESOURCE);
-        setClasses(new Class[]{Employee.class});
+        setClasses(new Class<?>[]{Employee.class});
     }
 
     /**
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/externalizedmetadata/mappings/anycollection/AnyCollectionReadOnlyMappingTestCases.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/externalizedmetadata/mappings/anycollection/AnyCollectionReadOnlyMappingTestCases.java
index 8f6b1f5..7addfb7 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/externalizedmetadata/mappings/anycollection/AnyCollectionReadOnlyMappingTestCases.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/externalizedmetadata/mappings/anycollection/AnyCollectionReadOnlyMappingTestCases.java
@@ -42,7 +42,7 @@ public AnyCollectionReadOnlyMappingTestCases(String name) throws Exception {
         setWriteControlDocument(XML_WRITE_RESOURCE);
         setControlJSON(JSON_RESOURCE);
         setWriteControlJSON(JSON_WRITE_RESOURCE);
-        setClasses(new Class[] { Employee.class });
+        setClasses(new Class<?>[] { Employee.class });
     }
 
      @Override
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/externalizedmetadata/mappings/anycollection/AnyCollectionWriteOnlyMappingTestCases.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/externalizedmetadata/mappings/anycollection/AnyCollectionWriteOnlyMappingTestCases.java
index 4607b97..145edfd 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/externalizedmetadata/mappings/anycollection/AnyCollectionWriteOnlyMappingTestCases.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/externalizedmetadata/mappings/anycollection/AnyCollectionWriteOnlyMappingTestCases.java
@@ -38,7 +38,7 @@ public AnyCollectionWriteOnlyMappingTestCases(String name) throws Exception {
         super(name);
         setControlDocument(XML_RESOURCE);
         setControlJSON(JSON_RESOURCE);
-        setClasses(new Class[] { Employee.class });
+        setClasses(new Class<?>[] { Employee.class });
     }
 
      @Override
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 6589a1a..ee84a08 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
@@ -51,7 +51,7 @@ public AnyObjectMappingTestCases(String name) throws Exception {
         super(name);
         setControlDocument(XML_RESOURCE);
         setControlJSON(JSON_RESOURCE);
-        setClasses(new Class[]{Employee.class});
+        setClasses(new Class<?>[]{Employee.class});
     }
 
     /**
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/externalizedmetadata/mappings/anyobject/AnyObjectReadOnlyMappingTestCases.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/externalizedmetadata/mappings/anyobject/AnyObjectReadOnlyMappingTestCases.java
index ea86bf1..2730bdf 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/externalizedmetadata/mappings/anyobject/AnyObjectReadOnlyMappingTestCases.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/externalizedmetadata/mappings/anyobject/AnyObjectReadOnlyMappingTestCases.java
@@ -49,7 +49,7 @@ public AnyObjectReadOnlyMappingTestCases(String name) throws Exception {
         setWriteControlDocument(XML_WRITE_RESOURCE);
         setControlJSON(JSON_RESOURCE);
         setWriteControlJSON(JSON_WRITE_RESOURCE);
-        setClasses(new Class[] { Employee.class });
+        setClasses(new Class<?>[] { Employee.class });
     }
 
      @Override
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/externalizedmetadata/mappings/anyobject/AnyObjectWriteOnlyMappingTestCases.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/externalizedmetadata/mappings/anyobject/AnyObjectWriteOnlyMappingTestCases.java
index 18d4091..bfcdf69 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/externalizedmetadata/mappings/anyobject/AnyObjectWriteOnlyMappingTestCases.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/externalizedmetadata/mappings/anyobject/AnyObjectWriteOnlyMappingTestCases.java
@@ -42,7 +42,7 @@ public AnyObjectWriteOnlyMappingTestCases(String name) throws Exception {
         super(name);
         setControlDocument(XML_RESOURCE);
         setControlJSON(JSON_RESOURCE);
-        setClasses(new Class[] { Employee.class });
+        setClasses(new Class<?>[] { Employee.class });
     }
 
      @Override
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 bd7612c..3e85eac 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
@@ -58,7 +58,7 @@ public BinaryDataMappingTestCases(String name) throws Exception {
         setWriteControlDocument(XML_WRITE_RESOURCE);
         setControlJSON(JSON_RESOURCE);
         setWriteControlJSON(JSON_WRITE_RESOURCE);
-        setClasses(new Class[] { MyData.class });
+        setClasses(new Class<?>[] { MyData.class });
     }
 
 
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 78a5bcb..7c77572 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
@@ -50,7 +50,7 @@ public class BinaryDataCollectionMappingTestCases extends JAXBWithJSONTestCases
      */
     public BinaryDataCollectionMappingTestCases(String name) throws Exception {
         super(name);
-        setClasses(new Class[] { MyData.class });
+        setClasses(new Class<?>[] { MyData.class });
         setControlDocument(XML_RESOURCE);
         setWriteControlDocument(XML_WRITE_RESOURCE);
         setControlJSON(JSON_RESOURCE);
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/externalizedmetadata/mappings/choice/ChoiceMappingWithJoinNodesTestCases.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/externalizedmetadata/mappings/choice/ChoiceMappingWithJoinNodesTestCases.java
index ee92a24..62bbb30 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/externalizedmetadata/mappings/choice/ChoiceMappingWithJoinNodesTestCases.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/externalizedmetadata/mappings/choice/ChoiceMappingWithJoinNodesTestCases.java
@@ -38,7 +38,7 @@ public ChoiceMappingWithJoinNodesTestCases(String name) throws Exception {
         super(name);
         setControlDocument(XML_RESOURCE);
         setControlJSON(JSON_RESOURCE);
-        setClasses(new Class[] { org.eclipse.persistence.testing.jaxb.externalizedmetadata.mappings.choice.reference.Root.class });
+        setClasses(new Class<?>[] { org.eclipse.persistence.testing.jaxb.externalizedmetadata.mappings.choice.reference.Root.class });
         jaxbMarshaller.setProperty(MarshallerProperties.JSON_VALUE_WRAPPER, "value");
         jaxbUnmarshaller.setProperty(UnmarshallerProperties.JSON_VALUE_WRAPPER, "value");
     }
@@ -106,7 +106,7 @@ public void testIncorrectNumberOfXmlJoinNodes() {
             Map<String, Object> props = new HashMap<String, Object>();
             InputStream inputStream = ClassLoader.getSystemResourceAsStream("org/eclipse/persistence/testing/jaxb/externalizedmetadata/mappings/choice/reference/root-invalid-oxm.xml");
             props.put(JAXBContextProperties.OXM_METADATA_SOURCE, inputStream);
-            JAXBContext ctx = (JAXBContext) JAXBContextFactory.createContext(new Class[] { org.eclipse.persistence.testing.jaxb.externalizedmetadata.mappings.choice.reference.Root.class }, props);
+            JAXBContext ctx = (JAXBContext) JAXBContextFactory.createContext(new Class<?>[] { org.eclipse.persistence.testing.jaxb.externalizedmetadata.mappings.choice.reference.Root.class }, props);
         } catch (JAXBException e1) {
             return;
         }
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 4e3c89f..597d201 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
@@ -47,7 +47,7 @@ public class CollectionReferenceMappingTestCases extends JAXBWithJSONTestCases {
      */
     public CollectionReferenceMappingTestCases(String name) throws Exception {
         super(name);
-        setClasses(new Class[]{Root.class});
+        setClasses(new Class<?>[]{Root.class});
         setControlDocument(XML_RESOURCE);
         setControlJSON(JSON_RESOURCE);
     }
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/externalizedmetadata/mappings/collectionreference/CollectionReferenceReadOnlyTestCases.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/externalizedmetadata/mappings/collectionreference/CollectionReferenceReadOnlyTestCases.java
index eadd26b..37bbe53 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/externalizedmetadata/mappings/collectionreference/CollectionReferenceReadOnlyTestCases.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/externalizedmetadata/mappings/collectionreference/CollectionReferenceReadOnlyTestCases.java
@@ -40,7 +40,7 @@ public class CollectionReferenceReadOnlyTestCases extends JAXBWithJSONTestCases{
 
     public CollectionReferenceReadOnlyTestCases(String name) throws Exception {
         super(name);
-        setClasses(new Class[] { Root.class });
+        setClasses(new Class<?>[] { Root.class });
         setControlDocument(XML_RESOURCE);
         setWriteControlDocument(XML_WRITE_RESOURCE);
         setControlJSON(JSON_RESOURCE);
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/externalizedmetadata/mappings/collectionreference/CollectionReferenceWriteOnlyTestCases.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/externalizedmetadata/mappings/collectionreference/CollectionReferenceWriteOnlyTestCases.java
index 9832303..a3b5139 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/externalizedmetadata/mappings/collectionreference/CollectionReferenceWriteOnlyTestCases.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/externalizedmetadata/mappings/collectionreference/CollectionReferenceWriteOnlyTestCases.java
@@ -37,7 +37,7 @@ public class CollectionReferenceWriteOnlyTestCases extends JAXBWithJSONTestCases
 
     public CollectionReferenceWriteOnlyTestCases(String name) throws Exception {
         super(name);
-        setClasses(new Class[] { Root.class });
+        setClasses(new Class<?>[] { Root.class });
         setControlDocument(XML_RESOURCE);
         setControlJSON(JSON_RESOURCE);
     }
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 e1ac0d8..7270066 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
@@ -62,7 +62,7 @@ public class CompositeMappingTestCases extends JAXBTestCases {
      */
     public CompositeMappingTestCases(String name) throws Exception {
         super(name);
-        setClasses(new Class[]{Employee.class});
+        setClasses(new Class<?>[]{Employee.class});
         setControlDocument(XML_RESOURCE);
         setWriteControlDocument(XML_WRITE_RESOURCE);
     }
@@ -243,7 +243,7 @@ public void testSchemaGenThreeNamespaces() throws Exception{
         controlSchemas.add(is2);
 
         MyStreamSchemaOutputResolver outputResolver = new MyStreamSchemaOutputResolver();
-        JAXBContext ctx = JAXBContextFactory.createContext(new Class[]{org.eclipse.persistence.testing.jaxb.externalizedmetadata.mappings.composite.multiplenamespaces.Employee.class}, getPropertiesMultipleNS());
+        JAXBContext ctx = JAXBContextFactory.createContext(new Class<?>[]{org.eclipse.persistence.testing.jaxb.externalizedmetadata.mappings.composite.multiplenamespaces.Employee.class}, getPropertiesMultipleNS());
         ctx.generateSchema(outputResolver);
 
         compareSchemas(controlSchemas, outputResolver.getSchemaFiles());
@@ -258,7 +258,7 @@ public void testSchemaGenCyclic() throws Exception{
         controlSchemas.add(is2);
 
         MyStreamSchemaOutputResolver outputResolver = new MyStreamSchemaOutputResolver();
-        JAXBContext ctx = JAXBContextFactory.createContext(new Class[]{org.eclipse.persistence.testing.jaxb.externalizedmetadata.mappings.composite.cyclic.Employee.class}, getPropertiesCyclic());
+        JAXBContext ctx = JAXBContextFactory.createContext(new Class<?>[]{org.eclipse.persistence.testing.jaxb.externalizedmetadata.mappings.composite.cyclic.Employee.class}, getPropertiesCyclic());
         ctx.generateSchema(outputResolver);
 
         compareSchemas(controlSchemas, outputResolver.getSchemaFiles());
@@ -275,7 +275,7 @@ public void testSchemaGen3NamespacesCyclic() throws Exception{
         controlSchemas.add(is3);
 
         MyStreamSchemaOutputResolver outputResolver = new MyStreamSchemaOutputResolver();
-        JAXBContext ctx = JAXBContextFactory.createContext(new Class[]{org.eclipse.persistence.testing.jaxb.externalizedmetadata.mappings.composite.cyclic.multiplenamespaces.Employee.class}, getPropertiesMultipleNamespacesCyclic());
+        JAXBContext ctx = JAXBContextFactory.createContext(new Class<?>[]{org.eclipse.persistence.testing.jaxb.externalizedmetadata.mappings.composite.cyclic.multiplenamespaces.Employee.class}, getPropertiesMultipleNamespacesCyclic());
         ctx.generateSchema(outputResolver);
 
         compareSchemas(controlSchemas, outputResolver.getSchemaFiles());
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 f9c40d1..a02231d 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
@@ -68,7 +68,7 @@ public class CompositeCollecitonMappingTestCases extends JAXBWithJSONTestCases {
      */
     public CompositeCollecitonMappingTestCases(String name) throws Exception{
         super(name);
-        setClasses(new Class[]{Employee.class});
+        setClasses(new Class<?>[]{Employee.class});
         setControlDocument(XML_RESOURCE);
         setWriteControlDocument(XML_WRITE_RESOURCE);
         setControlJSON(JSON_RESOURCE);
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/externalizedmetadata/mappings/direct/DirectMappingTeamTestCases.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/externalizedmetadata/mappings/direct/DirectMappingTeamTestCases.java
index 8cda68b..df338bc 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/externalizedmetadata/mappings/direct/DirectMappingTeamTestCases.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/externalizedmetadata/mappings/direct/DirectMappingTeamTestCases.java
@@ -36,7 +36,7 @@ public DirectMappingTeamTestCases(String name) throws Exception {
         super(name);
         setControlDocument(XML_RESOURCE);
         setControlJSON(JSON_RESOURCE);
-        setClasses(new Class[]{Team.class});
+        setClasses(new Class<?>[]{Team.class});
     }
 
     @Override
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 66ff227..a5ffeec 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
@@ -68,7 +68,7 @@ public DirectMappingTestCases(String name) throws Exception{
         super(name);
         setControlDocument(XML_RESOURCE);
         setWriteControlDocument(XML_WRITE_RESOURCE);
-        setClasses(new Class[]{Employee.class});
+        setClasses(new Class<?>[]{Employee.class});
     }
 
     @Override
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/externalizedmetadata/mappings/direct/DirectMappingVehicleTestCases.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/externalizedmetadata/mappings/direct/DirectMappingVehicleTestCases.java
index b6f5da7..b5a0601 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/externalizedmetadata/mappings/direct/DirectMappingVehicleTestCases.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/externalizedmetadata/mappings/direct/DirectMappingVehicleTestCases.java
@@ -36,7 +36,7 @@ public DirectMappingVehicleTestCases(String name) throws Exception {
         super(name);
         setControlDocument(XML_RESOURCE);
         setControlJSON(JSON_RESOURCE);
-        setClasses(new Class[]{Car.class, Truck.class});
+        setClasses(new Class<?>[]{Car.class, Truck.class});
     }
 
     @Override
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/externalizedmetadata/mappings/direct/DirectMappingXmlValueTestCases.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/externalizedmetadata/mappings/direct/DirectMappingXmlValueTestCases.java
index 4a1e8ad..2f9404a 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/externalizedmetadata/mappings/direct/DirectMappingXmlValueTestCases.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/externalizedmetadata/mappings/direct/DirectMappingXmlValueTestCases.java
@@ -37,7 +37,7 @@ public DirectMappingXmlValueTestCases(String name) throws Exception {
         super(name);
         setControlDocument(XML_RESOURCE);
         setControlJSON(JSON_RESOURCE);
-        setClasses(new Class[]{Price.class});
+        setClasses(new Class<?>[]{Price.class});
     }
 
     @Override
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 577c9da..55d0a15 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
@@ -64,7 +64,7 @@ public DirectCollectionMappingTestCases(String name) throws Exception{
         setWriteControlDocument(XML_WRITE_RESOURCE);
         setControlJSON(JSON_RESOURCE);
         setWriteControlJSON(JSON_WRITE_RESOURCE);
-        setClasses(new Class[]{});
+        setClasses(new Class<?>[]{});
     }
 
     /**
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 60c5044..bd7b581 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
@@ -55,7 +55,7 @@ public MultipleMappingPerFieldTestCases(String name) throws Exception{
         super(name);
         setControlDocument(XML_RESOURCE);
         setControlJSON(JSON_RESOURCE);
-        setClasses(new Class[]{CustomQuoteRequest.class});
+        setClasses(new Class<?>[]{CustomQuoteRequest.class});
         calendar = new GregorianCalendar(YEAR, MONTH, DAY);
         calendar.clear(Calendar.ZONE_OFFSET);
     }
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 dff8e0a..dd889b2 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
@@ -42,7 +42,7 @@ public class ObjectReferenceMappingReadOnlyTestCases extends JAXBWithJSONTestCas
          */
         public ObjectReferenceMappingReadOnlyTestCases(String name) throws Exception {
             super(name);
-            setClasses(new Class[]{Root.class});
+            setClasses(new Class<?>[]{Root.class});
             setControlDocument(XML_RESOURCE);
             setWriteControlDocument(XML_WRITE_RESOURCE);
             setControlJSON(JSON_RESOURCE);
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 42d0352..77866f9 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
@@ -48,7 +48,7 @@ public class ObjectReferenceMappingTestCases extends JAXBWithJSONTestCases {
      */
     public ObjectReferenceMappingTestCases(String name) throws Exception {
         super(name);
-        setClasses(new Class[]{Root.class});
+        setClasses(new Class<?>[]{Root.class});
         setControlDocument(XML_RESOURCE);
         setControlJSON(JSON_RESOURCE);
     }
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 e95b7fa..caa30e7 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
@@ -40,7 +40,7 @@ public class ObjectReferenceMappingWriteOnlyTestCases extends JAXBWithJSONTestCa
      */
     public ObjectReferenceMappingWriteOnlyTestCases(String name) throws Exception {
         super(name);
-        setClasses(new Class[]{Root.class});
+        setClasses(new Class<?>[]{Root.class});
         setControlDocument(XML_RESOURCE);
         setControlJSON(JSON_RESOURCE);
 
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/externalizedmetadata/mappings/xmlinversereference/XmlInverseReferenceMappingTestCases.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/externalizedmetadata/mappings/xmlinversereference/XmlInverseReferenceMappingTestCases.java
index 76e7894..18f4f7b 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/externalizedmetadata/mappings/xmlinversereference/XmlInverseReferenceMappingTestCases.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/externalizedmetadata/mappings/xmlinversereference/XmlInverseReferenceMappingTestCases.java
@@ -59,7 +59,7 @@ public XmlInverseReferenceMappingTestCases(String name) throws Exception {
         super(name);
         setControlDocument(XML_RESOURCE);
         setControlJSON(JSON_RESOURCE);
-        setClasses(new Class[]{Root.class});
+        setClasses(new Class<?>[]{Root.class});
     }
 
     @Override
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/externalizedmetadata/mappings/xmltransformation/JAXBContextTransformationMappingTestCases.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/externalizedmetadata/mappings/xmltransformation/JAXBContextTransformationMappingTestCases.java
index 9280a70..0fd60b9 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/externalizedmetadata/mappings/xmltransformation/JAXBContextTransformationMappingTestCases.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/externalizedmetadata/mappings/xmltransformation/JAXBContextTransformationMappingTestCases.java
@@ -57,7 +57,7 @@ public void testBothClassAndMethod() {
         properties.put(JAXBContextProperties.OXM_METADATA_SOURCE, metadataSourceMap);
 
         try {
-            JAXBContext jaxbContext = JAXBContextFactory.createContext(new Class[]{Employee.class}, properties, Thread.currentThread().getContextClassLoader());
+            JAXBContext jaxbContext = JAXBContextFactory.createContext(new Class<?>[]{Employee.class}, properties, Thread.currentThread().getContextClassLoader());
         } catch (JAXBException e) {
             return;
         }
@@ -79,7 +79,7 @@ public void testNoClassOrMethod() {
         properties.put(JAXBContextProperties.OXM_METADATA_SOURCE, metadataSourceMap);
 
        try {
-            JAXBContext jaxbContext = JAXBContextFactory.createContext(new Class[]{Employee.class}, properties, Thread.currentThread().getContextClassLoader());
+            JAXBContext jaxbContext = JAXBContextFactory.createContext(new Class<?>[]{Employee.class}, properties, Thread.currentThread().getContextClassLoader());
 
         } catch (JAXBException e) {
             return;
@@ -105,7 +105,7 @@ public void testInvalidMethod() {
 
         int exceptionCount = 0;
         try {
-            JAXBContext jaxbContext = JAXBContextFactory.createContext(new Class[]{Employee.class}, properties, Thread.currentThread().getContextClassLoader());
+            JAXBContext jaxbContext = JAXBContextFactory.createContext(new Class<?>[]{Employee.class}, properties, Thread.currentThread().getContextClassLoader());
 
         } catch (JAXBException e) {
             exceptionCount++;
@@ -115,7 +115,7 @@ public void testInvalidMethod() {
         // test exception from SchemaGenerator
         try {
             Map<String, XmlBindings> bindings = JAXBContextFactory.getXmlBindingsFromProperties(properties, Thread.currentThread().getContextClassLoader());
-            JavaModelInputImpl jModelInput = new JavaModelInputImpl(new Class[]{Employee.class}, new JavaModelImpl(new JaxbClassLoader(Thread.currentThread().getContextClassLoader(), new Class[]{Employee.class})));
+            JavaModelInputImpl jModelInput = new JavaModelInputImpl(new Class<?>[]{Employee.class}, new JavaModelImpl(new JaxbClassLoader(Thread.currentThread().getContextClassLoader(), new Class<?>[]{Employee.class})));
             Generator generator = new Generator(jModelInput, bindings, Thread.currentThread().getContextClassLoader(), "", false);
             generator.generateSchema();
         } catch (Exception e) {
@@ -142,7 +142,7 @@ public void testInvalidTransformerClass() {
         int exceptionCount = 0;
         // test exception from MappingsGenerator
         try {
-            JAXBContext jaxbContext = JAXBContextFactory.createContext(new Class[]{Employee.class}, properties, Thread.currentThread().getContextClassLoader());
+            JAXBContext jaxbContext = JAXBContextFactory.createContext(new Class<?>[]{Employee.class}, properties, Thread.currentThread().getContextClassLoader());
 
         } catch (JAXBException e) {
             exceptionCount++;
@@ -152,7 +152,7 @@ public void testInvalidTransformerClass() {
         // test exception from SchemaGenerator
         try {
             Map<String, XmlBindings> bindings = JAXBContextFactory.getXmlBindingsFromProperties(properties, Thread.currentThread().getContextClassLoader());
-            JavaModelInputImpl jModelInput = new JavaModelInputImpl(new Class[]{Employee.class}, new JavaModelImpl(new JaxbClassLoader(Thread.currentThread().getContextClassLoader(), new Class[]{Employee.class})));
+            JavaModelInputImpl jModelInput = new JavaModelInputImpl(new Class<?>[]{Employee.class}, new JavaModelImpl(new JaxbClassLoader(Thread.currentThread().getContextClassLoader(), new Class<?>[]{Employee.class})));
             Generator generator = new Generator(jModelInput, bindings, Thread.currentThread().getContextClassLoader(), "", false);
             generator.generateSchema();
         } catch (Exception e) {
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/externalizedmetadata/mappings/xmltransformation/MethodSetOnTypeTestCases.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/externalizedmetadata/mappings/xmltransformation/MethodSetOnTypeTestCases.java
index 2f1567e..4c1432e 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/externalizedmetadata/mappings/xmltransformation/MethodSetOnTypeTestCases.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/externalizedmetadata/mappings/xmltransformation/MethodSetOnTypeTestCases.java
@@ -37,7 +37,7 @@ public MethodSetOnTypeTestCases(String name) throws Exception {
            super(name);
            setControlDocument(XML_RESOURCE);
            setControlJSON(JSON_RESOURCE);
-           setClasses(new Class[]{Employee.class});
+           setClasses(new Class<?>[]{Employee.class});
        }
 
       @Override
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/externalizedmetadata/mappings/xmltransformation/XmlTransformationTestCases.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/externalizedmetadata/mappings/xmltransformation/XmlTransformationTestCases.java
index 1a25835..48348a9 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/externalizedmetadata/mappings/xmltransformation/XmlTransformationTestCases.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/externalizedmetadata/mappings/xmltransformation/XmlTransformationTestCases.java
@@ -43,7 +43,7 @@ public XmlTransformationTestCases(String name) throws Exception {
         super(name);
         setControlDocument(XML_RESOURCE);
         setControlJSON(JSON_RESOURCE);
-        setClasses(new Class[]{Employee.class});
+        setClasses(new Class<?>[]{Employee.class});
     }
 
     @Override
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/externalizedmetadata/namespace/NamespaceTestCases.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/externalizedmetadata/namespace/NamespaceTestCases.java
index 251d674..e8876e5 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/externalizedmetadata/namespace/NamespaceTestCases.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/externalizedmetadata/namespace/NamespaceTestCases.java
@@ -76,7 +76,7 @@ public void testBasicNamespaces() throws Exception {
         Map<String, Object> properties = new HashMap<String, Object>();
         properties.put(JAXBContextProperties.OXM_METADATA_SOURCE, bindings);
 
-        JAXBContext ctx = JAXBContextFactory.createContext(new Class[]{ Customer.class }, properties);
+        JAXBContext ctx = JAXBContextFactory.createContext(new Class<?>[]{ Customer.class }, properties);
 
         DocumentBuilderFactory builderFactory = DocumentBuilderFactory.newInstance();
         builderFactory.setNamespaceAware(true);
@@ -103,7 +103,7 @@ public void testNonDefaultRootElement() throws Exception {
         Map<String, Object> properties = new HashMap<String, Object>();
         properties.put(JAXBContextProperties.OXM_METADATA_SOURCE, bindings);
 
-        JAXBContext ctx = JAXBContextFactory.createContext(new Class[]{ Customer.class }, properties);
+        JAXBContext ctx = JAXBContextFactory.createContext(new Class<?>[]{ Customer.class }, properties);
 
         DocumentBuilderFactory builderFactory = DocumentBuilderFactory.newInstance();
         builderFactory.setNamespaceAware(true);
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/externalizedmetadata/superclassoverride/SuperClassOverrideTestCases.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/externalizedmetadata/superclassoverride/SuperClassOverrideTestCases.java
index 443d64e..7131902 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/externalizedmetadata/superclassoverride/SuperClassOverrideTestCases.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/externalizedmetadata/superclassoverride/SuperClassOverrideTestCases.java
@@ -32,7 +32,7 @@ public class SuperClassOverrideTestCases extends JAXBWithJSONTestCases {
 
     public SuperClassOverrideTestCases(String name) throws Exception {
         super(name);
-        setClasses(new Class[]{SubClass.class});
+        setClasses(new Class<?>[]{SubClass.class});
         setControlDocument(XML_RESOURCE);
         setControlJSON(JSON_RESOURCE);
     }
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/externalizedmetadata/xmlaccessororder/packagelevel/XMLAccessorOrderPackageInfoTestCases.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/externalizedmetadata/xmlaccessororder/packagelevel/XMLAccessorOrderPackageInfoTestCases.java
index f28a3ba..6d9b5d9 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/externalizedmetadata/xmlaccessororder/packagelevel/XMLAccessorOrderPackageInfoTestCases.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/externalizedmetadata/xmlaccessororder/packagelevel/XMLAccessorOrderPackageInfoTestCases.java
@@ -41,7 +41,7 @@ public class XMLAccessorOrderPackageInfoTestCases extends JAXBWithJSONTestCases{
     private static final String JSON_RESOURCE = "org/eclipse/persistence/testing/jaxb/externalizedmetadata/xmlaccessororder/employee-ordered.json";
     public XMLAccessorOrderPackageInfoTestCases(String name) throws Exception {
         super(name);
-        setClasses(new Class[]{Employee.class});
+        setClasses(new Class<?>[]{Employee.class});
         setControlDocument(XML_RESOURCE);
         setControlJSON(JSON_RESOURCE);
 
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/externalizedmetadata/xmlaccessororder/packagelevel/classoverride/XMLAccessorOrderClassOverrideTestCases.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/externalizedmetadata/xmlaccessororder/packagelevel/classoverride/XMLAccessorOrderClassOverrideTestCases.java
index 3111477..17fe035 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/externalizedmetadata/xmlaccessororder/packagelevel/classoverride/XMLAccessorOrderClassOverrideTestCases.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/externalizedmetadata/xmlaccessororder/packagelevel/classoverride/XMLAccessorOrderClassOverrideTestCases.java
@@ -41,7 +41,7 @@ public class XMLAccessorOrderClassOverrideTestCases extends JAXBWithJSONTestCase
 
     public XMLAccessorOrderClassOverrideTestCases(String name) throws Exception {
         super(name);
-        setClasses(new Class[]{Employee.class});
+        setClasses(new Class<?>[]{Employee.class});
         setControlDocument(XML_RESOURCE);
         setControlJSON(JSON_RESOURCE);
     }
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/externalizedmetadata/xmlaccessororder/packagelevel/javaclassoverride/XMLAccessorOrderJavaClassOverrideTestCases.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/externalizedmetadata/xmlaccessororder/packagelevel/javaclassoverride/XMLAccessorOrderJavaClassOverrideTestCases.java
index e0bfee9..9d7d746 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/externalizedmetadata/xmlaccessororder/packagelevel/javaclassoverride/XMLAccessorOrderJavaClassOverrideTestCases.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/externalizedmetadata/xmlaccessororder/packagelevel/javaclassoverride/XMLAccessorOrderJavaClassOverrideTestCases.java
@@ -40,7 +40,7 @@ public class XMLAccessorOrderJavaClassOverrideTestCases extends JAXBWithJSONTest
 
     public XMLAccessorOrderJavaClassOverrideTestCases(String name) throws Exception {
         super(name);
-        setClasses(new Class[]{Employee.class});
+        setClasses(new Class<?>[]{Employee.class});
         setControlDocument(XML_RESOURCE);
         setControlJSON(JSON_RESOURCE);
     }
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 2e00630..99acc1d 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
@@ -42,7 +42,7 @@ public class XmlAccessorTypeTestCases extends JAXBWithJSONTestCases {
      */
     public XmlAccessorTypeTestCases(String name) throws Exception{
         super(name);
-        setClasses(new Class[]{Employee.class});
+        setClasses(new Class<?>[]{Employee.class});
         setControlDocument(XML_RESOURCE);
         setControlJSON(JSON_RESOURCE);
     }
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 f2ecdda..247d06d 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
@@ -44,7 +44,7 @@ public class XmlAccessorTypeFieldTestCases extends JAXBWithJSONTestCases {
      */
     public XmlAccessorTypeFieldTestCases(String name) throws Exception{
         super(name);
-        setClasses(new Class[]{Employee.class});
+        setClasses(new Class<?>[]{Employee.class});
         setControlDocument(XML_RESOURCE);
         setControlJSON(JSON_RESOURCE);
     }
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 480debd..baab8b8 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
@@ -37,7 +37,7 @@ public class XmlAccessorTypeInheritanceTestCases extends JAXBWithJSONTestCases {
      */
     public XmlAccessorTypeInheritanceTestCases(String name) throws Exception {
         super(name);
-        setClasses(new Class[] { A.class, B.class });
+        setClasses(new Class<?>[] { A.class, B.class });
         setControlDocument(XML_RESOURCE);
         setControlJSON(JSON_RESOURCE);
     }
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 be6c0d7..e25b8e5 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
@@ -41,7 +41,7 @@ public class XmlAccessorTypeNoneTestCases extends JAXBWithJSONTestCases {
      */
     public XmlAccessorTypeNoneTestCases(String name) throws Exception{
         super(name);
-        setClasses(new Class[]{Employee.class});
+        setClasses(new Class<?>[]{Employee.class});
         setControlDocument(XML_RESOURCE);
         setControlJSON(JSON_RESOURCE);
     }
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 703160f..f722482 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
@@ -41,7 +41,7 @@ public class XmlAccessorTypeNoneWithPropOrderTestCases extends JAXBWithJSONTestC
      */
     public XmlAccessorTypeNoneWithPropOrderTestCases(String name) throws Exception{
         super(name);
-        setClasses(new Class[]{Employee.class});
+        setClasses(new Class<?>[]{Employee.class});
         setControlDocument(XML_RESOURCE);
         setControlJSON(JSON_RESOURCE);
     }
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 0bca46a..592a1dd 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
@@ -45,7 +45,7 @@ public class XmlAccessorTypePackageTestCases extends JAXBWithJSONTestCases {
      */
     public XmlAccessorTypePackageTestCases(String name) throws Exception{
         super(name);
-        setClasses(new Class[]{Employee.class});
+        setClasses(new Class<?>[]{Employee.class});
         setControlDocument(XML_RESOURCE);
         setControlJSON(JSON_RESOURCE);
     }
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 7129ee0..586bce9 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
@@ -45,7 +45,7 @@ public class XmlAccessorTypePackageClassOverrideTestCases extends JAXBWithJSONTe
      */
     public XmlAccessorTypePackageClassOverrideTestCases(String name) throws Exception{
         super(name);
-        setClasses(new Class[]{Employee.class});
+        setClasses(new Class<?>[]{Employee.class});
         setControlDocument(XML_RESOURCE);
         setControlJSON(JSON_RESOURCE);
     }
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 906d483..766594c 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
@@ -46,7 +46,7 @@ public class XmlAccessorTypePackageJavaClassOverrideTestCases extends JAXBWithJS
      */
     public XmlAccessorTypePackageJavaClassOverrideTestCases(String name) throws Exception{
         super(name);
-        setClasses(new Class[]{Employee.class});
+        setClasses(new Class<?>[]{Employee.class});
         setControlDocument(XML_RESOURCE);
         setControlJSON(JSON_RESOURCE);
     }
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 78946e4..b2957f9 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
@@ -38,7 +38,7 @@ public class XmlAccessorTypePackageNoOverrideTestCases extends JAXBWithJSONTestC
      */
     public XmlAccessorTypePackageNoOverrideTestCases(String name) throws Exception{
         super(name);
-        setClasses(new Class[]{Employee.class});
+        setClasses(new Class<?>[]{Employee.class});
         setControlDocument(XML_RESOURCE);
         setControlJSON(JSON_RESOURCE);
     }
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 28e5a86..6f88371 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
@@ -44,7 +44,7 @@ public class XmlAccessorTypePropertyTestCases extends JAXBWithJSONTestCases {
      */
     public XmlAccessorTypePropertyTestCases(String name) throws Exception{
         super(name);
-        setClasses(new Class[]{Employee.class});
+        setClasses(new Class<?>[]{Employee.class});
         setControlDocument(XML_RESOURCE);
         setControlJSON(JSON_RESOURCE);
     }
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/externalizedmetadata/xmlaccessortype/propertylevel/FieldAccessTestCases.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/externalizedmetadata/xmlaccessortype/propertylevel/FieldAccessTestCases.java
index af77915..59244fd 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/externalizedmetadata/xmlaccessortype/propertylevel/FieldAccessTestCases.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/externalizedmetadata/xmlaccessortype/propertylevel/FieldAccessTestCases.java
@@ -31,7 +31,7 @@ public class FieldAccessTestCases extends JAXBWithJSONTestCases {
 
     public FieldAccessTestCases(String name) throws Exception {
         super(name);
-        setClasses(new Class[]{Customer.class});
+        setClasses(new Class<?>[]{Customer.class});
         setControlDocument(XML_RESOURCE);
         setControlJSON(JSON_RESOURCE);
     }
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/externalizedmetadata/xmlaccessortype/propertylevel/PropertyAccessTestCases.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/externalizedmetadata/xmlaccessortype/propertylevel/PropertyAccessTestCases.java
index 149c9cc..70f8f85 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/externalizedmetadata/xmlaccessortype/propertylevel/PropertyAccessTestCases.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/externalizedmetadata/xmlaccessortype/propertylevel/PropertyAccessTestCases.java
@@ -31,7 +31,7 @@ public class PropertyAccessTestCases extends JAXBWithJSONTestCases {
 
     public PropertyAccessTestCases(String name) throws Exception {
         super(name);
-        setClasses(new Class[]{Customer.class});
+        setClasses(new Class<?>[]{Customer.class});
         setControlDocument(XML_RESOURCE);
         setControlJSON(JSON_RESOURCE);
     }
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/externalizedmetadata/xmlaccessortype/propertylevel/UnspecifiedTestCases.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/externalizedmetadata/xmlaccessortype/propertylevel/UnspecifiedTestCases.java
index b0534b9..528095e 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/externalizedmetadata/xmlaccessortype/propertylevel/UnspecifiedTestCases.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/externalizedmetadata/xmlaccessortype/propertylevel/UnspecifiedTestCases.java
@@ -32,7 +32,7 @@ public class UnspecifiedTestCases extends JAXBWithJSONTestCases {
 
     public UnspecifiedTestCases(String name) throws Exception {
         super(name);
-        setClasses(new Class[]{Customer.class});
+        setClasses(new Class<?>[]{Customer.class});
         setControlDocument(XML_RESOURCE);
         setControlJSON(JSON_RESOURCE);
     }
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 c7b57c8..31adba6 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
@@ -44,7 +44,7 @@ public class XmlAccessorTypePublicMemberTestCases extends JAXBWithJSONTestCases
      */
     public XmlAccessorTypePublicMemberTestCases(String name) throws Exception{
         super(name);
-        setClasses(new Class[]{Employee.class});
+        setClasses(new Class<?>[]{Employee.class});
         setControlDocument(XML_RESOURCE);
         setControlJSON(JSON_RESOURCE);
     }
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/externalizedmetadata/xmladapter/classlevel/AdapterOnClassTestCases.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/externalizedmetadata/xmladapter/classlevel/AdapterOnClassTestCases.java
index ec57ed5..2b4c271 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/externalizedmetadata/xmladapter/classlevel/AdapterOnClassTestCases.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/externalizedmetadata/xmladapter/classlevel/AdapterOnClassTestCases.java
@@ -41,7 +41,7 @@ public class AdapterOnClassTestCases extends JAXBWithJSONTestCases{
 
     public AdapterOnClassTestCases(String name) throws Exception {
         super(name);
-        setClasses(new Class[]{org.eclipse.persistence.testing.jaxb.externalizedmetadata.xmladapter.classlevel.MyClass.class});
+        setClasses(new Class<?>[]{org.eclipse.persistence.testing.jaxb.externalizedmetadata.xmladapter.classlevel.MyClass.class});
         setControlDocument(XML_RESOURCE);
         setControlJSON(JSON_RESOURCE);
     }
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/externalizedmetadata/xmladapter/hexbinary/AdapterHexBinaryTestCases.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/externalizedmetadata/xmladapter/hexbinary/AdapterHexBinaryTestCases.java
index 5329e7e..0308fad 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/externalizedmetadata/xmladapter/hexbinary/AdapterHexBinaryTestCases.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/externalizedmetadata/xmladapter/hexbinary/AdapterHexBinaryTestCases.java
@@ -35,7 +35,7 @@ public class AdapterHexBinaryTestCases extends JAXBWithJSONTestCases{
 
     public AdapterHexBinaryTestCases(String name) throws Exception {
         super(name);
-        setClasses(new Class[]{Customer.class});
+        setClasses(new Class<?>[]{Customer.class});
         setControlDocument(XML_RESOURCE);
         setControlJSON(JSON_RESOURCE);
     }
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/externalizedmetadata/xmladapter/list/XmlAdapterListTestCases.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/externalizedmetadata/xmladapter/list/XmlAdapterListTestCases.java
index e5924df..c9faf3b 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/externalizedmetadata/xmladapter/list/XmlAdapterListTestCases.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/externalizedmetadata/xmladapter/list/XmlAdapterListTestCases.java
@@ -26,7 +26,7 @@ public class XmlAdapterListTestCases extends JAXBWithJSONTestCases{
 
     public XmlAdapterListTestCases(String name) throws Exception {
         super(name);
-        setClasses(new Class[]{FooWithBar.class, Bar.class});
+        setClasses(new Class<?>[]{FooWithBar.class, Bar.class});
         setControlDocument(XML_RESOURCE);
         setControlJSON(JSON_RESOURCE);
     }
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/externalizedmetadata/xmladapter/list/XmlAdapterListsTestCases.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/externalizedmetadata/xmladapter/list/XmlAdapterListsTestCases.java
index 007acae..956854b 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/externalizedmetadata/xmladapter/list/XmlAdapterListsTestCases.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/externalizedmetadata/xmladapter/list/XmlAdapterListsTestCases.java
@@ -24,7 +24,7 @@ public class XmlAdapterListsTestCases extends JAXBWithJSONTestCases{
 
     public XmlAdapterListsTestCases(String name) throws Exception {
         super(name);
-        setClasses(new Class[]{FooWithBars.class, Bar.class});
+        setClasses(new Class<?>[]{FooWithBars.class, Bar.class});
         setControlDocument(XML_RESOURCE);
         setControlJSON(JSON_RESOURCE);
     }
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/externalizedmetadata/xmladapter/negative/XmlAdapterNegativeTestCases.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/externalizedmetadata/xmladapter/negative/XmlAdapterNegativeTestCases.java
index 91d6274..5b7f90c 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/externalizedmetadata/xmladapter/negative/XmlAdapterNegativeTestCases.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/externalizedmetadata/xmladapter/negative/XmlAdapterNegativeTestCases.java
@@ -42,7 +42,7 @@ public void testNegativePackageLevelXmlAdapter() throws Exception {
         Map<String,Object> properties = new HashMap<String,Object>();
         properties.put(JAXBContextProperties.OXM_METADATA_SOURCE, metadata);
 
-        Class<?>[] classes = new Class[1];
+        Class<?>[] classes = new Class<?>[1];
         classes[0] = Customer.class;
         try {
             JAXBContextFactory.createContext(classes, properties);
@@ -61,7 +61,7 @@ public void testNegativeClassLevelXmlAdapter() throws Exception {
         Map<String,Object> properties = new HashMap<String,Object>();
         properties.put(JAXBContextProperties.OXM_METADATA_SOURCE, metadata);
 
-        Class<?>[] classes = new Class[1];
+        Class<?>[] classes = new Class<?>[1];
         classes[0] = Customer.class;
         try {
             JAXBContextFactory.createContext(classes, properties);
@@ -80,7 +80,7 @@ public void testNegativePropertyLevelXmlAdapter() throws Exception {
         Map<String,Object> properties = new HashMap<String,Object>();
         properties.put(JAXBContextProperties.OXM_METADATA_SOURCE, metadata);
 
-        Class<?>[] classes = new Class[1];
+        Class<?>[] classes = new Class<?>[1];
         classes[0] = Customer.class;
         try {
             JAXBContextFactory.createContext(classes, properties);
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/externalizedmetadata/xmladapter/packagelevel/AdapterOnPackageTestCases.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/externalizedmetadata/xmladapter/packagelevel/AdapterOnPackageTestCases.java
index 5e7b242..b3222dc 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/externalizedmetadata/xmladapter/packagelevel/AdapterOnPackageTestCases.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/externalizedmetadata/xmladapter/packagelevel/AdapterOnPackageTestCases.java
@@ -43,7 +43,7 @@ public class AdapterOnPackageTestCases extends JAXBWithJSONTestCases{
 
     public AdapterOnPackageTestCases(String name) throws Exception {
         super(name);
-        setClasses(new Class[]{MyClass.class, SomeLameClass.class});
+        setClasses(new Class<?>[]{MyClass.class, SomeLameClass.class});
         setControlDocument(XML_RESOURCE);
         setControlJSON(JSON_RESOURCE);
     }
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/externalizedmetadata/xmladapter/property/AdapterOnPropertyTestCases.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/externalizedmetadata/xmladapter/property/AdapterOnPropertyTestCases.java
index 6310114..07925d6 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/externalizedmetadata/xmladapter/property/AdapterOnPropertyTestCases.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/externalizedmetadata/xmladapter/property/AdapterOnPropertyTestCases.java
@@ -42,7 +42,7 @@ public class AdapterOnPropertyTestCases extends JAXBWithJSONTestCases{
 
     public AdapterOnPropertyTestCases(String name) throws Exception {
         super(name);
-        setClasses(new Class[]{org.eclipse.persistence.testing.jaxb.externalizedmetadata.xmladapter.property.MyClass.class});
+        setClasses(new Class<?>[]{org.eclipse.persistence.testing.jaxb.externalizedmetadata.xmladapter.property.MyClass.class});
         setControlDocument(XML_RESOURCE);
         setControlJSON(JSON_RESOURCE);
     }
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/externalizedmetadata/xmladapter/unmappable/ClassLevelTestCases.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/externalizedmetadata/xmladapter/unmappable/ClassLevelTestCases.java
index ff056f4..7e9e819 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/externalizedmetadata/xmladapter/unmappable/ClassLevelTestCases.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/externalizedmetadata/xmladapter/unmappable/ClassLevelTestCases.java
@@ -57,7 +57,7 @@ protected Map getProperties() {
     public ClassLevelTestCases(String name) throws Exception {
         super(name);
         setUp();
-        setTypes(new Class[]{Container.class});
+        setTypes(new Class<?>[]{Container.class});
         setControlDocument("org/eclipse/persistence/testing/jaxb/externalizedmetadata/xmladapter/unmappable/container_class.xml");
         setControlJSON("org/eclipse/persistence/testing/jaxb/externalizedmetadata/xmladapter/unmappable/container_class.json");
     }
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/externalizedmetadata/xmladapter/unmappable/PackageLevelTestCases.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/externalizedmetadata/xmladapter/unmappable/PackageLevelTestCases.java
index 34e8ebb..ac26663 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/externalizedmetadata/xmladapter/unmappable/PackageLevelTestCases.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/externalizedmetadata/xmladapter/unmappable/PackageLevelTestCases.java
@@ -57,7 +57,7 @@ protected Map getProperties() {
     public PackageLevelTestCases(String name) throws Exception {
         super(name);
         setUp();
-        setTypes(new Class[]{Container.class});
+        setTypes(new Class<?>[]{Container.class});
         setControlDocument("org/eclipse/persistence/testing/jaxb/externalizedmetadata/xmladapter/unmappable/container.xml");
         setControlJSON("org/eclipse/persistence/testing/jaxb/externalizedmetadata/xmladapter/unmappable/container.json");
     }
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/externalizedmetadata/xmladapter/unmappable/PropertyLevelTestCases.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/externalizedmetadata/xmladapter/unmappable/PropertyLevelTestCases.java
index dad6616..5b4959d 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/externalizedmetadata/xmladapter/unmappable/PropertyLevelTestCases.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/externalizedmetadata/xmladapter/unmappable/PropertyLevelTestCases.java
@@ -53,7 +53,7 @@ protected Map getProperties() {
     public PropertyLevelTestCases(String name) throws Exception {
         super(name);
         setUp();
-        setTypes(new Class[]{Container.class});
+        setTypes(new Class<?>[]{Container.class});
         setControlDocument("org/eclipse/persistence/testing/jaxb/externalizedmetadata/xmladapter/unmappable/container.xml");
         setControlJSON("org/eclipse/persistence/testing/jaxb/externalizedmetadata/xmladapter/unmappable/container.json");
     }
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/externalizedmetadata/xmladapter/xmlelementref/AdapterWithElementRefTestCases.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/externalizedmetadata/xmladapter/xmlelementref/AdapterWithElementRefTestCases.java
index 7f41eda..9f7b4eb 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/externalizedmetadata/xmladapter/xmlelementref/AdapterWithElementRefTestCases.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/externalizedmetadata/xmladapter/xmlelementref/AdapterWithElementRefTestCases.java
@@ -34,7 +34,7 @@ public class AdapterWithElementRefTestCases extends JAXBWithJSONTestCases{
 
     public AdapterWithElementRefTestCases(String name) throws Exception {
         super(name);
-        setClasses(new Class[]{org.eclipse.persistence.testing.jaxb.externalizedmetadata.xmladapter.property.MyClass.class});
+        setClasses(new Class<?>[]{org.eclipse.persistence.testing.jaxb.externalizedmetadata.xmladapter.property.MyClass.class});
         setControlDocument(XML_RESOURCE);
         setControlJSON(JSON_RESOURCE);
     }
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/externalizedmetadata/xmladapter/xmlelementref/AdapterWithElementRefsTestCases.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/externalizedmetadata/xmladapter/xmlelementref/AdapterWithElementRefsTestCases.java
index c41be7d..bb49d8e 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/externalizedmetadata/xmladapter/xmlelementref/AdapterWithElementRefsTestCases.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/externalizedmetadata/xmladapter/xmlelementref/AdapterWithElementRefsTestCases.java
@@ -35,7 +35,7 @@ public class AdapterWithElementRefsTestCases extends JAXBWithJSONTestCases{
 
     public AdapterWithElementRefsTestCases(String name) throws Exception {
         super(name);
-        setClasses(new Class[]{org.eclipse.persistence.testing.jaxb.externalizedmetadata.xmladapter.property.MyClass.class});
+        setClasses(new Class<?>[]{org.eclipse.persistence.testing.jaxb.externalizedmetadata.xmladapter.property.MyClass.class});
         setControlDocument(XML_RESOURCE);
         setControlJSON(JSON_RESOURCE);
     }
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 8606a5a..1c5f11b 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
@@ -47,7 +47,7 @@ public XmlAnyAttributeTestCases(String name) throws Exception{
         super(name);
         setControlDocument(XML_RESOURCE);
         setControlJSON(JSON_RESOURCE);
-        setClasses(new Class[]{Employee.class});
+        setClasses(new Class<?>[]{Employee.class});
 
         Map<String, String> namespaces = new HashMap<String, String>();
         namespaces.put("www.example.com","ns0");
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/externalizedmetadata/xmlanyelement/XmlAnyElementAdapterListTestCases.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/externalizedmetadata/xmlanyelement/XmlAnyElementAdapterListTestCases.java
index 426592f..7eccbee 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/externalizedmetadata/xmlanyelement/XmlAnyElementAdapterListTestCases.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/externalizedmetadata/xmlanyelement/XmlAnyElementAdapterListTestCases.java
@@ -34,7 +34,7 @@ public XmlAnyElementAdapterListTestCases(String name) throws Exception{
         super(name);
         setControlDocument(XML_RESOURCE);
         setControlJSON(JSON_RESOURCE);
-        setClasses(new Class[]{EmployeeWithList.class});
+        setClasses(new Class<?>[]{EmployeeWithList.class});
 
     }
 
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/externalizedmetadata/xmlanyelement/XmlAnyElementAdapterTestCases.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/externalizedmetadata/xmlanyelement/XmlAnyElementAdapterTestCases.java
index 4c96252..0e64404 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/externalizedmetadata/xmlanyelement/XmlAnyElementAdapterTestCases.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/externalizedmetadata/xmlanyelement/XmlAnyElementAdapterTestCases.java
@@ -33,7 +33,7 @@ public XmlAnyElementAdapterTestCases(String name) throws Exception{
         super(name);
         setControlDocument(XML_RESOURCE);
         setControlJSON(JSON_RESOURCE);
-        setClasses(new Class[]{Employee.class});
+        setClasses(new Class<?>[]{Employee.class});
 
     }
 
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/externalizedmetadata/xmlanyelement/XmlAnyElementBaseLAXFalseTestCases.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/externalizedmetadata/xmlanyelement/XmlAnyElementBaseLAXFalseTestCases.java
index 3b88a40..db0b7f0 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/externalizedmetadata/xmlanyelement/XmlAnyElementBaseLAXFalseTestCases.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/externalizedmetadata/xmlanyelement/XmlAnyElementBaseLAXFalseTestCases.java
@@ -39,7 +39,7 @@ public XmlAnyElementBaseLAXFalseTestCases(String name) throws Exception{
         super(name);
         setControlDocument(XML_RESOURCE);
         setControlJSON(JSON_RESOURCE);
-        setClasses(new Class[]{Employee.class});
+        setClasses(new Class<?>[]{Employee.class});
 
     }
 
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/externalizedmetadata/xmlanyelement/XmlAnyElementBaseLAXTrueTestCases.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/externalizedmetadata/xmlanyelement/XmlAnyElementBaseLAXTrueTestCases.java
index 4bc2325..9cfcf55 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/externalizedmetadata/xmlanyelement/XmlAnyElementBaseLAXTrueTestCases.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/externalizedmetadata/xmlanyelement/XmlAnyElementBaseLAXTrueTestCases.java
@@ -36,7 +36,7 @@ public XmlAnyElementBaseLAXTrueTestCases(String name) throws Exception{
         super(name);
         setControlDocument(XML_RESOURCE);
         setControlJSON(JSON_RESOURCE);
-        setClasses(new Class[]{Employee.class});
+        setClasses(new Class<?>[]{Employee.class});
 
     }
 
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/externalizedmetadata/xmlanyelement/XmlAnyElementBaseTestCases.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/externalizedmetadata/xmlanyelement/XmlAnyElementBaseTestCases.java
index e130fa0..5729d0f 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/externalizedmetadata/xmlanyelement/XmlAnyElementBaseTestCases.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/externalizedmetadata/xmlanyelement/XmlAnyElementBaseTestCases.java
@@ -39,7 +39,7 @@ public XmlAnyElementBaseTestCases(String name) throws Exception{
         super(name);
         setControlDocument(XML_RESOURCE);
         setControlJSON(JSON_RESOURCE);
-        setClasses(new Class[]{Employee.class});
+        setClasses(new Class<?>[]{Employee.class});
 
     }
 
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/externalizedmetadata/xmlanyelement/XmlAnyElementDomHandlerTestCases.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/externalizedmetadata/xmlanyelement/XmlAnyElementDomHandlerTestCases.java
index e6f503c..25627f4 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/externalizedmetadata/xmlanyelement/XmlAnyElementDomHandlerTestCases.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/externalizedmetadata/xmlanyelement/XmlAnyElementDomHandlerTestCases.java
@@ -38,7 +38,7 @@ public XmlAnyElementDomHandlerTestCases(String name) throws Exception{
         super(name);
         setControlDocument(XML_RESOURCE);
         setControlJSON(JSON_RESOURCE);
-        setClasses(new Class[]{Employee.class});
+        setClasses(new Class<?>[]{Employee.class});
     }
 
     @Override
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/externalizedmetadata/xmlanyelement/XmlAnyElementListTestCases.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/externalizedmetadata/xmlanyelement/XmlAnyElementListTestCases.java
index 2cd35e1..4c068ea 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/externalizedmetadata/xmlanyelement/XmlAnyElementListTestCases.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/externalizedmetadata/xmlanyelement/XmlAnyElementListTestCases.java
@@ -44,7 +44,7 @@ public XmlAnyElementListTestCases(String name) throws Exception{
        super(name);
        setControlDocument(XML_RESOURCE);
        setControlJSON(JSON_RESOURCE);
-       setClasses(new Class[]{EmployeeWithList.class});
+       setClasses(new Class<?>[]{EmployeeWithList.class});
 
     }
 
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/externalizedmetadata/xmlanyelement/xmlelementrefs/XmlAnyElementWithEltRefsTestCases.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/externalizedmetadata/xmlanyelement/xmlelementrefs/XmlAnyElementWithEltRefsTestCases.java
index d1ac38f..fe70aec 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/externalizedmetadata/xmlanyelement/xmlelementrefs/XmlAnyElementWithEltRefsTestCases.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/externalizedmetadata/xmlanyelement/xmlelementrefs/XmlAnyElementWithEltRefsTestCases.java
@@ -38,7 +38,7 @@ public XmlAnyElementWithEltRefsTestCases(String name) throws Exception{
         super(name);
         setControlDocument(XML_RESOURCE);
         setControlJSON(JSON_RESOURCE);
-        setClasses(new Class[]{FooImplNoAnnotations.class, Bar.class});
+        setClasses(new Class<?>[]{FooImplNoAnnotations.class, Bar.class});
 
     }
 
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/externalizedmetadata/xmlanyelement/xmlelementrefs2/XmlAnyElementWithEltRefsNonGlobalTestCases.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/externalizedmetadata/xmlanyelement/xmlelementrefs2/XmlAnyElementWithEltRefsNonGlobalTestCases.java
index 30ea800..f49c689 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/externalizedmetadata/xmlanyelement/xmlelementrefs2/XmlAnyElementWithEltRefsNonGlobalTestCases.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/externalizedmetadata/xmlanyelement/xmlelementrefs2/XmlAnyElementWithEltRefsNonGlobalTestCases.java
@@ -37,7 +37,7 @@ public XmlAnyElementWithEltRefsNonGlobalTestCases(String name) throws Exception{
         super(name);
         setControlDocument(XML_RESOURCE);
         setControlJSON(JSON_RESOURCE);
-        setClasses(new Class[]{Customer.class, ObjectFactory2.class });
+        setClasses(new Class<?>[]{Customer.class, ObjectFactory2.class });
         jaxbMarshaller.setProperty(MarshallerProperties.JSON_ATTRIBUTE_PREFIX, "@");
         jaxbUnmarshaller.setProperty(UnmarshallerProperties.JSON_ATTRIBUTE_PREFIX, "@");
     }
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/externalizedmetadata/xmlanyelement/xmlelementrefs3/XmlAnyElementWithEltRefsViaAnnotationTestCases.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/externalizedmetadata/xmlanyelement/xmlelementrefs3/XmlAnyElementWithEltRefsViaAnnotationTestCases.java
index 045d724..d975e1d 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/externalizedmetadata/xmlanyelement/xmlelementrefs3/XmlAnyElementWithEltRefsViaAnnotationTestCases.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/externalizedmetadata/xmlanyelement/xmlelementrefs3/XmlAnyElementWithEltRefsViaAnnotationTestCases.java
@@ -33,7 +33,7 @@ public XmlAnyElementWithEltRefsViaAnnotationTestCases(String name) throws Except
         super(name);
         setControlDocument(XML_RESOURCE);
         setControlJSON(JSON_RESOURCE);
-        setClasses(new Class[]{FooImpl.class, Bar.class, ObjectFactory3.class});
+        setClasses(new Class<?>[]{FooImpl.class, Bar.class, ObjectFactory3.class});
         jaxbMarshaller.setProperty(MarshallerProperties.JSON_ATTRIBUTE_PREFIX, "@");
         jaxbUnmarshaller.setProperty(UnmarshallerProperties.JSON_ATTRIBUTE_PREFIX, "@");
     }
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 f071814..30ffcb2 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
@@ -90,7 +90,7 @@ public void testXmlAttachmentRefUnmarshalThenMarshal() throws JAXBException {
         }
 */
 
-        Class[] classesToProcess = new Class[] { AttTypes.class };
+        Class<?>[] classesToProcess = new Class<?>[] { AttTypes.class };
         MySchemaOutputResolver outputResolver = generateSchema(classesToProcess, CONTEXT_PATH , PATH, 1);
 
         // test unmarshal
@@ -168,7 +168,7 @@ public void testInvalidXmlAttachmentRef() {
         boolean exceptionOccurred = false;
         JAXBContext jaxbContext = null;
         try {
-            jaxbContext = (JAXBContext) JAXBContextFactory.createContext(new Class[] { AttTypes.class }, properties);
+            jaxbContext = (JAXBContext) JAXBContextFactory.createContext(new Class<?>[] { AttTypes.class }, properties);
         } catch (JAXBException e1) {
             exceptionOccurred = true;
         }
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 b5df458..31768de 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
@@ -50,7 +50,7 @@ public XmlAttributeTestCases(String name) throws Exception{
         super(name);
         setControlDocument(XML_RESOURCE);
         setControlJSON(JSON_RESOURCE);
-        setClasses(new Class[]{Employee.class});
+        setClasses(new Class<?>[]{Employee.class});
     }
 
     @Override
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 71a3e99..a1a4727 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
@@ -46,7 +46,7 @@ public class XmlClassExtractorTestCases extends JAXBWithJSONTestCases {
      */
     public XmlClassExtractorTestCases(String name) throws Exception{
         super(name);
-        setClasses(new Class[]{Car.class, Vehicle.class, ParkingLot.class });
+        setClasses(new Class<?>[]{Car.class, Vehicle.class, ParkingLot.class });
         setControlDocument(XML_RESOURCE);
         setControlJSON(JSON_RESOURCE);
     }
@@ -116,7 +116,7 @@ public void testSchemaGen() throws Exception{
      */
     public void testUnmarshalFailure() throws Exception{
         // create the JAXBContext for this test (metadata file is validated as well)
-        JAXBContext jaxbContextInvalid = (JAXBContext) JAXBContextFactory.createContext(new Class[]{Car.class, Vehicle.class, ParkingLot.class}, getInvalidProperties());
+        JAXBContext jaxbContextInvalid = (JAXBContext) JAXBContextFactory.createContext(new Class<?>[]{Car.class, Vehicle.class, ParkingLot.class}, getInvalidProperties());
         Unmarshaller unmarshaller = jaxbContextInvalid.createUnmarshaller();
         try {
             InputStream iDocStream = getClass().getClassLoader().getResourceAsStream(XML_RESOURCE);
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 7e29498..263afb5 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
@@ -49,7 +49,7 @@ public class XmlCustomizerTestCases extends JAXBWithJSONTestCases {
      */
     public XmlCustomizerTestCases(String name) throws Exception {
         super(name);
-        setClasses(new Class[]{Employee.class});
+        setClasses(new Class<?>[]{Employee.class});
         setControlDocument(XML_RESOURCE);
         setControlJSON(JSON_RESOURCE);
     }
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/externalizedmetadata/xmlcustomizer/XmlCustomizerWithOverrideTestCases.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/externalizedmetadata/xmlcustomizer/XmlCustomizerWithOverrideTestCases.java
index 49d81a2..3ff89d5 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/externalizedmetadata/xmlcustomizer/XmlCustomizerWithOverrideTestCases.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/externalizedmetadata/xmlcustomizer/XmlCustomizerWithOverrideTestCases.java
@@ -43,7 +43,7 @@ public class XmlCustomizerWithOverrideTestCases extends JAXBWithJSONTestCases{
 
     public XmlCustomizerWithOverrideTestCases(String name) throws Exception {
         super(name);
-        setClasses(new Class[]{Employee.class});
+        setClasses(new Class<?>[]{Employee.class});
         setControlDocument(XML_RESOURCE);
         setControlJSON(JSON_RESOURCE);
 
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 a617d7b..128ed84 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
@@ -49,7 +49,7 @@ public XmlDiscriminatorTestCases(String name)throws Exception {
         setWriteControlDocument(XML_WRITE_RESOURCE);
         setControlJSON(JSON_RESOURCE);
         setWriteControlJSON(JSON_WRITE_RESOURCE);
-        setClasses(new Class[] { Car.class, Vehicle.class });
+        setClasses(new Class<?>[] { Car.class, Vehicle.class });
     }
 
     @Override
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 ea9c76e..6b5001e 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
@@ -53,7 +53,7 @@ public class XmlElementTestCases extends JAXBWithJSONTestCases {
      */
     public XmlElementTestCases(String name) throws Exception {
         super(name);
-        setClasses(new Class[] { Employee.class});
+        setClasses(new Class<?>[] { Employee.class});
     }
 
      @Override
@@ -114,7 +114,7 @@ public void testTeamWithListOfPlayersSchemaGen() throws Exception{
         Map<String, Object> properties = new HashMap<>();
         properties.put(JAXBContextProperties.OXM_METADATA_SOURCE, metadataSourceMap);
 
-        JAXBContext jContext = (JAXBContext) JAXBContextFactory.createContext(new Class[] { Team.class }, properties, loader);
+        JAXBContext jContext = (JAXBContext) JAXBContextFactory.createContext(new Class<?>[] { Team.class }, properties, loader);
 
         MyStreamSchemaOutputResolver outputResolver = new MyStreamSchemaOutputResolver();
         jContext.generateSchema(outputResolver);
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/externalizedmetadata/xmlelementnillable/XmlElementNillablePackageLevelOverrideTestCases.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/externalizedmetadata/xmlelementnillable/XmlElementNillablePackageLevelOverrideTestCases.java
index c209836..6f4a5ec 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/externalizedmetadata/xmlelementnillable/XmlElementNillablePackageLevelOverrideTestCases.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/externalizedmetadata/xmlelementnillable/XmlElementNillablePackageLevelOverrideTestCases.java
@@ -34,7 +34,7 @@ public class XmlElementNillablePackageLevelOverrideTestCases extends JAXBTestCas
     public XmlElementNillablePackageLevelOverrideTestCases(String name) throws Exception {
         super(name);
         setControlDocument(XML_CONTROL_RESOURCE);
-        setClasses(new Class[] { PackageRootOverride.class });
+        setClasses(new Class<?>[] { PackageRootOverride.class });
     }
 
     @Override
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/externalizedmetadata/xmlelementnillable/XmlElementNillablePackageLevelTestCases.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/externalizedmetadata/xmlelementnillable/XmlElementNillablePackageLevelTestCases.java
index d983bf1..17da8cb 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/externalizedmetadata/xmlelementnillable/XmlElementNillablePackageLevelTestCases.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/externalizedmetadata/xmlelementnillable/XmlElementNillablePackageLevelTestCases.java
@@ -34,7 +34,7 @@ public class XmlElementNillablePackageLevelTestCases extends JAXBTestCases {
     public XmlElementNillablePackageLevelTestCases(String name) throws Exception {
         super(name);
         setControlDocument(XML_CONTROL_RESOURCE);
-        setClasses(new Class[] { Root.class });
+        setClasses(new Class<?>[] { Root.class });
     }
 
     @Override
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/externalizedmetadata/xmlelementnillable/XmlElementNillablePackageTypeOverrideTestCases.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/externalizedmetadata/xmlelementnillable/XmlElementNillablePackageTypeOverrideTestCases.java
index a57380c..a03c174 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/externalizedmetadata/xmlelementnillable/XmlElementNillablePackageTypeOverrideTestCases.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/externalizedmetadata/xmlelementnillable/XmlElementNillablePackageTypeOverrideTestCases.java
@@ -34,7 +34,7 @@ public class XmlElementNillablePackageTypeOverrideTestCases extends JAXBTestCase
     public XmlElementNillablePackageTypeOverrideTestCases(String name) throws Exception {
         super(name);
         setControlDocument(XML_CONTROL_RESOURCE);
-        setClasses(new Class[] { PackageTypeOverride.class });
+        setClasses(new Class<?>[] { PackageTypeOverride.class });
     }
 
     @Override
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/externalizedmetadata/xmlelementnillable/XmlElementNillableTypeLevelOverrideTestCases.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/externalizedmetadata/xmlelementnillable/XmlElementNillableTypeLevelOverrideTestCases.java
index 38c87b5..6cf2dbb 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/externalizedmetadata/xmlelementnillable/XmlElementNillableTypeLevelOverrideTestCases.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/externalizedmetadata/xmlelementnillable/XmlElementNillableTypeLevelOverrideTestCases.java
@@ -34,7 +34,7 @@ public class XmlElementNillableTypeLevelOverrideTestCases extends JAXBTestCases
     public XmlElementNillableTypeLevelOverrideTestCases(String name) throws Exception {
         super(name);
         setControlDocument(XML_CONTROL_RESOURCE);
-        setClasses(new Class[] { TypeRootOverride.class });
+        setClasses(new Class<?>[] { TypeRootOverride.class });
     }
 
     @Override
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/externalizedmetadata/xmlelementnillable/XmlElementNillableTypeLevelTestCases.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/externalizedmetadata/xmlelementnillable/XmlElementNillableTypeLevelTestCases.java
index 791aedc..d2ca035 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/externalizedmetadata/xmlelementnillable/XmlElementNillableTypeLevelTestCases.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/externalizedmetadata/xmlelementnillable/XmlElementNillableTypeLevelTestCases.java
@@ -34,7 +34,7 @@ public class XmlElementNillableTypeLevelTestCases extends JAXBTestCases {
     public XmlElementNillableTypeLevelTestCases(String name) throws Exception {
         super(name);
         setControlDocument(XML_CONTROL_RESOURCE);
-        setClasses(new Class[] { TypeRoot.class });
+        setClasses(new Class<?>[] { TypeRoot.class });
     }
 
     @Override
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 c91fd45..db09507 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
@@ -46,7 +46,7 @@ public XmlElementRefTestCases(String name)throws Exception {
         super(name);
         setControlDocument(XML_RESOURCE);
         setControlJSON(JSON_RESOURCE);
-        setClasses(new Class[] { Foo.class });
+        setClasses(new Class<?>[] { Foo.class });
     }
 
     @Override
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/externalizedmetadata/xmlelementref/XmlElementRefWithWrapperTestCases.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/externalizedmetadata/xmlelementref/XmlElementRefWithWrapperTestCases.java
index 10fbc23..38dc27f 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/externalizedmetadata/xmlelementref/XmlElementRefWithWrapperTestCases.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/externalizedmetadata/xmlelementref/XmlElementRefWithWrapperTestCases.java
@@ -38,7 +38,7 @@ public class XmlElementRefWithWrapperTestCases extends JAXBWithJSONTestCases{
 
     public XmlElementRefWithWrapperTestCases(String name) throws Exception {
         super(name);
-        setClasses(new Class[] { Foos.class, Bar.class });
+        setClasses(new Class<?>[] { Foos.class, Bar.class });
         setControlDocument(XML_RESOURCE);
         setControlJSON(JSON_RESOURCE);
 }
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 07193f5..471142b 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
@@ -53,7 +53,7 @@ public XmlElementRefsTestCases(String name) {
      */
     public void testXmlElementRefsSchemaGen() throws URISyntaxException {
         MyStreamSchemaOutputResolver outputResolver = new MyStreamSchemaOutputResolver();
-        generateSchemaWithFileName(new Class[] { Foos.class, ObjectFactory.class }, CONTEXT_PATH, PATH + "eclipselink-oxm.xml", 2, outputResolver);
+        generateSchemaWithFileName(new Class<?>[] { Foos.class, ObjectFactory.class }, CONTEXT_PATH, PATH + "eclipselink-oxm.xml", 2, outputResolver);
         // validate schema
         URI controlSchema = Thread.currentThread().getContextClassLoader().getResource(PATH + "schema.xsd").toURI();
         compareSchemas(outputResolver.schemaFiles.get(EMPTY_NAMESPACE).toString(), new File(controlSchema));
@@ -66,7 +66,7 @@ public void testXmlElementRefsSchemaGen() throws URISyntaxException {
      */
     public void testXmlElementRefs() throws JAXBException {
         // load XML metadata
-        generateSchema(new Class[] { Foos.class, ObjectFactory.class }, CONTEXT_PATH, PATH, 2);
+        generateSchema(new Class<?>[] { Foos.class, ObjectFactory.class }, CONTEXT_PATH, PATH, 2);
 
         // load instance doc
         String src = PATH + "foos.xml";
@@ -128,7 +128,7 @@ public void testCollectionType() {
         try {
             Map<String, Object> properties = new HashMap<>();
             properties.put(JAXBContextProperties.OXM_METADATA_SOURCE, new File(Thread.currentThread().getContextClassLoader().getResource(PATH + "collectiontype/oxm.xml").toURI()));
-            JAXBContextFactory.createContext(new Class[] { org.eclipse.persistence.testing.jaxb.externalizedmetadata.xmlelementrefs.collectiontype.ObjectFactory.class, Root.class }, properties);
+            JAXBContextFactory.createContext(new Class<?>[] { org.eclipse.persistence.testing.jaxb.externalizedmetadata.xmlelementrefs.collectiontype.ObjectFactory.class, Root.class }, properties);
         } catch (Exception e) {
             e.printStackTrace();
             fail("An unexpected exception was thrown while attempting to create the JAXBContext: " + e.getMessage());
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/externalizedmetadata/xmlelements/XMLElementsWithWrapperTestCases.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/externalizedmetadata/xmlelements/XMLElementsWithWrapperTestCases.java
index 33da0bd..baa44fe 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/externalizedmetadata/xmlelements/XMLElementsWithWrapperTestCases.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/externalizedmetadata/xmlelements/XMLElementsWithWrapperTestCases.java
@@ -34,7 +34,7 @@ public class XMLElementsWithWrapperTestCases extends JAXBWithJSONTestCases{
 
     public XMLElementsWithWrapperTestCases(String name) throws Exception {
         super(name);
-        setClasses(new Class[] { Foo.class });
+        setClasses(new Class<?>[] { Foo.class });
         setControlDocument(XML_RESOURCE);
         setControlJSON(JSON_RESOURCE);
     }
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 cc381c2..fb14435 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
@@ -50,7 +50,7 @@ public class XmlElementsTestCases extends JAXBWithJSONTestCases{
       */
     public XmlElementsTestCases(String name) throws Exception {
         super(name);
-        setClasses(new Class[] { Foo.class });
+        setClasses(new Class<?>[] { Foo.class });
         setControlDocument(XML_RESOURCE);
         setControlJSON(JSON_RESOURCE);
     }
@@ -116,7 +116,7 @@ public void testXmlElementsWithIdRefSchemaGen() throws Exception {
         InputStream is = ClassLoader.getSystemResourceAsStream("org/eclipse/persistence/testing/jaxb/externalizedmetadata/xmlelements/schema_idref.xsd");
         controlSchemas.add(is);
 
-        JAXBContext ctx = (JAXBContext) JAXBContextFactory.createContext(new Class[] { Bar.class, Address.class, Phone.class }, properties);
+        JAXBContext ctx = (JAXBContext) JAXBContextFactory.createContext(new Class<?>[] { Bar.class, Address.class, Phone.class }, properties);
 
          MyStreamSchemaOutputResolver outputResolver = new MyStreamSchemaOutputResolver();
          ctx.generateSchema(outputResolver);
@@ -147,7 +147,7 @@ public void testXmlElementsWithInvalidIdRef() {
         boolean exception = false;
         JAXBContext jCtx = null;
         try {
-            jCtx = (JAXBContext) JAXBContextFactory.createContext(new Class[] { Bar.class, Address.class, Foo.class }, properties);
+            jCtx = (JAXBContext) JAXBContextFactory.createContext(new Class<?>[] { Bar.class, Address.class, Foo.class }, properties);
         } catch (JAXBException e1) {
             exception = true;
         }
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 8afe7d7..9faf13f 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
@@ -37,7 +37,7 @@ public class XmlElemenetWrapperNilTestCases extends JAXBWithJSONTestCases{
      */
     public XmlElemenetWrapperNilTestCases(String name) throws Exception {
         super(name);
-        setClasses(new Class[] { Employee.class });
+        setClasses(new Class<?>[] { Employee.class });
         setControlDocument(XML_RESOURCE);
         setWriteControlDocument(XML_WRITE_RESOURCE);
         setControlJSON(JSON_RESOURCE);
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/externalizedmetadata/xmlelementwrapper/XmlElementWrapperDefaultNameTestCases.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/externalizedmetadata/xmlelementwrapper/XmlElementWrapperDefaultNameTestCases.java
index 6d2d8e0..7cfb4d4 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/externalizedmetadata/xmlelementwrapper/XmlElementWrapperDefaultNameTestCases.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/externalizedmetadata/xmlelementwrapper/XmlElementWrapperDefaultNameTestCases.java
@@ -38,7 +38,7 @@ public class XmlElementWrapperDefaultNameTestCases extends JAXBWithJSONTestCases
 
     public XmlElementWrapperDefaultNameTestCases(String name) throws Exception {
         super(name);
-        setClasses(new Class[] { Company.class, Employee.class });
+        setClasses(new Class<?>[] { Company.class, Employee.class });
         setControlDocument(XML_RESOURCE);
         setControlJSON(JSON_RESOURCE);
         initXsiType();
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 23f6f0e..6810f68 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
@@ -38,7 +38,7 @@ public class XmlElementWrapperElementOverrideTestCases extends JAXBWithJSONTestC
      */
     public XmlElementWrapperElementOverrideTestCases(String name) throws Exception {
         super(name);
-        setClasses(new Class[] { Employee.class });
+        setClasses(new Class<?>[] { Employee.class });
         setControlDocument(XML_RESOURCE);
         setControlJSON(JSON_RESOURCE);
     }
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 1b75b80..ab05b1a 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
@@ -44,7 +44,7 @@ public class XmlElementWrapperTestCases extends JAXBWithJSONTestCases{
      */
     public XmlElementWrapperTestCases(String name) throws Exception {
         super(name);
-        setClasses(new Class[] { Employee.class });
+        setClasses(new Class<?>[] { Employee.class });
         setControlDocument(XML_RESOURCE);
         setControlJSON(JSON_RESOURCE);
     }
@@ -99,7 +99,7 @@ protected Object getControlObject() {
      * Positive test.
      */
     public void testXmlElementWrapperNoOverrideSchemaGen() throws Exception {
-         JAXBContext ctx = JAXBContextFactory.createContext(new Class[] { Employee.class }, null);
+         JAXBContext ctx = JAXBContextFactory.createContext(new Class<?>[] { Employee.class }, null);
 
          MyStreamSchemaOutputResolver outputResolver = new MyStreamSchemaOutputResolver();
          ctx.generateSchema(outputResolver);
@@ -143,7 +143,7 @@ public void testXmlElementWrapperNSSchemaGen() throws Exception {
         properties.put(JAXBContextProperties.OXM_METADATA_SOURCE,
                 metadataSourceMap);
 
-        JAXBContext ctx = JAXBContextFactory.createContext(new Class[]{Employee.class}, properties);
+        JAXBContext ctx = JAXBContextFactory.createContext(new Class<?>[]{Employee.class}, properties);
 
         MyStreamSchemaOutputResolver outputResolver = new MyStreamSchemaOutputResolver();
         ctx.generateSchema(outputResolver);
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 3274121..eea8853 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
@@ -40,7 +40,7 @@ public class XmlEnumInheritanceTestCases extends JAXBWithJSONTestCases{
      */
     public XmlEnumInheritanceTestCases(String name) throws Exception {
         super(name);
-        setClasses(new Class[] {SubsetHolder.class });
+        setClasses(new Class<?>[] {SubsetHolder.class });
         setControlDocument(XML_RESOURCE);
         setControlJSON(JSON_RESOURCE);
     }
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 a3f6368..d6f41bd 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
@@ -40,7 +40,7 @@ public class XmlEnumQualifiedTestCases extends JAXBWithJSONTestCases{
      */
     public XmlEnumQualifiedTestCases(String name) throws Exception {
         super(name);
-        setClasses(new Class[] { Game.class });
+        setClasses(new Class<?>[] { Game.class });
         setControlDocument(XML_RESOURCE);
         setControlJSON(JSON_RESOURCE);
     }
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 72e3e51..892d7b4 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
@@ -40,7 +40,7 @@ public class XmlEnumTestCases extends JAXBWithJSONTestCases{
      */
     public XmlEnumTestCases(String name) throws Exception {
         super(name);
-        setClasses(new Class[] { Game.class });
+        setClasses(new Class<?>[] { Game.class });
         setControlDocument(XML_RESOURCE);
         setControlJSON(JSON_RESOURCE);
     }
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 e26a0b0..57c2c94 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
@@ -40,7 +40,7 @@ public class XmlEnumUnqualifiedTestCases extends JAXBWithJSONTestCases{
      */
     public XmlEnumUnqualifiedTestCases(String name) throws Exception {
         super(name);
-        setClasses(new Class[] { Game.class });
+        setClasses(new Class<?>[] { Game.class });
         setControlDocument(XML_RESOURCE);
         setControlJSON(JSON_RESOURCE);
     }
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/externalizedmetadata/xmlid/XmlIdExtensionOverrideTestCases.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/externalizedmetadata/xmlid/XmlIdExtensionOverrideTestCases.java
index 7e97084..bcd105f 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/externalizedmetadata/xmlid/XmlIdExtensionOverrideTestCases.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/externalizedmetadata/xmlid/XmlIdExtensionOverrideTestCases.java
@@ -39,7 +39,7 @@ public class XmlIdExtensionOverrideTestCases extends JAXBWithJSONTestCases {
 
     public XmlIdExtensionOverrideTestCases(String name) throws Exception {
         super(name);
-        setClasses(new Class[] { Customer.class });
+        setClasses(new Class<?>[] { Customer.class });
         setControlDocument(XML_RESOURCE);
         setControlJSON(JSON_RESOURCE);
     }
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/externalizedmetadata/xmlidref/XmlIdRefExceptionTestCases.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/externalizedmetadata/xmlidref/XmlIdRefExceptionTestCases.java
index b11006c..840f95f 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/externalizedmetadata/xmlidref/XmlIdRefExceptionTestCases.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/externalizedmetadata/xmlidref/XmlIdRefExceptionTestCases.java
@@ -39,7 +39,7 @@ public XmlIdRefExceptionTestCases(String name) throws Exception {
          * Negative test.
          */
     public void testNoIdException(){
-        Class<?>[] classes = new Class[] { Employee2.class, Address2.class };
+        Class<?>[] classes = new Class<?>[] { Employee2.class, Address2.class };
         boolean ex = false;
         try {
             InputStream inputStream = ClassLoader.getSystemResourceAsStream("org/eclipse/persistence/testing/jaxb/externalizedmetadata/xmlidref/eclipselink-oxm-no-id.xml");
@@ -64,7 +64,7 @@ public void testNoIdException(){
      * Negative test.
      */
     public void testMultipleIdException(){
-        Class<?>[] classes = new Class[] { Employee2.class, Address2.class };
+        Class<?>[] classes = new Class<?>[] { Employee2.class, Address2.class };
         boolean ex = false;
         try {
             InputStream inputStream = ClassLoader.getSystemResourceAsStream("org/eclipse/persistence/testing/jaxb/externalizedmetadata/xmlidref/eclipselink-oxm-multi-id.xml");
@@ -89,7 +89,7 @@ public void testMultipleIdException(){
      * Negative test.
      */
     public void testMultipleId2Exception(){
-        Class<?>[] classes = new Class[] { Employee2.class, Address2.class };
+        Class<?>[] classes = new Class<?>[] { Employee2.class, Address2.class };
         boolean ex = false;
         try {
             InputStream inputStream = ClassLoader.getSystemResourceAsStream("org/eclipse/persistence/testing/jaxb/externalizedmetadata/xmlidref/eclipselink-oxm-multi-id2.xml");
@@ -114,7 +114,7 @@ public void testMultipleId2Exception(){
      * Negative test.
      */
       public void testInvalidRefClass() {
-          Class<?>[] classes = new Class[] { Employee2.class, Address2.class };
+          Class<?>[] classes = new Class<?>[] { Employee2.class, Address2.class };
         boolean ex = false;
         try {
             InputStream inputStream = ClassLoader.getSystemResourceAsStream("org/eclipse/persistence/testing/jaxb/externalizedmetadata/xmlidref/invalid-ref-class-oxm.xml");
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/externalizedmetadata/xmlidref/XmlIdRefTestCases.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/externalizedmetadata/xmlidref/XmlIdRefTestCases.java
index f67b740..a86135f 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/externalizedmetadata/xmlidref/XmlIdRefTestCases.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/externalizedmetadata/xmlidref/XmlIdRefTestCases.java
@@ -38,7 +38,7 @@ public XmlIdRefTestCases(String name) throws Exception {
         super(name);
         setControlDocument(XML_RESOURCE);
         setControlJSON(JSON_RESOURCE);
-        setClasses(new Class[] { Employee.class, Address.class, Root.class });
+        setClasses(new Class<?>[] { Employee.class, Address.class, Root.class });
     }
 
      @Override
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/externalizedmetadata/xmlidref/XmlIdRefTwoPackagesTestCases.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/externalizedmetadata/xmlidref/XmlIdRefTwoPackagesTestCases.java
index cc9f652..ff96412 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/externalizedmetadata/xmlidref/XmlIdRefTwoPackagesTestCases.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/externalizedmetadata/xmlidref/XmlIdRefTwoPackagesTestCases.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
@@ -41,7 +41,7 @@ public XmlIdRefTwoPackagesTestCases(String name) throws Exception {
         super(name);
         setControlDocument(XML_RESOURCE);
         setControlJSON(JSON_RESOURCE);
-        setClasses(new Class[] { RootTwo.class, Super.class, Sub.class });
+        setClasses(new Class<?>[] { RootTwo.class, Super.class, Sub.class });
     }
 
     @Override
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 ff0dca3..4c9cede 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
@@ -51,7 +51,7 @@ public XmlInlineBinaryDataTestCases(String name) {
      * Positive test.
      */
     public void testXmlInlineBinaryDataSchemaGen() throws URISyntaxException {
-        MySchemaOutputResolver outputResolver = generateSchema(new Class[] { MyData.class }, CONTEXT_PATH, PATH, 1);
+        MySchemaOutputResolver outputResolver = generateSchema(new Class<?>[] { MyData.class }, CONTEXT_PATH, PATH, 1);
         // validate schema
         URI controlSchema = Thread.currentThread().getContextClassLoader().getResource(PATH + "schema.xsd").toURI();
         compareSchemas(outputResolver.schemaFiles.get(EMPTY_NAMESPACE), new File(controlSchema));
@@ -67,7 +67,7 @@ public void testXmlInlineBinaryDataSchemaGen() throws URISyntaxException {
     public void testClassLevelXmlInlineBinaryOverride() throws JAXBException {
         String metadataFile = PATH + "eclipselink-oxm-class-override.xml";
 
-        Class[] classes = new Class[] { MyDataClassAnnotation.class };
+        Class<?>[] classes = new Class<?>[] { MyDataClassAnnotation.class };
         MySchemaOutputResolver outputResolver = generateSchemaWithFileName(classes, CONTEXT_PATH, metadataFile, 1);
 
         // setup control object
@@ -132,7 +132,7 @@ public void testClassLevelXmlInlineBinaryOverride() throws JAXBException {
     public void testPropertyLevelXmlInlineBinaryOverride() throws JAXBException {
         String metadataFile = PATH + "eclipselink-oxm-property.xml";
 
-        Class[] classes = new Class[] { MyDataPropertyAnnotation.class };
+        Class<?>[] classes = new Class<?>[] { MyDataPropertyAnnotation.class };
         MySchemaOutputResolver outputResolver = generateSchemaWithFileName(classes, CONTEXT_PATH, metadataFile, 1);
 
         // setup control object
@@ -192,7 +192,7 @@ public void testPropertyLevelXmlInlineBinaryOverride() throws JAXBException {
     public void testClassLevelXmlInlineBinaryNoOverride() throws JAXBException {
         JAXBContext jaxbContext = null;
         try {
-            jaxbContext = (JAXBContext) JAXBContextFactory.createContext(new Class[] { MyDataClassAnnotation.class }, null);
+            jaxbContext = (JAXBContext) JAXBContextFactory.createContext(new Class<?>[] { MyDataClassAnnotation.class }, null);
         } catch (JAXBException e1) {
             e1.printStackTrace();
             fail("JAXBContext creation failed");
@@ -260,7 +260,7 @@ public void testClassLevelXmlInlineBinaryNoOverride() throws JAXBException {
     public void testPropertyLevelXmlInlineBinaryOverrideViaMetadata() throws JAXBException {
         String metadataFile = PATH + "eclipselink-oxm-property-override.xml";
 
-        Class[] classes = new Class[] { MyDataPropertyAnnotation.class };
+        Class<?>[] classes = new Class<?>[] { MyDataPropertyAnnotation.class };
         MySchemaOutputResolver outputResolver = generateSchemaWithFileName(classes, CONTEXT_PATH, metadataFile, 1);
 
         // setup control object
@@ -323,7 +323,7 @@ public void testPropertyLevelXmlInlineBinaryOverrideViaMetadata() throws JAXBExc
     public void testClassLevelXmlInlineBinaryViaMetadata() throws JAXBException {
         String metadataFile = PATH + "eclipselink-oxm-class.xml";
 
-        Class[] classes = new Class[] { MyData.class };
+        Class<?>[] classes = new Class<?>[] { MyData.class };
         MySchemaOutputResolver outputResolver = generateSchemaWithFileName(classes, CONTEXT_PATH, metadataFile, 1);
 
         // setup control object
@@ -383,7 +383,7 @@ public void testClassLevelXmlInlineBinaryViaMetadata() throws JAXBException {
     public void testPropertyLevelXmlInlineBinaryViaMetadata() throws JAXBException {
         String metadataFile = PATH + "eclipselink-oxm.xml";
 
-        Class[] classes = new Class[] { MyData.class };
+        Class<?>[] classes = new Class<?>[] { MyData.class };
         MySchemaOutputResolver outputResolver = generateSchemaWithFileName(classes, CONTEXT_PATH, metadataFile, 1);
 
         // setup control object
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/externalizedmetadata/xmljoinnode/AccessorTypeNoneTestCases.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/externalizedmetadata/xmljoinnode/AccessorTypeNoneTestCases.java
index 5ea01a1..22e1aa3 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/externalizedmetadata/xmljoinnode/AccessorTypeNoneTestCases.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/externalizedmetadata/xmljoinnode/AccessorTypeNoneTestCases.java
@@ -39,7 +39,7 @@ public AccessorTypeNoneTestCases(String name) throws Exception {
         super(name);
         setControlDocument(XML_RESOURCE);
         setControlJSON(JSON_RESOURCE);
-        setClasses(new Class[] { Company.class });
+        setClasses(new Class<?>[] { Company.class });
     }
 
     @Override
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 644faef..752b425 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
@@ -57,7 +57,7 @@ public XmlJoinNodeTestCases(String name) throws Exception{
         super(name);
         setControlDocument(XML_RESOURCE);
         setControlJSON(JSON_RESOURCE);
-        setClasses(new Class[] { Company.class });
+        setClasses(new Class<?>[] { Company.class });
         Map<String, String> namespaces = new HashMap<String, String>();
         namespaces.put("http://www.example.com", "x");
         jaxbUnmarshaller.setProperty(UnmarshallerProperties.JSON_NAMESPACE_PREFIX_MAPPER, namespaces);
@@ -148,7 +148,7 @@ public void testInvalidXmlJoinNode() {
             Map<String, Object> invalidProperties = new HashMap<>();
             invalidProperties.put(JAXBContextProperties.OXM_METADATA_SOURCE, metadataSourceMap);
 
-            JAXBContextFactory.createContext(new Class[] { Company.class }, invalidProperties);
+            JAXBContextFactory.createContext(new Class<?>[] { Company.class }, invalidProperties);
         } catch (JAXBException e) {
             exception = true;
         }
@@ -169,7 +169,7 @@ public void testInvalidTargetXPath() {
             Map<String, Object> invalidProperties = new HashMap<>();
             invalidProperties.put(JAXBContextProperties.OXM_METADATA_SOURCE, metadataSourceMap);
 
-            JAXBContextFactory.createContext(new Class[] { Company.class }, invalidProperties);
+            JAXBContextFactory.createContext(new Class<?>[] { Company.class }, invalidProperties);
 
         } catch (JAXBException e) {
             return;
@@ -195,7 +195,7 @@ public void testTargetWithNoKey() {
             Map<String, Object> invalidProperties = new HashMap<>();
             invalidProperties.put(JAXBContextProperties.OXM_METADATA_SOURCE, metadataSourceMap);
 
-            JAXBContextFactory.createContext(new Class[] { Company.class }, invalidProperties);
+            JAXBContextFactory.createContext(new Class<?>[] { Company.class }, invalidProperties);
 
         } catch (JAXBException e) {
             return;
@@ -215,7 +215,7 @@ public void testContainerType() {
             Map<String, Object> invalidProperties = new HashMap<>();
             invalidProperties.put(JAXBContextProperties.OXM_METADATA_SOURCE, metadataSourceMap);
 
-            jCtx = (JAXBContext)JAXBContextFactory.createContext(new Class[] { Company.class }, invalidProperties);
+            jCtx = (JAXBContext)JAXBContextFactory.createContext(new Class<?>[] { Company.class }, invalidProperties);
 
 
         } catch (JAXBException e) {
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/externalizedmetadata/xmlmetadatacomplete/XmlMetadataCompleteTestCases.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/externalizedmetadata/xmlmetadatacomplete/XmlMetadataCompleteTestCases.java
index b85e29f..765e9ec 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/externalizedmetadata/xmlmetadatacomplete/XmlMetadataCompleteTestCases.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/externalizedmetadata/xmlmetadatacomplete/XmlMetadataCompleteTestCases.java
@@ -32,7 +32,7 @@ public class XmlMetadataCompleteTestCases extends ExternalizedMetadataTestCases
     private static final String XSD_DOC_OVERRIDE_1 = PATH + "employee-override-1.xsd";
     private static final String XSD_DOC_OVERRIDE_2 = PATH + "employee-override-2.xsd";
     private static final String NSX_NAMESPACE = "http://www.example.com/xsds/real";
-    private Class[] classes;
+    private Class<?>[] classes;
 
     /**
      * This is the preferred (and only) constructor.
@@ -50,7 +50,7 @@ public XmlMetadataCompleteTestCases(String name) {
     @Override
     public void setUp() throws Exception {
         super.setUp();
-        classes = new Class[] { Employee.class };
+        classes = new Class<?>[] { Employee.class };
     }
 
     /**
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 3b2329b..db62085 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
@@ -44,7 +44,7 @@ public XmlMimeTypeCases(String name) throws Exception {
         super(name);
         setControlDocument(XML_RESOURCE);
         setControlJSON(JSON_RESOURCE);
-        setClasses(new Class[] { AttTypes.class });
+        setClasses(new Class<?>[] { AttTypes.class });
         jaxbUnmarshaller.setAttachmentUnmarshaller(new MyAttachmentUnmarshaller());
 
         DataHandler data = new DataHandler("THISISATEXTSTRINGFORTHISDATAHANDLER", "text");
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 e11fff7..f1539ee 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
@@ -44,7 +44,7 @@ public class XmlMixedTestCases extends JAXBWithJSONTestCases {
      */
     public XmlMixedTestCases(String name) throws Exception {
         super(name);
-        setClasses(new Class[] { Employee.class });
+        setClasses(new Class<?>[] { Employee.class });
         setControlDocument(XML_RESOURCE);
         setWriteControlDocument(XML_WRITE_RESOURCE);
         setControlJSON(JSON_RESOURCE);
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/externalizedmetadata/xmlnametransformer/XmlMappingDefaultNameTestCases.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/externalizedmetadata/xmlnametransformer/XmlMappingDefaultNameTestCases.java
index 1f5e0c5..0043a51 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/externalizedmetadata/xmlnametransformer/XmlMappingDefaultNameTestCases.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/externalizedmetadata/xmlnametransformer/XmlMappingDefaultNameTestCases.java
@@ -33,7 +33,7 @@ public class XmlMappingDefaultNameTestCases extends JAXBWithJSONTestCases {
 
     public XmlMappingDefaultNameTestCases(String name) throws Exception {
         super(name);
-        setClasses(new Class[] {XmlMappingDefaultNameRoot.class});
+        setClasses(new Class<?>[] {XmlMappingDefaultNameRoot.class});
         setControlDocument(XML_RESOURCE);
         setControlJSON(JSON_RESOURCE);
     }
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/externalizedmetadata/xmlnametransformer/XmlMappingSpecifiedNameTestCases.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/externalizedmetadata/xmlnametransformer/XmlMappingSpecifiedNameTestCases.java
index 3932f09..2e03c16 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/externalizedmetadata/xmlnametransformer/XmlMappingSpecifiedNameTestCases.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/externalizedmetadata/xmlnametransformer/XmlMappingSpecifiedNameTestCases.java
@@ -33,7 +33,7 @@ public class XmlMappingSpecifiedNameTestCases  extends JAXBWithJSONTestCases {
 
     public XmlMappingSpecifiedNameTestCases(String name) throws Exception {
         super(name);
-        setClasses(new Class[] {XmlMappingSpecifiedNameRoot.class});
+        setClasses(new Class<?>[] {XmlMappingSpecifiedNameRoot.class});
         setControlDocument(XML_RESOURCE);
         setControlJSON(JSON_RESOURCE);
     }
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/externalizedmetadata/xmlnullpolicy/XmlNullPolicyPackageLevelOverrideTestCases.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/externalizedmetadata/xmlnullpolicy/XmlNullPolicyPackageLevelOverrideTestCases.java
index 96a7dd5..0ab774a 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/externalizedmetadata/xmlnullpolicy/XmlNullPolicyPackageLevelOverrideTestCases.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/externalizedmetadata/xmlnullpolicy/XmlNullPolicyPackageLevelOverrideTestCases.java
@@ -34,7 +34,7 @@ public class XmlNullPolicyPackageLevelOverrideTestCases extends JAXBTestCases {
     public XmlNullPolicyPackageLevelOverrideTestCases(String name) throws Exception {
         super(name);
         setControlDocument(XML_CONTROL_RESOURCE);
-        setClasses(new Class[] { PackageRootOverride.class });
+        setClasses(new Class<?>[] { PackageRootOverride.class });
     }
 
     @Override
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/externalizedmetadata/xmlnullpolicy/XmlNullPolicyPackageLevelTestCases.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/externalizedmetadata/xmlnullpolicy/XmlNullPolicyPackageLevelTestCases.java
index 47c80b0..1a0dd58 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/externalizedmetadata/xmlnullpolicy/XmlNullPolicyPackageLevelTestCases.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/externalizedmetadata/xmlnullpolicy/XmlNullPolicyPackageLevelTestCases.java
@@ -34,7 +34,7 @@ public class XmlNullPolicyPackageLevelTestCases extends JAXBTestCases {
     public XmlNullPolicyPackageLevelTestCases(String name) throws Exception {
         super(name);
         setControlDocument(XML_CONTROL_RESOURCE);
-        setClasses(new Class[] { Root.class });
+        setClasses(new Class<?>[] { Root.class });
     }
 
     @Override
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/externalizedmetadata/xmlnullpolicy/XmlNullPolicyPackageTypeOverrideTestCases.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/externalizedmetadata/xmlnullpolicy/XmlNullPolicyPackageTypeOverrideTestCases.java
index 52b1503..e894278 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/externalizedmetadata/xmlnullpolicy/XmlNullPolicyPackageTypeOverrideTestCases.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/externalizedmetadata/xmlnullpolicy/XmlNullPolicyPackageTypeOverrideTestCases.java
@@ -34,7 +34,7 @@ public class XmlNullPolicyPackageTypeOverrideTestCases extends JAXBTestCases {
     public XmlNullPolicyPackageTypeOverrideTestCases(String name) throws Exception {
         super(name);
         setControlDocument(XML_CONTROL_RESOURCE);
-        setClasses(new Class[] { PackageTypeOverride.class });
+        setClasses(new Class<?>[] { PackageTypeOverride.class });
     }
 
     @Override
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/externalizedmetadata/xmlnullpolicy/XmlNullPolicyTypeLevelOverrideTestCases.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/externalizedmetadata/xmlnullpolicy/XmlNullPolicyTypeLevelOverrideTestCases.java
index 9400391..38256f6 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/externalizedmetadata/xmlnullpolicy/XmlNullPolicyTypeLevelOverrideTestCases.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/externalizedmetadata/xmlnullpolicy/XmlNullPolicyTypeLevelOverrideTestCases.java
@@ -34,7 +34,7 @@ public class XmlNullPolicyTypeLevelOverrideTestCases extends JAXBTestCases {
     public XmlNullPolicyTypeLevelOverrideTestCases(String name) throws Exception {
         super(name);
         setControlDocument(XML_CONTROL_RESOURCE);
-        setClasses(new Class[] { TypeRootOverride.class });
+        setClasses(new Class<?>[] { TypeRootOverride.class });
     }
 
     @Override
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/externalizedmetadata/xmlnullpolicy/XmlNullPolicyTypeLevelTestCases.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/externalizedmetadata/xmlnullpolicy/XmlNullPolicyTypeLevelTestCases.java
index 5df4453..04f53c2 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/externalizedmetadata/xmlnullpolicy/XmlNullPolicyTypeLevelTestCases.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/externalizedmetadata/xmlnullpolicy/XmlNullPolicyTypeLevelTestCases.java
@@ -34,7 +34,7 @@ public class XmlNullPolicyTypeLevelTestCases extends JAXBTestCases {
     public XmlNullPolicyTypeLevelTestCases(String name) throws Exception {
         super(name);
         setControlDocument(XML_CONTROL_RESOURCE);
-        setClasses(new Class[] { TypeRoot.class });
+        setClasses(new Class<?>[] { TypeRoot.class });
     }
 
     @Override
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/externalizedmetadata/xmlregistry/XmlRegistryNonLocalTestCases.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/externalizedmetadata/xmlregistry/XmlRegistryNonLocalTestCases.java
index 8b8783a..fc9f01e 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/externalizedmetadata/xmlregistry/XmlRegistryNonLocalTestCases.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/externalizedmetadata/xmlregistry/XmlRegistryNonLocalTestCases.java
@@ -36,7 +36,7 @@ public XmlRegistryNonLocalTestCases(String name) throws Exception {
         super(name);
         setControlDocument(XML_RESOURCE);
         setControlJSON(JSON_RESOURCE);
-        setClasses(new Class[] { FooBar.class, ObjectFactory2.class });
+        setClasses(new Class<?>[] { FooBar.class, ObjectFactory2.class });
     }
 
     @Override
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 1f38439..74b50eb 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
@@ -45,7 +45,7 @@ public XmlRegistryTestCases(String name) throws Exception {
         super(name);
         setControlDocument(XML_RESOURCE);
         setControlJSON(JSON_RESOURCE);
-        setClasses(new Class[]{ObjectFactory1.class});
+        setClasses(new Class<?>[]{ObjectFactory1.class});
     }
 
 
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 b79ab67..2cd8394 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
@@ -44,7 +44,7 @@ public XmlRootElementTestCases(String name) throws Exception {
         super(name);
         setControlDocument(XML_RESOURCE);
         setControlJSON(JSON_RESOURCE);
-        setClasses(new Class[]{Employee.class});
+        setClasses(new Class<?>[]{Employee.class});
     }
 
     @Override
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 604e0ec..722f1b1 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
@@ -61,7 +61,7 @@ public XmlSchemaTestCases(String name) throws Exception {
         setControlDocument(XML_RESOURCE);
         setWriteControlDocument(XML_WRITE_RESOURCE);
         setControlJSON(JSON_RESOURCE);
-        setClasses(new Class[]{Employee.class});
+        setClasses(new Class<?>[]{Employee.class});
     }
 
     @Override
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 891a0a5..934897a 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
@@ -174,7 +174,7 @@ private JAXBContext createContext() throws JAXBException {
         metadataSources.add("org/eclipse/persistence/testing/jaxb/externalizedmetadata/xmlschema/namespace/linked/" + metadataVariant + "-article.json");
         metadataSources.add("org/eclipse/persistence/testing/jaxb/externalizedmetadata/xmlschema/namespace/linked/" + metadataVariant + "-book.json");
         properties.put(JAXBContextProperties.OXM_METADATA_SOURCE, metadataSources);
-        return JAXBContext.newInstance(new Class[] {}, properties);
+        return JAXBContext.newInstance(new Class<?>[] {}, properties);
     }
 
     private Article createArticle() {
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/externalizedmetadata/xmlschematype/XmlSchemaTypeTestCases.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/externalizedmetadata/xmlschematype/XmlSchemaTypeTestCases.java
index 4c89e04..7bffa96 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/externalizedmetadata/xmlschematype/XmlSchemaTypeTestCases.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/externalizedmetadata/xmlschematype/XmlSchemaTypeTestCases.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
@@ -50,7 +50,7 @@ public XmlSchemaTypeTestCases(String name) {
      */
     public void testXmlSchemaTypePkgSchemaGen() throws URISyntaxException {
         String metadataFile = PATH + "eclipselink-oxm-package.xml";
-        MySchemaOutputResolver outputResolver = generateSchemaWithFileName(new Class[] { Employee.class }, CONTEXT_PATH, metadataFile, 1);
+        MySchemaOutputResolver outputResolver = generateSchemaWithFileName(new Class<?>[] { Employee.class }, CONTEXT_PATH, metadataFile, 1);
         // validate schema
         URI controlSchema = Thread.currentThread().getContextClassLoader().getResource(PATH + "schema.xsd").toURI();
         compareSchemas(outputResolver.schemaFiles.get(EMPTY_NAMESPACE), new File(controlSchema));
@@ -65,7 +65,7 @@ public void testXmlSchemaTypePkgSchemaGen() throws URISyntaxException {
      */
     public void testXmlSchemaTypePropSchemaGen() throws URISyntaxException {
         String metadataFile = PATH + "eclipselink-oxm-property.xml";
-        MySchemaOutputResolver outputResolver = generateSchemaWithFileName(new Class[] { Employee.class }, CONTEXT_PATH, metadataFile, 1);
+        MySchemaOutputResolver outputResolver = generateSchemaWithFileName(new Class<?>[] { Employee.class }, CONTEXT_PATH, metadataFile, 1);
         // validate schema
         URI controlSchema = Thread.currentThread().getContextClassLoader().getResource(PATH + "schema.xsd").toURI();
         compareSchemas(outputResolver.schemaFiles.get(EMPTY_NAMESPACE), new File(controlSchema));
@@ -81,7 +81,7 @@ public void testXmlSchemaTypePropSchemaGen() throws URISyntaxException {
      */
     public void testXmlSchemaTypeOverrideSchemaGen() throws URISyntaxException {
         String metadataFile = PATH + "eclipselink-oxm-override.xml";
-        MySchemaOutputResolver outputResolver = generateSchemaWithFileName(new Class[] { Employee.class }, CONTEXT_PATH, metadataFile, 1);
+        MySchemaOutputResolver outputResolver = generateSchemaWithFileName(new Class<?>[] { Employee.class }, CONTEXT_PATH, metadataFile, 1);
         // validate schema
         URI controlSchema = Thread.currentThread().getContextClassLoader().getResource(PATH + "schema.xsd").toURI();
         compareSchemas(outputResolver.schemaFiles.get(EMPTY_NAMESPACE), new File(controlSchema));
@@ -97,7 +97,7 @@ public void testXmlSchemaTypeOverrideSchemaGen() throws URISyntaxException {
      */
     public void testXmlSchemaTypeClassOverridesPackageSchemaGen() throws URISyntaxException {
         String metadataFile = PATH + "eclipselink-oxm-class-overrides-package.xml";
-        MySchemaOutputResolver outputResolver = generateSchemaWithFileName(new Class[] { EmployeeWithAnnotation.class }, CONTEXT_PATH, metadataFile, 1);
+        MySchemaOutputResolver outputResolver = generateSchemaWithFileName(new Class<?>[] { EmployeeWithAnnotation.class }, CONTEXT_PATH, metadataFile, 1);
         // validate schema
         URI controlSchema = Thread.currentThread().getContextClassLoader().getResource(PATH + "schema1.xsd").toURI();
         compareSchemas(outputResolver.schemaFiles.get(EMPTY_NAMESPACE), new File(controlSchema));
@@ -111,7 +111,7 @@ public void testXmlSchemaTypeClassOverridesPackageSchemaGen() throws URISyntaxEx
      */
     public void testXmlSchemaTypeWithIDSchemaGen() throws URISyntaxException {
         String metadataFile = PATH + "eclipselink-oxm-method.xml";
-        MySchemaOutputResolver outputResolver = generateSchemaWithFileName(new Class[] { EmployeeWithMethods.class }, CONTEXT_PATH, metadataFile, 1);
+        MySchemaOutputResolver outputResolver = generateSchemaWithFileName(new Class<?>[] { EmployeeWithMethods.class }, CONTEXT_PATH, metadataFile, 1);
         // validate schema
         URI controlSchema = Thread.currentThread().getContextClassLoader().getResource(PATH + "schema2.xsd").toURI();
         compareSchemas(outputResolver.schemaFiles.get(EMPTY_NAMESPACE), new File(controlSchema));
@@ -123,7 +123,7 @@ public void testXmlSchemaTypeWithIDSchemaGen() throws URISyntaxException {
      * Positive test.
      */
     public void testXmlSchemaTypeWithIDAnnotationSchemaGen() throws URISyntaxException {
-        MySchemaOutputResolver outputResolver = generateSchema(new Class[] { EmployeeWithAnnotationOnMethod.class }, 1);
+        MySchemaOutputResolver outputResolver = generateSchema(new Class<?>[] { EmployeeWithAnnotationOnMethod.class }, 1);
         // validate schema
         URI controlSchema = Thread.currentThread().getContextClassLoader().getResource(PATH + "schema3.xsd").toURI();
         compareSchemas(outputResolver.schemaFiles.get(EMPTY_NAMESPACE), new File(controlSchema));
@@ -132,7 +132,7 @@ public void testXmlSchemaTypeWithIDAnnotationSchemaGen() throws URISyntaxExcepti
     public void testXmlSchemaType() {
         // load XML metadata and create JAXBContext
         String metadataFile = PATH + "eclipselink-oxm-property.xml";
-        generateSchemaWithFileName(new Class[] { Employee.class }, CONTEXT_PATH, metadataFile, 1);
+        generateSchemaWithFileName(new Class<?>[] { Employee.class }, CONTEXT_PATH, metadataFile, 1);
 
         // This test's instance document contains a date in EST time zone, so temporarily
         // reset the VM time zone
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 ea7eafd..8042434 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
@@ -50,7 +50,7 @@ public XmlSchemaTypesTestCases(String name) throws Exception{
         super(name);
         setControlDocument(XML_RESOURCE);
         setControlJSON(JSON_RESOURCE);
-        setClasses(new Class[]{Employee.class});
+        setClasses(new Class<?>[]{Employee.class});
     }
 
     @Override
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 fa6e3f2..8743f8a 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
@@ -47,7 +47,7 @@ public XmlSeeAlsoTestCases(String name) throws Exception{
         super(name);
         setControlDocument(XML_RESOURCE);
         setControlJSON(JSON_RESOURCE);
-        setClasses(new Class[]{Employee.class});
+        setClasses(new Class<?>[]{Employee.class});
     }
 
     @Override
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 5eeac8c..d6a5b17 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
@@ -42,7 +42,7 @@ public class XmlTransientTestCases extends JAXBWithJSONTestCases{
      */
     public XmlTransientTestCases(String name) throws Exception{
         super(name);
-        setClasses(new Class[]{Employee.class});
+        setClasses(new Class<?>[]{Employee.class});
         setControlDocument(XML_RESOURCE);
         setControlJSON(JSON_RESOURCE);
     }
@@ -133,7 +133,7 @@ public void testReferenceToTransientClassException() {
             Map<String, Object> properties = new HashMap<>();
             properties.put(JAXBContextProperties.OXM_METADATA_SOURCE, metadataSourceMap);
 
-            JAXBContextFactory.createContext(new Class[] { ContactInfo.class }, properties);
+            JAXBContextFactory.createContext(new Class<?>[] { ContactInfo.class }, properties);
         } catch (JAXBException jaxbex) {
             return;
         }
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/externalizedmetadata/xmltransient/inheritance/XmlTransientInheritanceTestCases.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/externalizedmetadata/xmltransient/inheritance/XmlTransientInheritanceTestCases.java
index a2032d9..7b5ce66 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/externalizedmetadata/xmltransient/inheritance/XmlTransientInheritanceTestCases.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/externalizedmetadata/xmltransient/inheritance/XmlTransientInheritanceTestCases.java
@@ -36,7 +36,7 @@ public XmlTransientInheritanceTestCases(String name) throws Exception {
         super(name);
         setControlDocument(XML_RESOURCE);
         setControlJSON(JSON_RESOURCE);
-        setClasses(new Class[] { Person.class, Employee.class });
+        setClasses(new Class<?>[] { Person.class, Employee.class });
     }
 
      @Override
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/externalizedmetadata/xmltransient/splitpackage/SplitPackageTestCases.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/externalizedmetadata/xmltransient/splitpackage/SplitPackageTestCases.java
index 7fa02cb..91c6196 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/externalizedmetadata/xmltransient/splitpackage/SplitPackageTestCases.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/externalizedmetadata/xmltransient/splitpackage/SplitPackageTestCases.java
@@ -38,7 +38,7 @@ public void testJAXBContextCreation() throws Exception {
         InputStream bindingFileA = SplitPackageTestCases.class.getClassLoader().getResourceAsStream(BINDING_FILE_A);
         Map<String, Object> properties = new HashMap<String, Object>(1);
         properties.put(JAXBContextProperties.OXM_METADATA_SOURCE, bindingFileA);
-        JAXBContext jaxbContext = JAXBContextFactory.createContext(new Class[] {Foo.class}, properties);
+        JAXBContext jaxbContext = JAXBContextFactory.createContext(new Class<?>[] {Foo.class}, properties);
     }
 
 }
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/externalizedmetadata/xmltransient/unset/classlevel/XmlTransientUnsetClassTestCases.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/externalizedmetadata/xmltransient/unset/classlevel/XmlTransientUnsetClassTestCases.java
index a06b375..1ca6888 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/externalizedmetadata/xmltransient/unset/classlevel/XmlTransientUnsetClassTestCases.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/externalizedmetadata/xmltransient/unset/classlevel/XmlTransientUnsetClassTestCases.java
@@ -36,7 +36,7 @@ public XmlTransientUnsetClassTestCases(String name) throws Exception {
         super(name);
         setControlDocument(XML_RESOURCE);
         setControlJSON(JSON_RESOURCE);
-        setClasses(new Class[] { Employee.class });
+        setClasses(new Class<?>[] { Employee.class });
     }
 
      @Override
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/externalizedmetadata/xmltransient/unset/prop/XmlTransientUnsetPropTestCases.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/externalizedmetadata/xmltransient/unset/prop/XmlTransientUnsetPropTestCases.java
index e511aab..08897e3 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/externalizedmetadata/xmltransient/unset/prop/XmlTransientUnsetPropTestCases.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/externalizedmetadata/xmltransient/unset/prop/XmlTransientUnsetPropTestCases.java
@@ -34,7 +34,7 @@ public XmlTransientUnsetPropTestCases(String name) throws Exception {
         super(name);
         setControlDocument(XML_RESOURCE);
         setControlJSON(JSON_RESOURCE);
-        setClasses(new Class[] { PhoneNumber.class });
+        setClasses(new Class<?>[] { PhoneNumber.class });
     }
 
      @Override
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 7ec4bd8..53d3709 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
@@ -46,7 +46,7 @@ public XmlTypeTestCases(String name) throws Exception {
         super(name);
         setControlDocument(XML_RESOURCE);
         setControlJSON(JSON_RESOURCE);
-        setClasses(new Class[] { Employee.class });
+        setClasses(new Class<?>[] { Employee.class });
     }
 
     /**
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/externalizedmetadata/xmltype/factory/FactoryTestCases.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/externalizedmetadata/xmltype/factory/FactoryTestCases.java
index b80278f..e4ad532 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/externalizedmetadata/xmltype/factory/FactoryTestCases.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/externalizedmetadata/xmltype/factory/FactoryTestCases.java
@@ -45,7 +45,7 @@ public String getName() {
      * Concrete factory class, non-static factory method.
      */
     public void testNormalFactory() throws Exception {
-        Class[] classes = new Class[] { Employee.class };
+        Class<?>[] classes = new Class<?>[] { Employee.class };
 
         ClassLoader classLoader = Thread.currentThread().getContextClassLoader();
         InputStream bindings = classLoader.getResourceAsStream(NORMAL_FACTORY);
@@ -63,7 +63,7 @@ public void testNormalFactory() throws Exception {
      * Abstract factory class, static factory method.
      */
     public void testAbstractFactory() throws Exception {
-        Class[] classes = new Class[] { Employee.class };
+        Class<?>[] classes = new Class<?>[] { Employee.class };
 
         ClassLoader classLoader = Thread.currentThread().getContextClassLoader();
         InputStream bindings = classLoader.getResourceAsStream(ABSTRACTFACTORY);
@@ -81,7 +81,7 @@ public void testAbstractFactory() throws Exception {
      * Abstract factory class, non-static factory method (ERROR).
      */
     public void testAbstractFactoryError() throws Exception {
-        Class[] classes = new Class[] { Employee.class };
+        Class<?>[] classes = new Class<?>[] { Employee.class };
 
         ClassLoader classLoader = Thread.currentThread().getContextClassLoader();
         InputStream bindings = classLoader.getResourceAsStream(ABSTRACTFACTORY_ERROR);
@@ -113,7 +113,7 @@ public void testAbstractFactoryError() throws Exception {
      * Concrete factory class with no default constructor, static factory method.
      */
     public void testNoDefaultConstructorFactory() throws Exception {
-        Class[] classes = new Class[] { Employee.class };
+        Class<?>[] classes = new Class<?>[] { Employee.class };
 
         ClassLoader classLoader = Thread.currentThread().getContextClassLoader();
         InputStream bindings = classLoader.getResourceAsStream(NODEFAULTCONSTRUCTOR);
@@ -131,7 +131,7 @@ public void testNoDefaultConstructorFactory() throws Exception {
      * Concrete factory class with no default constructor, non-static factory method (ERROR).
      */
     public void testNoDefaultConstructorFactoryError() throws Exception {
-        Class[] classes = new Class[] { Employee.class };
+        Class<?>[] classes = new Class<?>[] { Employee.class };
 
         ClassLoader classLoader = Thread.currentThread().getContextClassLoader();
         InputStream bindings = classLoader.getResourceAsStream(NODEFAULTCONSTRUCTOR_ERROR);
@@ -163,7 +163,7 @@ public void testNoDefaultConstructorFactoryError() throws Exception {
      * No factory class specified, no default constructor on domain class, static factory method on domain class.
      */
     public void testDomainClassFactoryMethod() throws Exception {
-        Class[] classes = new Class[] { EmployeeWithFactoryMethod.class };
+        Class<?>[] classes = new Class<?>[] { EmployeeWithFactoryMethod.class };
 
         ClassLoader classLoader = Thread.currentThread().getContextClassLoader();
         InputStream bindings = classLoader.getResourceAsStream(DOMAINCLASSFACTORYMETHOD);
@@ -181,7 +181,7 @@ public void testDomainClassFactoryMethod() throws Exception {
      * No factory class specified, no default constructor on domain class, non-static factory method on domain class (ERROR).
      */
     public void testDomainClassFactoryMethodError() throws Exception {
-        Class[] classes = new Class[] { EmployeeWithNonStaticFactoryMethod.class };
+        Class<?>[] classes = new Class<?>[] { EmployeeWithNonStaticFactoryMethod.class };
 
         ClassLoader classLoader = Thread.currentThread().getContextClassLoader();
         InputStream bindings = classLoader.getResourceAsStream(DOMAINCLASSFACTORYMETHOD_ERROR);
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/externalizedmetadata/xmltype/proporder/AllTestCases.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/externalizedmetadata/xmltype/proporder/AllTestCases.java
index 91f80ab..732861d 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/externalizedmetadata/xmltype/proporder/AllTestCases.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/externalizedmetadata/xmltype/proporder/AllTestCases.java
@@ -30,7 +30,7 @@ public class AllTestCases extends JAXBWithJSONTestCases {
     private static final String JSON_RESOURCE = "org/eclipse/persistence/testing/jaxb/externalizedmetadata/xmltype/proporder/all.json";
     public AllTestCases(String name) throws Exception {
         super(name);
-        setClasses(new Class[] {Root.class});
+        setClasses(new Class<?>[] {Root.class});
         setControlDocument(XML_RESOURCE);
         setControlJSON(JSON_RESOURCE);
     }
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/externalizedmetadata/xmltype/proporder/DefaultTestCases.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/externalizedmetadata/xmltype/proporder/DefaultTestCases.java
index 95171a6..04b294e 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/externalizedmetadata/xmltype/proporder/DefaultTestCases.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/externalizedmetadata/xmltype/proporder/DefaultTestCases.java
@@ -35,7 +35,7 @@ public class DefaultTestCases extends JAXBWithJSONTestCases {
 
     public DefaultTestCases(String name) throws Exception {
         super(name);
-        setClasses(new Class[] {Root.class});
+        setClasses(new Class<?>[] {Root.class});
         setControlDocument(XML_RESOURCE);
         setControlJSON(JSON_RESOURCE);
     }
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/externalizedmetadata/xmltype/proporder/OverrideAllTestCases.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/externalizedmetadata/xmltype/proporder/OverrideAllTestCases.java
index 732f1f2..983543c 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/externalizedmetadata/xmltype/proporder/OverrideAllTestCases.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/externalizedmetadata/xmltype/proporder/OverrideAllTestCases.java
@@ -32,7 +32,7 @@ public class OverrideAllTestCases extends JAXBWithJSONTestCases {
     private static final String JSON_RESOURCE = "org/eclipse/persistence/testing/jaxb/externalizedmetadata/xmltype/proporder/sequence.json";
     public OverrideAllTestCases(String name) throws Exception {
         super(name);
-        setClasses(new Class[] {OverrideAllRoot.class});
+        setClasses(new Class<?>[] {OverrideAllRoot.class});
         setControlDocument(XML_RESOURCE);
         setControlJSON(JSON_RESOURCE);
     }
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/externalizedmetadata/xmltype/proporder/OverrideSequenceTestCases.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/externalizedmetadata/xmltype/proporder/OverrideSequenceTestCases.java
index 913f988..3713659 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/externalizedmetadata/xmltype/proporder/OverrideSequenceTestCases.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/externalizedmetadata/xmltype/proporder/OverrideSequenceTestCases.java
@@ -33,7 +33,7 @@ public class OverrideSequenceTestCases extends JAXBWithJSONTestCases {
 
     public OverrideSequenceTestCases(String name) throws Exception {
         super(name);
-        setClasses(new Class[] {OverrideSequenceRoot.class});
+        setClasses(new Class<?>[] {OverrideSequenceRoot.class});
         setControlDocument(XML_RESOURCE);
         setControlJSON(JSON_RESOURCE);
     }
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/externalizedmetadata/xmltype/proporder/SequenceTestCases.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/externalizedmetadata/xmltype/proporder/SequenceTestCases.java
index ec374cb..9378f10 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/externalizedmetadata/xmltype/proporder/SequenceTestCases.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/externalizedmetadata/xmltype/proporder/SequenceTestCases.java
@@ -33,7 +33,7 @@ public class SequenceTestCases extends JAXBWithJSONTestCases {
 
     public SequenceTestCases(String name) throws Exception {
         super(name);
-        setClasses(new Class[] {Root.class});
+        setClasses(new Class<?>[] {Root.class});
         setControlDocument(XML_RESOURCE);
         setControlJSON(JSON_RESOURCE);
     }
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/externalizedmetadata/xmlvalue/XmlValueCdnPriceInheritanceTestCases.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/externalizedmetadata/xmlvalue/XmlValueCdnPriceInheritanceTestCases.java
index 101fe73..208e2b1 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/externalizedmetadata/xmlvalue/XmlValueCdnPriceInheritanceTestCases.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/externalizedmetadata/xmlvalue/XmlValueCdnPriceInheritanceTestCases.java
@@ -39,7 +39,7 @@ public class XmlValueCdnPriceInheritanceTestCases extends JAXBWithJSONTestCases{
 
     public XmlValueCdnPriceInheritanceTestCases(String name) throws Exception {
         super(name);
-        setClasses(new Class[] { CDNPriceInheritance.class });
+        setClasses(new Class<?>[] { CDNPriceInheritance.class });
         setControlDocument(XML_RESOURCE);
         setControlJSON(JSON_RESOURCE);
     }
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/externalizedmetadata/xmlvalue/XmlValueCdnPriceTestCases.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/externalizedmetadata/xmlvalue/XmlValueCdnPriceTestCases.java
index d391b99..9532356 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/externalizedmetadata/xmlvalue/XmlValueCdnPriceTestCases.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/externalizedmetadata/xmlvalue/XmlValueCdnPriceTestCases.java
@@ -34,7 +34,7 @@ public class XmlValueCdnPriceTestCases extends JAXBWithJSONTestCases{
 
     public XmlValueCdnPriceTestCases(String name) throws Exception {
         super(name);
-        setClasses(new Class[] { CDNPriceNoAnnotation.class });
+        setClasses(new Class<?>[] { CDNPriceNoAnnotation.class });
         setControlDocument(XML_RESOURCE);
         setControlJSON(JSON_RESOURCE);
     }
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/externalizedmetadata/xmlvalue/XmlValueCdnPricesTestCases.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/externalizedmetadata/xmlvalue/XmlValueCdnPricesTestCases.java
index bfdbdfd..04be965 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/externalizedmetadata/xmlvalue/XmlValueCdnPricesTestCases.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/externalizedmetadata/xmlvalue/XmlValueCdnPricesTestCases.java
@@ -38,7 +38,7 @@ public class XmlValueCdnPricesTestCases extends JAXBWithJSONTestCases{
 
     public XmlValueCdnPricesTestCases(String name) throws Exception {
         super(name);
-        setClasses(new Class[] { CDNPricesNoAnnotation.class });
+        setClasses(new Class<?>[] { CDNPricesNoAnnotation.class });
         setControlDocument(XML_RESOURCE);
         setControlJSON(JSON_RESOURCE);
     }
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/externalizedmetadata/xmlvalue/XmlValueInternationalPriceTestCases.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/externalizedmetadata/xmlvalue/XmlValueInternationalPriceTestCases.java
index 9030e5e..5a9cef1 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/externalizedmetadata/xmlvalue/XmlValueInternationalPriceTestCases.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/externalizedmetadata/xmlvalue/XmlValueInternationalPriceTestCases.java
@@ -36,7 +36,7 @@ public class XmlValueInternationalPriceTestCases extends JAXBWithJSONTestCases{
 
     public XmlValueInternationalPriceTestCases(String name) throws Exception {
         super(name);
-        setClasses(new Class[] { InternationalPriceNoAnnotation.class });
+        setClasses(new Class<?>[] { InternationalPriceNoAnnotation.class });
         setControlDocument(XML_RESOURCE);
         setControlJSON(JSON_RESOURCE);
         jaxbMarshaller.setProperty(MarshallerProperties.JSON_VALUE_WRAPPER, "value");
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/externalizedmetadata/xmlvalue/XmlValueInternationalPricesTestCases.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/externalizedmetadata/xmlvalue/XmlValueInternationalPricesTestCases.java
index 006aa41..3283519 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/externalizedmetadata/xmlvalue/XmlValueInternationalPricesTestCases.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/externalizedmetadata/xmlvalue/XmlValueInternationalPricesTestCases.java
@@ -34,7 +34,7 @@ public class XmlValueInternationalPricesTestCases extends JAXBWithJSONTestCases{
 
     public XmlValueInternationalPricesTestCases(String name) throws Exception {
         super(name);
-        setClasses(new Class[] { InternationalPricesNoAnnotation.class });
+        setClasses(new Class<?>[] { InternationalPricesNoAnnotation.class });
         setControlDocument(XML_RESOURCE);
         setControlJSON(JSON_RESOURCE);
     }
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 f7f7982..5a76329 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
@@ -48,7 +48,7 @@ public XmlValueTestCases(String name) throws Exception{
         super(name);
         setControlDocument(XML_RESOURCE);
         setControlJSON(JSON_RESOURCE);
-        setClasses(new Class[] { MyValueClass.class });
+        setClasses(new Class<?>[] { MyValueClass.class });
     }
 
     @Override
@@ -92,7 +92,7 @@ public void testTwoXmlValues() {
         boolean exceptionOccurred = false;
 
         try {
-            JAXBContextFactory.createContext(new Class[] { InternationalPriceNoAnnotation.class }, properties, getClass().getClassLoader());
+            JAXBContextFactory.createContext(new Class<?>[] { InternationalPriceNoAnnotation.class }, properties, getClass().getClassLoader());
         } catch (Exception x) {
             exceptionOccurred = true;
         }
@@ -122,7 +122,7 @@ public void testXmlValueWithElement() {
         boolean exceptionOccurred = false;
 
         try {
-            JAXBContextFactory.createContext(new Class[] { InternationalPriceNoAnnotation.class }, properties, getClass().getClassLoader());
+            JAXBContextFactory.createContext(new Class<?>[] { InternationalPriceNoAnnotation.class }, properties, getClass().getClassLoader());
         } catch (Exception x) {
             exceptionOccurred = true;
         }
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/file/FileTestCases.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/file/FileTestCases.java
index a814cfe..82bda88 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/file/FileTestCases.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/file/FileTestCases.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
@@ -27,7 +27,7 @@ public FileTestCases(String name) throws Exception {
         super(name);
         setControlDocument(XML_RESOURCE);
         setControlJSON(JSON_RESOURCE);
-        Class[] classes = new Class[] {Foo.class};
+        Class<?>[] classes = new Class<?>[] {Foo.class};
         setClasses(classes);
     }
 
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/helper/JAXBHelperTestCases.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/helper/JAXBHelperTestCases.java
index 84eca2f..12900e6 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/helper/JAXBHelperTestCases.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/helper/JAXBHelperTestCases.java
@@ -41,7 +41,7 @@ public JAXBHelperTestCases(String name) throws Exception {
 
     @Override
     public void setUp() throws Exception {
-        Class[] classes = new Class[1];
+        Class<?>[] classes = new Class<?>[1];
         classes[0] = Customer.class;
         jaxbContext = JAXBContextFactory.createContext(classes, null);
     }
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/idresolver/IDResolverTestCases.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/idresolver/IDResolverTestCases.java
index e2692a3..de4a072 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/idresolver/IDResolverTestCases.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/idresolver/IDResolverTestCases.java
@@ -26,7 +26,7 @@ public class IDResolverTestCases extends JAXBTestCases {
 
     public IDResolverTestCases(String name) throws Exception {
         super(name);
-        setClasses(new Class[] { Apple.class, AppleRef.class, Box.class, FruitOrder.class, Orange.class, OrangeRef.class });
+        setClasses(new Class<?>[] { Apple.class, AppleRef.class, Box.class, FruitOrder.class, Orange.class, OrangeRef.class });
         setControlDocument(XML_RESOURCE);
     }
 
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/idresolver/collection/IDResolverTestCases.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/idresolver/collection/IDResolverTestCases.java
index 6a15b8b..c6be75d 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/idresolver/collection/IDResolverTestCases.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/idresolver/collection/IDResolverTestCases.java
@@ -25,7 +25,7 @@ public class IDResolverTestCases extends JAXBTestCases {
 
     public IDResolverTestCases(String name) throws Exception {
         super(name);
-        setClasses(new Class[] { Root.class, TestObject.class });
+        setClasses(new Class<?>[] { Root.class, TestObject.class });
         setControlDocument(XML_RESOURCE);
     }
 
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/inheritance/JAXBInheritanceTestCases.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/inheritance/JAXBInheritanceTestCases.java
index d1e5607..1908456 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/inheritance/JAXBInheritanceTestCases.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/inheritance/JAXBInheritanceTestCases.java
@@ -28,7 +28,7 @@ public class JAXBInheritanceTestCases extends JAXBWithJSONTestCases {
     private static final String JSON_SCHEMA_RESOURCE = "org/eclipse/persistence/testing/jaxb/inheritance/inheritanceschema.json";
     public JAXBInheritanceTestCases(String name) throws Exception {
         super(name);
-        setClasses(new Class[] { A.class, B.class, C.class, D.class, E.class });
+        setClasses(new Class<?>[] { A.class, B.class, C.class, D.class, E.class });
         setControlDocument("org/eclipse/persistence/testing/jaxb/inheritance/inheritance.xml");
         setControlJSON("org/eclipse/persistence/testing/jaxb/inheritance/inheritance.json");
     }
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/inheritance/dot/InheritanceDotTestCases.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/inheritance/dot/InheritanceDotTestCases.java
index d2b1fdc..8988526 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/inheritance/dot/InheritanceDotTestCases.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/inheritance/dot/InheritanceDotTestCases.java
@@ -23,7 +23,7 @@ public class InheritanceDotTestCases extends JAXBWithJSONTestCases{
 
     public InheritanceDotTestCases(String name) throws Exception {
         super(name);
-        setClasses(new Class[] { Person.class, Employee.class });
+        setClasses(new Class<?>[] { Person.class, Employee.class });
         setControlDocument("org/eclipse/persistence/testing/jaxb/inheritance/inheritanceDot.xml");
         setControlJSON("org/eclipse/persistence/testing/jaxb/inheritance/inheritanceDot.json");
     }
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/inheritance/id/JAXBInheritanceIdTestCases.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/inheritance/id/JAXBInheritanceIdTestCases.java
index dfeb695..e8ec550 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/inheritance/id/JAXBInheritanceIdTestCases.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/inheritance/id/JAXBInheritanceIdTestCases.java
@@ -29,7 +29,7 @@
 public class JAXBInheritanceIdTestCases extends JAXBWithJSONTestCases {
     public JAXBInheritanceIdTestCases(String name) throws Exception {
         super(name);
-        setClasses(new Class[] {AImpl.class, BImpl.class, Base.class});
+        setClasses(new Class<?>[] {AImpl.class, BImpl.class, Base.class});
         setControlDocument("org/eclipse/persistence/testing/jaxb/inheritance/id/a.xml");
         setControlJSON("org/eclipse/persistence/testing/jaxb/inheritance/id/a.json");
 
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/inheritance/interfaces/InterfacesTestCases.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/inheritance/interfaces/InterfacesTestCases.java
index 8c637f2..be50526 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/inheritance/interfaces/InterfacesTestCases.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/inheritance/interfaces/InterfacesTestCases.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,7 @@ public InterfacesTestCases(String name) {
 
     @Override
     protected void setUp() throws Exception {
-        jaxbContext = JAXBContextFactory.createContext(new Class[]{CustomerInt.class}, null);
+        jaxbContext = JAXBContextFactory.createContext(new Class<?>[]{CustomerInt.class}, null);
     }
 
     public void testMarshal() throws Exception {
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/inheritance/ns/JAXBInheritanceNSTestCases.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/inheritance/ns/JAXBInheritanceNSTestCases.java
index 7f11e35..066617d 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/inheritance/ns/JAXBInheritanceNSTestCases.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/inheritance/ns/JAXBInheritanceNSTestCases.java
@@ -29,7 +29,7 @@
 public class JAXBInheritanceNSTestCases extends JAXBWithJSONTestCases {
     public JAXBInheritanceNSTestCases(String name) throws Exception {
         super(name);
-        setClasses(new Class[] {Root.class, SubType.class});
+        setClasses(new Class<?>[] {Root.class, SubType.class});
         setControlDocument("org/eclipse/persistence/testing/jaxb/inheritance/ns/inheritanceNS.xml");
         setControlJSON("org/eclipse/persistence/testing/jaxb/inheritance/ns/inheritanceNS.json");
 
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/inheritance/ns/JAXBInheritanceSubTypeNoParentRootTestCases.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/inheritance/ns/JAXBInheritanceSubTypeNoParentRootTestCases.java
index 68da7c2..0d9662a 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/inheritance/ns/JAXBInheritanceSubTypeNoParentRootTestCases.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/inheritance/ns/JAXBInheritanceSubTypeNoParentRootTestCases.java
@@ -26,7 +26,7 @@
 public class JAXBInheritanceSubTypeNoParentRootTestCases extends JAXBWithJSONTestCases {
     public JAXBInheritanceSubTypeNoParentRootTestCases(String name) throws Exception {
         super(name);
-        setClasses(new Class[] {SubTypeWithRootElementNoParentRoot.class});
+        setClasses(new Class<?>[] {SubTypeWithRootElementNoParentRoot.class});
         setControlDocument("org/eclipse/persistence/testing/jaxb/inheritance/ns/subTypeNoParentRoot.xml");
         setControlJSON("org/eclipse/persistence/testing/jaxb/inheritance/ns/subTypeNoParentRoot.json");
 
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/inheritance/ns/JAXBInheritanceSubTypeParentRootOnlyTestCases.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/inheritance/ns/JAXBInheritanceSubTypeParentRootOnlyTestCases.java
index b2f814b..dd1b9f9 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/inheritance/ns/JAXBInheritanceSubTypeParentRootOnlyTestCases.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/inheritance/ns/JAXBInheritanceSubTypeParentRootOnlyTestCases.java
@@ -29,7 +29,7 @@
 public class JAXBInheritanceSubTypeParentRootOnlyTestCases extends JAXBWithJSONTestCases {
     public JAXBInheritanceSubTypeParentRootOnlyTestCases(String name) throws Exception {
         super(name);
-        setClasses(new Class[] {SubTypeParentRootOnly.class});
+        setClasses(new Class<?>[] {SubTypeParentRootOnly.class});
         setControlDocument("org/eclipse/persistence/testing/jaxb/inheritance/ns/subTypeParentRoot.xml");
         setControlJSON("org/eclipse/persistence/testing/jaxb/inheritance/ns/subTypeParentRoot.json");
 
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/inheritance/ns/JAXBInheritanceSubTypeTestCases.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/inheritance/ns/JAXBInheritanceSubTypeTestCases.java
index 5157bf2..e6d43b1 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/inheritance/ns/JAXBInheritanceSubTypeTestCases.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/inheritance/ns/JAXBInheritanceSubTypeTestCases.java
@@ -26,7 +26,7 @@
 public class JAXBInheritanceSubTypeTestCases extends JAXBWithJSONTestCases {
     public JAXBInheritanceSubTypeTestCases(String name) throws Exception {
         super(name);
-        setClasses(new Class[] {SubTypeWithRootElement.class});
+        setClasses(new Class<?>[] {SubTypeWithRootElement.class});
         setControlDocument("org/eclipse/persistence/testing/jaxb/inheritance/ns/subTypeRoot.xml");
         setControlJSON("org/eclipse/persistence/testing/jaxb/inheritance/ns/subTypeRoot.json");
 
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/inheritance/override/InheritanceOverrideTestCases.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/inheritance/override/InheritanceOverrideTestCases.java
index 13e443a..f5a9682 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/inheritance/override/InheritanceOverrideTestCases.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/inheritance/override/InheritanceOverrideTestCases.java
@@ -28,7 +28,7 @@
 public class InheritanceOverrideTestCases extends JAXBWithJSONTestCases {
     public InheritanceOverrideTestCases(String name) throws Exception {
         super(name);
-        setClasses(new Class[] { Root.class, Foo.class, Superclass.class, Subclass.class });
+        setClasses(new Class<?>[] { Root.class, Foo.class, Superclass.class, Subclass.class });
         setControlDocument("org/eclipse/persistence/testing/jaxb/inheritance/override.xml");
         setControlJSON("org/eclipse/persistence/testing/jaxb/inheritance/override.json");
     }
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/inheritance/simple/XmlValueInheritanceTestCases.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/inheritance/simple/XmlValueInheritanceTestCases.java
index 96b5f73..39b21a3 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/inheritance/simple/XmlValueInheritanceTestCases.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/inheritance/simple/XmlValueInheritanceTestCases.java
@@ -26,7 +26,7 @@ public class XmlValueInheritanceTestCases extends JAXBWithJSONTestCases{
 
     public XmlValueInheritanceTestCases(String name) throws Exception {
         super(name);
-        setClasses(new Class[] { Simple.class, Complex.class});
+        setClasses(new Class<?>[] { Simple.class, Complex.class});
         setControlDocument("org/eclipse/persistence/testing/jaxb/inheritance/simple/xmlvalue.xml");
         setControlJSON("org/eclipse/persistence/testing/jaxb/inheritance/simple/xmlvalue.json");
     }
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/inheritance/typeElem/InheritanceTypeElementTestCases.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/inheritance/typeElem/InheritanceTypeElementTestCases.java
index a8ae494..32d7cd4 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/inheritance/typeElem/InheritanceTypeElementTestCases.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/inheritance/typeElem/InheritanceTypeElementTestCases.java
@@ -37,7 +37,7 @@ public class InheritanceTypeElementTestCases extends JAXBWithJSONTestCases{
 
     public InheritanceTypeElementTestCases(String name) throws Exception {
         super(name);
-        setClasses(new Class[] { Root.class, Child.class, Parent.class});
+        setClasses(new Class<?>[] { Root.class, Child.class, Parent.class});
         setControlDocument("org/eclipse/persistence/testing/jaxb/inheritance/typeElem/typeElement.xml");
         setControlJSON("org/eclipse/persistence/testing/jaxb/inheritance/typeElem/typeElement.json");
 
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/innerclasses/MappedInnerClassNoneTestCases.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/innerclasses/MappedInnerClassNoneTestCases.java
index f254f87..208511b 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/innerclasses/MappedInnerClassNoneTestCases.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/innerclasses/MappedInnerClassNoneTestCases.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
@@ -26,7 +26,7 @@ public MappedInnerClassNoneTestCases(String name) {
 
     public void testCreateJAXBContext() {
         try {
-            JAXBContextFactory.createContext(new Class[] {MappedInnerClassNoneRoot.class}, null);
+            JAXBContextFactory.createContext(new Class<?>[] {MappedInnerClassNoneRoot.class}, null);
         } catch(Exception e) {
             fail("An exception should not have been thrown.");
         }
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/innerclasses/MappedInnerClassTestCases.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/innerclasses/MappedInnerClassTestCases.java
index 5996e79..8509112 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/innerclasses/MappedInnerClassTestCases.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/innerclasses/MappedInnerClassTestCases.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,7 @@ public MappedInnerClassTestCases(String name) {
 
     public void testCreateJAXBContext() {
         try {
-            JAXBContextFactory.createContext(new Class[] {MappedInnerClassRoot.class}, null);
+            JAXBContextFactory.createContext(new Class<?>[] {MappedInnerClassRoot.class}, null);
         } catch(JAXBException e) {
             return;
         }
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/innerclasses/UnmappedInnerClassTestCases.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/innerclasses/UnmappedInnerClassTestCases.java
index 1883f2b..5299479 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/innerclasses/UnmappedInnerClassTestCases.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/innerclasses/UnmappedInnerClassTestCases.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
@@ -23,7 +23,7 @@ public class UnmappedInnerClassTestCases extends JAXBWithJSONTestCases {
 
     public UnmappedInnerClassTestCases(String name) throws Exception {
         super(name);
-        setClasses(new Class[] {UnmappedInnerClassRoot.class});
+        setClasses(new Class<?>[] {UnmappedInnerClassRoot.class});
         setControlDocument(XML_RESOURCE);
         setControlJSON(JSON_RESOURCE);
     }
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/innerclasses/notincontext/InnerClassNotInContextTestCases.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/innerclasses/notincontext/InnerClassNotInContextTestCases.java
index da6ba69..66eb4a3 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/innerclasses/notincontext/InnerClassNotInContextTestCases.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/innerclasses/notincontext/InnerClassNotInContextTestCases.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
@@ -24,7 +24,7 @@ public InnerClassNotInContextTestCases(String name) throws Exception {
         super(name);
         setControlDocument(XML_RESOURCE);
         setControlJSON(JSON_RESOURCE);
-        Class[] classes = new Class[1];
+        Class<?>[] classes = new Class<?>[1];
         classes[0] = TestObjectWrapper.class;
         setClasses(classes);
     }
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/innerclasses/unreferenced/UnreferencedInnerClassTestCases.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/innerclasses/unreferenced/UnreferencedInnerClassTestCases.java
index db6c72a..6e67e16 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/innerclasses/unreferenced/UnreferencedInnerClassTestCases.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/innerclasses/unreferenced/UnreferencedInnerClassTestCases.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
@@ -23,6 +23,6 @@
 public class UnreferencedInnerClassTestCases extends TestCase {
 
     public void testCreateContext() throws Exception {
-        JAXBContext ctx = JAXBContextFactory.createContext(new Class[]{ClassWithInnerClass.class}, null);
+        JAXBContext ctx = JAXBContextFactory.createContext(new Class<?>[]{ClassWithInnerClass.class}, null);
     }
 }
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/interfaces/ObjectFactory.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/interfaces/ObjectFactory.java
index e3b3277..0c5354a 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/interfaces/ObjectFactory.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/interfaces/ObjectFactory.java
@@ -38,7 +38,7 @@ public PhoneNumber createPhoneNumber() {
     }
 
     private <T> T createInstance(Class<T> anInterface) {
-        return (T) Proxy.newProxyInstance(anInterface.getClassLoader(), new Class[] {anInterface}, new InterfaceInvocationHandler());
+        return (T) Proxy.newProxyInstance(anInterface.getClassLoader(), new Class<?>[] {anInterface}, new InterfaceInvocationHandler());
     }
 
     private static class InterfaceInvocationHandler implements InvocationHandler {
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/interfaces/choice/InterfaceChoiceTestCases.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/interfaces/choice/InterfaceChoiceTestCases.java
index 3ffa2eb..29e25f7 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/interfaces/choice/InterfaceChoiceTestCases.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/interfaces/choice/InterfaceChoiceTestCases.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,7 @@ public class InterfaceChoiceTestCases extends JAXBWithJSONTestCases {
 
     public InterfaceChoiceTestCases(String name) throws Exception {
         super(name);
-        setClasses(new Class[]{Root.class});
+        setClasses(new Class<?>[]{Root.class});
         setControlDocument(XML_RESOURCE);
         setControlJSON(JSON_RESOURCE);
         initXsiType();
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/interfaces/xmltransient/InvalidTransientInterfaceTestCases.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/interfaces/xmltransient/InvalidTransientInterfaceTestCases.java
index 9294687..78f84ed 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/interfaces/xmltransient/InvalidTransientInterfaceTestCases.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/interfaces/xmltransient/InvalidTransientInterfaceTestCases.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
@@ -24,6 +24,6 @@ public class InvalidTransientInterfaceTestCases extends TestCase {
 
 
     public void testContextCreation() throws Exception {
-        JAXBContext ctx = JAXBContextFactory.createContext(new Class[] {RootClass.class}, null);
+        JAXBContext ctx = JAXBContextFactory.createContext(new Class<?>[] {RootClass.class}, null);
     }
 }
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/javadoc/xmlaccessororder/XmlAccessorOrderTest.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/javadoc/xmlaccessororder/XmlAccessorOrderTest.java
index d96683f..ac0257a 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/javadoc/xmlaccessororder/XmlAccessorOrderTest.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/javadoc/xmlaccessororder/XmlAccessorOrderTest.java
@@ -25,7 +25,7 @@ public XmlAccessorOrderTest(String name) throws Exception {
         super(name);
         setControlDocument(XML_RESOURCE);
         setControlJSON(JSON_RESOURCE);
-        Class[] classes = new Class[1];
+        Class<?>[] classes = new Class<?>[1];
         classes[0] = Employee.class;
         setClasses(classes);
     }
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/javadoc/xmlaccessortype/XmlAccessorTypeTest.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/javadoc/xmlaccessortype/XmlAccessorTypeTest.java
index c79bc4e..3edfaad 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/javadoc/xmlaccessortype/XmlAccessorTypeTest.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/javadoc/xmlaccessortype/XmlAccessorTypeTest.java
@@ -25,7 +25,7 @@ public class XmlAccessorTypeTest extends JAXBTestCases {
     public XmlAccessorTypeTest(String name) throws Exception {
         super(name);
         setControlDocument(XML_RESOURCE);
-        Class[] classes = new Class[1];
+        Class<?>[] classes = new Class<?>[1];
         classes[0] = Address.class;
         setClasses(classes);
     }
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/javadoc/xmlanyattribute/XmlAnyAttributeTest.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/javadoc/xmlanyattribute/XmlAnyAttributeTest.java
index 337d02b..e45b846 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/javadoc/xmlanyattribute/XmlAnyAttributeTest.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/javadoc/xmlanyattribute/XmlAnyAttributeTest.java
@@ -33,7 +33,7 @@ public XmlAnyAttributeTest(String name) throws Exception {
         super(name);
         setControlDocument(XML_RESOURCE);
         setControlJSON(JSON_RESOURCE);
-        Class[] classes = new Class[1];
+        Class<?>[] classes = new Class<?>[1];
         classes[0] = XmlAnyAttributeModel.class;
         setClasses(classes);
 
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/javadoc/xmlanyelement/XmlAnyElementCollectionModelTest.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/javadoc/xmlanyelement/XmlAnyElementCollectionModelTest.java
index fe6b4a6..24eaa0c 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/javadoc/xmlanyelement/XmlAnyElementCollectionModelTest.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/javadoc/xmlanyelement/XmlAnyElementCollectionModelTest.java
@@ -36,7 +36,7 @@ public XmlAnyElementCollectionModelTest(String name) throws Exception {
         super(name);
         setControlDocument(XML_RESOURCE);
         setControlJSON(JSON_RESOURCE);
-        Class[] classes = new Class[1];
+        Class<?>[] classes = new Class<?>[1];
         classes[0] = XmlAnyElementCollectionModel.class;
         setClasses(classes);
     }
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/javadoc/xmlattachmentref/XmlAttachmentRefExampleTest.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/javadoc/xmlattachmentref/XmlAttachmentRefExampleTest.java
index c3d16c9..d8a4f1a 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/javadoc/xmlattachmentref/XmlAttachmentRefExampleTest.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/javadoc/xmlattachmentref/XmlAttachmentRefExampleTest.java
@@ -26,7 +26,7 @@ public class XmlAttachmentRefExampleTest extends JAXBTestCases{
     public XmlAttachmentRefExampleTest(String name) throws Exception {
         super(name);
         setControlDocument(XML_RESOURCE);
-        Class[] classes = new Class[1];
+        Class<?>[] classes = new Class<?>[1];
         classes[0] = RootObject.class;
         setClasses(classes);
     }
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/javadoc/xmlattribute/MapCollectionToXmlAttributeTest.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/javadoc/xmlattribute/MapCollectionToXmlAttributeTest.java
index ddb8bb5..bde013a 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/javadoc/xmlattribute/MapCollectionToXmlAttributeTest.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/javadoc/xmlattribute/MapCollectionToXmlAttributeTest.java
@@ -28,7 +28,7 @@ public MapCollectionToXmlAttributeTest(String name) throws Exception {
         super(name);
         setControlDocument(XML_RESOURCE);
         setControlJSON(JSON_RESOURCE);
-        Class[] classes = new Class[1];
+        Class<?>[] classes = new Class<?>[1];
         classes[0] = MapCollectionToXmlAttribute.class;
         setClasses(classes);
     }
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/javadoc/xmlattribute/MapPropertyToXmlAttributeTest.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/javadoc/xmlattribute/MapPropertyToXmlAttributeTest.java
index 9b4907e..66ebd54 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/javadoc/xmlattribute/MapPropertyToXmlAttributeTest.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/javadoc/xmlattribute/MapPropertyToXmlAttributeTest.java
@@ -25,7 +25,7 @@ public MapPropertyToXmlAttributeTest(String name) throws Exception {
         super(name);
         setControlDocument(XML_RESOURCE);
         setControlJSON(JSON_RESOURCE);
-        Class[] classes = new Class[1];
+        Class<?>[] classes = new Class<?>[1];
         classes[0] = USPrice.class;
         setClasses(classes);
     }
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/javadoc/xmlelement/XmlElementNillableRequiredTest.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/javadoc/xmlelement/XmlElementNillableRequiredTest.java
index dce1353..48b1f4f 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/javadoc/xmlelement/XmlElementNillableRequiredTest.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/javadoc/xmlelement/XmlElementNillableRequiredTest.java
@@ -25,7 +25,7 @@ public XmlElementNillableRequiredTest(String name) throws Exception {
         super(name);
         setControlDocument(XML_RESOURCE);
         setControlJSON(JSON_RESOURCE);
-        Class[] classes = new Class[1];
+        Class<?>[] classes = new Class<?>[1];
         classes[0] = USPriceRequired.class;
         setClasses(classes);
     }
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/javadoc/xmlelement/XmlElementNillableTest.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/javadoc/xmlelement/XmlElementNillableTest.java
index 9987f0c..a11c804 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/javadoc/xmlelement/XmlElementNillableTest.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/javadoc/xmlelement/XmlElementNillableTest.java
@@ -38,7 +38,7 @@ public XmlElementNillableTest(String name) throws Exception {
         super(name);
         setControlDocument(XML_RESOURCE);
         setControlJSON(JSON_RESOURCE);
-        Class[] classes = new Class[1];
+        Class<?>[] classes = new Class<?>[1];
         classes[0] = USPriceNillable.class;
         setClasses(classes);
     }
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/javadoc/xmlelement/XmlElementNonStaticTest.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/javadoc/xmlelement/XmlElementNonStaticTest.java
index dfa9e11..68ecc4e 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/javadoc/xmlelement/XmlElementNonStaticTest.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/javadoc/xmlelement/XmlElementNonStaticTest.java
@@ -37,7 +37,7 @@ public XmlElementNonStaticTest(String name) throws Exception {
         super(name);
         setControlDocument(XML_RESOURCE);
         setControlJSON(JSON_RESOURCE);
-        Class[] classes = new Class[1];
+        Class<?>[] classes = new Class<?>[1];
         classes[0] = USPrice.class;
         setClasses(classes);
     }
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/javadoc/xmlelementdecl/XmlElementDeclExample1Test.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/javadoc/xmlelementdecl/XmlElementDeclExample1Test.java
index 6cdb47a..1535912 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/javadoc/xmlelementdecl/XmlElementDeclExample1Test.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/javadoc/xmlelementdecl/XmlElementDeclExample1Test.java
@@ -23,7 +23,7 @@ public class XmlElementDeclExample1Test extends JAXBTestCases{
     public XmlElementDeclExample1Test(String name) throws Exception {
         super(name);
         setControlDocument(XML_RESOURCE);
-        Class[] classes = new Class[1];
+        Class<?>[] classes = new Class<?>[1];
         classes[0] = ObjectFactory.class;
         setClasses(classes);
     }
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/javadoc/xmlelementref/XmlElementRefHierarchyTest.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/javadoc/xmlelementref/XmlElementRefHierarchyTest.java
index ca4a8e4..e7d0806 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/javadoc/xmlelementref/XmlElementRefHierarchyTest.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/javadoc/xmlelementref/XmlElementRefHierarchyTest.java
@@ -28,7 +28,7 @@ public XmlElementRefHierarchyTest(String name) throws Exception {
         super(name);
         setControlDocument(XML_RESOURCE);
         setControlJSON(JSON_RESOURCE);
-        Class[] classes = new Class[4];
+        Class<?>[] classes = new Class<?>[4];
         classes[3] = Task.class;
         classes[0] = JarTask.class;
         classes[1] = JavacTask.class;
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/javadoc/xmlelementrefs/XmlElementRefsTest.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/javadoc/xmlelementrefs/XmlElementRefsTest.java
index d300b3f..43c3016 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/javadoc/xmlelementrefs/XmlElementRefsTest.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/javadoc/xmlelementrefs/XmlElementRefsTest.java
@@ -27,7 +27,7 @@ public XmlElementRefsTest(String name) throws Exception {
         super(name);
         setControlDocument(XML_RESOURCE);
         setControlJSON(JSON_RESOURCE);
-        Class[] classes = new Class[4];
+        Class<?>[] classes = new Class<?>[4];
 
         classes[0] = TransportType.class;
         classes[1] = ViaAir.class;
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/javadoc/xmlelements/XmlElementsListOfElementTest.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/javadoc/xmlelements/XmlElementsListOfElementTest.java
index ab69ea8..57c0d2a 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/javadoc/xmlelements/XmlElementsListOfElementTest.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/javadoc/xmlelements/XmlElementsListOfElementTest.java
@@ -26,7 +26,7 @@ public XmlElementsListOfElementTest(String name) throws Exception {
         super(name);
         setControlDocument(XML_RESOURCE);
         setControlJSON(JSON_RESOURCE);
-        Class[] classes = new Class[1];
+        Class<?>[] classes = new Class<?>[1];
         classes[0] = XmlElementsListOfElement.class;
         setClasses(classes);
     }
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/javadoc/xmlelements/XmlElementsListOfElementWrappedTest.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/javadoc/xmlelements/XmlElementsListOfElementWrappedTest.java
index 6a2f4d9..c2c84a9 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/javadoc/xmlelements/XmlElementsListOfElementWrappedTest.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/javadoc/xmlelements/XmlElementsListOfElementWrappedTest.java
@@ -29,7 +29,7 @@ public XmlElementsListOfElementWrappedTest(String name) throws Exception {
         super(name);
         setControlDocument(XML_RESOURCE);
         setControlJSON(JSON_RESOURCE);
-        Class[] classes = new Class[1];
+        Class<?>[] classes = new Class<?>[1];
         classes[0] = XmlElementsListOfElementWrapped.class;
         setClasses(classes);
     }
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/javadoc/xmlelementwrapper/XmlElementWrapperTest.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/javadoc/xmlelementwrapper/XmlElementWrapperTest.java
index 818c2ff5..175fc8b 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/javadoc/xmlelementwrapper/XmlElementWrapperTest.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/javadoc/xmlelementwrapper/XmlElementWrapperTest.java
@@ -28,7 +28,7 @@ public XmlElementWrapperTest(String name) throws Exception {
         super(name);
         setControlDocument(XML_RESOURCE);
         setControlJSON(JSON_RESOURCE);
-        Class[] classes = new Class[1];
+        Class<?>[] classes = new Class<?>[1];
         classes[0] = Hockey.class;
         setClasses(classes);
     }
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/javadoc/xmlenumvalue/XmlEnumValueConstantNameTest3.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/javadoc/xmlenumvalue/XmlEnumValueConstantNameTest3.java
index d7332ae..9d499ac 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/javadoc/xmlenumvalue/XmlEnumValueConstantNameTest3.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/javadoc/xmlenumvalue/XmlEnumValueConstantNameTest3.java
@@ -25,7 +25,7 @@ public XmlEnumValueConstantNameTest3(String name) throws Exception {
         super(name);
         setControlDocument(XML_RESOURCE);
         setControlJSON(JSON_RESOURCE);
-        Class[] classes = new Class[2];
+        Class<?>[] classes = new Class<?>[2];
         classes[0] = MyEnum.class;
         classes[1] = MyEnumModel.class;
         setClasses(classes);
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/javadoc/xmlenumvalue/XmlEnumValueConstantNameValueTest.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/javadoc/xmlenumvalue/XmlEnumValueConstantNameValueTest.java
index d566c88..fe12929 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/javadoc/xmlenumvalue/XmlEnumValueConstantNameValueTest.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/javadoc/xmlenumvalue/XmlEnumValueConstantNameValueTest.java
@@ -25,7 +25,7 @@ public XmlEnumValueConstantNameValueTest(String name) throws Exception {
         super(name);
         setControlDocument(XML_RESOURCE);
         setControlJSON(JSON_RESOURCE);
-        Class[] classes = new Class[3];
+        Class<?>[] classes = new Class<?>[3];
         classes[0] = Coin.class;
         classes[1] = Card.class;
         classes[2] = XmlEnumValueConstantNameValue.class;
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/javadoc/xmlid/XmlIdTest.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/javadoc/xmlid/XmlIdTest.java
index d785627..3de01d5 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/javadoc/xmlid/XmlIdTest.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/javadoc/xmlid/XmlIdTest.java
@@ -22,7 +22,7 @@ public class XmlIdTest extends JAXBWithJSONTestCases {
 
     public XmlIdTest(String name) throws Exception {
         super(name);
-        Class[] classes = new Class[1];
+        Class<?>[] classes = new Class<?>[1];
         classes[0] = Customer.class;
         setClasses(classes);
         setControlDocument(XML_RESOURCE);
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/javadoc/xmlidref/XmlIdRefContainmentTest.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/javadoc/xmlidref/XmlIdRefContainmentTest.java
index c832953..5659cf0 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/javadoc/xmlidref/XmlIdRefContainmentTest.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/javadoc/xmlidref/XmlIdRefContainmentTest.java
@@ -28,7 +28,7 @@ public XmlIdRefContainmentTest(String name) throws Exception {
         super(name);
         setControlDocument(XML_RESOURCE);
         setControlJSON(JSON_RESOURCE);
-        Class[] classes = new Class[4];
+        Class<?>[] classes = new Class<?>[4];
         classes[0] = Customer.class;
         classes[1] = Invoice.class;
         classes[2] = Shipping.class;
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/javadoc/xmllist/XmlListTest.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/javadoc/xmllist/XmlListTest.java
index 4b150fd..865ee55 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/javadoc/xmllist/XmlListTest.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/javadoc/xmllist/XmlListTest.java
@@ -28,7 +28,7 @@ public XmlListTest(String name) throws Exception {
         super(name);
         setControlDocument(XML_RESOURCE);
         setControlJSON(JSON_RESOURCE);
-        Class[] classes = new Class[1];
+        Class<?>[] classes = new Class<?>[1];
         classes[0] = Hockey.class;
         setClasses(classes);
     }
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/javadoc/xmlns/XmlNsCustomizePrefixAndUriTest.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/javadoc/xmlns/XmlNsCustomizePrefixAndUriTest.java
index 2a10dee..12c9365 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/javadoc/xmlns/XmlNsCustomizePrefixAndUriTest.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/javadoc/xmlns/XmlNsCustomizePrefixAndUriTest.java
@@ -25,7 +25,7 @@ public XmlNsCustomizePrefixAndUriTest(String name) throws Exception {
         super(name);
         setControlDocument(XML_RESOURCE);
         setControlJSON(JSON_RESOURCE);
-        Class[] classes = new Class[1];
+        Class<?>[] classes = new Class<?>[1];
         classes[0] = USPrice.class;
         setClasses(classes);
     }
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/javadoc/xmlrootelement/XmlRootElementBasicTest.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/javadoc/xmlrootelement/XmlRootElementBasicTest.java
index 29ee92c..2431819 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/javadoc/xmlrootelement/XmlRootElementBasicTest.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/javadoc/xmlrootelement/XmlRootElementBasicTest.java
@@ -27,7 +27,7 @@ public XmlRootElementBasicTest(String name) throws Exception {
         super(name);
         setControlDocument(XML_RESOURCE);
         setControlJSON(JSON_RESOURCE);
-        Class[] classes = new Class[1];
+        Class<?>[] classes = new Class<?>[1];
         classes[0] = Point2D.class;
         setClasses(classes);
     }
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/javadoc/xmlrootelement/XmlRootElementBasicTest2.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/javadoc/xmlrootelement/XmlRootElementBasicTest2.java
index 7508753..f337792 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/javadoc/xmlrootelement/XmlRootElementBasicTest2.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/javadoc/xmlrootelement/XmlRootElementBasicTest2.java
@@ -38,7 +38,7 @@ public XmlRootElementBasicTest2(String name) throws Exception {
         super(name);
         setControlDocument(XML_RESOURCE);
         setControlJSON(JSON_RESOURCE);
-        Class[] classes = new Class[1];
+        Class<?>[] classes = new Class<?>[1];
         classes[0] = USPrice.class;
         setClasses(classes);
     }
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/javadoc/xmlrootelement/XmlRootElementNotInheritedByDerivedTest.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/javadoc/xmlrootelement/XmlRootElementNotInheritedByDerivedTest.java
index 96e14f7..11b6109 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/javadoc/xmlrootelement/XmlRootElementNotInheritedByDerivedTest.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/javadoc/xmlrootelement/XmlRootElementNotInheritedByDerivedTest.java
@@ -27,7 +27,7 @@ public  XmlRootElementNotInheritedByDerivedTest(String name) throws Exception {
         super(name);
         setControlDocument(XML_RESOURCE);
         setControlJSON(JSON_RESOURCE);
-        Class[] classes = new Class[2];
+        Class<?>[] classes = new Class<?>[2];
         classes[0] = Point3D.class;
         classes[1] = Point2D.class;
         setClasses(classes);
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/javadoc/xmlschema/XmlSchemaElementFormUnqualifiedTest.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/javadoc/xmlschema/XmlSchemaElementFormUnqualifiedTest.java
index 7d31991..ddd1f70 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/javadoc/xmlschema/XmlSchemaElementFormUnqualifiedTest.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/javadoc/xmlschema/XmlSchemaElementFormUnqualifiedTest.java
@@ -26,7 +26,7 @@ public XmlSchemaElementFormUnqualifiedTest(String name) throws Exception {
         super(name);
         setControlDocument(XML_RESOURCE);
         setControlJSON(JSON_RESOURCE);
-        Class[] classes = new Class[1];
+        Class<?>[] classes = new Class<?>[1];
         classes[0] = USPrice.class;
         setClasses(classes);
     }
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/javadoc/xmlschematype/XmlSchemaTypeGregorianCalendarTest.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/javadoc/xmlschematype/XmlSchemaTypeGregorianCalendarTest.java
index d86462a..dc02380 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/javadoc/xmlschematype/XmlSchemaTypeGregorianCalendarTest.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/javadoc/xmlschematype/XmlSchemaTypeGregorianCalendarTest.java
@@ -28,7 +28,7 @@ public XmlSchemaTypeGregorianCalendarTest(String name) throws Exception {
         super(name);
         setControlDocument(XML_RESOURCE);
         setControlJSON(JSON_RESOURCE);
-        Class[] classes = new Class[1];
+        Class<?>[] classes = new Class<?>[1];
         classes[0] = USPrice.class;
         setClasses(classes);
     }
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/javadoc/xmlseealso/XmlSeeAlsoTest.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/javadoc/xmlseealso/XmlSeeAlsoTest.java
index b54b060..6b53ffc 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/javadoc/xmlseealso/XmlSeeAlsoTest.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/javadoc/xmlseealso/XmlSeeAlsoTest.java
@@ -25,7 +25,7 @@ public XmlSeeAlsoTest(String name) throws Exception {
         super(name);
         setControlDocument(XML_RESOURCE);
         setControlJSON(JSON_RESOURCE);
-        Class[] classes = new Class[1];
+        Class<?>[] classes = new Class<?>[1];
         classes[0] = Organism.class;
         setClasses(classes);
     }
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/javadoc/xmlseealso/XmlSeeAlsoTest2.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/javadoc/xmlseealso/XmlSeeAlsoTest2.java
index ade11c0..e071495 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/javadoc/xmlseealso/XmlSeeAlsoTest2.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/javadoc/xmlseealso/XmlSeeAlsoTest2.java
@@ -28,7 +28,7 @@ public XmlSeeAlsoTest2(String name) throws Exception {
         super(name);
         setControlDocument(XML_RESOURCE);
         setControlJSON(JSON_RESOURCE);
-        Class[] classes = new Class[1];
+        Class<?>[] classes = new Class<?>[1];
         classes[0] = Animal.class;
         setClasses(classes);
     }
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/javadoc/xmltransient/XmlTransientTest.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/javadoc/xmltransient/XmlTransientTest.java
index 6b06fc7..addb419 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/javadoc/xmltransient/XmlTransientTest.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/javadoc/xmltransient/XmlTransientTest.java
@@ -25,7 +25,7 @@ public XmlTransientTest(String name) throws Exception {
         super(name);
         setControlDocument(XML_RESOURCE);
         setControlJSON(JSON_RESOURCE);
-        Class[] classes = new Class[1];
+        Class<?>[] classes = new Class<?>[1];
         classes[0] = Address.class;
         setClasses(classes);
     }
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/javadoc/xmltype/AttributeWithAnonymousTypeTest.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/javadoc/xmltype/AttributeWithAnonymousTypeTest.java
index e8e6f39..82dca94 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/javadoc/xmltype/AttributeWithAnonymousTypeTest.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/javadoc/xmltype/AttributeWithAnonymousTypeTest.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
@@ -25,7 +25,7 @@ public class AttributeWithAnonymousTypeTest extends JAXBWithJSONTestCases {
 
     public AttributeWithAnonymousTypeTest(String name) throws Exception {
         super(name);
-        setClasses(new Class[] {Item.class});
+        setClasses(new Class<?>[] {Item.class});
         setControlDocument(XML_RESOURCE);
         setControlJSON(JSON_RESOURCE);
     }
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/javadoc/xmltype/XmlTypeAnonymousLocalElementTest.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/javadoc/xmltype/XmlTypeAnonymousLocalElementTest.java
index a3bb0cd..03fa774 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/javadoc/xmltype/XmlTypeAnonymousLocalElementTest.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/javadoc/xmltype/XmlTypeAnonymousLocalElementTest.java
@@ -29,7 +29,7 @@ public XmlTypeAnonymousLocalElementTest(String name) throws Exception {
         super(name);
         setControlDocument(XML_RESOURCE);
         setControlJSON(JSON_RESOURCE);
-        Class[] classes = new Class[2];
+        Class<?>[] classes = new Class<?>[2];
         classes[0] = Address4.class;
         classes[1] = Invoice.class;
         setClasses(classes);
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/javadoc/xmltype/XmlTypeAnonymousTypeTest.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/javadoc/xmltype/XmlTypeAnonymousTypeTest.java
index bfcb4c4..a426b87 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/javadoc/xmltype/XmlTypeAnonymousTypeTest.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/javadoc/xmltype/XmlTypeAnonymousTypeTest.java
@@ -29,7 +29,7 @@ public XmlTypeAnonymousTypeTest(String name) throws Exception {
         super(name);
         setControlDocument(XML_RESOURCE);
         setControlJSON(JSON_RESOURCE);
-        Class[] classes = new Class[1];
+        Class<?>[] classes = new Class<?>[1];
         classes[0] = Address3.class;
         setClasses(classes);
     }
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/javadoc/xmltype/XmlTypeCustomizedOrderingTest.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/javadoc/xmltype/XmlTypeCustomizedOrderingTest.java
index 5d09a2e..a657e71 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/javadoc/xmltype/XmlTypeCustomizedOrderingTest.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/javadoc/xmltype/XmlTypeCustomizedOrderingTest.java
@@ -27,7 +27,7 @@ public XmlTypeCustomizedOrderingTest(String name) throws Exception {
         super(name);
         setControlDocument(XML_RESOURCE);
         setControlJSON(JSON_RESOURCE);
-        Class[] classes = new Class[1];
+        Class<?>[] classes = new Class<?>[1];
         classes[0] = Address.class;
         setClasses(classes);
     }
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/javadoc/xmltype/XmlTypeUnspecifiedOrderTest.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/javadoc/xmltype/XmlTypeUnspecifiedOrderTest.java
index a908386..05e45fd 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/javadoc/xmltype/XmlTypeUnspecifiedOrderTest.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/javadoc/xmltype/XmlTypeUnspecifiedOrderTest.java
@@ -29,7 +29,7 @@ public XmlTypeUnspecifiedOrderTest(String name) throws Exception {
         super(name);
         setControlDocument(XML_RESOURCE);
         setControlJSON(JSON_RESOURCE);
-        Class[] classes = new Class[1];
+        Class<?>[] classes = new Class<?>[1];
         classes[0] = Address2.class;
         setClasses(classes);
     }
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/javadoc/xmlvalue/XmlValueSimpleContentTest.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/javadoc/xmlvalue/XmlValueSimpleContentTest.java
index f4b0a19..feb1059 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/javadoc/xmlvalue/XmlValueSimpleContentTest.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/javadoc/xmlvalue/XmlValueSimpleContentTest.java
@@ -35,7 +35,7 @@ public XmlValueSimpleContentTest(String name) throws Exception {
         super(name);
         setControlDocument(XML_RESOURCE);
         setControlJSON(JSON_RESOURCE);
-        Class[] classes = new Class[1];
+        Class<?>[] classes = new Class<?>[1];
         classes[0] = InternationalPrice.class;
         setClasses(classes);
         jaxbMarshaller.setProperty(MarshallerProperties.JSON_VALUE_WRAPPER, "valuewrapper");
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/javadoc/xmlvalue/XmlValueSimpleTypeTest.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/javadoc/xmlvalue/XmlValueSimpleTypeTest.java
index 805c065..0ebd5ae 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/javadoc/xmlvalue/XmlValueSimpleTypeTest.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/javadoc/xmlvalue/XmlValueSimpleTypeTest.java
@@ -27,7 +27,7 @@ public XmlValueSimpleTypeTest(String name) throws Exception {
         super(name);
         setControlDocument(XML_RESOURCE);
         setControlJSON(JSON_RESOURCE);
-        Class[] classes = new Class[1];
+        Class<?>[] classes = new Class<?>[1];
         classes[0] = USPrice.class;
         setClasses(classes);
     }
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/jaxbcontext/CreateByXPathTests.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/jaxbcontext/CreateByXPathTests.java
index 18c5bae..661f60d 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/jaxbcontext/CreateByXPathTests.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/jaxbcontext/CreateByXPathTests.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
@@ -38,7 +38,7 @@ public String getName() {
     @Override
     protected void setUp() throws Exception {
         super.setUp();
-        eCtx = (JAXBContext) JAXBContextFactory.createContext(new Class[] { TestBean.class }, null);
+        eCtx = (JAXBContext) JAXBContextFactory.createContext(new Class<?>[] { TestBean.class }, null);
     }
 
     private TestBean getControlObject() {
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/jaxbcontext/GetByXPathTests.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/jaxbcontext/GetByXPathTests.java
index 3dee4dc..7fde6d3 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/jaxbcontext/GetByXPathTests.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/jaxbcontext/GetByXPathTests.java
@@ -35,7 +35,7 @@ public String getName() {
     @Override
     protected void setUp() throws Exception {
         super.setUp();
-        eCtx = (JAXBContext) JAXBContextFactory.createContext(new Class[] { TestBean.class }, null);
+        eCtx = (JAXBContext) JAXBContextFactory.createContext(new Class<?>[] { TestBean.class }, null);
     }
 
     private TestBean getControlObject() {
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/jaxbcontext/JAXBContextMediaTypeTestCases.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/jaxbcontext/JAXBContextMediaTypeTestCases.java
index 83c22df..fe55fb0 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/jaxbcontext/JAXBContextMediaTypeTestCases.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/jaxbcontext/JAXBContextMediaTypeTestCases.java
@@ -38,7 +38,7 @@
 public class JAXBContextMediaTypeTestCases extends TestCase{
 
     public void testCreateContextWithMediaTypeJSONString() throws JAXBException {
-        Class[] classes = new Class[1];
+        Class<?>[] classes = new Class<?>[1];
         classes[0] = Employee.class;
         Map props = new HashMap();
         props.put(JAXBContextProperties.MEDIA_TYPE, "application/json");
@@ -64,7 +64,7 @@ public void testCreateContextWithMediaTypeJSONString() throws JAXBException {
     }
 
     public void testCreateContextWithMediaTypeJSONEnum() throws JAXBException {
-        Class[] classes = new Class[1];
+        Class<?>[] classes = new Class<?>[1];
         classes[0] = Employee.class;
         Map props = new HashMap();
         props.put(JAXBContextProperties.MEDIA_TYPE, MediaType.APPLICATION_JSON);
@@ -84,7 +84,7 @@ public void testCreateContextWithMediaTypeJSONEnum() throws JAXBException {
     }
 
     public void testCreateContextWithNoMediaType() throws JAXBException {
-        Class[] classes = new Class[1];
+        Class<?>[] classes = new Class<?>[1];
         classes[0] = Employee.class;
 
         JAXBContext ctx = JAXBContextFactory.createContext(classes, null);
@@ -97,7 +97,7 @@ public void testCreateContextWithNoMediaType() throws JAXBException {
     }
 
     public void testCreateContextWithNullMediaType() throws JAXBException {
-        Class[] classes = new Class[1];
+        Class<?>[] classes = new Class<?>[1];
         classes[0] = Employee.class;
         Map props = new HashMap();
         props.put(JAXBContextProperties.MEDIA_TYPE, null);
@@ -114,7 +114,7 @@ public void testCreateContextWithNullMediaType() throws JAXBException {
     }
 
     public void testCreateMarshallerSetMediaTypeJSONString() throws JAXBException {
-        Class[] classes = new Class[1];
+        Class<?>[] classes = new Class<?>[1];
         classes[0] = Employee.class;
 
         JAXBContext ctx = JAXBContextFactory.createContext(classes, null);
@@ -125,7 +125,7 @@ public void testCreateMarshallerSetMediaTypeJSONString() throws JAXBException {
     }
 
     public void testCreateMarshallerSetMediaTypeJSONEnum() throws JAXBException {
-        Class[] classes = new Class[1];
+        Class<?>[] classes = new Class<?>[1];
         classes[0] = Employee.class;
 
         JAXBContext ctx = JAXBContextFactory.createContext(classes, null);
@@ -136,7 +136,7 @@ public void testCreateMarshallerSetMediaTypeJSONEnum() throws JAXBException {
     }
 
     public void testCreateUnmarshallerSetMediaTypeJSONString() throws JAXBException {
-        Class[] classes = new Class[1];
+        Class<?>[] classes = new Class<?>[1];
         classes[0] = Employee.class;
 
         JAXBContext ctx = JAXBContextFactory.createContext(classes, null);
@@ -148,7 +148,7 @@ public void testCreateUnmarshallerSetMediaTypeJSONString() throws JAXBException
 
 
     public void testCreateUnmarshallerSetMediaTypeJSONEnum() throws JAXBException {
-        Class[] classes = new Class[1];
+        Class<?>[] classes = new Class<?>[1];
         classes[0] = Employee.class;
 
         JAXBContext ctx = JAXBContextFactory.createContext(classes, null);
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/jaxbcontext/JaxbContextCreationTests.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/jaxbcontext/JaxbContextCreationTests.java
index f860df5..6a9b467 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/jaxbcontext/JaxbContextCreationTests.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/jaxbcontext/JaxbContextCreationTests.java
@@ -81,27 +81,27 @@ public URL getResource(String resourceName) {
     }
 
     public void testCreateContextWithStringClass() throws JAXBException {
-        Class[] classes = new Class[1];
+        Class<?>[] classes = new Class<?>[1];
         classes[0] = String.class;
         JAXBContextFactory.createContext(classes, null);
     }
 
     public void testCreateContextWithIntArrayClass() throws JAXBException {
-        Class[] classes = new Class[1];
+        Class<?>[] classes = new Class<?>[1];
         int[] ints = new int[1];
         classes[0] = ints.getClass();
         JAXBContextFactory.createContext(classes, null);
     }
 
     public void testCreateContextWith_ClassArray_NullClassLoader() throws JAXBException {
-        Class[] classes = new Class[1];
+        Class<?>[] classes = new Class<?>[1];
         int[] ints = new int[1];
         classes[0] = ints.getClass();
         JAXBContextFactory.createContext(classes, null);
     }
 
     public void testCreateContextWith_ClassArray_Map_NullClassLoader_Map() throws JAXBException {
-        Class[] classes = new Class[1];
+        Class<?>[] classes = new Class<?>[1];
         int[] ints = new int[1];
         classes[0] = ints.getClass();
         JAXBContextFactory.createContext(classes, null, null);
@@ -131,14 +131,14 @@ public void testCreateContextWith_TypeMappingInfoArray_Map_NullClassLoader() thr
     }
 
     public void testCreateAbstractClassWithMultiArgConstructor() throws JAXBException {
-        Class[] classes = new Class[1];
+        Class<?>[] classes = new Class<?>[1];
         classes[0] = AbstractClassWithMultiArgConstructor.class;
         JAXBContextFactory.createContext(classes, null);
     }
 
     public void testCreateConcreteClassWithMultiArgConstructor() throws JAXBException {
         try {
-            Class[] classes = new Class[1];
+            Class<?>[] classes = new Class<?>[1];
             classes[0] = ConcreteClassWithMultiArgConstructor.class;
             JAXBContextFactory.createContext(classes, null);
         } catch(JAXBException e) {
@@ -150,7 +150,7 @@ public void testCreateConcreteClassWithMultiArgConstructor() throws JAXBExceptio
     }
 
     public void testCreateContextWithGenerics() throws JAXBException {
-        Class[] classes = new Class[1];
+        Class<?>[] classes = new Class<?>[1];
         classes[0] = ConcreteClassWithGenerics.class;
         JAXBContextFactory.createContext(classes, null);
     }
@@ -184,7 +184,7 @@ public void testCreateContextWithPathAndBindings() throws Exception {
     }
 
     public void testCreateContextXmlAnyAttributeSubTypeMap() throws Exception {
-        JAXBContextFactory.createContext(new Class[]{XmlAnyAttributeSubTypeMapModel.class}, null);
+        JAXBContextFactory.createContext(new Class<?>[]{XmlAnyAttributeSubTypeMapModel.class}, null);
     }
 
     public void testJavaClassImplWildcard() throws Exception{
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/jaxbcontext/JaxbTypeToSchemaTypeTestCases.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/jaxbcontext/JaxbTypeToSchemaTypeTestCases.java
index 0097f02..6d65568 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/jaxbcontext/JaxbTypeToSchemaTypeTestCases.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/jaxbcontext/JaxbTypeToSchemaTypeTestCases.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,7 @@ public JaxbTypeToSchemaTypeTestCases(String name) {
     }
 
     public void testClassArray() throws Exception{
-        Class[] classes = new Class[]{String.class};
+        Class<?>[] classes = new Class<?>[]{String.class};
         JAXBContext ctx = (JAXBContext) JAXBContextFactory.createContext(classes, null);
         Map<Type, QName> typeMap = ctx.getTypeToSchemaType();
         assertEquals(1, typeMap.size());
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/jaxbcontext/SetByXPathTests.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/jaxbcontext/SetByXPathTests.java
index 8b287b4..b4af9b9 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/jaxbcontext/SetByXPathTests.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/jaxbcontext/SetByXPathTests.java
@@ -38,7 +38,7 @@ public String getName() {
     @Override
     protected void setUp() throws Exception {
         super.setUp();
-        eCtx = (JAXBContext) JAXBContextFactory.createContext(new Class[] { TestBean.class }, null);
+        eCtx = (JAXBContext) JAXBContextFactory.createContext(new Class<?>[] { TestBean.class }, null);
     }
 
     private TestBean getControlObject() {
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/jaxbcontext/multielemref/MultipleXmlElementRefTestCases.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/jaxbcontext/multielemref/MultipleXmlElementRefTestCases.java
index 3076f96..c543f17 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/jaxbcontext/multielemref/MultipleXmlElementRefTestCases.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/jaxbcontext/multielemref/MultipleXmlElementRefTestCases.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,7 @@ public class MultipleXmlElementRefTestCases extends TestCase {
     public void testCreateJAXBContextWithMultipleXmlElementRefSameType() throws Exception {
         Exception caughtException = null;
         try {
-            Class[] classes = new Class[] { Root.class, ChildOne.class, ChildTwo.class };
+            Class<?>[] classes = new Class<?>[] { Root.class, ChildOne.class, ChildTwo.class };
             JAXBContext ctx = JAXBContextFactory.createContext(classes, null, this.getClass().getClassLoader());
 
             Root root = new Root();
@@ -61,7 +61,7 @@ public void testCreateJAXBContextWithMultipleXmlElementRefSameType() throws Exce
 
     public void testCreateJAXBContextWithMultipleXmlElementRefDifferentType() throws Exception {
         try {
-            Class[] classes = new Class[] { RootTwo.class, ChildOne.class, Data.class };
+            Class<?>[] classes = new Class<?>[] { RootTwo.class, ChildOne.class, Data.class };
             JAXBContext ctx = JAXBContextFactory.createContext(classes, null, this.getClass().getClassLoader());
 
             RootTwo root = new RootTwo();
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/jaxbcontext/notext/NoTextMappingErrorTests.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/jaxbcontext/notext/NoTextMappingErrorTests.java
index 7400be0..e2bc2c4 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/jaxbcontext/notext/NoTextMappingErrorTests.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/jaxbcontext/notext/NoTextMappingErrorTests.java
@@ -97,12 +97,12 @@ public void testInheritanceNoText() throws Exception {
     // ============================================================================================
 
     private void positiveTest(String bindings) throws Exception {
-        JAXBContext ctx = JAXBContextFactory.createContext(new Class[] { Root.class }, getBindings(bindings));
+        JAXBContext ctx = JAXBContextFactory.createContext(new Class<?>[] { Root.class }, getBindings(bindings));
     }
 
     private void negativeTest(String bindings) throws Exception {
         try {
-            JAXBContext ctx = JAXBContextFactory.createContext(new Class[] { Root.class }, getBindings(bindings));
+            JAXBContext ctx = JAXBContextFactory.createContext(new Class<?>[] { Root.class }, getBindings(bindings));
         } catch (JAXBException e) {
             if (e.getLinkedException() != null && e.getLinkedException() instanceof org.eclipse.persistence.exceptions.JAXBException) {
                 org.eclipse.persistence.exceptions.JAXBException je = (org.eclipse.persistence.exceptions.JAXBException) e.getLinkedException();
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/jaxbcontext/sessioneventlistener/SessionEventListenerTestCases.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/jaxbcontext/sessioneventlistener/SessionEventListenerTestCases.java
index d83d7c9..b471b37 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/jaxbcontext/sessioneventlistener/SessionEventListenerTestCases.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/jaxbcontext/sessioneventlistener/SessionEventListenerTestCases.java
@@ -45,7 +45,7 @@ protected void setUp() throws Exception {
     public void testClassArrayMap() throws Exception {
         Map<String, Object> properties = new HashMap<String, Object>(1);
         properties.put(JAXBContextProperties.SESSION_EVENT_LISTENER, sessionEventListener);
-        JAXBContext jc = JAXBContextFactory.createContext(new Class[] {Address.class}, properties);
+        JAXBContext jc = JAXBContextFactory.createContext(new Class<?>[] {Address.class}, properties);
         assertEquals(0, Address.INSTANTIATION_COUNTER);
         unmarshalTest(jc);
     }
@@ -53,7 +53,7 @@ public void testClassArrayMap() throws Exception {
     public void testClassArrayMapClassLoader() throws Exception {
         Map<String, Object> properties = new HashMap<String, Object>(1);
         properties.put(JAXBContextProperties.SESSION_EVENT_LISTENER, sessionEventListener);
-        JAXBContext jc = JAXBContextFactory.createContext(new Class[] {Address.class}, properties, Address.class.getClassLoader());
+        JAXBContext jc = JAXBContextFactory.createContext(new Class<?>[] {Address.class}, properties, Address.class.getClassLoader());
         assertEquals(0, Address.INSTANTIATION_COUNTER);
         unmarshalTest(jc);
     }
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/jaxbcontext/withjaxbindex/JAXBContextByClassArrayWithIndexTestCases.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/jaxbcontext/withjaxbindex/JAXBContextByClassArrayWithIndexTestCases.java
index c425af4..8f856e5 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/jaxbcontext/withjaxbindex/JAXBContextByClassArrayWithIndexTestCases.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/jaxbcontext/withjaxbindex/JAXBContextByClassArrayWithIndexTestCases.java
@@ -40,7 +40,7 @@ public void setUp() throws Exception {
             setControlDocument(XML_RESOURCE);
             setControlJSON(JSON_RESOURCE);
             super.setUp();
-            Class[] classes = new Class[]{ClassA.class};
+            Class<?>[] classes = new Class<?>[]{ClassA.class};
             setTypes(classes);
             initXsiType();
         }
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/jaxbcontext/withjaxbindex/JAXBContextByClassArrayWithRefInBindingsTestCases.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/jaxbcontext/withjaxbindex/JAXBContextByClassArrayWithRefInBindingsTestCases.java
index 66516c8..31053b2 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/jaxbcontext/withjaxbindex/JAXBContextByClassArrayWithRefInBindingsTestCases.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/jaxbcontext/withjaxbindex/JAXBContextByClassArrayWithRefInBindingsTestCases.java
@@ -50,7 +50,7 @@ public void setUp() throws Exception {
             setControlDocument(XML_RESOURCE);
             setControlJSON(JSON_RESOURCE);
             super.setUp();
-            Class[] classes = new Class[]{ClassA.class};
+            Class<?>[] classes = new Class<?>[]{ClassA.class};
             setTypes(classes);
         }
 
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/jaxbcontext/withjaxbindex/JAXBContextByClassArrayWithRefTestCases.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/jaxbcontext/withjaxbindex/JAXBContextByClassArrayWithRefTestCases.java
index bf7bf84..2b62f5e 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/jaxbcontext/withjaxbindex/JAXBContextByClassArrayWithRefTestCases.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/jaxbcontext/withjaxbindex/JAXBContextByClassArrayWithRefTestCases.java
@@ -42,7 +42,7 @@ public void setUp() throws Exception {
             setControlDocument(XML_RESOURCE);
             setControlJSON(JSON_RESOURCE);
             super.setUp();
-            Class[] classes = new Class[]{ClassAWithElementRef.class};
+            Class<?>[] classes = new Class<?>[]{ClassAWithElementRef.class};
             setTypes(classes);
         }
 
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/jaxbelement/JAXBElementTestCases.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/jaxbelement/JAXBElementTestCases.java
index 0d9cfec..76ea26a 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/jaxbelement/JAXBElementTestCases.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/jaxbelement/JAXBElementTestCases.java
@@ -48,8 +48,8 @@ public JAXBElementTestCases(String name) throws Exception {
         setClasses(getClasses());
     }
 
-    public Class[] getClasses(){
-        Class[] classes = new Class[1];
+    public Class<?>[] getClasses(){
+        Class<?>[] classes = new Class<?>[1];
         classes[0] = Person.class;
         return classes;
     }
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/jaxbelement/dom/nofactory/DocumentTestCases.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/jaxbelement/dom/nofactory/DocumentTestCases.java
index 76b910b..c5f5d0a 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/jaxbelement/dom/nofactory/DocumentTestCases.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/jaxbelement/dom/nofactory/DocumentTestCases.java
@@ -30,7 +30,7 @@ public class DocumentTestCases extends JAXBWithJSONTestCases{
 
     public DocumentTestCases(String name) throws Exception {
         super(name);
-        setClasses(new Class[]{});
+        setClasses(new Class<?>[]{});
         setControlDocument(XML_RESOURCE);
         setControlJSON(JSON_RESOURCE);
     }
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/jaxbelement/dom/nofactory/ElementEmptyTestCases.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/jaxbelement/dom/nofactory/ElementEmptyTestCases.java
index 138c09e..79439d2 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/jaxbelement/dom/nofactory/ElementEmptyTestCases.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/jaxbelement/dom/nofactory/ElementEmptyTestCases.java
@@ -31,7 +31,7 @@ public class ElementEmptyTestCases extends JAXBWithJSONTestCases{
 
     public ElementEmptyTestCases(String name) throws Exception {
         super(name);
-        setClasses(new Class[]{});
+        setClasses(new Class<?>[]{});
         setControlDocument(XML_RESOURCE);
         setControlJSON(JSON_RESOURCE);
     }
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/jaxbelement/dom/nofactory/ElementFragmentTestCases.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/jaxbelement/dom/nofactory/ElementFragmentTestCases.java
index 5926a35..6fb7aae 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/jaxbelement/dom/nofactory/ElementFragmentTestCases.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/jaxbelement/dom/nofactory/ElementFragmentTestCases.java
@@ -30,7 +30,7 @@ public class ElementFragmentTestCases extends JAXBWithJSONTestCases{
 
     public ElementFragmentTestCases(String name) throws Exception {
         super(name);
-        setClasses(new Class[]{});
+        setClasses(new Class<?>[]{});
         setControlDocument(XML_RESOURCE);
         setControlJSON(JSON_RESOURCE);
         jaxbMarshaller.setProperty(Marshaller.JAXB_FRAGMENT, true);
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/jaxbelement/dom/nofactory/ElementNoNamespaceTestCases.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/jaxbelement/dom/nofactory/ElementNoNamespaceTestCases.java
index 88737d7..a0edf15 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/jaxbelement/dom/nofactory/ElementNoNamespaceTestCases.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/jaxbelement/dom/nofactory/ElementNoNamespaceTestCases.java
@@ -29,7 +29,7 @@ public class ElementNoNamespaceTestCases extends JAXBWithJSONTestCases{
 
     public ElementNoNamespaceTestCases(String name) throws Exception {
         super(name);
-        setClasses(new Class[]{});
+        setClasses(new Class<?>[]{});
         setControlDocument(XML_RESOURCE);
         setControlJSON(JSON_RESOURCE);
     }
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/jaxbelement/dom/nofactory/ElementSameNamespaceTestCases.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/jaxbelement/dom/nofactory/ElementSameNamespaceTestCases.java
index c921ffb..d6770e7 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/jaxbelement/dom/nofactory/ElementSameNamespaceTestCases.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/jaxbelement/dom/nofactory/ElementSameNamespaceTestCases.java
@@ -29,7 +29,7 @@ public class ElementSameNamespaceTestCases extends JAXBWithJSONTestCases{
 
     public ElementSameNamespaceTestCases(String name) throws Exception {
         super(name);
-        setClasses(new Class[]{});
+        setClasses(new Class<?>[]{});
         setControlDocument(XML_RESOURCE);
         setControlJSON(JSON_RESOURCE);
     }
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/jaxbelement/dom/nofactory/ElementTestCases.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/jaxbelement/dom/nofactory/ElementTestCases.java
index e122ced..54a3e0b 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/jaxbelement/dom/nofactory/ElementTestCases.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/jaxbelement/dom/nofactory/ElementTestCases.java
@@ -29,7 +29,7 @@ public class ElementTestCases extends JAXBWithJSONTestCases{
 
     public ElementTestCases(String name) throws Exception {
         super(name);
-        setClasses(new Class[]{});
+        setClasses(new Class<?>[]{});
         setControlDocument(XML_RESOURCE);
         setControlJSON(JSON_RESOURCE);
     }
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/jaxbelement/enumeration/JAXBElementEnumTestCases.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/jaxbelement/enumeration/JAXBElementEnumTestCases.java
index 35e78bd..2c45f25 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/jaxbelement/enumeration/JAXBElementEnumTestCases.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/jaxbelement/enumeration/JAXBElementEnumTestCases.java
@@ -63,7 +63,7 @@ public Object getControlObject() {
     }
 
     @Override
-    public Class[] getClasses() {
-        return new Class[]{Coin.class};
+    public Class<?>[] getClasses() {
+        return new Class<?>[]{Coin.class};
     }
 }
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/jaxbelement/nested/JAXBElementNestedTestCases.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/jaxbelement/nested/JAXBElementNestedTestCases.java
index 25fafce..a26b228 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/jaxbelement/nested/JAXBElementNestedTestCases.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/jaxbelement/nested/JAXBElementNestedTestCases.java
@@ -30,7 +30,7 @@ public class JAXBElementNestedTestCases extends JAXBWithJSONTestCases {
 
     public JAXBElementNestedTestCases(String name) throws Exception {
         super(name);
-        Class[] classes = new Class[2];
+        Class<?>[] classes = new Class<?>[2];
         classes[0] = ObjectFactory.class;
         classes[1] = Root.class;
         setClasses(classes);
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/jaxbelement/simple/JAXBElementBase64TestCases.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/jaxbelement/simple/JAXBElementBase64TestCases.java
index 0fa5a54..9d3c3d8 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/jaxbelement/simple/JAXBElementBase64TestCases.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/jaxbelement/simple/JAXBElementBase64TestCases.java
@@ -41,8 +41,8 @@ public Class<?> getUnmarshalClass(){
     }
 
     @Override
-    public Class[] getClasses(){
-        Class[] classes = new Class[1];
+    public Class<?>[] getClasses(){
+        Class<?>[] classes = new Class<?>[1];
         classes[0] = byte[].class;
         return classes;
     }
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/jaxbelement/simple/JAXBElementByteArrayAttachmentTestCases.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/jaxbelement/simple/JAXBElementByteArrayAttachmentTestCases.java
index cc98e24..8e4cab4 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/jaxbelement/simple/JAXBElementByteArrayAttachmentTestCases.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/jaxbelement/simple/JAXBElementByteArrayAttachmentTestCases.java
@@ -47,8 +47,8 @@ public void setUp() throws Exception{
     }
 
     @Override
-    public Class[] getClasses(){
-        Class[] classes = new Class[1];
+    public Class<?>[] getClasses(){
+        Class<?>[] classes = new Class<?>[1];
         classes[0] = byte[].class;
         return classes;
     }
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/jaxbelement/simple/JAXBElementCharacterTestCases.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/jaxbelement/simple/JAXBElementCharacterTestCases.java
index 9f5a06c..400351f 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/jaxbelement/simple/JAXBElementCharacterTestCases.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/jaxbelement/simple/JAXBElementCharacterTestCases.java
@@ -34,8 +34,8 @@ public JAXBElementCharacterTestCases(String name) throws Exception {
     }
 
     @Override
-    public Class[] getClasses(){
-        Class[] classes = new Class[1];
+    public Class<?>[] getClasses(){
+        Class<?>[] classes = new Class<?>[1];
         classes[0] = Character.class;
         return classes;
     }
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/jaxbelement/simple/JAXBElementDataHandlerTestCases.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/jaxbelement/simple/JAXBElementDataHandlerTestCases.java
index 32c2b70..a14c056 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/jaxbelement/simple/JAXBElementDataHandlerTestCases.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/jaxbelement/simple/JAXBElementDataHandlerTestCases.java
@@ -53,8 +53,8 @@ public void setUp() throws Exception{
     }
 
     @Override
-    public Class[] getClasses(){
-        Class[] classes = new Class[1];
+    public Class<?>[] getClasses(){
+        Class<?>[] classes = new Class<?>[1];
         classes[0] = DataHandler.class;
         return classes;
     }
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/jaxbelement/simple/JAXBElementLongTestCases.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/jaxbelement/simple/JAXBElementLongTestCases.java
index b6eea91..8542a03 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/jaxbelement/simple/JAXBElementLongTestCases.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/jaxbelement/simple/JAXBElementLongTestCases.java
@@ -33,8 +33,8 @@ public JAXBElementLongTestCases(String name) throws Exception {
     }
 
     @Override
-    public Class[] getClasses(){
-        Class[] classes = new Class[1];
+    public Class<?>[] getClasses(){
+        Class<?>[] classes = new Class<?>[1];
         classes[0] = Long.class;
         return classes;
     }
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/jaxbelement/subclass/JAXBElementSubclassEnumTestCases.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/jaxbelement/subclass/JAXBElementSubclassEnumTestCases.java
index cdd0f6c..a77c91b 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/jaxbelement/subclass/JAXBElementSubclassEnumTestCases.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/jaxbelement/subclass/JAXBElementSubclassEnumTestCases.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
@@ -26,7 +26,7 @@ public class JAXBElementSubclassEnumTestCases extends JAXBWithJSONTestCases {
 
     public JAXBElementSubclassEnumTestCases(String name) throws Exception {
         super(name);
-        this.setClasses(new Class[] {SubClassEnum.class, ObjectFactoryEnum.class});
+        this.setClasses(new Class<?>[] {SubClassEnum.class, ObjectFactoryEnum.class});
         this.setControlDocument(XML_RESOURCE);
         this.setControlJSON(JSON_RESOURCE);
     }
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/jaxbelement/subclass/JAXBElementSubclassObjectTestCases.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/jaxbelement/subclass/JAXBElementSubclassObjectTestCases.java
index 31de334..3e34aae 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/jaxbelement/subclass/JAXBElementSubclassObjectTestCases.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/jaxbelement/subclass/JAXBElementSubclassObjectTestCases.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
@@ -27,7 +27,7 @@ public class JAXBElementSubclassObjectTestCases extends JAXBWithJSONTestCases {
 
     public JAXBElementSubclassObjectTestCases(String name) throws Exception {
         super(name);
-        this.setClasses(new Class[] {Foo.class, ObjectFactoryFoo.class});
+        this.setClasses(new Class<?>[] {Foo.class, ObjectFactoryFoo.class});
         this.setControlDocument(XML_RESOURCE);
         this.setControlJSON(JSON_RESOURCE);
     }
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/jaxbelement/subclass/JAXBElementSubclassTestCases.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/jaxbelement/subclass/JAXBElementSubclassTestCases.java
index baf6c92..3878110 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/jaxbelement/subclass/JAXBElementSubclassTestCases.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/jaxbelement/subclass/JAXBElementSubclassTestCases.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,7 +23,7 @@ public class JAXBElementSubclassTestCases extends JAXBWithJSONTestCases {
 
     public JAXBElementSubclassTestCases(String name) throws Exception {
         super(name);
-        this.setClasses(new Class[] {SubClass.class, ObjectFactory.class});
+        this.setClasses(new Class<?>[] {SubClass.class, ObjectFactory.class});
         this.setControlDocument(XML_RESOURCE);
         this.setControlJSON(JSON_RESOURCE);
     }
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/jaxbfragment/JAXBFragmentTestCases.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/jaxbfragment/JAXBFragmentTestCases.java
index a02f177..d186c74 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/jaxbfragment/JAXBFragmentTestCases.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/jaxbfragment/JAXBFragmentTestCases.java
@@ -27,7 +27,7 @@ public JAXBFragmentTestCases(String name) throws Exception {
         super(name);
         setControlDocument(XML_RESOURCE);
         setControlJSON(JSON_RESOURCE);
-        Class[] classes = new Class[1];
+        Class<?>[] classes = new Class<?>[1];
         classes[0] = Address.class;
         setClasses(classes);
         jaxbMarshaller.setProperty(Marshaller.JAXB_FRAGMENT, Boolean.TRUE);
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/jaxbintrospector/elementname/JAXBIntrospectorGetElementNameTestCases.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/jaxbintrospector/elementname/JAXBIntrospectorGetElementNameTestCases.java
index a765012..740c0a2 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/jaxbintrospector/elementname/JAXBIntrospectorGetElementNameTestCases.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/jaxbintrospector/elementname/JAXBIntrospectorGetElementNameTestCases.java
@@ -30,7 +30,7 @@ public class JAXBIntrospectorGetElementNameTestCases extends TestCase {
 
     @Override
     public void setUp() throws Exception {
-        Class[] classesToBeBound = new Class[] { TestObject.class,
+        Class<?>[] classesToBeBound = new Class<?>[] { TestObject.class,
                 ElementDeclObject.class, ObjectFactory.class };
         jaxbContext = JAXBContextFactory.createContext(classesToBeBound, null);
         jaxbIntrospector = jaxbContext.createJAXBIntrospector();
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/json/JSONTestCases.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/json/JSONTestCases.java
index c12da0e..51c09d2 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/json/JSONTestCases.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/json/JSONTestCases.java
@@ -110,7 +110,7 @@ public Map getProperties(){
         return null;
     }
 
-    public void setClasses(Class[] newClasses) throws Exception {
+    public void setClasses(Class<?>[] newClasses) throws Exception {
         classLoader = Thread.currentThread().getContextClassLoader();
         jaxbContext = JAXBContextFactory.createContext(newClasses, getProperties(), classLoader);
         xmlContext = ((org.eclipse.persistence.jaxb.JAXBContext)jaxbContext).getXMLContext();
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/json/adapter/JsonMapAdapterTestCases.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/json/adapter/JsonMapAdapterTestCases.java
index 117172b..16c4ac3 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/json/adapter/JsonMapAdapterTestCases.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/json/adapter/JsonMapAdapterTestCases.java
@@ -26,7 +26,7 @@ public class JsonMapAdapterTestCases extends JSONMarshalUnmarshalTestCases {
     public JsonMapAdapterTestCases(String name) throws Exception {
         super(name);
         setControlJSON(JSON_RESOURCE);
-        setClasses(new Class[]{RootObject.class});
+        setClasses(new Class<?>[]{RootObject.class});
     }
 
     @Override
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/json/any/EmptyAnyCollectionNoRootTestCases.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/json/any/EmptyAnyCollectionNoRootTestCases.java
index b1822f7..7413abc 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/json/any/EmptyAnyCollectionNoRootTestCases.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/json/any/EmptyAnyCollectionNoRootTestCases.java
@@ -29,7 +29,7 @@ public class EmptyAnyCollectionNoRootTestCases extends JSONMarshalUnmarshalTestC
 
     public EmptyAnyCollectionNoRootTestCases(String name) throws Exception {
         super(name);
-        setClasses(new Class[] {Root.class});
+        setClasses(new Class<?>[] {Root.class});
         setControlJSON(JSON);
     }
 
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/json/any/EmptyAnyCollectionWithRootTestCases.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/json/any/EmptyAnyCollectionWithRootTestCases.java
index 59d04ad..55f0b0a 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/json/any/EmptyAnyCollectionWithRootTestCases.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/json/any/EmptyAnyCollectionWithRootTestCases.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
@@ -29,7 +29,7 @@ public class EmptyAnyCollectionWithRootTestCases extends JSONMarshalUnmarshalTes
 
     public EmptyAnyCollectionWithRootTestCases(String name) throws Exception {
         super(name);
-        setClasses(new Class[] {Root.class});
+        setClasses(new Class<?>[] {Root.class});
         setControlJSON(JSON);
     }
 
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/json/any/NullAnyCollectionNoRootTestCases.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/json/any/NullAnyCollectionNoRootTestCases.java
index a82e6cc..8ea3dda 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/json/any/NullAnyCollectionNoRootTestCases.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/json/any/NullAnyCollectionNoRootTestCases.java
@@ -29,7 +29,7 @@ public class NullAnyCollectionNoRootTestCases extends JSONMarshalUnmarshalTestCa
 
     public NullAnyCollectionNoRootTestCases(String name) throws Exception {
         super(name);
-        setClasses(new Class[] {Root.class});
+        setClasses(new Class<?>[] {Root.class});
         setControlJSON(JSON);
     }
 
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/json/any/NullAnyCollectionWithRootTestCases.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/json/any/NullAnyCollectionWithRootTestCases.java
index 8b0f580..35a7b44 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/json/any/NullAnyCollectionWithRootTestCases.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/json/any/NullAnyCollectionWithRootTestCases.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
@@ -29,7 +29,7 @@ public class NullAnyCollectionWithRootTestCases  extends JSONMarshalUnmarshalTes
 
     public NullAnyCollectionWithRootTestCases(String name) throws Exception {
         super(name);
-        setClasses(new Class[] {Root.class});
+        setClasses(new Class<?>[] {Root.class});
         setControlJSON(JSON);
     }
 
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/json/array/BooleanArrayTestCases.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/json/array/BooleanArrayTestCases.java
index 3d13a90..82bf2a7 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/json/array/BooleanArrayTestCases.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/json/array/BooleanArrayTestCases.java
@@ -34,7 +34,7 @@ public class BooleanArrayTestCases extends JSONTestCases {
 
     public BooleanArrayTestCases(String name) throws Exception {
         super(name);
-        setClasses(new Class[]{Boolean.class});
+        setClasses(new Class<?>[]{Boolean.class});
         setControlJSON(JSON_RESOURCE);
     }
 
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/json/array/BooleanListTestCases.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/json/array/BooleanListTestCases.java
index 27bc7a7..f7c980e 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/json/array/BooleanListTestCases.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/json/array/BooleanListTestCases.java
@@ -34,7 +34,7 @@ public class BooleanListTestCases extends JSONTestCases {
 
     public BooleanListTestCases(String name) throws Exception {
         super(name);
-        setClasses(new Class[]{Boolean.class});
+        setClasses(new Class<?>[]{Boolean.class});
         setControlJSON(JSON_RESOURCE);
     }
 
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/json/array/IntegerArrayTestCases.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/json/array/IntegerArrayTestCases.java
index e4d6184..a312ceb 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/json/array/IntegerArrayTestCases.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/json/array/IntegerArrayTestCases.java
@@ -31,7 +31,7 @@ public class IntegerArrayTestCases extends JSONTestCases {
 
     public IntegerArrayTestCases(String name) throws Exception {
         super(name);
-        setClasses(new Class[]{Integer.class});
+        setClasses(new Class<?>[]{Integer.class});
         setControlJSON(JSON_RESOURCE);
     }
 
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/json/array/IntegerListTestCases.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/json/array/IntegerListTestCases.java
index bf6ff03..40a1e94 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/json/array/IntegerListTestCases.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/json/array/IntegerListTestCases.java
@@ -33,7 +33,7 @@ public class IntegerListTestCases extends JSONTestCases {
 
     public IntegerListTestCases(String name) throws Exception {
         super(name);
-        setClasses(new Class[]{Integer.class});
+        setClasses(new Class<?>[]{Integer.class});
         setControlJSON(JSON_RESOURCE);
     }
 
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/json/array/Nested2dArrayTestCases.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/json/array/Nested2dArrayTestCases.java
index fe14b31..55f6130 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/json/array/Nested2dArrayTestCases.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/json/array/Nested2dArrayTestCases.java
@@ -30,7 +30,7 @@ public class Nested2dArrayTestCases extends JSONTestCases {
 
     public Nested2dArrayTestCases(String name) throws Exception {
         super(name);
-        setClasses(new Class[]{Root2DArray.class});
+        setClasses(new Class<?>[]{Root2DArray.class});
         setControlJSON(JSON_RESOURCE);
     }
 
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/json/array/Nested3dArrayTestCases.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/json/array/Nested3dArrayTestCases.java
index 39dc5bb..52c18e2 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/json/array/Nested3dArrayTestCases.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/json/array/Nested3dArrayTestCases.java
@@ -30,7 +30,7 @@ public class Nested3dArrayTestCases extends JSONTestCases {
 
     public Nested3dArrayTestCases(String name) throws Exception {
         super(name);
-        setClasses(new Class[]{Root3DArray.class});
+        setClasses(new Class<?>[]{Root3DArray.class});
         setControlJSON(JSON_RESOURCE);
     }
 
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/json/array/StringArrayTestCases.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/json/array/StringArrayTestCases.java
index 5a75107..754b9c0 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/json/array/StringArrayTestCases.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/json/array/StringArrayTestCases.java
@@ -31,7 +31,7 @@ public class StringArrayTestCases extends JSONTestCases {
 
     public StringArrayTestCases(String name) throws Exception {
         super(name);
-        setClasses(new Class[]{String.class});
+        setClasses(new Class<?>[]{String.class});
         setControlJSON(JSON_RESOURCE);
     }
 
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/json/array/StringListTestCases.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/json/array/StringListTestCases.java
index d56cefa..efa7e03 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/json/array/StringListTestCases.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/json/array/StringListTestCases.java
@@ -34,7 +34,7 @@ public class StringListTestCases extends JSONTestCases {
 
     public StringListTestCases(String name) throws Exception {
         super(name);
-        setClasses(new Class[]{String.class});
+        setClasses(new Class<?>[]{String.class});
         setControlJSON(JSON_RESOURCE);
     }
 
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/json/attribute/JSONAttributeNoXmlRootElementInheritanceTestCases.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/json/attribute/JSONAttributeNoXmlRootElementInheritanceTestCases.java
index 5095e57..d19c6cc 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/json/attribute/JSONAttributeNoXmlRootElementInheritanceTestCases.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/json/attribute/JSONAttributeNoXmlRootElementInheritanceTestCases.java
@@ -26,7 +26,7 @@ public class JSONAttributeNoXmlRootElementInheritanceTestCases extends JSONMarsh
 
     public JSONAttributeNoXmlRootElementInheritanceTestCases(String name) throws Exception {
         super(name);
-        setClasses(new Class[]{MailingAddressNoRoot.class});
+        setClasses(new Class<?>[]{MailingAddressNoRoot.class});
         setControlJSON(JSON_RESOURCE);
         jsonUnmarshaller.setProperty(UnmarshallerProperties.JSON_INCLUDE_ROOT, false);
     }
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/json/attribute/JSONAttributeNoXmlRootElementJAXBElementTestCases.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/json/attribute/JSONAttributeNoXmlRootElementJAXBElementTestCases.java
index 1e8322f..e7f9b79 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/json/attribute/JSONAttributeNoXmlRootElementJAXBElementTestCases.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/json/attribute/JSONAttributeNoXmlRootElementJAXBElementTestCases.java
@@ -27,7 +27,7 @@ public class JSONAttributeNoXmlRootElementJAXBElementTestCases extends JAXBWithJ
 
     public JSONAttributeNoXmlRootElementJAXBElementTestCases(String name) throws Exception {
         super(name);
-        setClasses(new Class[]{AddressNoRoot.class});
+        setClasses(new Class<?>[]{AddressNoRoot.class});
         setControlDocument(XML_RESOURCE);
         setControlJSON(JSON_RESOURCE);
         jaxbUnmarshaller.setProperty(UnmarshallerProperties.JSON_INCLUDE_ROOT, false);
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/json/attribute/JSONAttributeNoXmlRootElementTestCases.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/json/attribute/JSONAttributeNoXmlRootElementTestCases.java
index 70a29cd..808233d 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/json/attribute/JSONAttributeNoXmlRootElementTestCases.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/json/attribute/JSONAttributeNoXmlRootElementTestCases.java
@@ -28,7 +28,7 @@ public class JSONAttributeNoXmlRootElementTestCases extends JAXBWithJSONTestCase
 
     public JSONAttributeNoXmlRootElementTestCases(String name) throws Exception {
         super(name);
-        setClasses(new Class[]{AddressNoRoot.class});
+        setClasses(new Class<?>[]{AddressNoRoot.class});
         setControlDocument(XML_RESOURCE);
         setControlJSON(JSON_RESOURCE);
         jaxbUnmarshaller.setProperty(UnmarshallerProperties.JSON_INCLUDE_ROOT, false);
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/json/attribute/JSONAttributeOrderAttributeFirstTestCases.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/json/attribute/JSONAttributeOrderAttributeFirstTestCases.java
index a0cf7b3..720e08e 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/json/attribute/JSONAttributeOrderAttributeFirstTestCases.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/json/attribute/JSONAttributeOrderAttributeFirstTestCases.java
@@ -26,7 +26,7 @@ public class JSONAttributeOrderAttributeFirstTestCases extends JSONMarshalUnmars
     public JSONAttributeOrderAttributeFirstTestCases(String name) throws Exception {
         super(name);
         setControlJSON(JSON_RESOURCE);
-        setClasses(new Class[]{AddressElementAttributeOrder.class});
+        setClasses(new Class<?>[]{AddressElementAttributeOrder.class});
     }
 
     @Override
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/json/attribute/JSONAttributeOrderElementFirstTestCases.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/json/attribute/JSONAttributeOrderElementFirstTestCases.java
index 3df823d..6a142ed 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/json/attribute/JSONAttributeOrderElementFirstTestCases.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/json/attribute/JSONAttributeOrderElementFirstTestCases.java
@@ -28,7 +28,7 @@ public JSONAttributeOrderElementFirstTestCases(String name) throws Exception {
         super(name);
         setControlJSON(JSON_RESOURCE);
         setWriteControlJSON(JSON_WRITE_RESOURCE);
-        setClasses(new Class[]{AddressElementAttributeOrder.class});
+        setClasses(new Class<?>[]{AddressElementAttributeOrder.class});
     }
 
     @Override
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/json/attribute/JSONAttributePrefixEmptyStringTestCases.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/json/attribute/JSONAttributePrefixEmptyStringTestCases.java
index 4bf448e..3a07dcd 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/json/attribute/JSONAttributePrefixEmptyStringTestCases.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/json/attribute/JSONAttributePrefixEmptyStringTestCases.java
@@ -26,7 +26,7 @@ public class JSONAttributePrefixEmptyStringTestCases extends JSONMarshalUnmarsha
     public JSONAttributePrefixEmptyStringTestCases(String name) throws Exception {
         super(name);
         setControlJSON(JSON_RESOURCE);
-        setClasses(new Class[]{Address.class});
+        setClasses(new Class<?>[]{Address.class});
     }
 
     @Override
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/json/attribute/JSONAttributePrefixOnContextTestCases.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/json/attribute/JSONAttributePrefixOnContextTestCases.java
index f5a628b..767cc54 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/json/attribute/JSONAttributePrefixOnContextTestCases.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/json/attribute/JSONAttributePrefixOnContextTestCases.java
@@ -36,7 +36,7 @@ public class JSONAttributePrefixOnContextTestCases extends JSONMarshalUnmarshalT
     public JSONAttributePrefixOnContextTestCases(String name) throws Exception {
         super(name);
         setControlJSON(JSON_RESOURCE);
-        setClasses(new Class[]{Address.class});
+        setClasses(new Class<?>[]{Address.class});
 
     }
 
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/json/attribute/SimpleBeanAttrNullTestCases.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/json/attribute/SimpleBeanAttrNullTestCases.java
index 2b489d7..1807272 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/json/attribute/SimpleBeanAttrNullTestCases.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/json/attribute/SimpleBeanAttrNullTestCases.java
@@ -29,7 +29,7 @@ public class SimpleBeanAttrNullTestCases extends JAXBWithJSONTestCases {
 
     public SimpleBeanAttrNullTestCases(String name) throws Exception {
         super(name);
-        setClasses(new Class[]{SimpleBean.class});
+        setClasses(new Class<?>[]{SimpleBean.class});
         setControlDocument(XML_RESOURCE);
         setControlJSON(JSON_RESOURCE);
         setWriteControlJSON(JSON_WRITE_RESOURCE);
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/json/characters/EscapeCharactersTestCases.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/json/characters/EscapeCharactersTestCases.java
index cde3c46..03f471b 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/json/characters/EscapeCharactersTestCases.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/json/characters/EscapeCharactersTestCases.java
@@ -24,7 +24,7 @@ public class EscapeCharactersTestCases extends JSONMarshalUnmarshalTestCases {
 
     public EscapeCharactersTestCases(String name) throws Exception {
         super(name);
-        setClasses(new Class[]{EscapeCharacterHolder.class});
+        setClasses(new Class<?>[]{EscapeCharacterHolder.class});
         setControlJSON(JSON_RESOURCE);
     }
 
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/json/characters/UTF8TestCases.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/json/characters/UTF8TestCases.java
index e6d43da..b0c30f4 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/json/characters/UTF8TestCases.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/json/characters/UTF8TestCases.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
@@ -42,7 +42,7 @@ public UTF8TestCases(String name) throws Exception {
     public void setUp() throws Exception {
         Map<String, Object> properties = new HashMap<String, Object>();
         properties.put(JAXBContextProperties.MEDIA_TYPE, "application/json");
-        jaxbContext = JAXBContextFactory.createContext(new Class[] {EscapeCharacterHolder.class}, properties);
+        jaxbContext = JAXBContextFactory.createContext(new Class<?>[] {EscapeCharacterHolder.class}, properties);
     }
 
     protected EscapeCharacterHolder getControlObject() {
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/json/characters/UsAsciiTestCases.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/json/characters/UsAsciiTestCases.java
index af7183a..b2fc894 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/json/characters/UsAsciiTestCases.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/json/characters/UsAsciiTestCases.java
@@ -34,7 +34,7 @@ public class UsAsciiTestCases  extends JSONMarshalUnmarshalTestCases {
 
     public UsAsciiTestCases(String name) throws Exception {
         super(name);
-        setClasses(new Class[] {EscapeCharacterHolder.class});
+        setClasses(new Class<?>[] {EscapeCharacterHolder.class});
         setControlJSON(JSON_RESOURCE);
     }
 
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/json/emptyroot/EmptyNullMarshalUnmarshalTestCases.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/json/emptyroot/EmptyNullMarshalUnmarshalTestCases.java
index 970532f..3ac1ddc 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/json/emptyroot/EmptyNullMarshalUnmarshalTestCases.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/json/emptyroot/EmptyNullMarshalUnmarshalTestCases.java
@@ -56,8 +56,8 @@ public void setUp() throws Exception{
         namespaces.put(javax.xml.XMLConstants.W3C_XML_SCHEMA_INSTANCE_NS_URI, "xsi");
         props.put(JAXBContextProperties.NAMESPACE_PREFIX_MAPPER, namespaces);
 
-        ctx = (JAXBContext) JAXBContextFactory.createContext(new Class[]{Root.class}, props);
-        ctxNoRoot = (JAXBContext) JAXBContextFactory.createContext(new Class[]{RootNoXmlRootElement.class}, props);
+        ctx = (JAXBContext) JAXBContextFactory.createContext(new Class<?>[]{Root.class}, props);
+        ctxNoRoot = (JAXBContext) JAXBContextFactory.createContext(new Class<?>[]{RootNoXmlRootElement.class}, props);
     }
 
     public void testJAXBElementNullValueIncludeRootTrue() throws Exception{
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/json/multiline/MultiLineStringTestCases.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/json/multiline/MultiLineStringTestCases.java
index a0f64eb..f0365df 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/json/multiline/MultiLineStringTestCases.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/json/multiline/MultiLineStringTestCases.java
@@ -23,7 +23,7 @@ public class MultiLineStringTestCases extends JSONMarshalUnmarshalTestCases {
     public MultiLineStringTestCases(String name) throws Exception {
         super(name);
         setControlJSON(JSON_RESOURCE);
-        setClasses(new Class[]{MultiBean.class});
+        setClasses(new Class<?>[]{MultiBean.class});
     }
 
     @Override
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/json/namespaces/DifferentNamespacesTestCases.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/json/namespaces/DifferentNamespacesTestCases.java
index a9bab09..b6d0252 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/json/namespaces/DifferentNamespacesTestCases.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/json/namespaces/DifferentNamespacesTestCases.java
@@ -34,7 +34,7 @@ public DifferentNamespacesTestCases(String name) throws Exception {
         super(name);
         setControlJSON(JSON_RESOURCE);
         setWriteControlJSON(JSON_WRITE_RESOURCE);
-        setClasses(new Class[]{Person.class});
+        setClasses(new Class<?>[]{Person.class});
     }
 
     @Override
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/json/namespaces/NamespaceInheritanceSeparatorContextTestCases.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/json/namespaces/NamespaceInheritanceSeparatorContextTestCases.java
index 9f3af0f..2f16b91 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/json/namespaces/NamespaceInheritanceSeparatorContextTestCases.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/json/namespaces/NamespaceInheritanceSeparatorContextTestCases.java
@@ -30,7 +30,7 @@ public NamespaceInheritanceSeparatorContextTestCases(String name) throws Excepti
         super(name);
         setControlJSON(JSON_RESOURCE);
         setWriteControlJSON(JSON_WRITE_RESOURCE);
-        setClasses(new Class[]{Employee.class});
+        setClasses(new Class<?>[]{Employee.class});
     }
 
     @Override
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/json/namespaces/NamespaceInheritanceSeparatorTestCases.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/json/namespaces/NamespaceInheritanceSeparatorTestCases.java
index 3ea6210..1ef68c9 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/json/namespaces/NamespaceInheritanceSeparatorTestCases.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/json/namespaces/NamespaceInheritanceSeparatorTestCases.java
@@ -26,7 +26,7 @@ public NamespaceInheritanceSeparatorTestCases(String name) throws Exception {
         super(name);
         setControlJSON(JSON_RESOURCE);
         setWriteControlJSON(JSON_WRITE_RESOURCE);
-        setClasses(new Class[]{Employee.class});
+        setClasses(new Class<?>[]{Employee.class});
     }
 
     @Override
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/json/namespaces/NamespaceInheritanceTestCases.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/json/namespaces/NamespaceInheritanceTestCases.java
index 6ccb330..2eb02fd 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/json/namespaces/NamespaceInheritanceTestCases.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/json/namespaces/NamespaceInheritanceTestCases.java
@@ -37,7 +37,7 @@ public NamespaceInheritanceTestCases(String name) throws Exception {
         super(name);
         setControlJSON(JSON_RESOURCE);
         setWriteControlJSON(JSON_WRITE_RESOURCE);
-        setClasses(new Class[]{Employee.class});
+        setClasses(new Class<?>[]{Employee.class});
     }
 
     @Override
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/json/namespaces/NamespaceOnXMLOnlyTestCases.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/json/namespaces/NamespaceOnXMLOnlyTestCases.java
index 5604b1e..2e9cc08 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/json/namespaces/NamespaceOnXMLOnlyTestCases.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/json/namespaces/NamespaceOnXMLOnlyTestCases.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2019, 2020 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2019, 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,7 +41,7 @@ public NamespaceOnXMLOnlyTestCases(String name) throws Exception {
         super(name);
         setControlDocument(XML_RESOURCE);
         setControlJSON(JSON_RESOURCE);
-        setClasses(new Class[]{PurchaseOrderType.class, USAddress.class});
+        setClasses(new Class<?>[]{PurchaseOrderType.class, USAddress.class});
     }
 
     @Override
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/json/namespaces/NamespacesOnContextTestCases.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/json/namespaces/NamespacesOnContextTestCases.java
index 2c080ce..6a3758a 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/json/namespaces/NamespacesOnContextTestCases.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/json/namespaces/NamespacesOnContextTestCases.java
@@ -35,7 +35,7 @@ public class NamespacesOnContextTestCases extends JSONMarshalUnmarshalTestCases{
     public NamespacesOnContextTestCases(String name) throws Exception {
         super(name);
         setControlJSON(JSON_RESOURCE);
-        setClasses(new Class[]{Person.class});
+        setClasses(new Class<?>[]{Person.class});
     }
 
     @Override
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/json/namespaces/NamespacesOnUnmarshalOnlyTestCases.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/json/namespaces/NamespacesOnUnmarshalOnlyTestCases.java
index 29a11eb..e5e6076 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/json/namespaces/NamespacesOnUnmarshalOnlyTestCases.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/json/namespaces/NamespacesOnUnmarshalOnlyTestCases.java
@@ -34,7 +34,7 @@ public NamespacesOnUnmarshalOnlyTestCases(String name) throws Exception {
         super(name);
         setControlJSON(JSON_RESOURCE);
         setWriteControlJSON(JSON_WRITE_RESOURCE);
-        setClasses(new Class[]{Person.class});
+        setClasses(new Class<?>[]{Person.class});
     }
 
     @Override
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/json/namespaces/SeparatorInNameTestCases.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/json/namespaces/SeparatorInNameTestCases.java
index 3df23c5..60e3fb5 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/json/namespaces/SeparatorInNameTestCases.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/json/namespaces/SeparatorInNameTestCases.java
@@ -32,7 +32,7 @@ public class SeparatorInNameTestCases extends JSONMarshalUnmarshalTestCases{
     public SeparatorInNameTestCases(String name) throws Exception {
         super(name);
         setControlJSON(JSON_RESOURCE);
-        setClasses(new Class[]{Person.class});
+        setClasses(new Class<?>[]{Person.class});
     }
 
     @Override
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/json/nil/NilElementsUsageTestCases.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/json/nil/NilElementsUsageTestCases.java
index b8619ae..682531a 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/json/nil/NilElementsUsageTestCases.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/json/nil/NilElementsUsageTestCases.java
@@ -26,7 +26,7 @@ public NilElementsUsageTestCases(String name) throws Exception {
         super(name);
         setControlJSON(JSON_RESOURCE);
         setWriteControlJSON(JSON_RESOURCE_WRITE);
-        setClasses(new Class[]{MaskFormat.class, MaskFormatEntry.class});
+        setClasses(new Class<?>[]{MaskFormat.class, MaskFormatEntry.class});
     }
 
     @Override
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/json/norootelement/IncludeRootFalseWithXMLRootElementTestCases.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/json/norootelement/IncludeRootFalseWithXMLRootElementTestCases.java
index f9d2976..bd1ef63 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/json/norootelement/IncludeRootFalseWithXMLRootElementTestCases.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/json/norootelement/IncludeRootFalseWithXMLRootElementTestCases.java
@@ -32,7 +32,7 @@ public IncludeRootFalseWithXMLRootElementTestCases(String name) throws Exception
         super(name);
         setControlJSON(JSON_RESOURCE_NO_ROOT);
         setWriteControlJSON(JSON_RESOURCE_TYPE);
-        setClasses(new Class[]{AddressWithRootElement.class});
+        setClasses(new Class<?>[]{AddressWithRootElement.class});
     }
 
     @Override
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/json/norootelement/IncludeRootTrueWithXMLRootElementTestCases.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/json/norootelement/IncludeRootTrueWithXMLRootElementTestCases.java
index 7e761c3..3a0a161 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/json/norootelement/IncludeRootTrueWithXMLRootElementTestCases.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/json/norootelement/IncludeRootTrueWithXMLRootElementTestCases.java
@@ -26,7 +26,7 @@ public IncludeRootTrueWithXMLRootElementTestCases(String name) throws Exception
         super(name);
         setControlJSON(JSON_RESOURCE_WITH_ROOT);
         setWriteControlJSON(JSON_RESOURCE_WITH_ROOT);
-        setClasses(new Class[]{AddressWithRootElement.class});
+        setClasses(new Class<?>[]{AddressWithRootElement.class});
     }
 
     @Override
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/json/norootelement/InheritanceNoRootTestCases.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/json/norootelement/InheritanceNoRootTestCases.java
index 2d69b1f..9bc91f5 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/json/norootelement/InheritanceNoRootTestCases.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/json/norootelement/InheritanceNoRootTestCases.java
@@ -34,7 +34,7 @@ public class InheritanceNoRootTestCases extends JAXBWithJSONTestCases {
 
     public InheritanceNoRootTestCases(String name) throws Exception {
         super(name);
-        setClasses(new Class[]{Person.class});
+        setClasses(new Class<?>[]{Person.class});
         setControlJSON(JSON_RESOURCE);
         setControlDocument(XML_RESOURCE);
     }
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/json/norootelement/NoRootElementNSTestCases.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/json/norootelement/NoRootElementNSTestCases.java
index 5d53462..4d3b300 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/json/norootelement/NoRootElementNSTestCases.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/json/norootelement/NoRootElementNSTestCases.java
@@ -29,7 +29,7 @@ public class NoRootElementNSTestCases extends JSONMarshalUnmarshalTestCases {
     public NoRootElementNSTestCases(String name) throws Exception {
         super(name);
         setControlJSON(JSON_RESOURCE);
-        setClasses(new Class[]{Address.class});
+        setClasses(new Class<?>[]{Address.class});
 
     }
 
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/json/norootelement/NoRootElementTestCases.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/json/norootelement/NoRootElementTestCases.java
index 396aece..2447863 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/json/norootelement/NoRootElementTestCases.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/json/norootelement/NoRootElementTestCases.java
@@ -28,7 +28,7 @@ public NoRootElementTestCases(String name) throws Exception {
         super(name);
         setControlJSON(JSON_RESOURCE_WITH_ROOT);
         setWriteControlJSON(JSON_RESOURCE_NO_ROOT);
-        setClasses(new Class[]{Address.class});
+        setClasses(new Class<?>[]{Address.class});
     }
 
     @Override
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/json/numbers/NumberFormatTestCases.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/json/numbers/NumberFormatTestCases.java
index 0b998b4..752238c 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/json/numbers/NumberFormatTestCases.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/json/numbers/NumberFormatTestCases.java
@@ -31,7 +31,7 @@ public class NumberFormatTestCases extends JAXBWithJSONTestCases {
 
     public NumberFormatTestCases(String name) throws Exception {
         super(name);
-        setClasses(new Class[]{NumberHolder.class});
+        setClasses(new Class<?>[]{NumberHolder.class});
         setControlJSON(JSON_RESOURCE);
         setWriteControlJSON(JSON_RESOURCE_WRITE);
         setControlDocument(XML_RESOURCE);
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/json/padding/JAXBElementJSONPaddingTestCases.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/json/padding/JAXBElementJSONPaddingTestCases.java
index 4187e23..40346d4 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/json/padding/JAXBElementJSONPaddingTestCases.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/json/padding/JAXBElementJSONPaddingTestCases.java
@@ -29,7 +29,7 @@ public class JAXBElementJSONPaddingTestCases extends JAXBWithJSONTestCases{
 
     public JAXBElementJSONPaddingTestCases(String name) throws Exception {
         super(name);
-        setClasses(new Class[]{Simple.class});
+        setClasses(new Class<?>[]{Simple.class});
         setControlJSON(JSON_RESOURCE);
         setControlDocument(XML_RESOURCE);
     }
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/json/padding/JAXBElementListJSONPaddingTestCases.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/json/padding/JAXBElementListJSONPaddingTestCases.java
index 7e2d7ce..ce9ed41 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/json/padding/JAXBElementListJSONPaddingTestCases.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/json/padding/JAXBElementListJSONPaddingTestCases.java
@@ -32,7 +32,7 @@ public class JAXBElementListJSONPaddingTestCases extends JSONTestCases{
 
     public JAXBElementListJSONPaddingTestCases(String name) throws Exception {
         super(name);
-        setClasses(new Class[]{Simple.class});
+        setClasses(new Class<?>[]{Simple.class});
         setControlJSON(JSON_RESOURCE);
     }
 
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/json/padding/JSONWithNullNameTestCases.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/json/padding/JSONWithNullNameTestCases.java
index 43b108b..6df67c9 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/json/padding/JSONWithNullNameTestCases.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/json/padding/JSONWithNullNameTestCases.java
@@ -26,7 +26,7 @@ public class JSONWithNullNameTestCases extends JAXBWithJSONTestCases{
 
     public JSONWithNullNameTestCases(String name) throws Exception {
         super(name);
-        setClasses(new Class[]{Simple.class});
+        setClasses(new Class<?>[]{Simple.class});
         setControlJSON(JSON_RESOURCE);
         setControlDocument(XML_RESOURCE);
     }
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/json/padding/JSONWithNullObjectTestCases.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/json/padding/JSONWithNullObjectTestCases.java
index 6f8de7b..5f770f3 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/json/padding/JSONWithNullObjectTestCases.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/json/padding/JSONWithNullObjectTestCases.java
@@ -29,7 +29,7 @@ public class JSONWithNullObjectTestCases extends JAXBWithJSONTestCases{
 
     public JSONWithNullObjectTestCases(String name) throws Exception {
         super(name);
-        setClasses(new Class[]{Simple.class});
+        setClasses(new Class<?>[]{Simple.class});
         setControlJSON(JSON_RESOURCE);
         setControlDocument(XML_RESOURCE);
         expectsMarshalException = true;
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/json/padding/JSONWithPaddingSimpleListTestCases.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/json/padding/JSONWithPaddingSimpleListTestCases.java
index 864f273..7da0e05 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/json/padding/JSONWithPaddingSimpleListTestCases.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/json/padding/JSONWithPaddingSimpleListTestCases.java
@@ -31,7 +31,7 @@ public class JSONWithPaddingSimpleListTestCases extends JSONTestCases{
 
     public JSONWithPaddingSimpleListTestCases(String name) throws Exception {
         super(name);
-        setClasses(new Class[]{Simple.class});
+        setClasses(new Class<?>[]{Simple.class});
         setControlJSON(JSON_RESOURCE);
         //setWriteControlFormattedJSON(JSON_FORMATTED_RESOURCE);
     }
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/json/padding/JSONWithPaddingSimpleTestCases.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/json/padding/JSONWithPaddingSimpleTestCases.java
index 549e300..4947e48 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/json/padding/JSONWithPaddingSimpleTestCases.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/json/padding/JSONWithPaddingSimpleTestCases.java
@@ -27,7 +27,7 @@ public class JSONWithPaddingSimpleTestCases extends JAXBWithJSONTestCases{
 
     public JSONWithPaddingSimpleTestCases(String name) throws Exception {
         super(name);
-        setClasses(new Class[]{Simple.class});
+        setClasses(new Class<?>[]{Simple.class});
         setControlJSON(JSON_RESOURCE);
         setControlDocument(XML_RESOURCE);
         setWriteControlFormattedJSON(JSON_FORMATTED_RESOURCE);
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/json/padding/JSONWithUnsetNameTestCases.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/json/padding/JSONWithUnsetNameTestCases.java
index 915b750..429b782 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/json/padding/JSONWithUnsetNameTestCases.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/json/padding/JSONWithUnsetNameTestCases.java
@@ -26,7 +26,7 @@ public class JSONWithUnsetNameTestCases extends JAXBWithJSONTestCases{
 
     public JSONWithUnsetNameTestCases(String name) throws Exception {
         super(name);
-        setClasses(new Class[]{Simple.class});
+        setClasses(new Class<?>[]{Simple.class});
         setControlJSON(JSON_RESOURCE);
         setControlDocument(XML_RESOURCE);
     }
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/json/rootlevellist/JsonObjectInArrayBuilderTestCases.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/json/rootlevellist/JsonObjectInArrayBuilderTestCases.java
index 0a30047..0feea8c 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/json/rootlevellist/JsonObjectInArrayBuilderTestCases.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/json/rootlevellist/JsonObjectInArrayBuilderTestCases.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
@@ -41,7 +41,7 @@ public JsonObjectInArrayBuilderTestCases(String name){
     }
 
     public void testMarshalToArrayBuilderResult() throws Exception{
-        JAXBContext ctx = JAXBContextFactory.createContext(new Class[]{WithoutXmlRootElementRoot.class}, null);
+        JAXBContext ctx = JAXBContextFactory.createContext(new Class<?>[]{WithoutXmlRootElementRoot.class}, null);
         Marshaller jsonMarshaller = ctx.createMarshaller();
         jsonMarshaller.setProperty(MarshallerProperties.MEDIA_TYPE, MediaType.APPLICATION_JSON);
         jsonMarshaller.setProperty(MarshallerProperties.JSON_INCLUDE_ROOT, false);
@@ -72,7 +72,7 @@ public void testMarshalToArrayBuilderResult() throws Exception{
     }
 
     public void testMarshalToGeneratorResult() throws Exception{
-        JAXBContext ctx = JAXBContextFactory.createContext(new Class[]{WithoutXmlRootElementRoot.class}, null);
+        JAXBContext ctx = JAXBContextFactory.createContext(new Class<?>[]{WithoutXmlRootElementRoot.class}, null);
         Marshaller jsonMarshaller = ctx.createMarshaller();
         jsonMarshaller.setProperty(MarshallerProperties.MEDIA_TYPE, MediaType.APPLICATION_JSON);
         jsonMarshaller.setProperty(MarshallerProperties.JSON_INCLUDE_ROOT, false);
@@ -100,7 +100,7 @@ public void testMarshalToGeneratorResult() throws Exception{
     }
 
     public void testMarshalToArrayBuilderResultWithRoot() throws Exception{
-        JAXBContext ctx = JAXBContextFactory.createContext(new Class[]{WithXmlRootElementRoot.class}, null);
+        JAXBContext ctx = JAXBContextFactory.createContext(new Class<?>[]{WithXmlRootElementRoot.class}, null);
         Marshaller jsonMarshaller = ctx.createMarshaller();
         jsonMarshaller.setProperty(MarshallerProperties.JSON_INCLUDE_ROOT, true);
         jsonMarshaller.setProperty(MarshallerProperties.MEDIA_TYPE, MediaType.APPLICATION_JSON);
@@ -130,7 +130,7 @@ public void testMarshalToArrayBuilderResultWithRoot() throws Exception{
     }
 
     public void testNestedResults() throws Exception{
-        JAXBContext ctx = JAXBContextFactory.createContext(new Class[]{WithXmlRootElementRoot.class}, null);
+        JAXBContext ctx = JAXBContextFactory.createContext(new Class<?>[]{WithXmlRootElementRoot.class}, null);
         Marshaller jsonMarshaller = ctx.createMarshaller();
         jsonMarshaller.setProperty(MarshallerProperties.MEDIA_TYPE, MediaType.APPLICATION_JSON);
         jsonMarshaller.setProperty(MarshallerProperties.JSON_INCLUDE_ROOT, false);
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/json/rootlevellist/WithXmlRootElementArrayTestCases.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/json/rootlevellist/WithXmlRootElementArrayTestCases.java
index 32b9927..a739ecd 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/json/rootlevellist/WithXmlRootElementArrayTestCases.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/json/rootlevellist/WithXmlRootElementArrayTestCases.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
@@ -32,7 +32,7 @@ public class WithXmlRootElementArrayTestCases extends JSONMarshalUnmarshalTestCa
 
     public WithXmlRootElementArrayTestCases(String name) throws Exception {
         super(name);
-        setClasses(new Class[] {WithXmlRootElementRoot.class});
+        setClasses(new Class<?>[] {WithXmlRootElementRoot.class});
         setControlJSON(CONTROL_JSON);
     }
 
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/json/rootlevellist/WithXmlRootElementJAXBElementNoRootTestCases.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/json/rootlevellist/WithXmlRootElementJAXBElementNoRootTestCases.java
index ec087e5..b83b0b6 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/json/rootlevellist/WithXmlRootElementJAXBElementNoRootTestCases.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/json/rootlevellist/WithXmlRootElementJAXBElementNoRootTestCases.java
@@ -33,7 +33,7 @@ public class WithXmlRootElementJAXBElementNoRootTestCases extends JSONMarshalUnm
 
     public WithXmlRootElementJAXBElementNoRootTestCases(String name) throws Exception {
         super(name);
-        setClasses(new Class[] {WithXmlRootElementRoot.class});
+        setClasses(new Class<?>[] {WithXmlRootElementRoot.class});
         setControlJSON(CONTROL_JSON);
         jsonMarshaller.setProperty(MarshallerProperties.JSON_INCLUDE_ROOT, false);
         jsonUnmarshaller.setProperty(UnmarshallerProperties.JSON_INCLUDE_ROOT, false);
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/json/rootlevellist/WithXmlRootElementJAXBElementTestCases.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/json/rootlevellist/WithXmlRootElementJAXBElementTestCases.java
index f5c131d..8488c79 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/json/rootlevellist/WithXmlRootElementJAXBElementTestCases.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/json/rootlevellist/WithXmlRootElementJAXBElementTestCases.java
@@ -32,7 +32,7 @@ public class WithXmlRootElementJAXBElementTestCases extends JSONMarshalUnmarshal
 
     public WithXmlRootElementJAXBElementTestCases(String name) throws Exception {
         super(name);
-        setClasses(new Class[] {WithXmlRootElementRoot.class});
+        setClasses(new Class<?>[] {WithXmlRootElementRoot.class});
         setControlJSON(CONTROL_JSON);
     }
 
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/json/rootlevellist/WithXmlRootElementSetTestCases.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/json/rootlevellist/WithXmlRootElementSetTestCases.java
index feff50e..8c73b0a 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/json/rootlevellist/WithXmlRootElementSetTestCases.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/json/rootlevellist/WithXmlRootElementSetTestCases.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
@@ -30,7 +30,7 @@ public class WithXmlRootElementSetTestCases extends JSONMarshalUnmarshalTestCase
 
     public WithXmlRootElementSetTestCases(String name) throws Exception {
         super(name);
-        setClasses(new Class[] {WithXmlRootElementRoot.class});
+        setClasses(new Class<?>[] {WithXmlRootElementRoot.class});
         setControlJSON(CONTROL_JSON);
     }
 
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/json/rootlevellist/WithXmlRootElementTestCases.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/json/rootlevellist/WithXmlRootElementTestCases.java
index 2b23634..efc7c71 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/json/rootlevellist/WithXmlRootElementTestCases.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/json/rootlevellist/WithXmlRootElementTestCases.java
@@ -30,7 +30,7 @@ public class WithXmlRootElementTestCases extends JSONMarshalUnmarshalTestCases {
 
     public WithXmlRootElementTestCases(String name) throws Exception {
         super(name);
-        setClasses(new Class[] {WithXmlRootElementRoot.class});
+        setClasses(new Class<?>[] {WithXmlRootElementRoot.class});
         setControlJSON(CONTROL_JSON);
     }
 
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/json/rootlevellist/WithoutXmlRootElementArrayTestCases.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/json/rootlevellist/WithoutXmlRootElementArrayTestCases.java
index 1448e0d..a1d1fff 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/json/rootlevellist/WithoutXmlRootElementArrayTestCases.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/json/rootlevellist/WithoutXmlRootElementArrayTestCases.java
@@ -35,7 +35,7 @@ public class WithoutXmlRootElementArrayTestCases extends JSONMarshalUnmarshalTes
 
     public WithoutXmlRootElementArrayTestCases(String name) throws Exception {
         super(name);
-        setClasses(new Class[] {WithoutXmlRootElementRoot.class});
+        setClasses(new Class<?>[] {WithoutXmlRootElementRoot.class});
         setControlJSON(CONTROL_JSON);
         jsonUnmarshaller.setProperty(UnmarshallerProperties.JSON_INCLUDE_ROOT, Boolean.FALSE);
     }
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/json/rootlevellist/WithoutXmlRootElementJAXBElementTestCases.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/json/rootlevellist/WithoutXmlRootElementJAXBElementTestCases.java
index 7adc865..6b009e9 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/json/rootlevellist/WithoutXmlRootElementJAXBElementTestCases.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/json/rootlevellist/WithoutXmlRootElementJAXBElementTestCases.java
@@ -28,7 +28,7 @@ public class WithoutXmlRootElementJAXBElementTestCases extends JSONMarshalUnmars
 
     public WithoutXmlRootElementJAXBElementTestCases(String name) throws Exception {
         super(name);
-        setClasses(new Class[] {WithoutXmlRootElementRoot.class});
+        setClasses(new Class<?>[] {WithoutXmlRootElementRoot.class});
         setControlJSON(CONTROL_JSON);
     }
 
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/json/rootlevellist/WithoutXmlRootElementSetTestCases.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/json/rootlevellist/WithoutXmlRootElementSetTestCases.java
index 7da47e8..bb79c87 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/json/rootlevellist/WithoutXmlRootElementSetTestCases.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/json/rootlevellist/WithoutXmlRootElementSetTestCases.java
@@ -35,7 +35,7 @@ public class WithoutXmlRootElementSetTestCases extends JSONMarshalUnmarshalTestC
 
     public WithoutXmlRootElementSetTestCases(String name) throws Exception {
         super(name);
-        setClasses(new Class[] {WithoutXmlRootElementRoot.class});
+        setClasses(new Class<?>[] {WithoutXmlRootElementRoot.class});
         setControlJSON(CONTROL_JSON);
         jsonUnmarshaller.setProperty(UnmarshallerProperties.JSON_INCLUDE_ROOT, Boolean.FALSE);
     }
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/json/rootlevellist/WithoutXmlRootElementTestCases.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/json/rootlevellist/WithoutXmlRootElementTestCases.java
index f2cd397..8961d68 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/json/rootlevellist/WithoutXmlRootElementTestCases.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/json/rootlevellist/WithoutXmlRootElementTestCases.java
@@ -33,7 +33,7 @@ public class WithoutXmlRootElementTestCases extends JSONMarshalUnmarshalTestCase
 
     public WithoutXmlRootElementTestCases(String name) throws Exception {
         super(name);
-        setClasses(new Class[] {WithoutXmlRootElementRoot.class});
+        setClasses(new Class<?>[] {WithoutXmlRootElementRoot.class});
         setControlJSON(CONTROL_JSON);
         jsonUnmarshaller.setProperty(UnmarshallerProperties.JSON_INCLUDE_ROOT, Boolean.FALSE);
     }
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/json/type/TypeNameValueTestCases.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/json/type/TypeNameValueTestCases.java
index 2ad1104..ddceb89 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/json/type/TypeNameValueTestCases.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/json/type/TypeNameValueTestCases.java
@@ -41,7 +41,7 @@ public class TypeNameValueTestCases extends JSONTestCases {
 
     public TypeNameValueTestCases(String name) throws Exception {
         super(name);
-        setClasses(new Class[]{Properties.class});
+        setClasses(new Class<?>[]{Properties.class});
         setControlJSON(JSON_RESOURCE);
     }
 
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/json/type/TypePrefixTestCases.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/json/type/TypePrefixTestCases.java
index 88ef1d9..0a82397 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/json/type/TypePrefixTestCases.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/json/type/TypePrefixTestCases.java
@@ -37,7 +37,7 @@ public class TypePrefixTestCases extends JSONTestCases {
 
     public TypePrefixTestCases(String name) throws Exception {
         super(name);
-        setClasses(new Class[]{Person.class});
+        setClasses(new Class<?>[]{Person.class});
         setControlJSON(JSON_RESOURCE);
     }
 
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/json/type/TypePropertyCustomNameTestCases.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/json/type/TypePropertyCustomNameTestCases.java
index 26e508a..4db8af1 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/json/type/TypePropertyCustomNameTestCases.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/json/type/TypePropertyCustomNameTestCases.java
@@ -38,7 +38,7 @@ public class TypePropertyCustomNameTestCases extends JSONMarshalUnmarshalTestCas
 
     public TypePropertyCustomNameTestCases(String name) throws Exception {
         super(name);
-        setClasses(new Class[]{PersonWithType.class, Contact.class});
+        setClasses(new Class<?>[]{PersonWithType.class, Contact.class});
         setControlJSON(JSON_RESOURCE);
     }
 
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/json/type/TypePropertyInheritanceTestCases.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/json/type/TypePropertyInheritanceTestCases.java
index 1b044b1..52b60f2 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/json/type/TypePropertyInheritanceTestCases.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/json/type/TypePropertyInheritanceTestCases.java
@@ -37,7 +37,7 @@ public class TypePropertyInheritanceTestCases extends JSONTestCases {
 
     public TypePropertyInheritanceTestCases(String name) throws Exception {
         super(name);
-        setClasses(new Class[]{PersonWithType.class});
+        setClasses(new Class<?>[]{PersonWithType.class});
         setControlJSON(JSON_RESOURCE);
     }
 
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/json/type/TypePropertyTestCases.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/json/type/TypePropertyTestCases.java
index 4d9377d..2ddb48f 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/json/type/TypePropertyTestCases.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/json/type/TypePropertyTestCases.java
@@ -37,7 +37,7 @@ public class TypePropertyTestCases extends JSONTestCases {
 
     public TypePropertyTestCases(String name) throws Exception {
         super(name);
-        setClasses(new Class[]{PersonWithType.class});
+        setClasses(new Class<?>[]{PersonWithType.class});
         setControlJSON(JSON_RESOURCE);
     }
 
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/json/unmapped/JsonUnmappedTestCases.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/json/unmapped/JsonUnmappedTestCases.java
index ccc0fa2..c3dc6cf 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/json/unmapped/JsonUnmappedTestCases.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/json/unmapped/JsonUnmappedTestCases.java
@@ -34,7 +34,7 @@ public class JsonUnmappedTestCases extends TestCase {
 
     public void testLastNull() throws JAXBException, FileNotFoundException {
         Map<String, Object> jaxbProperties = Collections.singletonMap(JAXBContextProperties.MEDIA_TYPE, "application/json");
-        JAXBContext jc = JAXBContextFactory.createContext(new Class[]{Foo.class}, jaxbProperties);
+        JAXBContext jc = JAXBContextFactory.createContext(new Class<?>[]{Foo.class}, jaxbProperties);
         Unmarshaller um = jc.createUnmarshaller();
 
         String file = "org/eclipse/persistence/testing/jaxb/json/unmapped/unmapped.json";
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/json/wrapper/AnyCollectionTestCases.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/json/wrapper/AnyCollectionTestCases.java
index d7165dd..3695888 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/json/wrapper/AnyCollectionTestCases.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/json/wrapper/AnyCollectionTestCases.java
@@ -31,7 +31,7 @@ public class AnyCollectionTestCases extends JSONMarshalUnmarshalTestCases {
 
     public AnyCollectionTestCases(String name) throws Exception {
         super(name);
-        setClasses(new Class[] {AnyCollectionRoot.class});
+        setClasses(new Class<?>[] {AnyCollectionRoot.class});
         setControlJSON(JSON);
     }
 
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/json/wrapper/BinaryCollectionTestCases.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/json/wrapper/BinaryCollectionTestCases.java
index eb06cb8..0cb20e2 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/json/wrapper/BinaryCollectionTestCases.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/json/wrapper/BinaryCollectionTestCases.java
@@ -29,7 +29,7 @@ public class BinaryCollectionTestCases extends JSONMarshalUnmarshalTestCases {
 
     public BinaryCollectionTestCases(String name) throws Exception {
         super(name);
-        setClasses(new Class[] {BinaryCollectionRoot.class});
+        setClasses(new Class<?>[] {BinaryCollectionRoot.class});
         setControlJSON(JSON);
     }
 
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/json/wrapper/ChoiceCollectionTestCases.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/json/wrapper/ChoiceCollectionTestCases.java
index 0230ddb..9ad3873 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/json/wrapper/ChoiceCollectionTestCases.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/json/wrapper/ChoiceCollectionTestCases.java
@@ -29,7 +29,7 @@ public class ChoiceCollectionTestCases extends JSONMarshalUnmarshalTestCases {
 
     public ChoiceCollectionTestCases(String name) throws Exception {
         super(name);
-        setClasses(new Class[] {ChoiceCollectionRoot.class});
+        setClasses(new Class<?>[] {ChoiceCollectionRoot.class});
         setControlJSON(JSON);
     }
 
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/json/wrapper/DefaultTestCases.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/json/wrapper/DefaultTestCases.java
index 0c7d8c5..51cac95 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/json/wrapper/DefaultTestCases.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/json/wrapper/DefaultTestCases.java
@@ -32,7 +32,7 @@ public class DefaultTestCases extends JSONMarshalUnmarshalTestCases {
     public DefaultTestCases(String name) throws Exception {
         super(name);
         setControlJSON(JSON);
-        setClasses(new Class[] {Company.class});
+        setClasses(new Class<?>[] {Company.class});
     }
 
     @Override
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/json/wrapper/ElementRefsCollectionTestCases.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/json/wrapper/ElementRefsCollectionTestCases.java
index b8c2684..c3368a4 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/json/wrapper/ElementRefsCollectionTestCases.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/json/wrapper/ElementRefsCollectionTestCases.java
@@ -31,7 +31,7 @@ public class ElementRefsCollectionTestCases extends JSONMarshalUnmarshalTestCase
 
     public ElementRefsCollectionTestCases(String name) throws Exception {
         super(name);
-        setClasses(new Class[] {ElementRefsCollectionRoot.class});
+        setClasses(new Class<?>[] {ElementRefsCollectionRoot.class});
         setControlJSON(JSON);
     }
 
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/json/wrapper/WrapperAndXmlPathTestCases.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/json/wrapper/WrapperAndXmlPathTestCases.java
index c5a98f0..bdb15c5 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/json/wrapper/WrapperAndXmlPathTestCases.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/json/wrapper/WrapperAndXmlPathTestCases.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
@@ -27,7 +27,7 @@ public class WrapperAndXmlPathTestCases extends JSONMarshalUnmarshalTestCases {
     public WrapperAndXmlPathTestCases(String name) throws Exception {
         super(name);
         setControlJSON(JSON);
-        setClasses(new Class[] {WrapperAndXmlPathRoot.class});
+        setClasses(new Class<?>[] {WrapperAndXmlPathRoot.class});
     }
 
     @Override
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/json/wrapper/WrapperNameEmptyAbsentTestCases.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/json/wrapper/WrapperNameEmptyAbsentTestCases.java
index 431291c..dcbf41b 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/json/wrapper/WrapperNameEmptyAbsentTestCases.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/json/wrapper/WrapperNameEmptyAbsentTestCases.java
@@ -39,7 +39,7 @@ public class WrapperNameEmptyAbsentTestCases extends JSONMarshalUnmarshalTestCas
 
     public WrapperNameEmptyAbsentTestCases(String name) throws Exception {
         super(name);
-        setClasses(new Class[] {Company.class});
+        setClasses(new Class<?>[] {Company.class});
         setControlJSON(JSON);
     }
 
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/json/wrapper/WrapperNameEmptyPresentTestCases.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/json/wrapper/WrapperNameEmptyPresentTestCases.java
index a69307f..f09c4a4 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/json/wrapper/WrapperNameEmptyPresentTestCases.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/json/wrapper/WrapperNameEmptyPresentTestCases.java
@@ -38,7 +38,7 @@ public class WrapperNameEmptyPresentTestCases extends JSONMarshalUnmarshalTestCa
 
     public WrapperNameEmptyPresentTestCases(String name) throws Exception {
         super(name);
-        setClasses(new Class[] {Company.class});
+        setClasses(new Class<?>[] {Company.class});
         setControlJSON(JSON);
     }
 
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/json/wrapper/WrapperNameNullAbsentTestCases.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/json/wrapper/WrapperNameNullAbsentTestCases.java
index 09c04ce..8858d18 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/json/wrapper/WrapperNameNullAbsentTestCases.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/json/wrapper/WrapperNameNullAbsentTestCases.java
@@ -38,7 +38,7 @@ public class WrapperNameNullAbsentTestCases extends JSONMarshalUnmarshalTestCase
 
     public WrapperNameNullAbsentTestCases(String name) throws Exception {
         super(name);
-        setClasses(new Class[] {Company.class});
+        setClasses(new Class<?>[] {Company.class});
         setControlJSON(JSON);
     }
 
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/json/wrapper/WrapperNameSingleItemTestCases.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/json/wrapper/WrapperNameSingleItemTestCases.java
index a6f827e..a876b68 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/json/wrapper/WrapperNameSingleItemTestCases.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/json/wrapper/WrapperNameSingleItemTestCases.java
@@ -39,7 +39,7 @@ public class WrapperNameSingleItemTestCases extends JSONMarshalUnmarshalTestCase
 
     public WrapperNameSingleItemTestCases(String name) throws Exception {
         super(name);
-        setClasses(new Class[] {Company.class});
+        setClasses(new Class<?>[] {Company.class});
         setControlJSON(JSON);
     }
 
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/json/wrapper/WrapperNameTestCases.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/json/wrapper/WrapperNameTestCases.java
index d192a87..9fa7889 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/json/wrapper/WrapperNameTestCases.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/json/wrapper/WrapperNameTestCases.java
@@ -39,7 +39,7 @@ public class WrapperNameTestCases extends JSONMarshalUnmarshalTestCases {
 
     public WrapperNameTestCases(String name) throws Exception {
         super(name);
-        setClasses(new Class[] {Company.class});
+        setClasses(new Class<?>[] {Company.class});
         setControlJSON(JSON);
     }
 
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/json/wrapper/WrapperNamespaceTestCases.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/json/wrapper/WrapperNamespaceTestCases.java
index 63009d3..5d3e7bf 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/json/wrapper/WrapperNamespaceTestCases.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/json/wrapper/WrapperNamespaceTestCases.java
@@ -39,7 +39,7 @@ public class WrapperNamespaceTestCases extends JSONMarshalUnmarshalTestCases {
 
     public WrapperNamespaceTestCases(String name) throws Exception {
         super(name);
-        setClasses(new Class[] {Company.class});
+        setClasses(new Class<?>[] {Company.class});
         setControlJSON(JSON);
     }
 
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/json/wrapper/WrapperXmlPathTestCases.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/json/wrapper/WrapperXmlPathTestCases.java
index 4de2d36..22c80f6 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/json/wrapper/WrapperXmlPathTestCases.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/json/wrapper/WrapperXmlPathTestCases.java
@@ -39,7 +39,7 @@ public class WrapperXmlPathTestCases extends JSONMarshalUnmarshalTestCases {
 
     public WrapperXmlPathTestCases(String name) throws Exception {
         super(name);
-        setClasses(new Class[] {XmlPathCompany.class});
+        setClasses(new Class<?>[] {XmlPathCompany.class});
         setControlJSON(JSON);
     }
 
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/json/xmlvalue/XMLValuePropDifferentTestCases.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/json/xmlvalue/XMLValuePropDifferentTestCases.java
index e51cdaa..742c43a 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/json/xmlvalue/XMLValuePropDifferentTestCases.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/json/xmlvalue/XMLValuePropDifferentTestCases.java
@@ -26,7 +26,7 @@ public class XMLValuePropDifferentTestCases extends XMLValuePropTestCases {
 
     public XMLValuePropDifferentTestCases(String name) throws Exception {
         super(name);
-        setClasses(new Class[]{Person.class});
+        setClasses(new Class<?>[]{Person.class});
         setControlJSON(JSON_RESOURCE);
         setWriteControlJSON(JSON_WRITE_RESOURCE);
     }
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/json/xmlvalue/XMLValuePropTestCases.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/json/xmlvalue/XMLValuePropTestCases.java
index da45466..e7cae5c 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/json/xmlvalue/XMLValuePropTestCases.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/json/xmlvalue/XMLValuePropTestCases.java
@@ -36,7 +36,7 @@ public class XMLValuePropTestCases extends JAXBWithJSONTestCases {
     private final static String JSON_SCHEMA_RESOURCE = "org/eclipse/persistence/testing/jaxb/json/xmlvalue/personSchema.json";
     public XMLValuePropTestCases(String name) throws Exception {
         super(name);
-        setClasses(new Class[]{Person.class});
+        setClasses(new Class<?>[]{Person.class});
         setControlJSON(JSON_RESOURCE);
         setControlDocument(XML_RESOURCE);
     }
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/json/xmlvalue/XMLValuePropValueFirstInJSONTestCases.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/json/xmlvalue/XMLValuePropValueFirstInJSONTestCases.java
index 97f0fbc..540a119 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/json/xmlvalue/XMLValuePropValueFirstInJSONTestCases.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/json/xmlvalue/XMLValuePropValueFirstInJSONTestCases.java
@@ -24,7 +24,7 @@ public class XMLValuePropValueFirstInJSONTestCases extends XMLValuePropTestCases
 
     public XMLValuePropValueFirstInJSONTestCases(String name) throws Exception {
         super(name);
-        setClasses(new Class[]{Person.class});
+        setClasses(new Class<?>[]{Person.class});
         setControlJSON(JSON_RESOURCE);
         setWriteControlJSON(JSON_WRITE_RESOURCE);
     }
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/listofobjects/JAXBArrayOfInnerEnumTestCases.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/listofobjects/JAXBArrayOfInnerEnumTestCases.java
index dfa4707..9d79bb2 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/listofobjects/JAXBArrayOfInnerEnumTestCases.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/listofobjects/JAXBArrayOfInnerEnumTestCases.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
@@ -25,7 +25,7 @@ public class JAXBArrayOfInnerEnumTestCases extends JAXBWithJSONTestCases {
 
     public JAXBArrayOfInnerEnumTestCases(String name) throws Exception {
         super(name);
-        setClasses(new Class[]{InnerEnumWrapper.class});
+        setClasses(new Class<?>[]{InnerEnumWrapper.class});
         setControlDocument(XML_RESOURCE);
         setControlJSON(JSON_RESOURCE);
     }
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/listofobjects/JAXBArrayTestCases.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/listofobjects/JAXBArrayTestCases.java
index 473ab10..40c4cf9 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/listofobjects/JAXBArrayTestCases.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/listofobjects/JAXBArrayTestCases.java
@@ -42,7 +42,7 @@ public JAXBArrayTestCases(String name) throws Exception {
     public void init() throws Exception {
         setControlDocument(XML_RESOURCE);
         setControlJSON(JSON_RESOURCE);
-        Class[] classes = new Class[4];
+        Class<?>[] classes = new Class<?>[4];
         classes[0] = char[].class;
         classes[1] = BigDecimal[].class;
         classes[2] = BigInteger[].class;
@@ -94,7 +94,7 @@ protected String getNoXsiTypeControlResourceName() {
 
     public void testConflict() {
         try {
-            Class[] classes = new Class[2];
+            Class<?>[] classes = new Class<?>[2];
             classes[0] = Integer[].class;
             classes[1] = int[].class;
             JAXBContextFactory.createContext(classes, null);
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/listofobjects/JAXBBooleanArrayTestCases.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/listofobjects/JAXBBooleanArrayTestCases.java
index 628e92e..4266aba 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/listofobjects/JAXBBooleanArrayTestCases.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/listofobjects/JAXBBooleanArrayTestCases.java
@@ -38,7 +38,7 @@ public JAXBBooleanArrayTestCases(String name) throws Exception {
     public void init() throws Exception {
         setControlDocument(XML_RESOURCE);
         setControlJSON(JSON_RESOURCE);
-        Class[] classes = new Class[1];
+        Class<?>[] classes = new Class<?>[1];
         classes[0] = boolean[].class;
         setClasses(classes);
         initXsiType();
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/listofobjects/JAXBByteArrayWithDataHandlerTestCases.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/listofobjects/JAXBByteArrayWithDataHandlerTestCases.java
index 3955bbf..8bdde1c 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/listofobjects/JAXBByteArrayWithDataHandlerTestCases.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/listofobjects/JAXBByteArrayWithDataHandlerTestCases.java
@@ -32,7 +32,7 @@ public JAXBByteArrayWithDataHandlerTestCases(String name) throws Exception {
         super(name);
         setControlDocument(XML_RESOURCE);
         setControlJSON(JSON_RESOURCE);
-        setClasses(new Class[]{byte[].class, DataHandler.class});
+        setClasses(new Class<?>[]{byte[].class, DataHandler.class});
     }
 
     @Override
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/listofobjects/JAXBCharArrayTestCases.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/listofobjects/JAXBCharArrayTestCases.java
index 6a2ec1e..56f0767 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/listofobjects/JAXBCharArrayTestCases.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/listofobjects/JAXBCharArrayTestCases.java
@@ -37,7 +37,7 @@ public JAXBCharArrayTestCases(String name) throws Exception {
     public void init() throws Exception {
         setControlDocument(XML_RESOURCE);
         setControlJSON(JSON_RESOURCE);
-        Class[] classes = new Class[1];
+        Class<?>[] classes = new Class<?>[1];
         classes[0] = char[].class;
         setClasses(classes);
         initXsiType();
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/listofobjects/JAXBEmployeeArrayTestCases.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/listofobjects/JAXBEmployeeArrayTestCases.java
index f8649d9..c99a188 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/listofobjects/JAXBEmployeeArrayTestCases.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/listofobjects/JAXBEmployeeArrayTestCases.java
@@ -51,7 +51,7 @@ public JAXBEmployeeArrayTestCases(String name) throws Exception {
     public void init() throws Exception {
         setControlDocument(XML_RESOURCE);
         setControlJSON(JSON_RESOURCE);
-        Class[] classes = new Class[1];
+        Class<?>[] classes = new Class<?>[1];
         classes[0] = Employee[].class;
         setClasses(classes);
         initXsiType();
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/listofobjects/JAXBInt2DArrayTestCases.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/listofobjects/JAXBInt2DArrayTestCases.java
index 2be3b68..5fff451 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/listofobjects/JAXBInt2DArrayTestCases.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/listofobjects/JAXBInt2DArrayTestCases.java
@@ -38,7 +38,7 @@ public JAXBInt2DArrayTestCases(String name) throws Exception {
     public void init() throws Exception {
         setControlDocument(XML_RESOURCE);
         setControlJSON(JSON_RESOURCE);
-        Class[] classes = new Class[1];
+        Class<?>[] classes = new Class<?>[1];
         classes[0] = int[][].class;
         setClasses(classes);
         initXsiType();
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/listofobjects/JAXBIntArrayTestCases.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/listofobjects/JAXBIntArrayTestCases.java
index 6679da9..ff97073 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/listofobjects/JAXBIntArrayTestCases.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/listofobjects/JAXBIntArrayTestCases.java
@@ -40,7 +40,7 @@ public JAXBIntArrayTestCases(String name) throws Exception {
     public void init() throws Exception {
         setControlDocument(XML_RESOURCE);
         setControlJSON(JSON_RESOURCE);
-        Class[] classes = new Class[1];
+        Class<?>[] classes = new Class<?>[1];
         classes[0] = int[].class;
         setClasses(classes);
         initXsiType();
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/listofobjects/JAXBInteger3DArrayTestCases.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/listofobjects/JAXBInteger3DArrayTestCases.java
index 52a9516..41d556c 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/listofobjects/JAXBInteger3DArrayTestCases.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/listofobjects/JAXBInteger3DArrayTestCases.java
@@ -38,7 +38,7 @@ public JAXBInteger3DArrayTestCases(String name) throws Exception {
     public void init() throws Exception {
         setControlDocument(XML_RESOURCE);
         setControlJSON(JSON_RESOURCE);
-        Class[] classes = new Class[1];
+        Class<?>[] classes = new Class<?>[1];
         classes[0] = Integer[][][].class;
         setClasses(classes);
         initXsiType();
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/listofobjects/JAXBIntegerArrayTestCases.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/listofobjects/JAXBIntegerArrayTestCases.java
index 1de9157..648911a 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/listofobjects/JAXBIntegerArrayTestCases.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/listofobjects/JAXBIntegerArrayTestCases.java
@@ -43,7 +43,7 @@ protected Type getTypeToUnmarshalTo() throws Exception {
     public void init() throws Exception {
         setControlDocument(XML_RESOURCE);
         setControlJSON(JSON_RESOURCE);
-        Class[] classes = new Class[1];
+        Class<?>[] classes = new Class<?>[1];
         classes[0] = Integer[].class;
         setClasses(classes);
         initXsiType();
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/listofobjects/JAXBListNameCollisionEmployee2TestCases.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/listofobjects/JAXBListNameCollisionEmployee2TestCases.java
index 91165f5..d3a9ec0 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/listofobjects/JAXBListNameCollisionEmployee2TestCases.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/listofobjects/JAXBListNameCollisionEmployee2TestCases.java
@@ -49,7 +49,7 @@ public JAXBListNameCollisionEmployee2TestCases(String name)
 
     public void init() throws Exception {
         setControlDocument(XML_RESOURCE);
-        Class[] classes = new Class[2];
+        Class<?>[] classes = new Class<?>[2];
 
         Field fld = ListofObjects.class.getField("empList");
         Type[] types = new Type[2];
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/listofobjects/JAXBListNameCollisionEmployeeTestCases.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/listofobjects/JAXBListNameCollisionEmployeeTestCases.java
index 267a0ae..f9221b9 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/listofobjects/JAXBListNameCollisionEmployeeTestCases.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/listofobjects/JAXBListNameCollisionEmployeeTestCases.java
@@ -48,7 +48,7 @@ public JAXBListNameCollisionEmployeeTestCases(String name) throws Exception {
 
     public void init() throws Exception {
         setControlDocument(XML_RESOURCE);
-        Class[] classes = new Class[2];
+        Class<?>[] classes = new Class<?>[2];
 
         Field fld = ListofObjects.class.getField("empList");
         Type[] types = new Type[2];
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/listofobjects/JAXBListOfObjectsNoJSONTestCases.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/listofobjects/JAXBListOfObjectsNoJSONTestCases.java
index 655e5bf..9e93e31 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/listofobjects/JAXBListOfObjectsNoJSONTestCases.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/listofobjects/JAXBListOfObjectsNoJSONTestCases.java
@@ -48,7 +48,7 @@ public JAXBListOfObjectsNoJSONTestCases(String name) throws Exception {
     }
 
     @Override
-    public void setClasses(Class[] newClasses) throws Exception {
+    public void setClasses(Class<?>[] newClasses) throws Exception {
         classLoader = new JaxbClassLoader(Thread.currentThread()
                 .getContextClassLoader());
         JAXBContextFactory factory = new JAXBContextFactory();
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/listofobjects/JAXBListOfObjectsNonRootTestCases.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/listofobjects/JAXBListOfObjectsNonRootTestCases.java
index 86cd684..0e60250 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/listofobjects/JAXBListOfObjectsNonRootTestCases.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/listofobjects/JAXBListOfObjectsNonRootTestCases.java
@@ -64,7 +64,7 @@ public void tearDown(){
     public void init() throws Exception {
         setControlDocument(XML_RESOURCE);
         setWriteControlDocument(XML_RESOURCE_NO_XSI_TYPE);
-        Class[] classes = new Class[2];
+        Class<?>[] classes = new Class<?>[2];
         classes[0] = ListofObjects.class;
         classes[1] = Employee.class;
         setClasses(classes);
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/listofobjects/JAXBListOfObjectsTestCases.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/listofobjects/JAXBListOfObjectsTestCases.java
index a29df20..e5f52e4 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/listofobjects/JAXBListOfObjectsTestCases.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/listofobjects/JAXBListOfObjectsTestCases.java
@@ -50,7 +50,7 @@ public JAXBListOfObjectsTestCases(String name) throws Exception {
     }
 
     @Override
-    public void setClasses(Class[] newClasses) throws Exception {
+    public void setClasses(Class<?>[] newClasses) throws Exception {
         classLoader = new JaxbClassLoader(Thread.currentThread()
                 .getContextClassLoader());
         JAXBContextFactory factory = new JAXBContextFactory();
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/listofobjects/MultiDimensionalArrayNonRootNonItemNamesTestCases.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/listofobjects/MultiDimensionalArrayNonRootNonItemNamesTestCases.java
index 8d612ba..f82f70a 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/listofobjects/MultiDimensionalArrayNonRootNonItemNamesTestCases.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/listofobjects/MultiDimensionalArrayNonRootNonItemNamesTestCases.java
@@ -32,7 +32,7 @@ public MultiDimensionalArrayNonRootNonItemNamesTestCases(String name) throws Exc
         super(name);
         setControlDocument(XML_RESOURCE);
         setControlJSON(JSON_RESOURCE);
-        Class[] classes = new Class[1];
+        Class<?>[] classes = new Class<?>[1];
         classes[0] = MultiDimensionalArrayRoot.class;
         setClasses(classes);
     }
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/listofobjects/MultiDimensionalArrayNonRootTestCases.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/listofobjects/MultiDimensionalArrayNonRootTestCases.java
index e7315ca..11f42a6 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/listofobjects/MultiDimensionalArrayNonRootTestCases.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/listofobjects/MultiDimensionalArrayNonRootTestCases.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,7 @@ public MultiDimensionalArrayNonRootTestCases(String name) throws Exception {
         super(name);
         setControlDocument(XML_RESOURCE);
         setControlJSON(JSON_RESOURCE);
-        Class[] classes = new Class[1];
+        Class<?>[] classes = new Class<?>[1];
         classes[0] = MultiDimensionalArrayRoot.class;
         setClasses(classes);
     }
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/listofobjects/NullContainerTestCases.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/listofobjects/NullContainerTestCases.java
index 9862d74..b27d802 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/listofobjects/NullContainerTestCases.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/listofobjects/NullContainerTestCases.java
@@ -31,7 +31,7 @@
 public class NullContainerTestCases extends TestCase {
 
     public void testMarshal() throws Exception {
-        JAXBContext jc = JAXBContextFactory.createContext(new Class[] {NullContainerRoot.class}, null);
+        JAXBContext jc = JAXBContextFactory.createContext(new Class<?>[] {NullContainerRoot.class}, null);
 
         NullContainerRoot ncr = new NullContainerRoot();
 
@@ -40,7 +40,7 @@ public void testMarshal() throws Exception {
     }
 
     public void testBinderMarshal() throws Exception {
-        JAXBContext jc = JAXBContextFactory.createContext(new Class[] {NullContainerRoot.class}, null);
+        JAXBContext jc = JAXBContextFactory.createContext(new Class<?>[] {NullContainerRoot.class}, null);
 
         NullContainerRoot ncr = new NullContainerRoot();
 
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/listofobjects/NullIteratorListTestCases.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/listofobjects/NullIteratorListTestCases.java
index db1bc9f..57c2ce8 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/listofobjects/NullIteratorListTestCases.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/listofobjects/NullIteratorListTestCases.java
@@ -31,7 +31,7 @@
 public class NullIteratorListTestCases extends TestCase {
 
     public void testMarshal() throws Exception {
-        JAXBContext jc = JAXBContextFactory.createContext(new Class[] {NullIteratorListRoot.class}, null);
+        JAXBContext jc = JAXBContextFactory.createContext(new Class<?>[] {NullIteratorListRoot.class}, null);
 
         NullIteratorListRoot nilr = new NullIteratorListRoot();
         nilr.setElementList(new NullIteratorList());
@@ -43,7 +43,7 @@ public void testMarshal() throws Exception {
     }
 
     public void testBinderMarshal() throws Exception {
-        JAXBContext jc = JAXBContextFactory.createContext(new Class[] {NullIteratorListRoot.class}, null);
+        JAXBContext jc = JAXBContextFactory.createContext(new Class<?>[] {NullIteratorListRoot.class}, null);
 
         NullIteratorListRoot nilr = new NullIteratorListRoot();
         nilr.setElementList(new NullIteratorList());
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/listofobjects/NullSetsMapTestCases.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/listofobjects/NullSetsMapTestCases.java
index 4757690..a4ac9fa 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/listofobjects/NullSetsMapTestCases.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/listofobjects/NullSetsMapTestCases.java
@@ -32,7 +32,7 @@
 public class NullSetsMapTestCases extends TestCase {
 
     public void testMarshal() throws JAXBException {
-        JAXBContext jc = JAXBContextFactory.createContext(new Class[] {NullSetsMapRoot.class}, null);
+        JAXBContext jc = JAXBContextFactory.createContext(new Class<?>[] {NullSetsMapRoot.class}, null);
 
         NullSetsMapRoot nsmr = new NullSetsMapRoot();
         nsmr.setNullSetsMap(new NullSetsMap());
@@ -42,7 +42,7 @@ public void testMarshal() throws JAXBException {
     }
 
     public void testBinderMarshal() throws Exception {
-        JAXBContext jc = JAXBContextFactory.createContext(new Class[] {NullSetsMapRoot.class}, null);
+        JAXBContext jc = JAXBContextFactory.createContext(new Class<?>[] {NullSetsMapRoot.class}, null);
 
         NullSetsMapRoot nsmr = new NullSetsMapRoot();
         nsmr.setNullSetsMap(new NullSetsMap());
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/listofobjects/externalizedmetadata/JAXBTypedListNoXsiTypeTestCases.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/listofobjects/externalizedmetadata/JAXBTypedListNoXsiTypeTestCases.java
index 1fba0e6..1f7a86f 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/listofobjects/externalizedmetadata/JAXBTypedListNoXsiTypeTestCases.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/listofobjects/externalizedmetadata/JAXBTypedListNoXsiTypeTestCases.java
@@ -57,7 +57,7 @@ protected Type getTypeToUnmarshalTo() throws Exception {
     public void init() throws Exception {
         setControlDocument(XML_RESOURCE);
         setWriteControlDocument(XML_RESOURCE_NO_XSI_TYPE);
-        Class[] classes = new Class[1];
+        Class<?>[] classes = new Class<?>[1];
         classes[0] = Company.class;
 
         setClasses(classes);
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/listofobjects/externalizedmetadata/JAXBTypedListTestCases.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/listofobjects/externalizedmetadata/JAXBTypedListTestCases.java
index 9ab7aa7..9df1811 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/listofobjects/externalizedmetadata/JAXBTypedListTestCases.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/listofobjects/externalizedmetadata/JAXBTypedListTestCases.java
@@ -55,7 +55,7 @@ public void init() throws Exception {
         setControlJSON(JSON_RESOURCE);
         setWriteControlJSON(JSON_WRITE_RESOURCE);
         setWriteControlDocument(XML_RESOURCE_XSI_TYPE);
-        Class[] classes = new Class[1];
+        Class<?>[] classes = new Class<?>[1];
         classes[0] = Company.class;
 
         setClasses(classes);
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/listofobjects/ns/MapNamespaceTestCases.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/listofobjects/ns/MapNamespaceTestCases.java
index 860f4e4..1e49c94 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/listofobjects/ns/MapNamespaceTestCases.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/listofobjects/ns/MapNamespaceTestCases.java
@@ -34,7 +34,7 @@ public class MapNamespaceTestCases extends JAXBTestCases {
 
     public MapNamespaceTestCases(String name) throws Exception {
         super(name);
-        setClasses(new Class[] {MapObject.class});
+        setClasses(new Class<?>[] {MapObject.class});
         setControlDocument(XML_RESOURCE);
     }
 
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/map/MapElementWrapperExternalTestCases.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/map/MapElementWrapperExternalTestCases.java
index a50c1b3..1d32a6d 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/map/MapElementWrapperExternalTestCases.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/map/MapElementWrapperExternalTestCases.java
@@ -35,7 +35,7 @@ public class MapElementWrapperExternalTestCases extends JAXBWithJSONTestCases{
 
     public MapElementWrapperExternalTestCases(String name) throws Exception {
         super(name);
-        setClasses(new Class[]{RootNoAnnotations.class});
+        setClasses(new Class<?>[]{RootNoAnnotations.class});
         setControlDocument(XML_RESOURCE);
         setControlJSON(JSON_RESOURCE);
     }
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/map/MapElementWrapperTestCases.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/map/MapElementWrapperTestCases.java
index 3043ad2..7eb1356 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/map/MapElementWrapperTestCases.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/map/MapElementWrapperTestCases.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
@@ -29,7 +29,7 @@ public class MapElementWrapperTestCases extends JAXBWithJSONTestCases{
 
     public MapElementWrapperTestCases(String name) throws Exception {
         super(name);
-        setClasses(new Class[]{RootWrapper.class});
+        setClasses(new Class<?>[]{RootWrapper.class});
         setControlDocument(XML_RESOURCE);
         setControlJSON(JSON_RESOURCE);
     }
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/map/MapNamespaceBarTestCases.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/map/MapNamespaceBarTestCases.java
index 5b759ad..e14e534 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/map/MapNamespaceBarTestCases.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/map/MapNamespaceBarTestCases.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,7 +25,7 @@ public class MapNamespaceBarTestCases extends JAXBWithJSONTestCases{
 
     public MapNamespaceBarTestCases(String name) throws Exception {
         super(name);
-        setClasses(new Class[]{Foo.class, Bar.class});
+        setClasses(new Class<?>[]{Foo.class, Bar.class});
         setControlDocument(XML_RESOURCE);
         setControlJSON(JSON_RESOURCE);
     }
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/map/MapNamespaceFooTestCases.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/map/MapNamespaceFooTestCases.java
index b74f4ca..9d5e9ca 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/map/MapNamespaceFooTestCases.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/map/MapNamespaceFooTestCases.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
@@ -31,7 +31,7 @@ public class MapNamespaceFooTestCases extends JAXBWithJSONTestCases{
 
     public MapNamespaceFooTestCases(String name) throws Exception {
         super(name);
-        setClasses(new Class[]{Foo.class, Bar.class});
+        setClasses(new Class<?>[]{Foo.class, Bar.class});
         setControlDocument(XML_RESOURCE);
         setControlJSON(JSON_RESOURCE);
     }
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/map/MapTestCases.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/map/MapTestCases.java
index 52c8297..6f259ed 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/map/MapTestCases.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/map/MapTestCases.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
@@ -29,7 +29,7 @@ public class MapTestCases extends JAXBWithJSONTestCases{
 
     public MapTestCases(String name) throws Exception {
         super(name);
-        setClasses(new Class[]{Root.class});
+        setClasses(new Class<?>[]{Root.class});
         setControlDocument(XML_RESOURCE);
         setControlJSON(JSON_RESOURCE);
     }
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/multiplepackage/MultiplePackageInfoTestCases.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/multiplepackage/MultiplePackageInfoTestCases.java
index df091f2..dca9eb3 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/multiplepackage/MultiplePackageInfoTestCases.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/multiplepackage/MultiplePackageInfoTestCases.java
@@ -29,7 +29,7 @@ public MultiplePackageInfoTestCases(String name) throws Exception {
         super(name);
         setControlDocument(XML_RESOURCE);
         setControlJSON(JSON_RESOURCE);
-        Class[] classes = new Class[3];
+        Class<?>[] classes = new Class<?>[3];
         classes[0] = ClassA.class;
         classes[1] = ClassB.class;
         classes[2] = Root.class;
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/multiplepackage/MultiplePackageTestCases.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/multiplepackage/MultiplePackageTestCases.java
index a36bd6b..35dc02a 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/multiplepackage/MultiplePackageTestCases.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/multiplepackage/MultiplePackageTestCases.java
@@ -28,7 +28,7 @@ public MultiplePackageTestCases(String name) throws Exception {
         super(name);
         setControlDocument(XML_RESOURCE);
         setControlJSON(JSON_RESOURCE);
-        Class[] classes = new Class[2];
+        Class<?>[] classes = new Class<?>[2];
         classes[0] = EmployeeNamespace.class;
         classes[1] = Department.class;
 
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/namespaceuri/inheritance/InheritanceRootChoiceOnlyTestCases.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/namespaceuri/inheritance/InheritanceRootChoiceOnlyTestCases.java
index fd7d736..0722643 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/namespaceuri/inheritance/InheritanceRootChoiceOnlyTestCases.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/namespaceuri/inheritance/InheritanceRootChoiceOnlyTestCases.java
@@ -39,7 +39,7 @@ public InheritanceRootChoiceOnlyTestCases(String name) throws Exception {
         super(name);
         setControlDocument(XML_RESOURCE);
         setControlJSON(JSON_RESOURCE);
-        setClasses(new Class[] {RootChoiceOnly.class});
+        setClasses(new Class<?>[] {RootChoiceOnly.class});
         Map<String, String> namespaces = new HashMap<String, String>();
         namespaces.put("rootNamespace","ns0");
         namespaces.put("uri1", "ns5");
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/namespaceuri/inheritance/InheritanceRootCompositeCollectionObjectOnlyNSTestCases.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/namespaceuri/inheritance/InheritanceRootCompositeCollectionObjectOnlyNSTestCases.java
index bfd6c81..a345a21 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/namespaceuri/inheritance/InheritanceRootCompositeCollectionObjectOnlyNSTestCases.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/namespaceuri/inheritance/InheritanceRootCompositeCollectionObjectOnlyNSTestCases.java
@@ -34,7 +34,7 @@ public InheritanceRootCompositeCollectionObjectOnlyNSTestCases(String name) thro
         super(name);
         setControlDocument(XML_RESOURCE);
         setControlJSON(JSON_RESOURCE);
-        setClasses(new Class[] {RootCompositeCollectionObjectOnly.class, BaseType.class});
+        setClasses(new Class<?>[] {RootCompositeCollectionObjectOnly.class, BaseType.class});
         Map<String, String> namespaces = new HashMap<String, String>();
         namespaces.put(javax.xml.XMLConstants.W3C_XML_SCHEMA_INSTANCE_NS_URI, "xsi");
         namespaces.put(javax.xml.XMLConstants.W3C_XML_SCHEMA_NS_URI, "xsd");
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/namespaceuri/inheritance/InheritanceRootCompositeCollectionObjectOnlyTestCases.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/namespaceuri/inheritance/InheritanceRootCompositeCollectionObjectOnlyTestCases.java
index 4c2fbba..affd06b 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/namespaceuri/inheritance/InheritanceRootCompositeCollectionObjectOnlyTestCases.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/namespaceuri/inheritance/InheritanceRootCompositeCollectionObjectOnlyTestCases.java
@@ -30,7 +30,7 @@ public InheritanceRootCompositeCollectionObjectOnlyTestCases(String name) throws
         super(name);
         setControlDocument(XML_RESOURCE);
         setControlJSON(JSON_RESOURCE);
-        setClasses(new Class[] {RootCompositeCollectionObjectOnly.class, BaseType.class});
+        setClasses(new Class<?>[] {RootCompositeCollectionObjectOnly.class, BaseType.class});
         initXsiType();
     }
 
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/namespaceuri/inheritance/InheritanceRootCompositeCollectionObjectOnlyXMLTestCases.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/namespaceuri/inheritance/InheritanceRootCompositeCollectionObjectOnlyXMLTestCases.java
index 578e6e0..4f9c752 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/namespaceuri/inheritance/InheritanceRootCompositeCollectionObjectOnlyXMLTestCases.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/namespaceuri/inheritance/InheritanceRootCompositeCollectionObjectOnlyXMLTestCases.java
@@ -26,7 +26,7 @@ public class InheritanceRootCompositeCollectionObjectOnlyXMLTestCases extends JA
     public InheritanceRootCompositeCollectionObjectOnlyXMLTestCases(String name) throws Exception {
         super(name);
         setControlDocument(XML_RESOURCE);
-        setClasses(new Class[] {RootCompositeCollectionObjectOnly.class, BaseType.class});
+        setClasses(new Class<?>[] {RootCompositeCollectionObjectOnly.class, BaseType.class});
     }
 
     @Override
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/namespaceuri/inheritance/InheritanceRootCompositeCollectionOnlyTestCases.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/namespaceuri/inheritance/InheritanceRootCompositeCollectionOnlyTestCases.java
index 95bb293..e794208 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/namespaceuri/inheritance/InheritanceRootCompositeCollectionOnlyTestCases.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/namespaceuri/inheritance/InheritanceRootCompositeCollectionOnlyTestCases.java
@@ -40,7 +40,7 @@ public InheritanceRootCompositeCollectionOnlyTestCases(String name) throws Excep
         super(name);
         setControlDocument(XML_RESOURCE);
         setControlJSON(JSON_RESOURCE);
-        setClasses(new Class[] {RootCompositeCollectionOnly.class});
+        setClasses(new Class<?>[] {RootCompositeCollectionOnly.class});
 
         Map<String, String> namespaces = new HashMap<String, String>();
         namespaces.put("uri1", "ns5");
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/namespaceuri/inheritance/InheritanceWithMultiplePackagesBackwardCompatibilityTestCases.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/namespaceuri/inheritance/InheritanceWithMultiplePackagesBackwardCompatibilityTestCases.java
index efe41a0..37129b7 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/namespaceuri/inheritance/InheritanceWithMultiplePackagesBackwardCompatibilityTestCases.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/namespaceuri/inheritance/InheritanceWithMultiplePackagesBackwardCompatibilityTestCases.java
@@ -35,7 +35,7 @@ public InheritanceWithMultiplePackagesBackwardCompatibilityTestCases(String name
         super(name);
         setControlDocument(XML_RESOURCE);
         setControlJSON(JSON_RESOURCE);
-        setClasses(new Class[] {RootComplex.class});
+        setClasses(new Class<?>[] {RootComplex.class});
         jaxbMarshaller.setProperty(JAXBContextProperties.JSON_TYPE_COMPATIBILITY, true);
         jaxbUnmarshaller.setProperty(JAXBContextProperties.JSON_TYPE_COMPATIBILITY, true);
     }
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/namespaceuri/inheritance/InheritanceWithMultiplePackagesNSTestCases.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/namespaceuri/inheritance/InheritanceWithMultiplePackagesNSTestCases.java
index 4a4cae7..02d0cab 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/namespaceuri/inheritance/InheritanceWithMultiplePackagesNSTestCases.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/namespaceuri/inheritance/InheritanceWithMultiplePackagesNSTestCases.java
@@ -34,7 +34,7 @@ public InheritanceWithMultiplePackagesNSTestCases(String name) throws Exception
         super(name);
         setControlDocument(XML_RESOURCE);
         setControlJSON(JSON_RESOURCE);
-        setClasses(new Class[] {RootComplex.class});
+        setClasses(new Class<?>[] {RootComplex.class});
 
         Map namespaces = new HashMap();
         namespaces.put(javax.xml.XMLConstants.W3C_XML_SCHEMA_NS_URI, XMLConstants.SCHEMA_PREFIX);
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/namespaceuri/inheritance/InheritanceWithMultiplePackagesTestCases.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/namespaceuri/inheritance/InheritanceWithMultiplePackagesTestCases.java
index 3848ca8..b511f49 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/namespaceuri/inheritance/InheritanceWithMultiplePackagesTestCases.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/namespaceuri/inheritance/InheritanceWithMultiplePackagesTestCases.java
@@ -30,7 +30,7 @@ public InheritanceWithMultiplePackagesTestCases(String name) throws Exception {
         super(name);
         setControlDocument(XML_RESOURCE);
         setControlJSON(JSON_RESOURCE);
-        setClasses(new Class[] {RootComplex.class});
+        setClasses(new Class<?>[] {RootComplex.class});
         initXsiType();
     }
 
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/namespaceuri/inheritance/InheritanceWithMultiplePackagesXMLTestCases.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/namespaceuri/inheritance/InheritanceWithMultiplePackagesXMLTestCases.java
index bbc14d5..205acd0 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/namespaceuri/inheritance/InheritanceWithMultiplePackagesXMLTestCases.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/namespaceuri/inheritance/InheritanceWithMultiplePackagesXMLTestCases.java
@@ -26,7 +26,7 @@ public class InheritanceWithMultiplePackagesXMLTestCases extends JAXBTestCases {
     public InheritanceWithMultiplePackagesXMLTestCases(String name) throws Exception {
         super(name);
         setControlDocument(XML_RESOURCE);
-        setClasses(new Class[] {RootComplex.class});
+        setClasses(new Class<?>[] {RootComplex.class});
     }
 
     @Override
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/namespaceuri/schemacontext/SchemaContextAsQNameTest.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/namespaceuri/schemacontext/SchemaContextAsQNameTest.java
index e1bd0c3..15fa30c 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/namespaceuri/schemacontext/SchemaContextAsQNameTest.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/namespaceuri/schemacontext/SchemaContextAsQNameTest.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
@@ -34,7 +34,7 @@ public class SchemaContextAsQNameTest extends TestCase {
     private static QName qName = new QName(NAMESPACE_URI, LOCAL_PART);
 
     public void testSchemaContextAsQName() throws Exception {
-        JAXBContext ctx = (JAXBContext) JAXBContextFactory.createContext(new Class[] { Root.class }, new HashMap());
+        JAXBContext ctx = (JAXBContext) JAXBContextFactory.createContext(new Class<?>[] { Root.class }, new HashMap());
         assertTrue("JAXBContext creation failed", ctx != null);
         XMLContext xCtx = ctx.getXMLContext();
         assertTrue("XMLContext is null", xCtx != null);
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/namespaceuri/splitpackage/qualified/QualifiedTestCases.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/namespaceuri/splitpackage/qualified/QualifiedTestCases.java
index c813d76..26b1d64 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/namespaceuri/splitpackage/qualified/QualifiedTestCases.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/namespaceuri/splitpackage/qualified/QualifiedTestCases.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,7 @@ public QualifiedTestCases(String name) throws Exception {
         super(name);
         setControlDocument(XML_RESOURCE);
         setControlJSON(JSON_RESOURCE);
-        setClasses(new Class[] {Customer.class});
+        setClasses(new Class<?>[] {Customer.class});
     }
 
     @Override
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/namespaceuri/splitpackage/unqualified/UnqualifiedTestCases.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/namespaceuri/splitpackage/unqualified/UnqualifiedTestCases.java
index 7176ec9..e76739d 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/namespaceuri/splitpackage/unqualified/UnqualifiedTestCases.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/namespaceuri/splitpackage/unqualified/UnqualifiedTestCases.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,7 @@ public UnqualifiedTestCases(String name) throws Exception {
         super(name);
         setControlDocument(XML_RESOURCE);
         setControlJSON(JSON_RESOURCE);
-        setClasses(new Class[] {Customer.class});
+        setClasses(new Class<?>[] {Customer.class});
     }
 
     @Override
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/namespaceuri/splitpackage/xmlns/XmlNsTestCase.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/namespaceuri/splitpackage/xmlns/XmlNsTestCase.java
index b6a8e35..55053c1 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/namespaceuri/splitpackage/xmlns/XmlNsTestCase.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/namespaceuri/splitpackage/xmlns/XmlNsTestCase.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
@@ -22,7 +22,7 @@ public class XmlNsTestCase extends JAXBWithJSONTestCases {
 
     public XmlNsTestCase(String name) throws Exception {
         super(name);
-        setClasses(new Class[] { Customer.class, Address.class });
+        setClasses(new Class<?>[] { Customer.class, Address.class });
         setControlDocument("org/eclipse/persistence/testing/jaxb/namespaceuri/splitpackage/xmlns/cust.xml");
         setControlJSON("org/eclipse/persistence/testing/jaxb/namespaceuri/splitpackage/xmlns/cust.json");
     }
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/namespaceuri/twopackages/ABTestCases.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/namespaceuri/twopackages/ABTestCases.java
index 9eeceb0..a3b4a0c 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/namespaceuri/twopackages/ABTestCases.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/namespaceuri/twopackages/ABTestCases.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
@@ -24,7 +24,7 @@ public class ABTestCases extends JAXBWithJSONTestCases{
 
     public ABTestCases(String name) throws Exception {
         super(name);
-        setClasses(new Class[] {A.class, B.class});
+        setClasses(new Class<?>[] {A.class, B.class});
         setControlDocument(XML_RESOURCE);
         setControlJSON(JSON_RESOURCE);
     }
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/namespaceuri/twopackages/BATestCases.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/namespaceuri/twopackages/BATestCases.java
index ea20082..0d6de0a 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/namespaceuri/twopackages/BATestCases.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/namespaceuri/twopackages/BATestCases.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 @@ public class BATestCases extends JAXBWithJSONTestCases {
 
     public BATestCases(String name) throws Exception {
         super(name);
-        setClasses(new Class[] {B.class, A.class});
+        setClasses(new Class<?>[] {B.class, A.class});
         setControlDocument(XML_RESOURCE);
         setControlJSON(JSON_RESOURCE);
     }
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/namespaceuri/xml/XMLNamespaceTestCases.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/namespaceuri/xml/XMLNamespaceTestCases.java
index 2c042b0..7cae08a 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/namespaceuri/xml/XMLNamespaceTestCases.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/namespaceuri/xml/XMLNamespaceTestCases.java
@@ -32,7 +32,7 @@ public class XMLNamespaceTestCases extends JAXBWithJSONTestCases{
 
     public XMLNamespaceTestCases(String name) throws Exception {
         super(name);
-        setClasses(new Class[]{Address.class});
+        setClasses(new Class<?>[]{Address.class});
         setControlDocument(XML_RESOURCE);
         setControlJSON(JSON_RESOURCE);
 
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/namespaceuri/xml/XMLNamespaceXmlPathTestCases.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/namespaceuri/xml/XMLNamespaceXmlPathTestCases.java
index e883f85..a9145e3 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/namespaceuri/xml/XMLNamespaceXmlPathTestCases.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/namespaceuri/xml/XMLNamespaceXmlPathTestCases.java
@@ -32,7 +32,7 @@ public class XMLNamespaceXmlPathTestCases extends JAXBWithJSONTestCases{
 
     public XMLNamespaceXmlPathTestCases(String name) throws Exception {
         super(name);
-        setClasses(new Class[]{TestClass.class});
+        setClasses(new Class<?>[]{TestClass.class});
         setControlDocument(XML_RESOURCE);
         setControlJSON(JSON_RESOURCE);
 
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/nomappings/NoMappingsTestCases.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/nomappings/NoMappingsTestCases.java
index 1ed616e..856f96c 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/nomappings/NoMappingsTestCases.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/nomappings/NoMappingsTestCases.java
@@ -29,7 +29,7 @@ public class NoMappingsTestCases extends JAXBWithJSONTestCases{
 
     public NoMappingsTestCases(String name) throws Exception {
         super(name);
-        setClasses(new Class[]{SomeClass.class});
+        setClasses(new Class<?>[]{SomeClass.class});
         setControlDocument(XML_RESOURCE);
         setControlJSON(JSON_RESOURCE);
         setWriteControlDocument(XML_WRITE_RESOURCE);
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/objectgraph/ObjectGraphAttributeTestCases.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/objectgraph/ObjectGraphAttributeTestCases.java
index 6a158f8..9304c46 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/objectgraph/ObjectGraphAttributeTestCases.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/objectgraph/ObjectGraphAttributeTestCases.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,7 @@ public class ObjectGraphAttributeTestCases extends JAXBWithJSONTestCases {
 
     public ObjectGraphAttributeTestCases(String name) throws Exception {
         super(name);
-        this.setClasses(new Class[]{Customer.class, Address.class, PhoneNumber.class});
+        this.setClasses(new Class<?>[]{Customer.class, Address.class, PhoneNumber.class});
         setControlDocument(XML_RESOURCE);
         setControlJSON(JSON_RESOURCE);
         setWriteControlDocument(XML_WRITE_RESOURCE);
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/objectgraph/ObjectGraphBasicTestCases.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/objectgraph/ObjectGraphBasicTestCases.java
index d84cdf7..2ce6a0a 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/objectgraph/ObjectGraphBasicTestCases.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/objectgraph/ObjectGraphBasicTestCases.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,7 @@ public class ObjectGraphBasicTestCases extends JAXBWithJSONTestCases {
 
     public ObjectGraphBasicTestCases(String name) throws Exception {
         super(name);
-        this.setClasses(new Class[]{Customer.class, Address.class, PhoneNumber.class});
+        this.setClasses(new Class<?>[]{Customer.class, Address.class, PhoneNumber.class});
         setControlDocument(XML_RESOURCE);
         setControlJSON(JSON_RESOURCE);
         setWriteControlDocument(XML_WRITE_RESOURCE);
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/objectgraph/ObjectGraphBindingsTestCases.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/objectgraph/ObjectGraphBindingsTestCases.java
index e0e7eaa..c2779d3 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/objectgraph/ObjectGraphBindingsTestCases.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/objectgraph/ObjectGraphBindingsTestCases.java
@@ -32,7 +32,7 @@ public class ObjectGraphBindingsTestCases extends JAXBWithJSONTestCases {
 
     public ObjectGraphBindingsTestCases(String name) throws Exception {
         super(name);
-        this.setClasses(new Class[]{Customer.class, Address.class, PhoneNumber.class});
+        this.setClasses(new Class<?>[]{Customer.class, Address.class, PhoneNumber.class});
         setControlDocument(XML_RESOURCE);
         setControlJSON(JSON_RESOURCE);
         setWriteControlDocument(XML_WRITE_RESOURCE);
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/objectgraph/ObjectGraphDynamicTestCases.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/objectgraph/ObjectGraphDynamicTestCases.java
index bf17446..c0904e4 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/objectgraph/ObjectGraphDynamicTestCases.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/objectgraph/ObjectGraphDynamicTestCases.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,7 @@ public class ObjectGraphDynamicTestCases extends JAXBWithJSONTestCases {
 
     public ObjectGraphDynamicTestCases(String name) throws Exception {
         super(name);
-        this.setClasses(new Class[]{Customer.class, Address.class, PhoneNumber.class});
+        this.setClasses(new Class<?>[]{Customer.class, Address.class, PhoneNumber.class});
         setControlDocument(XML_RESOURCE);
         setControlJSON(JSON_RESOURCE);
         setWriteControlDocument(XML_WRITE_RESOURCE);
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/objectgraph/ObjectGraphInheritanceTestCases.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/objectgraph/ObjectGraphInheritanceTestCases.java
index 54185d9..125d15d 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/objectgraph/ObjectGraphInheritanceTestCases.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/objectgraph/ObjectGraphInheritanceTestCases.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
@@ -30,7 +30,7 @@ public class ObjectGraphInheritanceTestCases extends JAXBWithJSONTestCases {
 
     public ObjectGraphInheritanceTestCases(String name) throws Exception {
         super(name);
-        this.setClasses(new Class[]{Employee.class, ContactInfo.class, AddressInh.class, PhoneNumberInh.class});
+        this.setClasses(new Class<?>[]{Employee.class, ContactInfo.class, AddressInh.class, PhoneNumberInh.class});
         setControlDocument(XML_RESOURCE);
         setControlJSON(JSON_RESOURCE);
         setWriteControlDocument(XML_WRITE_RESOURCE);
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/objectgraph/ObjectGraphRefSubTestCases.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/objectgraph/ObjectGraphRefSubTestCases.java
index a1e6a9e..f678640 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/objectgraph/ObjectGraphRefSubTestCases.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/objectgraph/ObjectGraphRefSubTestCases.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,7 @@ public class ObjectGraphRefSubTestCases extends JAXBWithJSONTestCases {
 
     public ObjectGraphRefSubTestCases(String name) throws Exception {
         super(name);
-        this.setClasses(new Class[]{Customer.class, Address.class, PhoneNumber.class});
+        this.setClasses(new Class<?>[]{Customer.class, Address.class, PhoneNumber.class});
         setControlDocument(XML_RESOURCE);
         setControlJSON(JSON_RESOURCE);
         setWriteControlDocument(XML_WRITE_RESOURCE);
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/objectgraph/ObjectGraphXmlAnyLaxCollectionTestCases.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/objectgraph/ObjectGraphXmlAnyLaxCollectionTestCases.java
index 231a07e..c2f2f5e 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/objectgraph/ObjectGraphXmlAnyLaxCollectionTestCases.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/objectgraph/ObjectGraphXmlAnyLaxCollectionTestCases.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
@@ -39,7 +39,7 @@ public class ObjectGraphXmlAnyLaxCollectionTestCases extends JAXBWithJSONTestCas
 
     public ObjectGraphXmlAnyLaxCollectionTestCases(String name) throws Exception {
         super(name);
-        this.setClasses(new Class[]{RootElement.class, LaxElements.class});
+        this.setClasses(new Class<?>[]{RootElement.class, LaxElements.class});
         setWriteControlDocument(XML_WRITE_RESOURCE);
         setWriteControlJSON(JSON_WRITE_RESOURCE);
 
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/objectgraph/ObjectGraphXmlAnyLaxTestCases.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/objectgraph/ObjectGraphXmlAnyLaxTestCases.java
index 48d79ff..27f20ca 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/objectgraph/ObjectGraphXmlAnyLaxTestCases.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/objectgraph/ObjectGraphXmlAnyLaxTestCases.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
@@ -33,7 +33,7 @@ public class ObjectGraphXmlAnyLaxTestCases extends JAXBWithJSONTestCases {
 
     public ObjectGraphXmlAnyLaxTestCases(String name) throws Exception {
         super(name);
-        this.setClasses(new Class[]{Elements.class, LaxFoo.class});
+        this.setClasses(new Class<?>[]{Elements.class, LaxFoo.class});
         setWriteControlDocument(XML_WRITE_RESOURCE);
         setWriteControlJSON(JSON_WRITE_RESOURCE);
 
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/prefixmapper/DefaultNSPrefixMapperSimpleTestCases.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/prefixmapper/DefaultNSPrefixMapperSimpleTestCases.java
index 683976c..5c547d6 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/prefixmapper/DefaultNSPrefixMapperSimpleTestCases.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/prefixmapper/DefaultNSPrefixMapperSimpleTestCases.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,7 @@ public class DefaultNSPrefixMapperSimpleTestCases extends JAXBWithJSONTestCases
     private static final String JSON_RESOURCE = "org/eclipse/persistence/testing/jaxb/prefixmapper/simple.json";
     public DefaultNSPrefixMapperSimpleTestCases(String name) throws Exception {
         super(name);
-        setClasses(new Class[]{Simple.class});
+        setClasses(new Class<?>[]{Simple.class});
         Map<String, String> map = new HashMap<String, String>();
 
         map.put("namespace1","ns1");
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/prefixmapper/PrefixMapperContextTestCases.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/prefixmapper/PrefixMapperContextTestCases.java
index 43ea379..0b58e87 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/prefixmapper/PrefixMapperContextTestCases.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/prefixmapper/PrefixMapperContextTestCases.java
@@ -41,7 +41,7 @@ public String getName() {
     }
 
     public void testMarshalWithContextualNamespaces() throws Exception  {
-        JAXBContext ctx = JAXBContextFactory.createContext(new Class[]{EmployeeContext.class}, null);
+        JAXBContext ctx = JAXBContextFactory.createContext(new Class<?>[]{EmployeeContext.class}, null);
         Marshaller m = ctx.createMarshaller();
         m.setProperty(MarshallerProperties.NAMESPACE_PREFIX_MAPPER, new ContextPrefixMapper());
         m.setProperty(XMLConstants.JAXB_FRAGMENT, Boolean.TRUE);
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/prefixmapper/PrefixMapperMapTestCases.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/prefixmapper/PrefixMapperMapTestCases.java
index 750b59c..6e7d99a 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/prefixmapper/PrefixMapperMapTestCases.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/prefixmapper/PrefixMapperMapTestCases.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,7 @@ public class PrefixMapperMapTestCases extends JAXBWithJSONTestCases {
     private static final String JSON_RESOURCE = "org/eclipse/persistence/testing/jaxb/prefixmapper/employee.json";
     public PrefixMapperMapTestCases(String name) throws Exception {
         super(name);
-        setClasses(new Class[]{Employee.class, Person.class});
+        setClasses(new Class<?>[]{Employee.class, Person.class});
         Map<String, String> map = new HashMap<String, String>();
 
         map.put("someuri", "newPrefix");
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/prefixmapper/PrefixMapperTestCases.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/prefixmapper/PrefixMapperTestCases.java
index 4780ca7..df172a3 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/prefixmapper/PrefixMapperTestCases.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/prefixmapper/PrefixMapperTestCases.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
@@ -24,7 +24,7 @@ public class PrefixMapperTestCases extends JAXBWithJSONTestCases {
     private static final String JSON_RESOURCE = "org/eclipse/persistence/testing/jaxb/prefixmapper/employee.json";
     public PrefixMapperTestCases(String name) throws Exception {
         super(name);
-        setClasses(new Class[]{Employee.class, Person.class});
+        setClasses(new Class<?>[]{Employee.class, Person.class});
         jaxbMarshaller.setProperty(MarshallerProperties.NAMESPACE_PREFIX_MAPPER, new MyPrefixMapper());
         jaxbUnmarshaller.setProperty(UnmarshallerProperties.JSON_NAMESPACE_PREFIX_MAPPER, new MyPrefixMapper());
         setControlDocument(XML_RESOURCE);
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/properties/PropertyTestCases.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/properties/PropertyTestCases.java
index 2d4bccf..80811bb 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/properties/PropertyTestCases.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/properties/PropertyTestCases.java
@@ -46,7 +46,7 @@ public class PropertyTestCases extends TestCase {
     public PropertyTestCases(String name) throws Exception {
         super(name);
 
-        JAXBContext ctx = JAXBContextFactory.createContext(new Class[] { Employee.class }, null);
+        JAXBContext ctx = JAXBContextFactory.createContext(new Class<?>[] { Employee.class }, null);
         m = ctx.createMarshaller();
         u = ctx.createUnmarshaller();
     }
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/qname/QNameTestCases.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/qname/QNameTestCases.java
index dfe9687..625d5f6 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/qname/QNameTestCases.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/qname/QNameTestCases.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
@@ -22,7 +22,7 @@ public class QNameTestCases extends JAXBWithJSONTestCases {
 
     public QNameTestCases(String name) throws Exception {
         super(name);
-        setClasses(new Class[] { Root.class });
+        setClasses(new Class<?>[] { Root.class });
         setControlDocument("org/eclipse/persistence/testing/jaxb/qname/qname.xml");
         setControlJSON("org/eclipse/persistence/testing/jaxb/qname/qname.json");
     }
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/qname/defaultnamespace/QNameTestCases.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/qname/defaultnamespace/QNameTestCases.java
index 4efac5a..24ea351 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/qname/defaultnamespace/QNameTestCases.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/qname/defaultnamespace/QNameTestCases.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
@@ -24,7 +24,7 @@ public class QNameTestCases extends JAXBWithJSONTestCases {
 
     public QNameTestCases(String name) throws Exception {
         super(name);
-        setClasses(new Class[] { Root.class });
+        setClasses(new Class<?>[] { Root.class });
         setControlDocument("org/eclipse/persistence/testing/jaxb/qname/defaultnamespace/qname.xml");
         setControlJSON("org/eclipse/persistence/testing/jaxb/qname/defaultnamespace/qname.json");
     }
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/readonly/ReadAndWriteOnlyTestCases.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/readonly/ReadAndWriteOnlyTestCases.java
index 74a4771..18d21b8 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/readonly/ReadAndWriteOnlyTestCases.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/readonly/ReadAndWriteOnlyTestCases.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
@@ -26,7 +26,7 @@ public class ReadAndWriteOnlyTestCases extends JAXBWithJSONTestCases {
 
     public ReadAndWriteOnlyTestCases(String name) throws Exception {
         super(name);
-        setClasses(new Class[] {RootObject.class});
+        setClasses(new Class<?>[] {RootObject.class});
         setControlDocument(READ_CONTROL_DOC);
         setWriteControlDocument(WRITE_CONTROL_DOC);
         setControlJSON(JSON_READ_CONTROL_DOC);
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/refresh/BinderTestCases.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/refresh/BinderTestCases.java
index 16d9bcd..b2b5639 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/refresh/BinderTestCases.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/refresh/BinderTestCases.java
@@ -55,7 +55,7 @@ public void testRefresh() throws Exception {
 
         Map<String, Object> props = new HashMap<String, Object>(1);
         props.put(JAXBContextProperties.OXM_METADATA_SOURCE, metadataDocument);
-        JAXBContext jc = JAXBContextFactory.createContext(new Class[] {Root.class}, props);
+        JAXBContext jc = JAXBContextFactory.createContext(new Class<?>[] {Root.class}, props);
         Binder<Node> binder = jc.createBinder();
 
         Root controlRoot = new Root();
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/refresh/NonRefreshableMetadataTestCases.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/refresh/NonRefreshableMetadataTestCases.java
index a58b3cd..fa1f779 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/refresh/NonRefreshableMetadataTestCases.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/refresh/NonRefreshableMetadataTestCases.java
@@ -46,7 +46,7 @@ public void testNonRefreshableMetadata() throws Exception {
         InputStream metadataStream = classLoader.getResourceAsStream(XML_METADATA);
         Map<String, Object> props = new HashMap<String, Object>(1);
         props.put(JAXBContextProperties.OXM_METADATA_SOURCE, metadataStream);
-        JAXBContext jc = JAXBContextFactory.createContext(new Class[] {Root.class}, props);
+        JAXBContext jc = JAXBContextFactory.createContext(new Class<?>[] {Root.class}, props);
 
         try {
             JAXBHelper.getJAXBContext(jc).refreshMetadata();
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/refresh/RefreshTestCases.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/refresh/RefreshTestCases.java
index 0e960f1..3ee1d07 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/refresh/RefreshTestCases.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/refresh/RefreshTestCases.java
@@ -54,7 +54,7 @@ public void testRefresh() throws Exception {
 
         Map<String, Object> props = new HashMap<String, Object>(1);
         props.put(JAXBContextProperties.OXM_METADATA_SOURCE, metadataDocument);
-        JAXBContext jc = JAXBContextFactory.createContext(new Class[] {Root.class}, props);
+        JAXBContext jc = JAXBContextFactory.createContext(new Class<?>[] {Root.class}, props);
         Unmarshaller unmarshaller = jc.createUnmarshaller();
 
         Root controlRoot = new Root();
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 a8d4759..7131ddc 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
@@ -68,7 +68,7 @@ protected void generateSchema(String contextPath, MySchemaOutputResolver outputR
      * Generate one or more schemas from an array of Classes.
      *
      */
-    protected void generateSchema(Class[] classesToBeBound, MySchemaOutputResolver outputResolver, Map<QName, Type> additionalGlobalElements) throws Exception {
+    protected void generateSchema(Class<?>[] classesToBeBound, MySchemaOutputResolver outputResolver, Map<QName, Type> additionalGlobalElements) throws Exception {
         JAXBContext jaxbContext;
         try {
             jaxbContext = (JAXBContext) JAXBContextFactory.createContext(classesToBeBound, null, loader);
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/schemagen/anonymoustype/inheritance/AnonymousTypeInheritanceTestCases.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/schemagen/anonymoustype/inheritance/AnonymousTypeInheritanceTestCases.java
index 9fcf94b..2763862 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/schemagen/anonymoustype/inheritance/AnonymousTypeInheritanceTestCases.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/schemagen/anonymoustype/inheritance/AnonymousTypeInheritanceTestCases.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,7 @@ public class AnonymousTypeInheritanceTestCases  extends TestCase {
     public void testAnonymousComplexType() throws Exception {
         String CONTROL_XSD = "org/eclipse/persistence/testing/jaxb/schemagen/anonymoustype/inheritance/foo.xsd";
 
-        JAXBContext cxt = JAXBContextFactory.createContext(new Class[]{ObjectFactory.class}, null);
+        JAXBContext cxt = JAXBContextFactory.createContext(new Class<?>[]{ObjectFactory.class}, null);
 
         MySchemaOutputResolver mysr = new MySchemaOutputResolver();
         cxt.generateSchema(mysr);
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 286b16a..dc1c155 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
@@ -66,7 +66,7 @@ private void generateSchema() {
                 fail("Additional global element Map setup failed: " + x.toString());
             }
             try {
-                Class[] classesToBeBound = new Class[]{Employee.class};
+                Class<?>[] classesToBeBound = new Class<?>[]{Employee.class};
                 generateSchema(classesToBeBound, outputResolver, additionalGlobalElements);
             } catch (Exception ex) {
                 fail("Schema generation failed unexpectedly: " + ex.toString());
@@ -128,7 +128,7 @@ public void testSchemaGenFromClassArrayWithIntElement() throws Exception {
      * Test schema generation from multiple entities with different namespaces and verify generated schemas (by order and content).
      */
     public void testSchemaGenFromClassArrayVerifyOrder() throws Exception {
-        final Class[] inputClasses = new Class[]{SecondType.class, WithoutNamespaceType.class, RootElement.class, FourthType.class, ThirdType.class, FirstType.class};
+        final Class<?>[] inputClasses = new Class<?>[]{SecondType.class, WithoutNamespaceType.class, RootElement.class, FourthType.class, ThirdType.class, FirstType.class};
         final String[] xsdResources = new String[]{"schema1.xsd", "schema2.xsd", "schema3.xsd", "schema4.xsd", "schema5.xsd"};
 
         JAXBContext jaxbContext;
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/schemagen/customizedmapping/xmlelementref/SchemaGenXmlElementRefByteArrayTestCases.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/schemagen/customizedmapping/xmlelementref/SchemaGenXmlElementRefByteArrayTestCases.java
index 500f17a..f26f3ad 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/schemagen/customizedmapping/xmlelementref/SchemaGenXmlElementRefByteArrayTestCases.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/schemagen/customizedmapping/xmlelementref/SchemaGenXmlElementRefByteArrayTestCases.java
@@ -50,7 +50,7 @@ private void generateSchema() {
         if (shouldGenerateSchema) {
             outputResolver = new MySchemaOutputResolver();
             try {
-                Class[] classes = new Class[]{ WrappedByteArray.class };
+                Class<?>[] classes = new Class<?>[]{ WrappedByteArray.class };
                 JAXBContext context = (org.eclipse.persistence.jaxb.JAXBContext) org.eclipse.persistence.jaxb.JAXBContextFactory.createContext(classes, null);
                 context.generateSchema(outputResolver);
             } catch (Exception ex) {
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 c8fd5ed..52ad83d 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
@@ -60,7 +60,7 @@ private void generateSchema() {
         if (shouldGenerateSchema) {
             outputResolver = new MySchemaOutputResolver();
             try {
-                Class[] classes = new Class[]{ Employee.class, Address.class, Thing.class };
+                Class<?>[] classes = new Class<?>[]{ Employee.class, Address.class, Thing.class };
                 JAXBContext context = (org.eclipse.persistence.jaxb.JAXBContext) org.eclipse.persistence.jaxb.JAXBContextFactory.createContext(classes, null);
                 context.generateSchema(outputResolver);
             } catch (Exception ex) {
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 b9bfb95..1907b96 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
@@ -52,7 +52,7 @@ public SchemaGenXmlElementWrapperTestCases(String name) throws Exception {
     public void testElementWrapper() {
         MySchemaOutputResolver outputResolver = new MySchemaOutputResolver();
         try {
-            generateSchema(new Class[]{ MyClassThree.class }, outputResolver, null);
+            generateSchema(new Class<?>[]{ MyClassThree.class }, outputResolver, null);
         } catch (Exception ex) {
             fail("Schema generation failed unexpectedly: " + ex.toString());
         }
@@ -70,7 +70,7 @@ public void testElementWrapper() {
     public void testElementWrapperRef() {
         MySchemaOutputResolver outputResolver = new MySchemaOutputResolver();
         try {
-            generateSchema(new Class[]{ MyClassOne.class, MyClassTwo.class }, outputResolver, null);
+            generateSchema(new Class<?>[]{ MyClassOne.class, MyClassTwo.class }, outputResolver, null);
         } catch (Exception ex) {
             fail("Schema generation failed unexpectedly: " + ex.toString());
         }
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 7d2799c..b3d4fff 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
@@ -39,7 +39,7 @@ public void testInvalidXmlID() {
         MySchemaOutputResolver outputResolver = new MySchemaOutputResolver();
         boolean exception = false;
         try {
-            generateSchema(new Class[]{ MyInvalidClass.class }, outputResolver, null);
+            generateSchema(new Class<?>[]{ MyInvalidClass.class }, outputResolver, null);
         } catch (Exception ex) {
             if (ex instanceof JAXBException && ((org.eclipse.persistence.exceptions.JAXBException)((JAXBException) ex).getLinkedException()).getErrorCode() == 50016) {
                 exception = true;
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 477e0e3..754f098 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
@@ -55,7 +55,7 @@ public void testInvalidXmlIDREF() {
         MySchemaOutputResolver outputResolver = new MySchemaOutputResolver();
         boolean exception = false;
         try {
-            generateSchema(new Class[]{ MyInvalidClass.class, MyNonIDClass.class }, outputResolver, null);
+            generateSchema(new Class<?>[]{ MyInvalidClass.class, MyNonIDClass.class }, outputResolver, null);
         } catch (Exception ex) {
             exception = true;
         }
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 7c12452..6156dff 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
@@ -55,7 +55,7 @@ public void testInvalidXmlList() {
         MySchemaOutputResolver outputResolver = new MySchemaOutputResolver();
         boolean exception = false;
         try {
-            generateSchema(new Class[]{ MyInvalidClass.class }, outputResolver, null);
+            generateSchema(new Class<?>[]{ MyInvalidClass.class }, outputResolver, null);
         } catch (Exception ex) {
             exception = true;
         }
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 6997ffd..fb7f454 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
@@ -47,7 +47,7 @@ public void testName001Positive() throws Exception {
         InputStream src = null;
         try {
             src = Thread.currentThread().getContextClassLoader().getResourceAsStream("org/eclipse/persistence/testing/jaxb/schemagen/customizedmapping/xmlrootelement/Name001p.xml");
-            Class[] jClasses = new Class[] { Name001.class };
+            Class<?>[] jClasses = new Class<?>[] { Name001.class };
             Generator gen = new Generator(new JavaModelInputImpl(jClasses, new JavaModelImpl(Thread.currentThread().getContextClassLoader())));
             gen.generateSchemaFiles(tmpdir, null);
             SchemaFactory sFact = SchemaFactory.newInstance(javax.xml.XMLConstants.W3C_XML_SCHEMA_NS_URI);
@@ -74,7 +74,7 @@ public void testName001Negative() throws Exception {
         boolean exception = false;
         String src = "org/eclipse/persistence/testing/jaxb/schemagen/customizedmapping/xmlrootelement/Name001n.xml";
         try {
-            Class[] jClasses = new Class[] { Name001.class };
+            Class<?>[] jClasses = new Class<?>[] { Name001.class };
             Generator gen = new Generator(new JavaModelInputImpl(jClasses, new JavaModelImpl(Thread.currentThread().getContextClassLoader())));
             gen.generateSchemaFiles(tmpdir, null);
             SchemaFactory sFact = SchemaFactory.newInstance(javax.xml.XMLConstants.W3C_XML_SCHEMA_NS_URI);
@@ -94,7 +94,7 @@ public void testName002Positive() throws Exception {
         InputStream src = null;
         try {
             src = Thread.currentThread().getContextClassLoader().getResourceAsStream("org/eclipse/persistence/testing/jaxb/schemagen/customizedmapping/xmlrootelement/Name002p.xml");
-            Class[] jClasses = new Class[] { Name002.class };
+            Class<?>[] jClasses = new Class<?>[] { Name002.class };
             Generator gen = new Generator(new JavaModelInputImpl(jClasses, new JavaModelImpl(Thread.currentThread().getContextClassLoader())));
             gen.generateSchemaFiles(tmpdir, null);
             SchemaFactory sFact = SchemaFactory.newInstance(javax.xml.XMLConstants.W3C_XML_SCHEMA_NS_URI);
@@ -118,7 +118,7 @@ public void testName002Negative() throws Exception {
         String msg = null;
         String src = "org/eclipse/persistence/testing/jaxb/schemagen/customizedmapping/xmlrootelement/Name002n.xml";
         try {
-            Class[] jClasses = new Class[] { Name002.class };
+            Class<?>[] jClasses = new Class<?>[] { Name002.class };
             Generator gen = new Generator(new JavaModelInputImpl(jClasses, new JavaModelImpl(Thread.currentThread().getContextClassLoader())));
             gen.generateSchemaFiles(tmpdir, null);
             SchemaFactory sFact = SchemaFactory.newInstance(javax.xml.XMLConstants.W3C_XML_SCHEMA_NS_URI);
@@ -139,7 +139,7 @@ public void testNamespace001Positive() throws Exception {
         InputStream src = null;
         try {
             src = Thread.currentThread().getContextClassLoader().getResourceAsStream("org/eclipse/persistence/testing/jaxb/schemagen/customizedmapping/xmlrootelement/NameSpace001p.xml");
-            Class[] jClasses = new Class[] { NameSpace001.class };
+            Class<?>[] jClasses = new Class<?>[] { NameSpace001.class };
             Generator gen = new Generator(new JavaModelInputImpl(jClasses, new JavaModelImpl(Thread.currentThread().getContextClassLoader())));
             gen.generateSchemaFiles(tmpdir, null);
             SchemaFactory sFact = SchemaFactory.newInstance(javax.xml.XMLConstants.W3C_XML_SCHEMA_NS_URI);
@@ -163,7 +163,7 @@ public void testNamespace001Negative() throws Exception {
         String msg = null;
         String src = "org/eclipse/persistence/testing/jaxb/schemagen/customizedmapping/xmlrootelement/NameSpace001n.xml";
         try {
-            Class[] jClasses = new Class[] { NameSpace001.class };
+            Class<?>[] jClasses = new Class<?>[] { NameSpace001.class };
             Generator gen = new Generator(new JavaModelInputImpl(jClasses, new JavaModelImpl(Thread.currentThread().getContextClassLoader())));
             gen.generateSchemaFiles(tmpdir, null);
             SchemaFactory sFact = SchemaFactory.newInstance(javax.xml.XMLConstants.W3C_XML_SCHEMA_NS_URI);
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 c523458..8f410e0 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
@@ -52,7 +52,7 @@ public void testBaseType001cPositive() throws Exception {
 
         try {
             src = Thread.currentThread().getContextClassLoader().getResourceAsStream("org/eclipse/persistence/testing/jaxb/schemagen/customizedmapping/xmltype/BaseType001p.xml");
-            Class[] jClasses = new Class[] { BaseType001c.class };
+            Class<?>[] jClasses = new Class<?>[] { BaseType001c.class };
             Generator gen = new Generator(new JavaModelInputImpl(jClasses, new JavaModelImpl(Thread.currentThread().getContextClassLoader())));
             gen.generateSchemaFiles(tmpdir, null);
             SchemaFactory sFact = SchemaFactory.newInstance(javax.xml.XMLConstants.W3C_XML_SCHEMA_NS_URI);
@@ -84,7 +84,7 @@ public void testBaseType001cNegative() throws Exception {
         }
 
         try {
-            Class[] jClasses = new Class[] { BaseType001c.class };
+            Class<?>[] jClasses = new Class<?>[] { BaseType001c.class };
             Generator gen = new Generator(new JavaModelInputImpl(jClasses, new JavaModelImpl(Thread.currentThread().getContextClassLoader())));
             gen.generateSchemaFiles(tmpdir, null);
             SchemaFactory sFact = SchemaFactory.newInstance(javax.xml.XMLConstants.W3C_XML_SCHEMA_NS_URI);
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 30e5179..d548973 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
@@ -37,7 +37,7 @@ public void testInvalidXmlID() {
         MySchemaOutputResolver outputResolver = new MySchemaOutputResolver();
         boolean exception = false;
         try {
-            generateSchema(new Class[]{ MyInvalidClass.class }, outputResolver, null);
+            generateSchema(new Class<?>[]{ MyInvalidClass.class }, outputResolver, null);
         } catch (Exception ex) {
             exception = true;
         }
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 cf79aea..5c60df5 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
@@ -38,7 +38,7 @@ public SchemaGenMapTestCases(String name) throws Exception {
      */
     public void testMapSchemaGeneration() {
 
-        Class[] loadedClasses = {MapTest.class};
+        Class<?>[] loadedClasses = {MapTest.class};
 
         org.eclipse.persistence.jaxb.compiler.Generator generator = new Generator(new JavaModelInputImpl(loadedClasses, new JavaModelImpl(MapTest.class.getClassLoader())));
         MySchemaOutputResolver outputResolver = new MySchemaOutputResolver();
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 ba5afd1..dd9a758 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
@@ -65,7 +65,7 @@ public void testEmployeeSchemaGeneration() throws Exception {
         try {
             employeeXml = Thread.currentThread().getContextClassLoader().getResourceAsStream("org/eclipse/persistence/testing/jaxb/schemagen/employee/employee.xml");
 
-            Class[] jClasses = new Class[] { Address.class, Employee.class, PhoneNumber.class, Department.class, MyTestType.class };
+            Class<?>[] jClasses = new Class<?>[] { Address.class, Employee.class, PhoneNumber.class, Department.class, MyTestType.class };
             Generator gen = new Generator(new JavaModelInputImpl(jClasses, new JavaModelImpl(Thread.currentThread().getContextClassLoader())));
             gen.generateSchemaFiles(tmpdir, null);
             SchemaFactory sFact = SchemaFactory.newInstance(javax.xml.XMLConstants.W3C_XML_SCHEMA_NS_URI);
@@ -123,7 +123,7 @@ public void xtestEmployeeSchemaGenMissingRequiredElement() throws Exception {
         }
 
         try {
-            Class[] jClasses = new Class[] { Address.class, Employee.class, PhoneNumber.class, Department.class };
+            Class<?>[] jClasses = new Class<?>[] { Address.class, Employee.class, PhoneNumber.class, Department.class };
             Generator gen = new Generator(new JavaModelInputImpl(jClasses, new JavaModelImpl(Thread.currentThread().getContextClassLoader())));
             gen.generateSchemaFiles(tmpdir, null);
             SchemaFactory sFact = SchemaFactory.newInstance(javax.xml.XMLConstants.W3C_XML_SCHEMA_NS_URI);
@@ -157,7 +157,7 @@ public void xtestEmployeeSchemaGenMissingRequiredAttribute() throws Exception {
         }
 
         try {
-            Class[] jClasses = new Class[] { Address.class, Employee.class, PhoneNumber.class, Department.class };
+            Class<?>[] jClasses = new Class<?>[] { Address.class, Employee.class, PhoneNumber.class, Department.class };
             Generator gen = new Generator(new JavaModelInputImpl(jClasses, new JavaModelImpl(Thread.currentThread().getContextClassLoader())));
             gen.generateSchemaFiles(tmpdir, null);
             SchemaFactory sFact = SchemaFactory.newInstance(javax.xml.XMLConstants.W3C_XML_SCHEMA_NS_URI);
@@ -187,7 +187,7 @@ public void xtestAbstractSuperclassVaildDoc() throws Exception {
         }
 
         try {
-            Class[] jClasses = new Class[] { MyAbstractTestType.class, MyTestSubType.class };
+            Class<?>[] jClasses = new Class<?>[] { MyAbstractTestType.class, MyTestSubType.class };
             Generator gen = new Generator(new JavaModelInputImpl(jClasses, new JavaModelImpl(Thread.currentThread().getContextClassLoader())));
             gen.generateSchemaFiles(tmpdir, null);
             SchemaFactory sFact = SchemaFactory.newInstance(javax.xml.XMLConstants.W3C_XML_SCHEMA_NS_URI);
@@ -217,7 +217,7 @@ public void xtestAbstractSuperclassInvaildDoc() throws Exception {
         }
 
         try {
-            Class[] jClasses = new Class[] { MyAbstractTestType.class, MyTestSubType.class };
+            Class<?>[] jClasses = new Class<?>[] { MyAbstractTestType.class, MyTestSubType.class };
             Generator gen = new Generator(new JavaModelInputImpl(jClasses, new JavaModelImpl(Thread.currentThread().getContextClassLoader())));
             gen.generateSchemaFiles(tmpdir, null);
             SchemaFactory sFact = SchemaFactory.newInstance(javax.xml.XMLConstants.W3C_XML_SCHEMA_NS_URI);
@@ -244,7 +244,7 @@ public void xtestAbstractSuperclassMarshal() throws Exception {
         testObj.subTypeInt = 66;
 
         try {
-            Class[] jClasses = new Class[] { MyAbstractTestType.class, MyTestSubType.class };
+            Class<?>[] jClasses = new Class<?>[] { MyAbstractTestType.class, MyTestSubType.class };
             JAXBContext jCtx = (JAXBContext) JAXBContextFactory.createContext(jClasses, null);
             Marshaller marshaller = jCtx.createMarshaller();
             FileWriter fw = new FileWriter(new File(tmpdir, src));
@@ -268,7 +268,7 @@ public void xtestAbstractSuperclassUnmarshal() throws Exception {
         Object obj = null;
 
         try {
-            Class[] jClasses = new Class[] { MyAbstractTestType.class, MyTestSubType.class };
+            Class<?>[] jClasses = new Class<?>[] { MyAbstractTestType.class, MyTestSubType.class };
             JAXBContext jCtx = (JAXBContext) JAXBContextFactory.createContext(jClasses, null);
             Unmarshaller unmarshaller = jCtx.createUnmarshaller();
             obj = unmarshaller.unmarshal(new File(src));
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/schemagen/imports/SchemaGenImportTestCases.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/schemagen/imports/SchemaGenImportTestCases.java
index 8bd9df0..acb3232 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/schemagen/imports/SchemaGenImportTestCases.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/schemagen/imports/SchemaGenImportTestCases.java
@@ -66,7 +66,7 @@ public SchemaGenImportTestCases(String name) throws Exception {
     }
 
     public void testSchemaGenerationWithImport() {
-        Class[] jClasses = new Class[] { Address.class, Employee.class};
+        Class<?>[] jClasses = new Class<?>[] { Address.class, Employee.class};
 
         Generator gen = new Generator(new JavaModelInputImpl(jClasses, new JavaModelImpl(Thread.currentThread().getContextClassLoader())));
         File outDir = setOutDir();
@@ -146,7 +146,7 @@ public Result createOutput(String namespaceURI, String suggestedFileName) throws
     public void testRelativeSchemaLocationWithNoSlash() {
         File outDir = setOutDir();
         try {
-            Class[] jClasses = new Class[] { Address.class, Employee.class};
+            Class<?>[] jClasses = new Class<?>[] { Address.class, Employee.class};
             Generator gen = new Generator(new JavaModelInputImpl(jClasses, new JavaModelImpl(Thread.currentThread().getContextClassLoader())));
             gen.generateSchemaFiles(outDir.getAbsolutePath(), null);
         } catch (Exception x) {
@@ -156,7 +156,7 @@ public void testRelativeSchemaLocationWithNoSlash() {
     }
 
     public void testRelativeSchemaLocation() throws Exception {
-        JAXBContext jctx = JAXBContextFactory.createContext(new Class[] { Foo.class, Bar.class}, null );
+        JAXBContext jctx = JAXBContextFactory.createContext(new Class<?>[] { Foo.class, Bar.class}, null );
         File outDir = setOutDir();
         MyStreamSchemaOutputResolver resolver = new MyStreamSchemaOutputResolver(outDir);
         jctx.generateSchema(resolver);
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/schemagen/imports/inheritance/InheritanceImportsTestCases.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/schemagen/imports/inheritance/InheritanceImportsTestCases.java
index f5171a4..156793d 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/schemagen/imports/inheritance/InheritanceImportsTestCases.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/schemagen/imports/inheritance/InheritanceImportsTestCases.java
@@ -32,7 +32,7 @@ public class InheritanceImportsTestCases extends JAXBWithJSONTestCases{
 
     public InheritanceImportsTestCases(String name) throws Exception {
         super(name);
-        setClasses(new Class[]{Child.class});
+        setClasses(new Class<?>[]{Child.class});
         setControlDocument(XML_RESOURCE);
         setControlJSON(JSON_RESOURCE);
 
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/schemagen/imports/url/SchemaGenImportURLTestCases.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/schemagen/imports/url/SchemaGenImportURLTestCases.java
index ff4c979..d0f9f8b 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/schemagen/imports/url/SchemaGenImportURLTestCases.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/schemagen/imports/url/SchemaGenImportURLTestCases.java
@@ -47,7 +47,7 @@ public String getName() {
     }
 
     public void testSchemaGen() throws Exception {
-        JAXBContext jaxbContext = JAXBContextFactory.createContext(new Class[]{Employee.class}, null);
+        JAXBContext jaxbContext = JAXBContextFactory.createContext(new Class<?>[]{Employee.class}, null);
         StringOutputResolver sor = new StringOutputResolver();
         jaxbContext.generateSchema(sor);
 
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/schemagen/scope/SchemaGenScopeTestCases.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/schemagen/scope/SchemaGenScopeTestCases.java
index 7fabce1..1570831 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/schemagen/scope/SchemaGenScopeTestCases.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/schemagen/scope/SchemaGenScopeTestCases.java
@@ -32,7 +32,7 @@ public SchemaGenScopeTestCases(String name) throws Exception {
     public void init() throws Exception {
         setControlDocument(XML_RESOURCE);
         setControlJSON(JSON_RESOURCE);
-        Class[] classes = new Class[2];
+        Class<?>[] classes = new Class<?>[2];
         classes[0] = ClassA.class;
         classes[1] = ObjectFactory.class;
         setClasses(classes);
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/schemagen/xmlpath/SchemaGenXmlPathTestCases.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/schemagen/xmlpath/SchemaGenXmlPathTestCases.java
index 02bc1f9..0c52774 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/schemagen/xmlpath/SchemaGenXmlPathTestCases.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/schemagen/xmlpath/SchemaGenXmlPathTestCases.java
@@ -30,7 +30,7 @@ public SchemaGenXmlPathTestCases(String name) throws Exception {
 
     public void init() throws Exception {
         setControlDocument(XML_RESOURCE);
-        setClasses(new Class[] { MyClass.class, Phone.class, Address.class, CanadianAddress.class });
+        setClasses(new Class<?>[] { MyClass.class, Phone.class, Address.class, CanadianAddress.class });
     }
 
     public  List<InputStream> getControlSchemaFiles(){
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/simpledocument/SimpleDocumentByteArrayTestCases.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/simpledocument/SimpleDocumentByteArrayTestCases.java
index 3acd495..c0ae315 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/simpledocument/SimpleDocumentByteArrayTestCases.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/simpledocument/SimpleDocumentByteArrayTestCases.java
@@ -31,7 +31,7 @@ public SimpleDocumentByteArrayTestCases(String name) throws Exception {
             super(name);
             setControlDocument(XML_RESOURCE);
             setControlJSON(JSON_RESOURCE);
-            Class[] classes = new Class[1];
+            Class<?>[] classes = new Class<?>[1];
             classes[0] = ByteArrayObjectFactory.class;
             setClasses(classes);
         }
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/simpledocument/SimpleDocumentDateTestCases.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/simpledocument/SimpleDocumentDateTestCases.java
index 0678e8e..30facb4 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/simpledocument/SimpleDocumentDateTestCases.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/simpledocument/SimpleDocumentDateTestCases.java
@@ -33,7 +33,7 @@ public class SimpleDocumentDateTestCases extends JAXBWithJSONTestCases {
 
         public SimpleDocumentDateTestCases(String name) throws Exception {
             super(name);
-            Class[] classes = new Class[1];
+            Class<?>[] classes = new Class<?>[1];
             classes[0] = DateObjectFactory.class;
             setClasses(classes);
         }
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/simpledocument/SimpleDocumentIntegerTestCases.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/simpledocument/SimpleDocumentIntegerTestCases.java
index c8d2b40..c6294cf 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/simpledocument/SimpleDocumentIntegerTestCases.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/simpledocument/SimpleDocumentIntegerTestCases.java
@@ -35,7 +35,7 @@ public SimpleDocumentIntegerTestCases(String name) throws Exception {
             super(name);
             setControlDocument(XML_RESOURCE);
             setControlJSON(JSON_RESOURCE);
-            Class[] classes = new Class[1];
+            Class<?>[] classes = new Class<?>[1];
             classes[0] = IntegerObjectFactory.class;
             setClasses(classes);
         }
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/simpledocument/SimpleDocumentStringTestCases.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/simpledocument/SimpleDocumentStringTestCases.java
index 3421dd2..72d1c61 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/simpledocument/SimpleDocumentStringTestCases.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/simpledocument/SimpleDocumentStringTestCases.java
@@ -35,7 +35,7 @@ public SimpleDocumentStringTestCases(String name) throws Exception {
             super(name);
             setControlDocument(XML_RESOURCE);
             setControlJSON(JSON_RESOURCE);
-            Class[] classes = new Class[1];
+            Class<?>[] classes = new Class<?>[1];
             classes[0] = StringObjectFactory.class;
             setClasses(classes);
         }
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/simpledocument/SimpleDocumentWhitespaceNullTestCases.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/simpledocument/SimpleDocumentWhitespaceNullTestCases.java
index a05fdc9..3b9fc90 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/simpledocument/SimpleDocumentWhitespaceNullTestCases.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/simpledocument/SimpleDocumentWhitespaceNullTestCases.java
@@ -42,7 +42,7 @@ public SimpleDocumentWhitespaceNullTestCases(String name) throws Exception {
         super(name);
         setControlDocument(ELEMENT_WITH_VALUE);
         setControlJSON(JSON_ELEMENT_WITH_VALUE);
-        Class[] classes = new Class[1];
+        Class<?>[] classes = new Class<?>[1];
         classes[0] = Root.class;
         setClasses(classes);
     }
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/simpledocument/StringEmptyElementTestCases.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/simpledocument/StringEmptyElementTestCases.java
index 698739c..0040ab4 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/simpledocument/StringEmptyElementTestCases.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/simpledocument/StringEmptyElementTestCases.java
@@ -26,7 +26,7 @@ public StringEmptyElementTestCases(String name) throws Exception {
         super(name);
         setControlDocument(XML_RESOURCE);
         setControlJSON(JSON_RESOURCE);
-        Class[] classes = new Class[1];
+        Class<?>[] classes = new Class<?>[1];
         classes[0] = StringObjectFactory.class;
         setClasses(classes);
     }
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/simpledocument/StringNilTestCases.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/simpledocument/StringNilTestCases.java
index 92b883a..7297788 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/simpledocument/StringNilTestCases.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/simpledocument/StringNilTestCases.java
@@ -31,7 +31,7 @@ public StringNilTestCases(String name) throws Exception {
         setControlDocument(XML_RESOURCE);
         setControlJSON(JSON_RESOURCE);
 
-        Class[] classes = new Class[1];
+        Class<?>[] classes = new Class<?>[1];
         classes[0] = StringObjectFactory.class;
         setClasses(classes);
     }
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/singleobject/JAXBSingleObjectIntegerNoXsiTestCases.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/singleobject/JAXBSingleObjectIntegerNoXsiTestCases.java
index 2f13551..b956659 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/singleobject/JAXBSingleObjectIntegerNoXsiTestCases.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/singleobject/JAXBSingleObjectIntegerNoXsiTestCases.java
@@ -50,7 +50,7 @@ public void init() throws Exception {
         setControlDocument(XML_RESOURCE);
         setWriteControlDocument(XML_RESOURCE_WRITE);
         setControlJSON(JSON_RESOURCE);
-        Class[] classes = new Class[1];
+        Class<?>[] classes = new Class<?>[1];
         classes[0] = Object.class;
         setClasses(classes);
         Map namespaces = new HashMap();
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/singleobject/JAXBSingleObjectIntegerXsiTestCases.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/singleobject/JAXBSingleObjectIntegerXsiTestCases.java
index 45f1113..1b5e676 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/singleobject/JAXBSingleObjectIntegerXsiTestCases.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/singleobject/JAXBSingleObjectIntegerXsiTestCases.java
@@ -45,7 +45,7 @@ public void init() throws Exception {
         setControlDocument(XML_RESOURCE);
         setControlJSON(JSON_RESOURCE);
 
-        Class[] classes = new Class[1];
+        Class<?>[] classes = new Class<?>[1];
         classes[0] = Object.class;
         setClasses(classes);
 
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/singleobject/JAXBSingleObjectObjectNoXsiTestCases.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/singleobject/JAXBSingleObjectObjectNoXsiTestCases.java
index 454502e..617fb0f 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/singleobject/JAXBSingleObjectObjectNoXsiTestCases.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/singleobject/JAXBSingleObjectObjectNoXsiTestCases.java
@@ -47,7 +47,7 @@ public JAXBSingleObjectObjectNoXsiTestCases(String name) throws Exception {
     public void init() throws Exception {
         setControlDocument(XML_RESOURCE);
         setControlJSON(JSON_RESOURCE);
-        Class[] classes = new Class[1];
+        Class<?>[] classes = new Class<?>[1];
         classes[0] = Object.class;
         setClasses(classes);
     }
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/singleobject/JAXBSingleObjectObjectXsiTestCases.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/singleobject/JAXBSingleObjectObjectXsiTestCases.java
index 0049eb8..57a9855 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/singleobject/JAXBSingleObjectObjectXsiTestCases.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/singleobject/JAXBSingleObjectObjectXsiTestCases.java
@@ -37,7 +37,7 @@ public JAXBSingleObjectObjectXsiTestCases(String name) throws Exception {
     public void init() throws Exception {
         setControlDocument(XML_RESOURCE);
         setControlJSON(JSON_RESOURCE);
-        Class[] classes = new Class[1];
+        Class<?>[] classes = new Class<?>[1];
         classes[0] = Object.class;
         setClasses(classes);
         initXsiType();
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/singleobject/JAXBSingleObjectStringNoXsiTestCases.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/singleobject/JAXBSingleObjectStringNoXsiTestCases.java
index 9b73114..8de9e3c 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/singleobject/JAXBSingleObjectStringNoXsiTestCases.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/singleobject/JAXBSingleObjectStringNoXsiTestCases.java
@@ -48,7 +48,7 @@ public void init() throws Exception {
         setControlDocument(XML_RESOURCE);
         setControlDocument(XML_RESOURCE_WRITE);
         setControlJSON(JSON_RESOURCE);
-        Class[] classes = new Class[1];
+        Class<?>[] classes = new Class<?>[1];
         classes[0] = Object.class;
         setClasses(classes);
     }
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/singleobject/JAXBSingleObjectStringXsiTestCases.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/singleobject/JAXBSingleObjectStringXsiTestCases.java
index 216c954..0dca7e0 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/singleobject/JAXBSingleObjectStringXsiTestCases.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/singleobject/JAXBSingleObjectStringXsiTestCases.java
@@ -55,7 +55,7 @@ public JAXBSingleObjectStringXsiTestCases(String name) throws Exception {
     public void init() throws Exception {
         setControlDocument(XML_RESOURCE);
         setControlJSON(JSON_RESOURCE);
-        Class[] classes = new Class[1];
+        Class<?>[] classes = new Class<?>[1];
         classes[0] = Object.class;
         setClasses(classes);
         initXsiType();
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/stax/XMLStreamReaderEndEventTestCases.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/stax/XMLStreamReaderEndEventTestCases.java
index 2127fed..a2cd46b 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/stax/XMLStreamReaderEndEventTestCases.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/stax/XMLStreamReaderEndEventTestCases.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
@@ -35,7 +35,7 @@ public class XMLStreamReaderEndEventTestCases extends TestCase {
 
     @Override
     protected void setUp() throws Exception {
-        JAXBContext jc = JAXBContextFactory.createContext(new Class[] {EndEventRoot.class}, null);
+        JAXBContext jc = JAXBContextFactory.createContext(new Class<?>[] {EndEventRoot.class}, null);
         unmarshaller = jc.createUnmarshaller();
 
         XMLInputFactory xif = XMLInputFactory.newFactory();
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/stax/XMLStreamWriterDefaultNamespaceTestCases.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/stax/XMLStreamWriterDefaultNamespaceTestCases.java
index 690f2a9..ac6f28c 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/stax/XMLStreamWriterDefaultNamespaceTestCases.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/stax/XMLStreamWriterDefaultNamespaceTestCases.java
@@ -41,7 +41,7 @@ public XMLStreamWriterDefaultNamespaceTestCases(String name) {
     }
 
     public void testDefaultNamespaceOverride() throws Exception {
-        JAXBContext ctx = JAXBContextFactory.createContext(new Class[] { Employee.class }, null);
+        JAXBContext ctx = JAXBContextFactory.createContext(new Class<?>[] { Employee.class }, null);
         StringWriter writer = new StringWriter();
         XMLStreamWriter streamWriter = XMLOutputFactory.newInstance().createXMLStreamWriter(writer);
         streamWriter.writeStartElement("", "root", "someNamespace");
@@ -68,7 +68,7 @@ public void testDefaultNamespaceOverride() throws Exception {
     public void testDuplicateDefaultNamespace() throws Exception {
         String testXmlData = "<child xmlns=\"someDefaultNameSpace\" xmlns:bi=\"definedBINameSpace\" xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\">Test</child>";
         EmployeeLax employeeLax = createEmployeeLax(testXmlData);
-        JAXBContext ctx = JAXBContextFactory.createContext(new Class[]{EmployeeLax.class}, null);
+        JAXBContext ctx = JAXBContextFactory.createContext(new Class<?>[]{EmployeeLax.class}, null);
 
         StringWriter writer = new StringWriter();
         XMLOutputFactory factory = XMLOutputFactory.newInstance();
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/substitution/SubstitutionBindingsTestCases.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/substitution/SubstitutionBindingsTestCases.java
index d9fde26..ec98dcf 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/substitution/SubstitutionBindingsTestCases.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/substitution/SubstitutionBindingsTestCases.java
@@ -33,7 +33,7 @@ public class SubstitutionBindingsTestCases extends JAXBWithJSONTestCases {
 
     public SubstitutionBindingsTestCases(String name) throws Exception {
         super(name);
-        Class[] classes = new Class[2];
+        Class<?>[] classes = new Class<?>[2];
         classes[0] = Person2.class;
         classes[1] = ObjectFactory2.class;
         setClasses(classes);
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/substitution/SubstitutionEnglishTestCases.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/substitution/SubstitutionEnglishTestCases.java
index e39071b..3c2796e 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/substitution/SubstitutionEnglishTestCases.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/substitution/SubstitutionEnglishTestCases.java
@@ -26,7 +26,7 @@ public class SubstitutionEnglishTestCases extends JAXBWithJSONTestCases{
 
     public SubstitutionEnglishTestCases(String name) throws Exception {
         super(name);
-        Class[] classes = new Class[2];
+        Class<?>[] classes = new Class<?>[2];
         classes[0] = ObjectFactory.class;
         classes[1] = Person.class;
         setClasses(classes);
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/substitution/SubstitutionFrenchTestCases.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/substitution/SubstitutionFrenchTestCases.java
index af73820..097dea3 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/substitution/SubstitutionFrenchTestCases.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/substitution/SubstitutionFrenchTestCases.java
@@ -26,7 +26,7 @@ public class SubstitutionFrenchTestCases extends JAXBWithJSONTestCases {
 
     public SubstitutionFrenchTestCases(String name) throws Exception {
         super(name);
-        Class[] classes = new Class[2];
+        Class<?>[] classes = new Class<?>[2];
         classes[0] = ObjectFactory.class;
         classes[1] = Person.class;
         setClasses(classes);
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/substitution/SubstitutionTestCases.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/substitution/SubstitutionTestCases.java
index 0f6cc99..6989fee 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/substitution/SubstitutionTestCases.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/substitution/SubstitutionTestCases.java
@@ -27,7 +27,7 @@ public class SubstitutionTestCases extends JAXBWithJSONTestCases{
 
     public SubstitutionTestCases(String name) throws Exception {
         super(name);
-        Class[] classes = new Class[3];
+        Class<?>[] classes = new Class<?>[3];
         classes[0] = ObjectFactory.class;
         classes[1] = Person.class;
         classes[2] = Order.class;
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/sun/idresolver/NonELIDResolverTestCases.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/sun/idresolver/NonELIDResolverTestCases.java
index b9e5fd5..d41320a 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/sun/idresolver/NonELIDResolverTestCases.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/sun/idresolver/NonELIDResolverTestCases.java
@@ -24,7 +24,7 @@ public class NonELIDResolverTestCases extends JAXBTestCases {
 
     public NonELIDResolverTestCases(String name) throws Exception {
         super(name);
-        setClasses(new Class[] { Melon.class, MelonRef.class, Box.class, FruitOrder.class });
+        setClasses(new Class<?>[] { Melon.class, MelonRef.class, Box.class, FruitOrder.class });
         setControlDocument(XML_RESOURCE);
     }
 
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/sun/idresolver/collection/NonELIDResolverTestCases.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/sun/idresolver/collection/NonELIDResolverTestCases.java
index 9d364df..ef43223 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/sun/idresolver/collection/NonELIDResolverTestCases.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/sun/idresolver/collection/NonELIDResolverTestCases.java
@@ -26,7 +26,7 @@ public class NonELIDResolverTestCases extends JAXBTestCases {
 
     public NonELIDResolverTestCases(String name) throws Exception {
         super(name);
-        setClasses(new Class[] { Root.class, TestObject.class });
+        setClasses(new Class<?>[] { Root.class, TestObject.class });
         setControlDocument(XML_RESOURCE);
     }
 
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/sun/prefixmapper/NonELPrefixMapperTestCases.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/sun/prefixmapper/NonELPrefixMapperTestCases.java
index 2e9a929..28462bd 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/sun/prefixmapper/NonELPrefixMapperTestCases.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/sun/prefixmapper/NonELPrefixMapperTestCases.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
@@ -25,7 +25,7 @@ public class NonELPrefixMapperTestCases extends JAXBWithJSONTestCases {
 
     public NonELPrefixMapperTestCases(String name) throws Exception {
         super(name);
-        setClasses(new Class[]{Employee.class, Person.class});
+        setClasses(new Class<?>[]{Employee.class, Person.class});
         jaxbMarshaller.setProperty("org.glassfish.jaxb.namespacePrefixMapper", new NonELPrefixMapperImpl());
         jaxbUnmarshaller.setProperty(UnmarshallerProperties.JSON_NAMESPACE_PREFIX_MAPPER, new NamespacePrefixMapperWrapper(new NonELPrefixMapperImpl()));
         setControlDocument(XML_RESOURCE);
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/sun/xmllocation/XmlLocationErrorTestCases.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/sun/xmllocation/XmlLocationErrorTestCases.java
index f6e09ce..2d035e0 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/sun/xmllocation/XmlLocationErrorTestCases.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/sun/xmllocation/XmlLocationErrorTestCases.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
@@ -26,7 +26,7 @@ public class XmlLocationErrorTestCases extends TestCase {
     public void testInvalidXmlLocationType() {
         Exception caughtEx = null;
         try {
-            JAXBContext c = JAXBContextFactory.createContext(new Class[] { DataError.class }, null);
+            JAXBContext c = JAXBContextFactory.createContext(new Class<?>[] { DataError.class }, null);
         } catch (Exception e) {
             caughtEx = e;
         }
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/sun/xmllocation/XmlLocationNonTransientTestCases.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/sun/xmllocation/XmlLocationNonTransientTestCases.java
index 9b649c1..bf4c827 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/sun/xmllocation/XmlLocationNonTransientTestCases.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/sun/xmllocation/XmlLocationNonTransientTestCases.java
@@ -25,7 +25,7 @@ public class XmlLocationNonTransientTestCases extends JAXBTestCases {
 
     public XmlLocationNonTransientTestCases(String name) throws Exception {
         super(name);
-        setClasses(new Class[]{ DataNT.class, SubDataNT.class, DetailDataNT.class, LeafDataNT.class });
+        setClasses(new Class<?>[]{ DataNT.class, SubDataNT.class, DetailDataNT.class, LeafDataNT.class });
         setControlDocument(XML_RESOURCE);
     }
 
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/sun/xmllocation/XmlLocationSchemaGenTests.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/sun/xmllocation/XmlLocationSchemaGenTests.java
index d9170ad..44a9a5e 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/sun/xmllocation/XmlLocationSchemaGenTests.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/sun/xmllocation/XmlLocationSchemaGenTests.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
@@ -48,7 +48,7 @@ public XmlLocationSchemaGenTests(String name) {
     }
 
     public void testSchemaGen() throws Exception {
-        JAXBContext ctx = JAXBContextFactory.createContext(new Class[]{ Data.class, SubData.class, DetailData.class, LeafData.class }, null);
+        JAXBContext ctx = JAXBContextFactory.createContext(new Class<?>[]{ Data.class, SubData.class, DetailData.class, LeafData.class }, null);
         StringOutputResolver sor = new StringOutputResolver();
         ctx.generateSchema(sor);
 
@@ -78,7 +78,7 @@ public void testSchemaGen() throws Exception {
     }
 
     public void testSchemaGenNonTransient() throws Exception {
-        JAXBContext ctx = JAXBContextFactory.createContext(new Class[]{ DataNT.class, SubDataNT.class, DetailDataNT.class, LeafDataNT.class }, null);
+        JAXBContext ctx = JAXBContextFactory.createContext(new Class<?>[]{ DataNT.class, SubDataNT.class, DetailDataNT.class, LeafDataNT.class }, null);
         StringOutputResolver sor = new StringOutputResolver();
         ctx.generateSchema(sor);
 
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/sun/xmllocation/XmlLocationTestCases.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/sun/xmllocation/XmlLocationTestCases.java
index 98763c8..beb2847 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/sun/xmllocation/XmlLocationTestCases.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/sun/xmllocation/XmlLocationTestCases.java
@@ -27,7 +27,7 @@ public class XmlLocationTestCases extends JAXBTestCases {
 
     public XmlLocationTestCases(String name) throws Exception {
         super(name);
-        setClasses(new Class[]{ Data.class, SubData.class, DetailData.class, LeafData.class });
+        setClasses(new Class<?>[]{ Data.class, SubData.class, DetailData.class, LeafData.class });
         setControlDocument(XML_RESOURCE);
     }
 
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/typevariable/ExtendedList10TestCases.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/typevariable/ExtendedList10TestCases.java
index 01336b8..23703ab 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/typevariable/ExtendedList10TestCases.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/typevariable/ExtendedList10TestCases.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
@@ -25,7 +25,7 @@ public ExtendedList10TestCases(String name) throws Exception {
         super(name);
         setControlDocument(XML);
         setControlJSON(JSON);
-        setClasses(new Class[] {ExtendedList10Root.class});
+        setClasses(new Class<?>[] {ExtendedList10Root.class});
     }
 
     @Override
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/typevariable/ExtendedList1TestCases.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/typevariable/ExtendedList1TestCases.java
index 41519f0..d04accb 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/typevariable/ExtendedList1TestCases.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/typevariable/ExtendedList1TestCases.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
@@ -25,7 +25,7 @@ public ExtendedList1TestCases(String name) throws Exception {
         super(name);
         setControlDocument(XML);
         setControlJSON(JSON);
-        setClasses(new Class[] {ExtendedList1Root.class});
+        setClasses(new Class<?>[] {ExtendedList1Root.class});
     }
 
     @Override
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/typevariable/ExtendedList2TestCases.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/typevariable/ExtendedList2TestCases.java
index 664d15c..f95c82d 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/typevariable/ExtendedList2TestCases.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/typevariable/ExtendedList2TestCases.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
@@ -25,7 +25,7 @@ public ExtendedList2TestCases(String name) throws Exception {
         super(name);
         setControlDocument(XML);
         setControlJSON(JSON);
-        setClasses(new Class[] {ExtendedList2Root.class});
+        setClasses(new Class<?>[] {ExtendedList2Root.class});
     }
 
     @Override
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/typevariable/ExtendedList3TestCases.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/typevariable/ExtendedList3TestCases.java
index cc106f2..4c65575 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/typevariable/ExtendedList3TestCases.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/typevariable/ExtendedList3TestCases.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
@@ -25,7 +25,7 @@ public ExtendedList3TestCases(String name) throws Exception {
         super(name);
         setControlDocument(XML);
         setControlJSON(JSON);
-        setClasses(new Class[] {ExtendedList3Root.class});
+        setClasses(new Class<?>[] {ExtendedList3Root.class});
     }
 
     @Override
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/typevariable/ExtendedList4TestCases.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/typevariable/ExtendedList4TestCases.java
index 431e372..b54abaa 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/typevariable/ExtendedList4TestCases.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/typevariable/ExtendedList4TestCases.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
@@ -25,7 +25,7 @@ public ExtendedList4TestCases(String name) throws Exception {
         super(name);
         setControlDocument(XML);
         setControlJSON(JSON);
-        setClasses(new Class[] {ExtendedList4Root.class});
+        setClasses(new Class<?>[] {ExtendedList4Root.class});
     }
 
     @Override
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/typevariable/ExtendedList5TestCases.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/typevariable/ExtendedList5TestCases.java
index d005b4a..60cf769 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/typevariable/ExtendedList5TestCases.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/typevariable/ExtendedList5TestCases.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
@@ -25,7 +25,7 @@ public ExtendedList5TestCases(String name) throws Exception {
         super(name);
         setControlDocument(XML);
         setControlJSON(JSON);
-        setClasses(new Class[] {ExtendedList5Root.class});
+        setClasses(new Class<?>[] {ExtendedList5Root.class});
     }
 
     @Override
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/typevariable/ExtendedList6TestCases.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/typevariable/ExtendedList6TestCases.java
index a0b37f4..dd158e2 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/typevariable/ExtendedList6TestCases.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/typevariable/ExtendedList6TestCases.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
@@ -25,7 +25,7 @@ public ExtendedList6TestCases(String name) throws Exception {
         super(name);
         setControlDocument(XML);
         setControlJSON(JSON);
-        setClasses(new Class[] {ExtendedList6Root.class});
+        setClasses(new Class<?>[] {ExtendedList6Root.class});
     }
 
     @Override
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/typevariable/ExtendedList7TestCases.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/typevariable/ExtendedList7TestCases.java
index 6dfd6e9..5403c1f 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/typevariable/ExtendedList7TestCases.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/typevariable/ExtendedList7TestCases.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
@@ -25,7 +25,7 @@ public ExtendedList7TestCases(String name) throws Exception {
         super(name);
         setControlDocument(XML);
         setControlJSON(JSON);
-        setClasses(new Class[] {ExtendedList7Root.class});
+        setClasses(new Class<?>[] {ExtendedList7Root.class});
     }
 
     @Override
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/typevariable/ExtendedList8ChildTestCases.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/typevariable/ExtendedList8ChildTestCases.java
index 28ff879..412ac24 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/typevariable/ExtendedList8ChildTestCases.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/typevariable/ExtendedList8ChildTestCases.java
@@ -28,7 +28,7 @@ public ExtendedList8ChildTestCases(String name) throws Exception {
         super(name);
         setControlDocument(XML);
         setControlJSON(JSON);
-        setClasses(new Class[] {ExtendedList8ChildRoot.class});
+        setClasses(new Class<?>[] {ExtendedList8ChildRoot.class});
     }
 
     @Override
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/typevariable/ExtendedList8TestCases.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/typevariable/ExtendedList8TestCases.java
index 6db97e5..8db790d 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/typevariable/ExtendedList8TestCases.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/typevariable/ExtendedList8TestCases.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
@@ -25,7 +25,7 @@ public ExtendedList8TestCases(String name) throws Exception {
         super(name);
         setControlDocument(XML);
         setControlJSON(JSON);
-        setClasses(new Class[] {ExtendedList8Root.class});
+        setClasses(new Class<?>[] {ExtendedList8Root.class});
     }
 
     @Override
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/typevariable/ExtendedList9TestCases.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/typevariable/ExtendedList9TestCases.java
index 541d8b3..4307006 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/typevariable/ExtendedList9TestCases.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/typevariable/ExtendedList9TestCases.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
@@ -25,7 +25,7 @@ public ExtendedList9TestCases(String name) throws Exception {
         super(name);
         setControlDocument(XML);
         setControlJSON(JSON);
-        setClasses(new Class[] {ExtendedList9Root.class});
+        setClasses(new Class<?>[] {ExtendedList9Root.class});
     }
 
     @Override
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/typevariable/ExtendedMap1TestCases.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/typevariable/ExtendedMap1TestCases.java
index 6cb9150..7fb56c8 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/typevariable/ExtendedMap1TestCases.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/typevariable/ExtendedMap1TestCases.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
@@ -25,7 +25,7 @@ public ExtendedMap1TestCases(String name) throws Exception {
         super(name);
         setControlDocument(XML);
         setControlJSON(JSON);
-        setClasses(new Class[] {ExtendedMap1Root.class});
+        setClasses(new Class<?>[] {ExtendedMap1Root.class});
     }
 
     @Override
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/typevariable/ExtendedMap2TestCases.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/typevariable/ExtendedMap2TestCases.java
index 5cc5e6d..c2709c4 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/typevariable/ExtendedMap2TestCases.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/typevariable/ExtendedMap2TestCases.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
@@ -25,7 +25,7 @@ public ExtendedMap2TestCases(String name) throws Exception {
         super(name);
         setControlDocument(XML);
         setControlJSON(JSON);
-        setClasses(new Class[] {ExtendedMap2Root.class});
+        setClasses(new Class<?>[] {ExtendedMap2Root.class});
     }
 
     @Override
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/typevariable/ExtendedMap3TestCases.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/typevariable/ExtendedMap3TestCases.java
index cf2772d..cc13f15 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/typevariable/ExtendedMap3TestCases.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/typevariable/ExtendedMap3TestCases.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
@@ -25,7 +25,7 @@ public ExtendedMap3TestCases(String name) throws Exception {
         super(name);
         setControlDocument(XML);
         setControlJSON(JSON);
-        setClasses(new Class[] {ExtendedMap3Root.class});
+        setClasses(new Class<?>[] {ExtendedMap3Root.class});
     }
 
     @Override
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/typevariable/ExtendedMap4TestCases.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/typevariable/ExtendedMap4TestCases.java
index cf8da60..3535512 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/typevariable/ExtendedMap4TestCases.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/typevariable/ExtendedMap4TestCases.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
@@ -25,7 +25,7 @@ public ExtendedMap4TestCases(String name) throws Exception {
         super(name);
         setControlDocument(XML);
         setControlJSON(JSON);
-        setClasses(new Class[] {ExtendedMap4Root.class});
+        setClasses(new Class<?>[] {ExtendedMap4Root.class});
     }
 
     @Override
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/typevariable/ExtendedMap5TestCases.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/typevariable/ExtendedMap5TestCases.java
index 543ec8d..dbc1929 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/typevariable/ExtendedMap5TestCases.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/typevariable/ExtendedMap5TestCases.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
@@ -25,7 +25,7 @@ public ExtendedMap5TestCases(String name) throws Exception {
         super(name);
         setControlDocument(XML);
         setControlJSON(JSON);
-        setClasses(new Class[] {ExtendedMap5Root.class});
+        setClasses(new Class<?>[] {ExtendedMap5Root.class});
     }
 
     @Override
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/typevariable/ExtendedMap6TestCases.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/typevariable/ExtendedMap6TestCases.java
index 7c90b8d..61432fa 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/typevariable/ExtendedMap6TestCases.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/typevariable/ExtendedMap6TestCases.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
@@ -25,7 +25,7 @@ public ExtendedMap6TestCases(String name) throws Exception {
         super(name);
         setControlDocument(XML);
         setControlJSON(JSON);
-        setClasses(new Class[] {ExtendedMap6Root.class});
+        setClasses(new Class<?>[] {ExtendedMap6Root.class});
     }
 
     @Override
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/typevariable/ExtendedMap7TestCases.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/typevariable/ExtendedMap7TestCases.java
index 4943ff5..944cb88 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/typevariable/ExtendedMap7TestCases.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/typevariable/ExtendedMap7TestCases.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
@@ -25,7 +25,7 @@ public ExtendedMap7TestCases(String name) throws Exception {
         super(name);
         setControlDocument(XML);
         setControlJSON(JSON);
-        setClasses(new Class[] {ExtendedMap7Root.class});
+        setClasses(new Class<?>[] {ExtendedMap7Root.class});
     }
 
     @Override
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/typevariable/PropertyTestCases.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/typevariable/PropertyTestCases.java
index 351acd8..d0a9cc3 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/typevariable/PropertyTestCases.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/typevariable/PropertyTestCases.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
@@ -25,7 +25,7 @@ public PropertyTestCases(String name) throws Exception {
         super(name);
         setControlDocument(XML);
         setControlJSON(JSON);
-        setClasses(new Class[] {PropertyRoot.class});
+        setClasses(new Class<?>[] {PropertyRoot.class});
     }
 
     @Override
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/unmapped/UnmappedElementsWarningTestCases.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/unmapped/UnmappedElementsWarningTestCases.java
index 0e82711..6182b1f 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/unmapped/UnmappedElementsWarningTestCases.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/unmapped/UnmappedElementsWarningTestCases.java
@@ -52,7 +52,7 @@ public static void main(String[] args) {
     @Override
     public void setUp() throws Exception {
         super.setUp();
-        Class[] classes = new Class[1];
+        Class<?>[] classes = new Class<?>[1];
         classes[0] = BulkUnmapped.class;
         jaxbContext = JAXBContextFactory.createContext(classes, null, Thread.currentThread().getContextClassLoader());
     }
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/unmarshaller/DefaultValueTestCases.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/unmarshaller/DefaultValueTestCases.java
index f2b261a..b414ba8 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/unmarshaller/DefaultValueTestCases.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/unmarshaller/DefaultValueTestCases.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,7 @@ public class DefaultValueTestCases extends JAXBTestCases {
 
     public DefaultValueTestCases(String name) throws Exception {
         super(name);
-        setClasses(new Class[] {DefaultValueRoot.class});
+        setClasses(new Class<?>[] {DefaultValueRoot.class});
         setControlDocument(XML_RESOURCE);
     }
 
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/unmarshaller/JSONUnmarshalAutoDetectTestCases.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/unmarshaller/JSONUnmarshalAutoDetectTestCases.java
index 333ed21..50e7b41 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/unmarshaller/JSONUnmarshalAutoDetectTestCases.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/unmarshaller/JSONUnmarshalAutoDetectTestCases.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
@@ -44,7 +44,7 @@ public JSONUnmarshalAutoDetectTestCases(String name) throws Exception {
         super(name);
         setControlJSON(JSON_RESOURCE_VALID);
         setControlDocument(XML_RESOURCE_VALID);
-        setClasses(new Class[]{TestObject.class});
+        setClasses(new Class<?>[]{TestObject.class});
         jaxbUnmarshaller.setProperty(UnmarshallerProperties.AUTO_DETECT_MEDIA_TYPE, true);
     }
 
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/unmarshaller/JSONUnmarshalTestCases.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/unmarshaller/JSONUnmarshalTestCases.java
index bb55221..bfac406 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/unmarshaller/JSONUnmarshalTestCases.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/unmarshaller/JSONUnmarshalTestCases.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
@@ -44,7 +44,7 @@ public JSONUnmarshalTestCases(String name) throws Exception {
         super(name);
         setControlJSON(JSON_RESOURCE_VALID);
         setControlDocument(XML_RESOURCE_VALID);
-        setClasses(new Class[]{TestObject.class});
+        setClasses(new Class<?>[]{TestObject.class});
     }
 
     @Override
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/unmarshaller/RepeatedUnmarshalTestCases.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/unmarshaller/RepeatedUnmarshalTestCases.java
index 85bd4aa..679c2cc 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/unmarshaller/RepeatedUnmarshalTestCases.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/unmarshaller/RepeatedUnmarshalTestCases.java
@@ -47,7 +47,7 @@ public void setUp() throws Exception{
         String controlString ="This is testing that if an unmarshal operation fails the unmarshaller will be left in a clean state so it can be reused to unmarshal subsequent documents";
         controlObject.bytes = controlString.getBytes();
 
-        Class[] classes = new Class[1];
+        Class<?>[] classes = new Class<?>[1];
         classes[0] = TestObject.class;
         jaxbContext = JAXBContextFactory.createContext(classes, null, Thread.currentThread().getContextClassLoader());
     }
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/unmarshaller/autodetect/AutoDetectMediaTypeTestCases.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/unmarshaller/autodetect/AutoDetectMediaTypeTestCases.java
index 0a6991a..6f1cd1d 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/unmarshaller/autodetect/AutoDetectMediaTypeTestCases.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/unmarshaller/autodetect/AutoDetectMediaTypeTestCases.java
@@ -36,7 +36,7 @@ public AutoDetectMediaTypeTestCases(String name) throws Exception {
         super(name);
         setControlDocument(XML_RESOURCE);
         setControlJSON(JSON_RESOURCE);
-        Class[] classes = new Class[1];
+        Class<?>[] classes = new Class<?>[1];
         classes[0] = TestObjectFactory.class;
         setClasses(classes);
         jaxbUnmarshaller.setProperty(UnmarshallerProperties.AUTO_DETECT_MEDIA_TYPE, true);
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/unmarshaller/autodetect/AutoDetectSmallDocTestCases.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/unmarshaller/autodetect/AutoDetectSmallDocTestCases.java
index 1af7714..c25df5a 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/unmarshaller/autodetect/AutoDetectSmallDocTestCases.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/unmarshaller/autodetect/AutoDetectSmallDocTestCases.java
@@ -36,7 +36,7 @@ public AutoDetectSmallDocTestCases(String name) throws Exception {
         setControlDocument(XML_RESOURCE);
         setControlJSON(JSON_RESOURCE);
 
-        Class[] classes = new Class[1];
+        Class<?>[] classes = new Class<?>[1];
         classes[0] = TestObjectFactory.class;
         setClasses(classes);
         jaxbUnmarshaller.setProperty(UnmarshallerProperties.AUTO_DETECT_MEDIA_TYPE, true);
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/unmarshaller/space/UnmarshalWithSpaceEventTestCases.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/unmarshaller/space/UnmarshalWithSpaceEventTestCases.java
index 21d98be..93cd792 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/unmarshaller/space/UnmarshalWithSpaceEventTestCases.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/unmarshaller/space/UnmarshalWithSpaceEventTestCases.java
@@ -30,7 +30,7 @@ public class UnmarshalWithSpaceEventTestCases extends JAXBTestCases{
 
     public UnmarshalWithSpaceEventTestCases(String name) throws Exception {
         super(name);
-        setClasses(new Class[]{TestObject.class});
+        setClasses(new Class<?>[]{TestObject.class});
         setControlDocument(XML_RESOURCE);
         setWriteControlDocument(XML_WRITE_RESOURCE);
 
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/unmarshaller/validation/ValidationTestCases.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/unmarshaller/validation/ValidationTestCases.java
index 47c8ec4..897fb8a 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/unmarshaller/validation/ValidationTestCases.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/unmarshaller/validation/ValidationTestCases.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
@@ -34,7 +34,7 @@ public class ValidationTestCases extends JAXBTestCases {
     public ValidationTestCases(String name) throws Exception {
         super(name);
         setControlDocument(XML);
-        setClasses(new Class[] {CanadianAddress.class});
+        setClasses(new Class<?>[] {CanadianAddress.class});
     }
 
     @Override
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/uri/ChildURITestCases.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/uri/ChildURITestCases.java
index 73e9026..76622f3 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/uri/ChildURITestCases.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/uri/ChildURITestCases.java
@@ -30,7 +30,7 @@ public class ChildURITestCases extends JAXBWithJSONTestCases{
 
     public ChildURITestCases(String name) throws Exception {
         super(name);
-        setClasses(new Class[]{TestObject.class});
+        setClasses(new Class<?>[]{TestObject.class});
         setControlDocument(XML_RESOURCE);
         setControlJSON(JSON_RESOURCE);
     }
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/uri/URITestCases.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/uri/URITestCases.java
index 2454ec0..a3e8d7a 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/uri/URITestCases.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/uri/URITestCases.java
@@ -30,7 +30,7 @@ public class URITestCases extends JAXBWithJSONTestCases{
 
     public URITestCases(String name) throws Exception {
         super(name);
-        setClasses(new Class[]{});
+        setClasses(new Class<?>[]{});
         setControlDocument(XML_RESOURCE);
         setControlJSON(JSON_RESOURCE);
         //setWriteControlDocument(XML_WRITE_RESOURCE);
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmlAnyMixed/XmlAnyMixedTestCases.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmlAnyMixed/XmlAnyMixedTestCases.java
index c85c610..c425a81 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmlAnyMixed/XmlAnyMixedTestCases.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmlAnyMixed/XmlAnyMixedTestCases.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
@@ -41,7 +41,7 @@ public static void main(String[] args) {
 
     public void testRoundTrip() {
         try {
-            JAXBContext jc = JAXBContextFactory.createContext(new Class[]{Main.class}, null);
+            JAXBContext jc = JAXBContextFactory.createContext(new Class<?>[]{Main.class}, null);
             Unmarshaller um = jc.createUnmarshaller();
             Object o = um.unmarshal(Thread.currentThread().getContextClassLoader().getResource("org/eclipse/persistence/testing/jaxb/xmlAnyMixed/rootAnyMixed.xml"));
             Marshaller m = jc.createMarshaller();
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 7f9fb9c..529feff 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
@@ -34,14 +34,14 @@ public FieldAndPropertyTestCases(String name) throws Exception {
 
     public void testFieldAccess() throws Exception {
         MySchemaOutputResolver outputResolver = new MySchemaOutputResolver();
-        generateSchema(new Class[]{PersonField.class}, outputResolver, null);
+        generateSchema(new Class<?>[]{PersonField.class}, outputResolver, null);
         String result = validateAgainstSchema(PATH + "person_field.xml", outputResolver);
         assertTrue("Schema validation failed unxepectedly: " + result, result == null);
     }
 
     public void testPropertyAccess() throws Exception {
         MySchemaOutputResolver outputResolver = new MySchemaOutputResolver();
-        generateSchema(new Class[]{PersonProperty.class}, outputResolver, null);
+        generateSchema(new Class<?>[]{PersonProperty.class}, outputResolver, null);
         String result = validateAgainstSchema(PATH + "person_property.xml", outputResolver);
         assertTrue("Schema validation failed unxepectedly: " + result, result == null);
     }
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 fc2450b..d0df0dc 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
@@ -27,7 +27,7 @@ public IgnoreInvalidNonPublicFieldTestCases(String name) throws Exception {
 
     public void testPublicMemberAccess() throws Exception {
         MySchemaOutputResolver outputResolver = new MySchemaOutputResolver();
-        generateSchema(new Class[]{Root.class}, outputResolver, null);
+        generateSchema(new Class<?>[]{Root.class}, outputResolver, null);
         String result = validateAgainstSchema(PATH + "root_public.xml", outputResolver);
         assertTrue("Schema validation failed unxepectedly: " + result, result == null);
     }
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmlaccessortype/none/NoneTestCases.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmlaccessortype/none/NoneTestCases.java
index ed75eb2..ab7cb71 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmlaccessortype/none/NoneTestCases.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmlaccessortype/none/NoneTestCases.java
@@ -35,7 +35,7 @@ public NoneTestCases(String name) throws Exception {
         setControlDocument(XML_RESOURCE);
         setControlJSON(JSON_RESOURCE);
 
-        Class[] classes = new Class[1];
+        Class<?>[] classes = new Class<?>[1];
         classes[0] = Root.class;
         setClasses(classes);
     }
@@ -54,7 +54,7 @@ protected Object getControlObject() {
     }
 
     public void testXmlMetadata() throws Exception {
-        Class[] classes = new Class[1];
+        Class<?>[] classes = new Class<?>[1];
         classes[0] = Root.class;
 
         Map<String, Object> properties = new HashMap<String, Object>(1);
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmladapter/bytearray/ByteArrayTestCases.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmladapter/bytearray/ByteArrayTestCases.java
index 567de16..9029ab4 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmladapter/bytearray/ByteArrayTestCases.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmladapter/bytearray/ByteArrayTestCases.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
@@ -26,7 +26,7 @@ public ByteArrayTestCases(String name) throws Exception {
         super(name);
         setControlDocument(XML_RESOURCE);
         setControlJSON(JSON_RESOURCE);
-        Class[] classes = new Class[1];
+        Class<?>[] classes = new Class<?>[1];
         classes[0] = Root.class;
         setClasses(classes);
     }
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmladapter/choice/AdapterWithElementsTestCases.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmladapter/choice/AdapterWithElementsTestCases.java
index 923a1e3..bf0b16e 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmladapter/choice/AdapterWithElementsTestCases.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmladapter/choice/AdapterWithElementsTestCases.java
@@ -27,7 +27,7 @@ public AdapterWithElementsTestCases(String name) throws Exception {
         super(name);
         setControlDocument(XML_RESOURCE);
         setControlJSON(JSON_RESOURCE);
-        Class[] classes = new Class[] {Foo.class, BarA.class, BarB.class, BarC.class};
+        Class<?>[] classes = new Class<?>[] {Foo.class, BarA.class, BarB.class, BarC.class};
         setClasses(classes);
     }
 
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmladapter/classlevel/ClassLevelAdapterTestCases.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmladapter/classlevel/ClassLevelAdapterTestCases.java
index 6793f9e..3790c08 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmladapter/classlevel/ClassLevelAdapterTestCases.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmladapter/classlevel/ClassLevelAdapterTestCases.java
@@ -25,7 +25,7 @@ public ClassLevelAdapterTestCases(String name) throws Exception {
         setControlDocument(XML_RESOURCE);
         setControlJSON(JSON_RESOURCE);
 
-        Class[] classes = new Class[2];
+        Class<?>[] classes = new Class<?>[2];
         classes[0] = TestObject.class;
         classes[1] = ClassA.class;
         setClasses(classes);
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmladapter/composite/XmlAdapterCompositeTestCases.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmladapter/composite/XmlAdapterCompositeTestCases.java
index 1854ac6..31b3e3c 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmladapter/composite/XmlAdapterCompositeTestCases.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmladapter/composite/XmlAdapterCompositeTestCases.java
@@ -32,7 +32,7 @@ public XmlAdapterCompositeTestCases(String name) throws Exception {
         super(name);
         setControlDocument(XML_RESOURCE);
         setControlJSON(JSON_RESOURCE);
-        Class[] classes = new Class[1];
+        Class<?>[] classes = new Class<?>[1];
         classes[0] = MyMap.class;
         setClasses(classes);
     }
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmladapter/compositecollection/XmlAdapterCompositeCollectionTestCases.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmladapter/compositecollection/XmlAdapterCompositeCollectionTestCases.java
index 5d62514..b383e70 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmladapter/compositecollection/XmlAdapterCompositeCollectionTestCases.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmladapter/compositecollection/XmlAdapterCompositeCollectionTestCases.java
@@ -35,7 +35,7 @@ public XmlAdapterCompositeCollectionTestCases(String name) throws Exception {
         super(name);
         setControlDocument(XML_RESOURCE);
         setControlJSON(JSON_RESOURCE);
-        Class[] classes = new Class[2];
+        Class<?>[] classes = new Class<?>[2];
         classes[0] = MyDates.class;
         classes[1] = MyDateType.class;
         setClasses(classes);
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmladapter/compositedirectcollection/CollapsedStringListTestCases.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmladapter/compositedirectcollection/CollapsedStringListTestCases.java
index 2e8cda2..f6645bc 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmladapter/compositedirectcollection/CollapsedStringListTestCases.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmladapter/compositedirectcollection/CollapsedStringListTestCases.java
@@ -35,7 +35,7 @@ public CollapsedStringListTestCases(String name) throws Exception {
         setControlJSON(JSON_RESOURCE_READ);
         setWriteControlJSON(JSON_RESOURCE_WRITE);
         setWriteControlFormattedJSON(JSON_RESOURCE_WRITE_FORMATTED);
-        setClasses(new Class[] {CollapsedStringListRoot.class});
+        setClasses(new Class<?>[] {CollapsedStringListRoot.class});
     }
 
     @Override
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmladapter/compositedirectcollection/NormalizedStringListTestCases.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmladapter/compositedirectcollection/NormalizedStringListTestCases.java
index 0bf2757..1da07df 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmladapter/compositedirectcollection/NormalizedStringListTestCases.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmladapter/compositedirectcollection/NormalizedStringListTestCases.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,7 @@ public NormalizedStringListTestCases(String name) throws Exception {
         setControlJSON(JSON_RESOURCE_READ);
         setWriteControlDocument(XML_RESOURCE_WRITE);
         setWriteControlJSON(JSON_RESOURCE_WRITE);
-        setClasses(new Class[] {NormalizedStringListRoot.class});
+        setClasses(new Class<?>[] {NormalizedStringListRoot.class});
     }
 
     @Override
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmladapter/compositedirectcollection/XmlAdapterCompositeDirectCollectionTestCases.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmladapter/compositedirectcollection/XmlAdapterCompositeDirectCollectionTestCases.java
index 42cad36..d3e6752 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmladapter/compositedirectcollection/XmlAdapterCompositeDirectCollectionTestCases.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmladapter/compositedirectcollection/XmlAdapterCompositeDirectCollectionTestCases.java
@@ -34,7 +34,7 @@ public XmlAdapterCompositeDirectCollectionTestCases(String name) throws Exceptio
         super(name);
         setControlDocument(XML_RESOURCE);
         setControlJSON(JSON_RESOURCE);
-        Class[] classes = new Class[2];
+        Class<?>[] classes = new Class<?>[2];
         classes[0] = MyCalendar.class;
         classes[1] = MyCalendarType.class;
         setClasses(classes);
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmladapter/compositedirectcollection/XmlAdapterDirectCollectionArrayTestCases.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmladapter/compositedirectcollection/XmlAdapterDirectCollectionArrayTestCases.java
index 676ec22..2f9308c 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmladapter/compositedirectcollection/XmlAdapterDirectCollectionArrayTestCases.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmladapter/compositedirectcollection/XmlAdapterDirectCollectionArrayTestCases.java
@@ -31,7 +31,7 @@ public XmlAdapterDirectCollectionArrayTestCases(String name) throws Exception {
         super(name);
         setControlDocument(XML_RESOURCE);
         setControlJSON(JSON_RESOURCE);
-        Class[] classes = new Class[2];
+        Class<?>[] classes = new Class<?>[2];
         classes[0] = MyCalendarWithArray.class;
         classes[1] = MyCalendarType.class;
         setClasses(classes);
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmladapter/direct/CollapsedStringTestCases.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmladapter/direct/CollapsedStringTestCases.java
index c41bb35..bab17d3 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmladapter/direct/CollapsedStringTestCases.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmladapter/direct/CollapsedStringTestCases.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,7 @@ public CollapsedStringTestCases(String name) throws Exception {
         setControlJSON(JSON_RESOURCE_READ);
         setWriteControlDocument(XML_RESOURCE_WRITE);
         setWriteControlJSON(JSON_RESOURCE_WRITE);
-        setClasses(new Class[] {CollapsedStringRoot.class});
+        setClasses(new Class<?>[] {CollapsedStringRoot.class});
         jaxbMarshaller.setProperty(MarshallerProperties.JSON_ATTRIBUTE_PREFIX, "@");
         jaxbUnmarshaller.setProperty(UnmarshallerProperties.JSON_ATTRIBUTE_PREFIX, "@");
     }
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmladapter/direct/ListToStringAdapterTestCases.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmladapter/direct/ListToStringAdapterTestCases.java
index b484588..cae7e47 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmladapter/direct/ListToStringAdapterTestCases.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmladapter/direct/ListToStringAdapterTestCases.java
@@ -26,7 +26,7 @@ public ListToStringAdapterTestCases(String name) throws Exception {
         super(name);
         setControlDocument(XML_RESOURCE);
         setControlJSON(JSON_RESOURCE);
-        Class[] classes = new Class[1];
+        Class<?>[] classes = new Class<?>[1];
         classes[0] = Employee.class;
         setClasses(classes);
     }
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmladapter/direct/NormalizedStringTestCases.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmladapter/direct/NormalizedStringTestCases.java
index bccbffd..415db2c 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmladapter/direct/NormalizedStringTestCases.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmladapter/direct/NormalizedStringTestCases.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,7 @@ public NormalizedStringTestCases(String name) throws Exception {
         setControlJSON(JSON_RESOURCE_READ);
         setWriteControlDocument(XML_RESOURCE_WRITE);
         setWriteControlJSON(JSON_RESOURCE_WRITE);
-        setClasses(new Class[] {NormalizedStringRoot.class});
+        setClasses(new Class<?>[] {NormalizedStringRoot.class});
         jaxbMarshaller.setProperty(MarshallerProperties.JSON_ATTRIBUTE_PREFIX, "@");
         jaxbUnmarshaller.setProperty(UnmarshallerProperties.JSON_ATTRIBUTE_PREFIX, "@");
     }
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmladapter/direct/XmlAdapterDirectExceptionTestCases.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmladapter/direct/XmlAdapterDirectExceptionTestCases.java
index 8ef76a2..96e9633 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmladapter/direct/XmlAdapterDirectExceptionTestCases.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmladapter/direct/XmlAdapterDirectExceptionTestCases.java
@@ -28,7 +28,7 @@ public XmlAdapterDirectExceptionTestCases(String name) throws Exception {
         setWriteControlDocument(XML_WRITE_RESOURCE);
         setControlJSON(JSON_RESOURCE);
         setWriteControlJSON(JSON_WRITE_RESOURCE);
-        Class[] classes = new Class[2];
+        Class<?>[] classes = new Class<?>[2];
         classes[0] = MyCalendarException.class;
         classes[1] = MyCalendarType.class;
         setClasses(classes);
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmladapter/direct/XmlAdapterDirectNullTestCases.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmladapter/direct/XmlAdapterDirectNullTestCases.java
index d709ad6..45c9c6c 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmladapter/direct/XmlAdapterDirectNullTestCases.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmladapter/direct/XmlAdapterDirectNullTestCases.java
@@ -24,7 +24,7 @@ public XmlAdapterDirectNullTestCases(String name) throws Exception {
         super(name);
         setControlDocument(XML_RESOURCE);
         setControlJSON(JSON_RESOURCE);
-        Class[] classes = new Class[2];
+        Class<?>[] classes = new Class<?>[2];
         classes[0] = MyCalendar.class;
         classes[1] = MyCalendarType.class;
         setClasses(classes);
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmladapter/direct/XmlAdapterDirectTestCases.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmladapter/direct/XmlAdapterDirectTestCases.java
index 9c712f3..6037990 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmladapter/direct/XmlAdapterDirectTestCases.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmladapter/direct/XmlAdapterDirectTestCases.java
@@ -27,7 +27,7 @@ public XmlAdapterDirectTestCases(String name) throws Exception {
         super(name);
         setControlDocument(XML_RESOURCE);
         setControlJSON(JSON_RESOURCE);
-        Class[] classes = new Class[2];
+        Class<?>[] classes = new Class<?>[2];
         classes[0] = MyCalendar.class;
         classes[1] = MyCalendarType.class;
         setClasses(classes);
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmladapter/direct/XmlAdapterSchemaTypeTestCases.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmladapter/direct/XmlAdapterSchemaTypeTestCases.java
index 532d02e..30387e8 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmladapter/direct/XmlAdapterSchemaTypeTestCases.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmladapter/direct/XmlAdapterSchemaTypeTestCases.java
@@ -24,7 +24,7 @@ public XmlAdapterSchemaTypeTestCases(String name) throws Exception {
         super(name);
         setControlDocument(XML_RESOURCE);
         setControlJSON(JSON_RESOURCE);
-        Class[] classes = new Class[1];
+        Class<?>[] classes = new Class<?>[1];
         classes[0] = Root.class;
         setClasses(classes);
     }
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmladapter/direct/objectlist/ObjectListTestCases.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmladapter/direct/objectlist/ObjectListTestCases.java
index 932a8b4..809d926 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmladapter/direct/objectlist/ObjectListTestCases.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmladapter/direct/objectlist/ObjectListTestCases.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
@@ -25,7 +25,7 @@ public ObjectListTestCases(String name) throws Exception {
         super(name);
         setControlDocument(XML_RESOURCE);
         setControlJSON(JSON_RESOURCE);
-        Class[] classes = new Class[1];
+        Class<?>[] classes = new Class<?>[1];
         classes[0] = Customer.class;
         setClasses(classes);
     }
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmladapter/elementref/XmlAdapterElementRefListTestCases.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmladapter/elementref/XmlAdapterElementRefListTestCases.java
index 2ce008f..70c8c27 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmladapter/elementref/XmlAdapterElementRefListTestCases.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmladapter/elementref/XmlAdapterElementRefListTestCases.java
@@ -27,7 +27,7 @@ public XmlAdapterElementRefListTestCases(String name) throws Exception {
         super(name);
         setControlDocument(XML_RESOURCE);
         setControlJSON(JSON_RESOURCE);
-        Class[] classes = new Class[1];
+        Class<?>[] classes = new Class<?>[1];
         classes[0] = TransactionsAdd.class;
         setClasses(classes);
     }
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmladapter/elementref/XmlAdapterElementRefTestCases.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmladapter/elementref/XmlAdapterElementRefTestCases.java
index 05a1907..e6303c0 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmladapter/elementref/XmlAdapterElementRefTestCases.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmladapter/elementref/XmlAdapterElementRefTestCases.java
@@ -26,7 +26,7 @@ public XmlAdapterElementRefTestCases(String name) throws Exception {
         super(name);
         setControlDocument(XML_RESOURCE);
         setControlJSON(JSON_RESOURCE);
-        Class[] classes = new Class[1];
+        Class<?>[] classes = new Class<?>[1];
         classes[0] = TransactionAdd.class;
         setClasses(classes);
     }
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmladapter/enumeration/AdapterEnumMoreGenericTestCases.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmladapter/enumeration/AdapterEnumMoreGenericTestCases.java
index 693579d..86fab3b 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmladapter/enumeration/AdapterEnumMoreGenericTestCases.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmladapter/enumeration/AdapterEnumMoreGenericTestCases.java
@@ -31,7 +31,7 @@ public AdapterEnumMoreGenericTestCases(String name) throws Exception {
         super(name);
         setControlDocument(XML_RESOURCE);
         setControlJSON(JSON_RESOURCE);
-        Class[] classes = {MoreGenericEnumRoot.class};
+        Class<?>[] classes = {MoreGenericEnumRoot.class};
         setClasses(classes);
     }
 
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmladapter/enumeration/AdapterEnumTestCases.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmladapter/enumeration/AdapterEnumTestCases.java
index 5f2ba52..fd11d44 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmladapter/enumeration/AdapterEnumTestCases.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmladapter/enumeration/AdapterEnumTestCases.java
@@ -27,7 +27,7 @@ public AdapterEnumTestCases(String name) throws Exception {
         super(name);
         setControlDocument(XML_RESOURCE);
         setControlJSON(JSON_RESOURCE);
-        Class[] classes = {EnumRoot.class};
+        Class<?>[] classes = {EnumRoot.class};
         setClasses(classes);
     }
 
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmladapter/generics/AdapterWithGenericsTestCases.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmladapter/generics/AdapterWithGenericsTestCases.java
index 505c3cb..11e1361 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmladapter/generics/AdapterWithGenericsTestCases.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmladapter/generics/AdapterWithGenericsTestCases.java
@@ -25,7 +25,7 @@ public AdapterWithGenericsTestCases(String name) throws Exception {
         super(name);
         setControlDocument(XML_RESOURCE);
         setControlJSON(JSON_RESOURCE);
-        Class[] classes = new Class[] {Root.class, B.class};
+        Class<?>[] classes = new Class<?>[] {Root.class, B.class};
         setClasses(classes);
     }
 
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmladapter/hexbinary/XmlAdapterHexBinaryTestCases.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmladapter/hexbinary/XmlAdapterHexBinaryTestCases.java
index 52d2b31..62f8dc9 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmladapter/hexbinary/XmlAdapterHexBinaryTestCases.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmladapter/hexbinary/XmlAdapterHexBinaryTestCases.java
@@ -25,7 +25,7 @@ public XmlAdapterHexBinaryTestCases(String name) throws Exception {
         super(name);
         setControlDocument(XML_RESOURCE);
         setControlJSON(JSON_RESOURCE);
-        Class[] classes = new Class[1];
+        Class<?>[] classes = new Class<?>[1];
         classes[0] = Customer.class;
         setClasses(classes);
     }
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmladapter/inheritance/AdapterWithInheritanceTestCases.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmladapter/inheritance/AdapterWithInheritanceTestCases.java
index 186fae3..90eeb23 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmladapter/inheritance/AdapterWithInheritanceTestCases.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmladapter/inheritance/AdapterWithInheritanceTestCases.java
@@ -28,7 +28,7 @@ public AdapterWithInheritanceTestCases(String name) throws Exception {
         super(name);
         setControlDocument(XML_RESOURCE);
         setControlJSON(JSON_RESOURCE);
-        Class[] classes = new Class[] {Root.class};
+        Class<?>[] classes = new Class<?>[] {Root.class};
         setClasses(classes);
     }
 
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmladapter/inheritance/generics/GenericAdapterTestCases.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmladapter/inheritance/generics/GenericAdapterTestCases.java
index bbe69a8..3a579e6 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmladapter/inheritance/generics/GenericAdapterTestCases.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmladapter/inheritance/generics/GenericAdapterTestCases.java
@@ -32,7 +32,7 @@ public GenericAdapterTestCases(String name) throws Exception {
         super(name);
         setControlDocument(XML_RESOURCE);
         setControlJSON(JSON_RESOURCE);
-        Class[] classes = new Class[] { Customer.class };
+        Class<?>[] classes = new Class<?>[] { Customer.class };
         setClasses(classes);
 
         // Setup adapter caches
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmladapter/list/XmlAdapterListMultipleBarTestCases.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmladapter/list/XmlAdapterListMultipleBarTestCases.java
index f8b059c..72f8f527 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmladapter/list/XmlAdapterListMultipleBarTestCases.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmladapter/list/XmlAdapterListMultipleBarTestCases.java
@@ -27,7 +27,7 @@ public XmlAdapterListMultipleBarTestCases(String name) throws Exception {
         super(name);
         setControlDocument(XML_RESOURCE);
         setControlJSON(JSON_RESOURCE);
-        Class[] classes = new Class[2];
+        Class<?>[] classes = new Class<?>[2];
         classes[0] = FooWithBars.class;
         classes[1] = Bar.class;
         setClasses(classes);
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmladapter/list/XmlAdapterListSingleBarTestCases.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmladapter/list/XmlAdapterListSingleBarTestCases.java
index 78cbfdc..89c8c98 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmladapter/list/XmlAdapterListSingleBarTestCases.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmladapter/list/XmlAdapterListSingleBarTestCases.java
@@ -28,7 +28,7 @@ public XmlAdapterListSingleBarTestCases(String name) throws Exception {
         super(name);
         setControlDocument(XML_RESOURCE);
         setControlJSON(JSON_RESOURCE);
-        Class[] classes = new Class[2];
+        Class<?>[] classes = new Class<?>[2];
         classes[0] = FooWithBar.class;
         classes[1] = Bar.class;
         setClasses(classes);
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmladapter/list/XmlAdapterNestedListSingleBarTestCases.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmladapter/list/XmlAdapterNestedListSingleBarTestCases.java
index b7335f4..b9a34da 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmladapter/list/XmlAdapterNestedListSingleBarTestCases.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmladapter/list/XmlAdapterNestedListSingleBarTestCases.java
@@ -28,7 +28,7 @@ public XmlAdapterNestedListSingleBarTestCases(String name) throws Exception {
         super(name);
         setControlDocument(XML_RESOURCE);
         setControlJSON(JSON_RESOURCE);
-        Class[] classes = new Class[2];
+        Class<?>[] classes = new Class<?>[2];
         classes[0] = FooWithBarNestedAdapter.class;
         classes[1] = Bar.class;
         setClasses(classes);
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmladapter/map/JAXBMapWithAdapterTestCases.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmladapter/map/JAXBMapWithAdapterTestCases.java
index 08e32ea..919bc63 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmladapter/map/JAXBMapWithAdapterTestCases.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmladapter/map/JAXBMapWithAdapterTestCases.java
@@ -30,7 +30,7 @@ public JAXBMapWithAdapterTestCases(String name) throws Exception {
         super(name);
         setControlDocument(XML_RESOURCE);
         setControlJSON(JSON_RESOURCE);
-        Class[] classes = new Class[2];
+        Class<?>[] classes = new Class<?>[2];
         classes[0] = MyObject.class;
         classes[1] = Person.class;
         setClasses(classes);
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmladapter/noarg/NoArgCtorAdapterTestCases.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmladapter/noarg/NoArgCtorAdapterTestCases.java
index a6aa971..e647f20 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmladapter/noarg/NoArgCtorAdapterTestCases.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmladapter/noarg/NoArgCtorAdapterTestCases.java
@@ -30,7 +30,7 @@ public NoArgCtorAdapterTestCases(String name) throws Exception {
         super(name);
         setControlDocument(XML_RESOURCE);
         setControlJSON(JSON_RESOURCE);
-        Class[] classes = new Class[] {Root.class, ObjectFactory.class};
+        Class<?>[] classes = new Class<?>[] {Root.class, ObjectFactory.class};
         setClasses(classes);
     }
 
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmlanyelement/XmlAnyElementArrayTestCases.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmlanyelement/XmlAnyElementArrayTestCases.java
index cdc6efa..2b49e32 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmlanyelement/XmlAnyElementArrayTestCases.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmlanyelement/XmlAnyElementArrayTestCases.java
@@ -38,7 +38,7 @@ public XmlAnyElementArrayTestCases(String name) throws Exception {
         super(name);
         setControlDocument(XML_RESOURCE);
         setControlJSON(JSON_RESOURCE);
-        Class[] classes = new Class[2];
+        Class<?>[] classes = new Class<?>[2];
         classes[0] = EmployeeArray.class;
         classes[1] = Address.class;
         setClasses(classes);
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmlanyelement/XmlAnyElementLaxCDATATestCases.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmlanyelement/XmlAnyElementLaxCDATATestCases.java
index ad80dbc..e57b6d6 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmlanyelement/XmlAnyElementLaxCDATATestCases.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmlanyelement/XmlAnyElementLaxCDATATestCases.java
@@ -28,7 +28,7 @@ public class XmlAnyElementLaxCDATATestCases extends JAXBTestCases {
     public XmlAnyElementLaxCDATATestCases(String name) throws Exception {
         super(name);
         setControlDocument(XML_RESOURCE);
-        Class[] classes = new Class[2];
+        Class<?>[] classes = new Class<?>[2];
         classes[0] = EmployeeLaxCDATA.class;
         classes[1] = Address.class;
         setClasses(classes);
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmlanyelement/XmlAnyElementLaxMixedEmptyTestCases.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmlanyelement/XmlAnyElementLaxMixedEmptyTestCases.java
index a32f048..41e37ca 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmlanyelement/XmlAnyElementLaxMixedEmptyTestCases.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmlanyelement/XmlAnyElementLaxMixedEmptyTestCases.java
@@ -24,7 +24,7 @@ public XmlAnyElementLaxMixedEmptyTestCases(String name) throws Exception {
             super(name);
             setControlDocument(XML_RESOURCE);
             setControlJSON(JSON_RESOURCE);
-            Class[] classes = new Class[2];
+            Class<?>[] classes = new Class<?>[2];
             classes[0] = EmployeeLaxMixed.class;
             classes[1] = Address.class;
             setClasses(classes);
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmlanyelement/XmlAnyElementLaxMixedTestCases.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmlanyelement/XmlAnyElementLaxMixedTestCases.java
index 29bac0c..c965de9 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmlanyelement/XmlAnyElementLaxMixedTestCases.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmlanyelement/XmlAnyElementLaxMixedTestCases.java
@@ -40,7 +40,7 @@ public XmlAnyElementLaxMixedTestCases(String name) throws Exception {
             setWriteControlDocument(XML_WRITE_RESOURCE);
             setWriteControlJSON(JSON_WRITE_RESOURCE);
             setControlJSON(JSON_RESOURCE);
-            Class[] classes = new Class[2];
+            Class<?>[] classes = new Class<?>[2];
             classes[0] = EmployeeLaxMixed.class;
             classes[1] = Address.class;
             setClasses(classes);
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmlanyelement/XmlAnyElementLaxSingleTestCases.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmlanyelement/XmlAnyElementLaxSingleTestCases.java
index 600875c..fec631f 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmlanyelement/XmlAnyElementLaxSingleTestCases.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmlanyelement/XmlAnyElementLaxSingleTestCases.java
@@ -41,7 +41,7 @@ public XmlAnyElementLaxSingleTestCases(String name) throws Exception {
         super(name);
         setControlDocument(XML_RESOURCE);
         setControlJSON(JSON_RESOURCE);
-        Class[] classes = new Class[2];
+        Class<?>[] classes = new Class<?>[2];
         classes[0] = EmployeeSingle.class;
         classes[1] = Address.class;
         setClasses(classes);
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmlanyelement/XmlAnyElementLaxTestCases.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmlanyelement/XmlAnyElementLaxTestCases.java
index c01d3c1..64b01d0 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmlanyelement/XmlAnyElementLaxTestCases.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmlanyelement/XmlAnyElementLaxTestCases.java
@@ -37,7 +37,7 @@ public XmlAnyElementLaxTestCases(String name) throws Exception {
         super(name);
         setControlDocument(XML_RESOURCE);
         setControlJSON(JSON_RESOURCE);
-        Class[] classes = new Class[2];
+        Class<?>[] classes = new Class<?>[2];
         classes[0] = EmployeeLax.class;
         classes[1] = Address.class;
         setClasses(classes);
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmlanyelement/XmlAnyElementNSTestCases.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmlanyelement/XmlAnyElementNSTestCases.java
index 8e7c373..1b01b71 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmlanyelement/XmlAnyElementNSTestCases.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmlanyelement/XmlAnyElementNSTestCases.java
@@ -44,7 +44,7 @@ public XmlAnyElementNSTestCases(String name) throws Exception {
         super(name);
         setControlDocument(XML_RESOURCE);
         setControlJSON(JSON_RESOURCE);
-        Class[] classes = new Class[2];
+        Class<?>[] classes = new Class<?>[2];
         classes[0] = Employee.class;
         classes[1] = Address.class;
         setClasses(classes);
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmlanyelement/XmlAnyElementNoDomTestCases.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmlanyelement/XmlAnyElementNoDomTestCases.java
index 182f787..78fc0f6 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmlanyelement/XmlAnyElementNoDomTestCases.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmlanyelement/XmlAnyElementNoDomTestCases.java
@@ -35,7 +35,7 @@ public XmlAnyElementNoDomTestCases(String name) throws Exception {
         super(name);
         setControlDocument(XML_RESOURCE);
         setControlJSON(JSON_RESOURCE);
-        Class[] classes = new Class[2];
+        Class<?>[] classes = new Class<?>[2];
         classes[0] = EmployeeLax.class;
         classes[1] = Address.class;
         setClasses(classes);
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmlanyelement/XmlAnyElementTestCases.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmlanyelement/XmlAnyElementTestCases.java
index 7b1ca69..e637913 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmlanyelement/XmlAnyElementTestCases.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmlanyelement/XmlAnyElementTestCases.java
@@ -43,7 +43,7 @@ public XmlAnyElementTestCases(String name) throws Exception {
         super(name);
         setControlDocument(XML_RESOURCE);
         setControlJSON(JSON_RESOURCE);
-        Class[] classes = new Class[2];
+        Class<?>[] classes = new Class<?>[2];
         classes[0] = Employee.class;
         classes[1] = Address.class;
         setClasses(classes);
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmlanyelement/XmlAnyJAXBElementTestCases.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmlanyelement/XmlAnyJAXBElementTestCases.java
index d88ff9e..eef50bf 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmlanyelement/XmlAnyJAXBElementTestCases.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmlanyelement/XmlAnyJAXBElementTestCases.java
@@ -37,7 +37,7 @@ public XmlAnyJAXBElementTestCases(String name) throws Exception {
         super(name);
         setControlDocument(XML_RESOURCE);
         setControlJSON(JSON_RESOURCE);
-        Class[] classes = new Class[3];
+        Class<?>[] classes = new Class<?>[3];
         classes[0] = Root.class;
         classes[1] = Thing.class;
         classes[2] = Address.class;
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmlanyelement/domhandler/DOMHandlerTestCases.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmlanyelement/domhandler/DOMHandlerTestCases.java
index d274914..6051844 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmlanyelement/domhandler/DOMHandlerTestCases.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmlanyelement/domhandler/DOMHandlerTestCases.java
@@ -27,7 +27,7 @@ public class DOMHandlerTestCases extends JAXBWithJSONTestCases {
 
     public DOMHandlerTestCases(String name) throws Exception {
         super(name);
-        this.setClasses(new Class[] {Root.class});
+        this.setClasses(new Class<?>[] {Root.class});
         this.setControlDocument(XML_RESOURCE);
         this.setControlJSON(JSON_RESOURCE);
     }
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmlanyelement/ns/DefaultNamespaceCollectionTestCases.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmlanyelement/ns/DefaultNamespaceCollectionTestCases.java
index 1f93f3e..8c17b73 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmlanyelement/ns/DefaultNamespaceCollectionTestCases.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmlanyelement/ns/DefaultNamespaceCollectionTestCases.java
@@ -35,7 +35,7 @@ public DefaultNamespaceCollectionTestCases(String name) throws Exception {
         super(name);
         setControlDocument(XML_RESOURCE);
         setControlJSON(JSON_RESOURCE);
-        Class[] classes = new Class[1];
+        Class<?>[] classes = new Class<?>[1];
         classes[0] = RootWithCollection.class;
         setClasses(classes);
         Map<String, String> namespaces = new HashMap<String, String>();
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmlanyelement/ns/DefaultNamespaceTestCases.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmlanyelement/ns/DefaultNamespaceTestCases.java
index 7d5fb97..cb70007 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmlanyelement/ns/DefaultNamespaceTestCases.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmlanyelement/ns/DefaultNamespaceTestCases.java
@@ -35,7 +35,7 @@ public DefaultNamespaceTestCases(String name) throws Exception {
         super(name);
         setControlDocument(XML_RESOURCE);
         setControlJSON(JSON_RESOURCE);
-        Class[] classes = new Class[1];
+        Class<?>[] classes = new Class<?>[1];
         classes[0] = Root.class;
         setClasses(classes);
 
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmlanyelement/ns/qualified/DefaultNamespaceTestCases.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmlanyelement/ns/qualified/DefaultNamespaceTestCases.java
index a0ff433..8d58a83 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmlanyelement/ns/qualified/DefaultNamespaceTestCases.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmlanyelement/ns/qualified/DefaultNamespaceTestCases.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
@@ -27,7 +27,7 @@ public class DefaultNamespaceTestCases extends JAXBTestCases {
 
     public DefaultNamespaceTestCases(String name) throws Exception {
         super(name);
-        setClasses(new Class[] {DefaultNamespaceRoot.class});
+        setClasses(new Class<?>[] {DefaultNamespaceRoot.class});
         setControlDocument(XML_RESOURCE);
     }
 
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmlanyelement/ns/qualified/XMLAnyElementNamespaceTestCases.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmlanyelement/ns/qualified/XMLAnyElementNamespaceTestCases.java
index ab06ffd..e8cdbc9 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmlanyelement/ns/qualified/XMLAnyElementNamespaceTestCases.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmlanyelement/ns/qualified/XMLAnyElementNamespaceTestCases.java
@@ -45,7 +45,7 @@ public XMLAnyElementNamespaceTestCases(String name) throws Exception {
         super(name);
         setControlDocument(XML_RESOURCE);
         setControlJSON(JSON_RESOURCE);
-        Class[] classes = new Class[1];
+        Class<?>[] classes = new Class<?>[1];
         classes[0] = Customer.class;
         setClasses(classes);
         Map<String, String> namespaces = new HashMap<String, String>();
@@ -89,7 +89,7 @@ public void testAttributeNoNamespace() throws Exception {
         // Test for bug 410482
         final String XML = "<root xmlns='http://www.oracle.com'><elem attr='value'/></root>";
 
-        JAXBContext context = JAXBContextFactory.createContext(new Class[] { Root.class }, null);
+        JAXBContext context = JAXBContextFactory.createContext(new Class<?>[] { Root.class }, null);
         Unmarshaller unmarshaller = context.createUnmarshaller();
         Root root = (Root) unmarshaller.unmarshal(new StringReader(XML));
         Attr attr = root.element.getAttributeNodeNS(null, "attr");
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmlanyelement/ns2/DefaultNamespace2TestCases.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmlanyelement/ns2/DefaultNamespace2TestCases.java
index c90c0d4..11f5bcb 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmlanyelement/ns2/DefaultNamespace2TestCases.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmlanyelement/ns2/DefaultNamespace2TestCases.java
@@ -43,7 +43,7 @@ public DefaultNamespace2TestCases(String name) throws Exception {
         super(name);
         setControlDocument(XML_RESOURCE);
         setControlJSON(JSON_RESOURCE);
-        Class[] classes = new Class[1];
+        Class<?>[] classes = new Class<?>[1];
         classes[0] = Root.class;
         setClasses(classes);
     }
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmlattribute/ObjectTestCases.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmlattribute/ObjectTestCases.java
index 23a7f53..b6b506c 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmlattribute/ObjectTestCases.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmlattribute/ObjectTestCases.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
@@ -24,7 +24,7 @@ public class ObjectTestCases extends JAXBWithJSONTestCases {
 
     public ObjectTestCases(String name) throws Exception {
         super(name);
-        setClasses(new Class[] {ObjectRoot.class});
+        setClasses(new Class<?>[] {ObjectRoot.class});
         setControlDocument(XML_RESOURCE);
         setControlJSON(JSON_RESOURCE);
     }
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmlattribute/XmlAttributeCollectionTestCases.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmlattribute/XmlAttributeCollectionTestCases.java
index a63900c..1234d68 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmlattribute/XmlAttributeCollectionTestCases.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmlattribute/XmlAttributeCollectionTestCases.java
@@ -26,7 +26,7 @@ public XmlAttributeCollectionTestCases(String name) throws Exception {
         super(name);
         setControlDocument(XML_RESOURCE);
         setControlJSON(JSON_RESOURCE);
-        Class[] classes = new Class[1];
+        Class<?>[] classes = new Class<?>[1];
         classes[0] = EmployeeCollection.class;
         setClasses(classes);
     }
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmlattribute/XmlAttributeNamespaceTestCases.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmlattribute/XmlAttributeNamespaceTestCases.java
index b3f1d4b..7a3f6ab 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmlattribute/XmlAttributeNamespaceTestCases.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmlattribute/XmlAttributeNamespaceTestCases.java
@@ -26,7 +26,7 @@ public XmlAttributeNamespaceTestCases(String name) throws Exception {
         super(name);
         setControlDocument(XML_RESOURCE);
         setControlJSON(JSON_RESOURCE);
-        Class[] classes = new Class[1];
+        Class<?>[] classes = new Class<?>[1];
         classes[0] = EmployeeNamespace.class;
         setClasses(classes);
     }
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmlattribute/XmlAttributeNoNamespaceTestCases.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmlattribute/XmlAttributeNoNamespaceTestCases.java
index 4912dd4..beb45b4 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmlattribute/XmlAttributeNoNamespaceTestCases.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmlattribute/XmlAttributeNoNamespaceTestCases.java
@@ -31,7 +31,7 @@ public XmlAttributeNoNamespaceTestCases(String name) throws Exception {
         super(name);
         setControlDocument(XML_RESOURCE);
         setControlJSON(JSON_RESOURCE);
-        Class[] classes = new Class[1];
+        Class<?>[] classes = new Class<?>[1];
         classes[0] = EmployeeNoNamespace.class;
         setClasses(classes);
     }
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmlattribute/emptynamespace/XmlAttributeEmptyNamespaceTestCases.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmlattribute/emptynamespace/XmlAttributeEmptyNamespaceTestCases.java
index 44885e0..150d30f 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmlattribute/emptynamespace/XmlAttributeEmptyNamespaceTestCases.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmlattribute/emptynamespace/XmlAttributeEmptyNamespaceTestCases.java
@@ -29,7 +29,7 @@ public XmlAttributeEmptyNamespaceTestCases(String name) throws Exception {
         super(name);
         setControlDocument(XML_RESOURCE);
         setControlJSON(JSON_RESOURCE);
-        setClasses(new Class[]{EmptyNamespaceTestObject.class});
+        setClasses(new Class<?>[]{EmptyNamespaceTestObject.class});
     }
 
     @Override
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmlattribute/imports/XmlAttributeImportsTestCases.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmlattribute/imports/XmlAttributeImportsTestCases.java
index 71e4654..b24af8e 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmlattribute/imports/XmlAttributeImportsTestCases.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmlattribute/imports/XmlAttributeImportsTestCases.java
@@ -31,7 +31,7 @@ public XmlAttributeImportsTestCases(String name) throws Exception {
         super(name);
         setControlDocument(XML_RESOURCE);
         setControlJSON(JSON_RESOURCE);
-        setClasses(new Class[]{Person.class});
+        setClasses(new Class<?>[]{Person.class});
     }
 
     @Override
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmlattribute/unqualified/AttributeFormUnqualifiedTestCases.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmlattribute/unqualified/AttributeFormUnqualifiedTestCases.java
index 0025bc6..9af2f4a 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmlattribute/unqualified/AttributeFormUnqualifiedTestCases.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmlattribute/unqualified/AttributeFormUnqualifiedTestCases.java
@@ -29,7 +29,7 @@ public AttributeFormUnqualifiedTestCases(String name) throws Exception {
         super(name);
         setControlDocument(XML_RESOURCE);
         setControlJSON(JSON_RESOURCE);
-        setClasses(new Class[]{TestObject.class});
+        setClasses(new Class<?>[]{TestObject.class});
     }
 
     @Override
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmlbindings/XMLBindingsPopulatedTestCases.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmlbindings/XMLBindingsPopulatedTestCases.java
index cc75048..180c7c5 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmlbindings/XMLBindingsPopulatedTestCases.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmlbindings/XMLBindingsPopulatedTestCases.java
@@ -59,7 +59,7 @@ public class XMLBindingsPopulatedTestCases extends JAXBWithJSONTestCases{
 
     public XMLBindingsPopulatedTestCases(String name) throws Exception {
         super(name);
-        setClasses(new Class[]{XmlBindings.class});
+        setClasses(new Class<?>[]{XmlBindings.class});
         setControlDocument(XML_RESOURCE);
         setControlJSON(JSON_RESOURCE);
         jaxbMarshaller.setProperty(MarshallerProperties.JSON_INCLUDE_ROOT, false);
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmlbindings/XMLBindingsTestCases.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmlbindings/XMLBindingsTestCases.java
index 7e1dbed..daf620c 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmlbindings/XMLBindingsTestCases.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmlbindings/XMLBindingsTestCases.java
@@ -37,7 +37,7 @@ public class XMLBindingsTestCases extends JAXBWithJSONTestCases{
 
     public XMLBindingsTestCases(String name) throws Exception {
         super(name);
-        setClasses(new Class[]{XmlBindings.class});
+        setClasses(new Class<?>[]{XmlBindings.class});
         setControlDocument(XML_RESOURCE);
         setControlJSON(JSON_RESOURCE);
     }
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmldecriptor/LazyInitTestCases.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmldecriptor/LazyInitTestCases.java
index 268ab46..30b126a 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmldecriptor/LazyInitTestCases.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmldecriptor/LazyInitTestCases.java
@@ -35,13 +35,13 @@ public LazyInitTestCases(String name) {
     }
 
     public void testEventManager() throws Exception {
-        JAXBContext jc = JAXBContextFactory.createContext(new Class[] {Root.class}, null);
+        JAXBContext jc = JAXBContextFactory.createContext(new Class<?>[] {Root.class}, null);
         XMLDescriptor xmlDescriptor = JAXBHelper.getJAXBContext(jc).getXMLContext().getDescriptor(new QName("root"));
         assertFalse(xmlDescriptor.hasEventManager());
     }
 
     public void testCopyPolicy() throws Exception {
-        JAXBContext jc = JAXBContextFactory.createContext(new Class[] {Root.class}, null);
+        JAXBContext jc = JAXBContextFactory.createContext(new Class<?>[] {Root.class}, null);
         XMLDescriptor xmlDescriptor = JAXBHelper.getJAXBContext(jc).getXMLContext().getDescriptor(new QName("root"));
 
         assertNull(getFieldValue(XMLDescriptor.class, "copyPolicy", xmlDescriptor));
@@ -49,7 +49,7 @@ public void testCopyPolicy() throws Exception {
     }
 
     public void testTreeObjectBuilder() throws Exception {
-        JAXBContext jc = JAXBContextFactory.createContext(new Class[] {Root.class}, null);
+        JAXBContext jc = JAXBContextFactory.createContext(new Class<?>[] {Root.class}, null);
         XMLDescriptor xmlDescriptor = JAXBHelper.getJAXBContext(jc).getXMLContext().getDescriptor(new QName("root"));
         TreeObjectBuilder treeObjectBuilder = (TreeObjectBuilder) xmlDescriptor.getObjectBuilder();
 
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmlelement/EmpytElementObjectTestCases.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmlelement/EmpytElementObjectTestCases.java
index 8c0c55f..bad9e0e 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmlelement/EmpytElementObjectTestCases.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmlelement/EmpytElementObjectTestCases.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
@@ -23,7 +23,7 @@ public class EmpytElementObjectTestCases extends JAXBTestCases {
 
     public EmpytElementObjectTestCases(String name) throws Exception {
         super(name);
-        setClasses(new Class[] {EmptyElementObjectRoot.class});
+        setClasses(new Class<?>[] {EmptyElementObjectRoot.class});
         setControlDocument(CONTROL_DOCUMENT_READ);
         setWriteControlDocument(CONTROL_DOCUMENT_WRITE);
     }
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmlelement/SameElementAttributeNameTestCases.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmlelement/SameElementAttributeNameTestCases.java
index a2ec46e..e14f31b 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmlelement/SameElementAttributeNameTestCases.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmlelement/SameElementAttributeNameTestCases.java
@@ -30,7 +30,7 @@ public SameElementAttributeNameTestCases(String name) throws Exception {
         super(name);
         setControlDocument(XML_RESOURCE);
         setControlJSON(JSON_RESOURCE);
-        Class[] classes = new Class<?>[]{EmployeeSameElementAttributeName.class};
+        Class<?>[] classes = new Class<?>[]{EmployeeSameElementAttributeName.class};
         setClasses(classes);
         jaxbMarshaller.setProperty(MarshallerProperties.JSON_ATTRIBUTE_PREFIX, "@");
         jaxbUnmarshaller.setProperty(UnmarshallerProperties.JSON_ATTRIBUTE_PREFIX, "@");
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmlelement/XmlElementCollectionTestCases.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmlelement/XmlElementCollectionTestCases.java
index 03f267f..a7b09bd 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmlelement/XmlElementCollectionTestCases.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmlelement/XmlElementCollectionTestCases.java
@@ -27,7 +27,7 @@ public XmlElementCollectionTestCases(String name) throws Exception {
         super(name);
         setControlDocument(XML_RESOURCE);
         setControlJSON(JSON_RESOURCE);
-        Class[] classes = new Class[1];
+        Class<?>[] classes = new Class<?>[1];
         classes[0] = EmployeeCollection.class;
         setClasses(classes);
         initXsiType();
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmlelement/XmlElementConstantsTestCases.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmlelement/XmlElementConstantsTestCases.java
index e1cc84c..fd9c647 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmlelement/XmlElementConstantsTestCases.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmlelement/XmlElementConstantsTestCases.java
@@ -27,7 +27,7 @@ public XmlElementConstantsTestCases(String name) throws Exception {
         super(name);
         setControlDocument(XML_RESOURCE);
         setControlJSON(JSON_RESOURCE);
-        Class[] classes = new Class[1];
+        Class<?>[] classes = new Class<?>[1];
         classes[0] = EmployeeWithConstants.class;
         setClasses(classes);
     }
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmlelement/XmlElementDefaultValueTestCases.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmlelement/XmlElementDefaultValueTestCases.java
index 472c2f1..131f0bc 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmlelement/XmlElementDefaultValueTestCases.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmlelement/XmlElementDefaultValueTestCases.java
@@ -32,7 +32,7 @@ public XmlElementDefaultValueTestCases(String name) throws Exception {
         setControlJSON(JSON_RESOURCE);
         setWriteControlDocument(XML_RESOURCE_WRITE);
         setWriteControlJSON(JSON_RESOURCE_WRITE);
-        Class[] classes = new Class[1];
+        Class<?>[] classes = new Class<?>[1];
         classes[0] = EmployeeDefaultValue.class;
         setClasses(classes);
     }
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmlelement/XmlElementNamespaceTestCases.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmlelement/XmlElementNamespaceTestCases.java
index 11a102d..a66e6a6 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmlelement/XmlElementNamespaceTestCases.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmlelement/XmlElementNamespaceTestCases.java
@@ -26,7 +26,7 @@ public XmlElementNamespaceTestCases(String name) throws Exception {
         super(name);
         setControlDocument(XML_RESOURCE);
         setControlJSON(JSON_RESOURCE);
-        Class[] classes = new Class[1];
+        Class<?>[] classes = new Class<?>[1];
         classes[0] = EmployeeNamespace.class;
         setClasses(classes);
     }
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmlelement/XmlElementNillableTestCases.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmlelement/XmlElementNillableTestCases.java
index 24fb123..0e60314 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmlelement/XmlElementNillableTestCases.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmlelement/XmlElementNillableTestCases.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
@@ -26,7 +26,7 @@ public XmlElementNillableTestCases(String name) throws Exception {
         super(name);
         setControlDocument(XML_RESOURCE);
         setControlJSON(JSON_RESOURCE);
-        Class[] classes = new Class[1];
+        Class<?>[] classes = new Class<?>[1];
         classes[0] = EmployeeNillable.class;
         setClasses(classes);
     }
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmlelement/XmlElementNoNamespaceTestCases.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmlelement/XmlElementNoNamespaceTestCases.java
index 2190e76..7138cbc 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmlelement/XmlElementNoNamespaceTestCases.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmlelement/XmlElementNoNamespaceTestCases.java
@@ -40,7 +40,7 @@ public XmlElementNoNamespaceTestCases(String name) throws Exception {
         super(name);
         setControlDocument(XML_RESOURCE);
         setControlJSON(JSON_RESOURCE);
-        Class[] classes = new Class[1];
+        Class<?>[] classes = new Class<?>[1];
         classes[0] = EmployeeNoNamespace.class;
         setClasses(classes);
 
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmlelement/model/EmptyCollectionTestCases.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmlelement/model/EmptyCollectionTestCases.java
index e378317..dca42f2 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmlelement/model/EmptyCollectionTestCases.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmlelement/model/EmptyCollectionTestCases.java
@@ -27,7 +27,7 @@ public class EmptyCollectionTestCases extends JAXBWithJSONTestCases{
 
     public EmptyCollectionTestCases(String name) throws Exception {
         super(name);
-        setClasses(new Class[]{Order.class});
+        setClasses(new Class<?>[]{Order.class});
         setControlDocument(XML_RESOURCE);
         setControlJSON(JSON_RESOURCE);
     }
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmlelement/model/FullTestCases.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmlelement/model/FullTestCases.java
index d16bd94..1fbf4bc 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmlelement/model/FullTestCases.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmlelement/model/FullTestCases.java
@@ -27,7 +27,7 @@ public class FullTestCases extends JAXBWithJSONTestCases{
 
     public FullTestCases(String name) throws Exception {
         super(name);
-        setClasses(new Class[]{Order.class});
+        setClasses(new Class<?>[]{Order.class});
         setControlDocument(XML_RESOURCE);
         setControlJSON(JSON_RESOURCE);
     }
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmlelement/model/SpecialCharacterTestCases.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmlelement/model/SpecialCharacterTestCases.java
index 43e5641..a6633b2 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmlelement/model/SpecialCharacterTestCases.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmlelement/model/SpecialCharacterTestCases.java
@@ -27,7 +27,7 @@ public class SpecialCharacterTestCases extends JAXBWithJSONTestCases {
 
     public SpecialCharacterTestCases(String name) throws Exception {
         super(name);
-        setClasses(new Class[]{Order.class});
+        setClasses(new Class<?>[]{Order.class});
         setControlDocument(XML_RESOURCE);
         setControlJSON(JSON_RESOURCE);
     }
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmlelement/nulls/NullTestCases.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmlelement/nulls/NullTestCases.java
index 6e81766..2d8aa97 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmlelement/nulls/NullTestCases.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmlelement/nulls/NullTestCases.java
@@ -35,7 +35,7 @@ public NullTestCases(String name) throws Exception {
         setWriteControlDocument(XML_WRITE_RESOURCE);
         setControlJSON(JSON_RESOURCE);
         setWriteControlJSON(JSON_WRITE_RESOURCE);
-        setClasses(new Class[]{Root.class, Child.class});
+        setClasses(new Class<?>[]{Root.class, Child.class});
     }
 
     @Override
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmlelement/order/ElementOrderingTestCases.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmlelement/order/ElementOrderingTestCases.java
index 9797891..ff7d1d6 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmlelement/order/ElementOrderingTestCases.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmlelement/order/ElementOrderingTestCases.java
@@ -31,7 +31,7 @@ public ElementOrderingTestCases(String name) throws Exception {
         super(name);
         setControlDocument(XML_RESOURCE);
         setControlJSON(JSON_RESOURCE);
-        Class[] classes = new Class[]{AlbumInfo.class};
+        Class<?>[] classes = new Class<?>[]{AlbumInfo.class};
         setClasses(classes);
         jaxbMarshaller.setProperty(MarshallerProperties.JSON_INCLUDE_ROOT, false);
         jaxbUnmarshaller.setProperty(UnmarshallerProperties.JSON_INCLUDE_ROOT, false);
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmlelement/self/XmlElementSelfTestCases.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmlelement/self/XmlElementSelfTestCases.java
index f276c8e..3f08bba 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmlelement/self/XmlElementSelfTestCases.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmlelement/self/XmlElementSelfTestCases.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
@@ -36,7 +36,7 @@ public XmlElementSelfTestCases(String name) throws Exception {
         super(name);
         setControlDocument(XML_RESOURCE);
         setControlJSON(JSON_RESOURCE);
-        Class[] classes = new Class[2];
+        Class<?>[] classes = new Class<?>[2];
         classes[0] = Root.class;
         classes[1] = Thing.class;
         setClasses(classes);
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmlelement/type/TypeBarTestCases.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmlelement/type/TypeBarTestCases.java
index 50d7f14..ae8a8ca 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmlelement/type/TypeBarTestCases.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmlelement/type/TypeBarTestCases.java
@@ -29,7 +29,7 @@ public TypeBarTestCases(String name) throws Exception {
         super(name);
         setControlDocument(XML_RESOURCE);
         setControlJSON(JSON_RESOURCE);
-        Class[] classes = new Class[]{Foo.class, Bar.class, BarXmlValue.class};
+        Class<?>[] classes = new Class<?>[]{Foo.class, Bar.class, BarXmlValue.class};
         setClasses(classes);
     }
 
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmlelement/type/TypeBarXmlValueTestCases.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmlelement/type/TypeBarXmlValueTestCases.java
index 704e01b..ffc02e6 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmlelement/type/TypeBarXmlValueTestCases.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmlelement/type/TypeBarXmlValueTestCases.java
@@ -29,7 +29,7 @@ public TypeBarXmlValueTestCases(String name) throws Exception {
         super(name);
         setControlDocument(XML_RESOURCE);
         setControlJSON(JSON_RESOURCE);
-        Class[] classes = new Class[]{Foo.class, Bar.class, BarXmlValue.class};
+        Class<?>[] classes = new Class<?>[]{Foo.class, Bar.class, BarXmlValue.class};
         setClasses(classes);
     }
 
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmlelement/type/TypeNoTypeTestCases.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmlelement/type/TypeNoTypeTestCases.java
index 69ef9b0..626697e 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmlelement/type/TypeNoTypeTestCases.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmlelement/type/TypeNoTypeTestCases.java
@@ -28,7 +28,7 @@ public TypeNoTypeTestCases(String name) throws Exception {
         super(name);
         setControlDocument(XML_RESOURCE);
         setControlJSON(JSON_RESOURCE);
-        Class[] classes = new Class[]{Foo.class, Bar.class, BarXmlValue.class};
+        Class<?>[] classes = new Class<?>[]{Foo.class, Bar.class, BarXmlValue.class};
         setClasses(classes);
     }
 
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmlelement/type/TypeSimpleTestCases.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmlelement/type/TypeSimpleTestCases.java
index d97074f..912812d 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmlelement/type/TypeSimpleTestCases.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmlelement/type/TypeSimpleTestCases.java
@@ -29,7 +29,7 @@ public TypeSimpleTestCases(String name) throws Exception {
         super(name);
         setControlDocument(XML_RESOURCE);
         setControlJSON(JSON_RESOURCE);
-        Class[] classes = new Class[]{Foo.class, Bar.class, BarXmlValue.class};
+        Class<?>[] classes = new Class<?>[]{Foo.class, Bar.class, BarXmlValue.class};
         setClasses(classes);
         initXsiType();
     }
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmlelementref/ByteArrayCollectionTestCases.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmlelementref/ByteArrayCollectionTestCases.java
index eb1b4c0..ffd00e0 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmlelementref/ByteArrayCollectionTestCases.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmlelementref/ByteArrayCollectionTestCases.java
@@ -32,7 +32,7 @@ public ByteArrayCollectionTestCases(String name) throws Exception {
         super(name);
         setControlDocument(XML_RESOURCE);
         setControlJSON(JSON_RESOURCE);
-        Class[] classes = new Class[2];
+        Class<?>[] classes = new Class<?>[2];
         classes[0] = FooObjectFactory.class;
         classes[1] = Foo.class;
         setClasses(classes);
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmlelementref/EmployeeCollectionTestCases.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmlelementref/EmployeeCollectionTestCases.java
index 8d41733..386eb40 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmlelementref/EmployeeCollectionTestCases.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmlelementref/EmployeeCollectionTestCases.java
@@ -29,7 +29,7 @@ public EmployeeCollectionTestCases(String name) throws Exception {
         super(name);
         setControlDocument(XML_RESOURCE);
         setControlJSON(JSON_RESOURCE);
-        Class[] classes = new Class[1];
+        Class<?>[] classes = new Class<?>[1];
         classes[0] = TestObjectFactory.class;
         setClasses(classes);
     }
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmlelementref/EmployeeSingleTestCases.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmlelementref/EmployeeSingleTestCases.java
index a12ce40..7cc0de6 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmlelementref/EmployeeSingleTestCases.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmlelementref/EmployeeSingleTestCases.java
@@ -27,7 +27,7 @@ public EmployeeSingleTestCases(String name) throws Exception {
         super(name);
         setControlDocument(XML_RESOURCE);
         setControlJSON(JSON_RESOURCE);
-        Class[] classes = new Class[1];
+        Class<?>[] classes = new Class<?>[1];
         classes[0] = TestObjectFactory.class;
         setClasses(classes);
     }
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmlelementref/XMLElementRefConverterTestCases.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmlelementref/XMLElementRefConverterTestCases.java
index db22df0..8e6a2c8 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmlelementref/XMLElementRefConverterTestCases.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmlelementref/XMLElementRefConverterTestCases.java
@@ -29,7 +29,7 @@ public XMLElementRefConverterTestCases(String name) throws Exception {
         super(name);
         setControlDocument(XML_RESOURCE);
         setControlJSON(JSON_RESOURCE);
-        Class[] classes = new Class[1];
+        Class<?>[] classes = new Class<?>[1];
         classes[0] = ComplexTypeObjectFactory.class;
         setClasses(classes);
     }
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmlelementref/attachment/XMLElementRefAttachmentEmptyTestCases.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmlelementref/attachment/XMLElementRefAttachmentEmptyTestCases.java
index 02ef415..d8b800b 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmlelementref/attachment/XMLElementRefAttachmentEmptyTestCases.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmlelementref/attachment/XMLElementRefAttachmentEmptyTestCases.java
@@ -39,7 +39,7 @@ public XMLElementRefAttachmentEmptyTestCases(String name) throws Exception {
         super(name);
         setControlDocument(XML_RESOURCE);
         setControlJSON(JSON_RESOURCE);
-        Class[] classes = new Class[2];
+        Class<?>[] classes = new Class<?>[2];
         classes[0] = ObjectFactory.class;
         classes[1] = Employee.class;
         setClasses(classes);
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmlelementref/attachment/XMLElementRefAttachmentNullTestCases.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmlelementref/attachment/XMLElementRefAttachmentNullTestCases.java
index aff7abd..a82dab9 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmlelementref/attachment/XMLElementRefAttachmentNullTestCases.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmlelementref/attachment/XMLElementRefAttachmentNullTestCases.java
@@ -39,7 +39,7 @@ public XMLElementRefAttachmentNullTestCases(String name) throws Exception {
         super(name);
         setControlDocument(XML_RESOURCE);
         setControlJSON(JSON_RESOURCE);
-        Class[] classes = new Class[2];
+        Class<?>[] classes = new Class<?>[2];
         classes[0] = ObjectFactory.class;
         classes[1] = Employee.class;
         setClasses(classes);
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmlelementref/attachment/XMLElementRefAttachmentTestCases.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmlelementref/attachment/XMLElementRefAttachmentTestCases.java
index 7eed7f9..0858c49 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmlelementref/attachment/XMLElementRefAttachmentTestCases.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmlelementref/attachment/XMLElementRefAttachmentTestCases.java
@@ -38,7 +38,7 @@ public XMLElementRefAttachmentTestCases(String name) throws Exception {
         super(name);
         setControlDocument(XML_RESOURCE);
         setControlJSON(JSON_RESOURCE);
-        Class[] classes = new Class[2];
+        Class<?>[] classes = new Class<?>[2];
         classes[0] = ObjectFactory.class;
         classes[1] = Employee.class;
         setClasses(classes);
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmlelementref/attachment/XMLElementRefNullTestCases.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmlelementref/attachment/XMLElementRefNullTestCases.java
index 5a11d61..14c7af2 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmlelementref/attachment/XMLElementRefNullTestCases.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmlelementref/attachment/XMLElementRefNullTestCases.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,7 @@ public XMLElementRefNullTestCases(String name) throws Exception {
         super(name);
         setControlDocument(XML_RESOURCE);
         setControlJSON(JSON_RESOURCE);
-        Class[] classes = new Class[2];
+        Class<?>[] classes = new Class<?>[2];
         classes[0] = ObjectFactory.class;
         classes[1] = Employee.class;
         setClasses(classes);
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmlelementref/attachment/XMLElementRefTestCases.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmlelementref/attachment/XMLElementRefTestCases.java
index 473bce3..36e0cf6 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmlelementref/attachment/XMLElementRefTestCases.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmlelementref/attachment/XMLElementRefTestCases.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,7 @@ public XMLElementRefTestCases(String name) throws Exception {
         super(name);
         setControlDocument(XML_RESOURCE);
         setControlJSON(JSON_RESOURCE);
-        Class[] classes = new Class[2];
+        Class<?>[] classes = new Class<?>[2];
         classes[0] = ObjectFactory.class;
         classes[1] = Employee.class;
         setClasses(classes);
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmlelementref/collections/ChoiceCollectionNullTestCases.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmlelementref/collections/ChoiceCollectionNullTestCases.java
index 87d32eb..1401cda 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmlelementref/collections/ChoiceCollectionNullTestCases.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmlelementref/collections/ChoiceCollectionNullTestCases.java
@@ -37,7 +37,7 @@ public ChoiceCollectionNullTestCases(String name) throws Exception {
         super(name);
         setControlDocument(XML_RESOURCE);
         setControlJSON(JSON_RESOURCE);
-        Class[] classes = new Class[]{Wrapper.class};
+        Class<?>[] classes = new Class<?>[]{Wrapper.class};
         setClasses(classes);
         jaxbUnmarshaller.setAttachmentUnmarshaller(new MyAttachmentUnmarshaller());
 
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmlelementref/collections/ChoiceCollectionTestCases.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmlelementref/collections/ChoiceCollectionTestCases.java
index 66230d0..258ece1 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmlelementref/collections/ChoiceCollectionTestCases.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmlelementref/collections/ChoiceCollectionTestCases.java
@@ -36,7 +36,7 @@ public ChoiceCollectionTestCases(String name) throws Exception {
         super(name);
         setControlDocument(XML_RESOURCE);
         setControlJSON(JSON_RESOURCE);
-        Class[] classes = new Class[]{Wrapper.class};
+        Class<?>[] classes = new Class<?>[]{Wrapper.class};
         setClasses(classes);
         jaxbUnmarshaller.setAttachmentUnmarshaller(new MyAttachmentUnmarshaller());
 
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmlelementref/duplicatename/DuplicateNameTestCases.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmlelementref/duplicatename/DuplicateNameTestCases.java
index e13d449..c5b10f3 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmlelementref/duplicatename/DuplicateNameTestCases.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmlelementref/duplicatename/DuplicateNameTestCases.java
@@ -33,7 +33,7 @@ public DuplicateNameTestCases(String name) throws Exception {
         super(name);
         setControlDocument(XML_RESOURCE);
         setControlJSON(JSON_RESOURCE);
-        Class[] classes = new Class[1];
+        Class<?>[] classes = new Class<?>[1];
         classes[0] = ObjectFactory.class;
         setClasses(classes);
 
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmlelementref/enums/EnumTestCases.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmlelementref/enums/EnumTestCases.java
index 3d4262e..34c5854 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmlelementref/enums/EnumTestCases.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmlelementref/enums/EnumTestCases.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
@@ -27,7 +27,7 @@ public class EnumTestCases extends JAXBWithJSONTestCases {
 
     public EnumTestCases(String name) throws Exception {
         super(name);
-        setClasses(new Class[] {Root.class, Registry.class});
+        setClasses(new Class<?>[] {Root.class, Registry.class});
         setControlDocument(XML_RESOURCE);
         setControlJSON(JSON_RESOURCE);
     }
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmlelementref/inheritance1/Inheritance1TestCases.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmlelementref/inheritance1/Inheritance1TestCases.java
index 552f3a3..38def66 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmlelementref/inheritance1/Inheritance1TestCases.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmlelementref/inheritance1/Inheritance1TestCases.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,7 @@ public Inheritance1TestCases(String name) throws Exception {
         super(name);
         setControlDocument(XML_RESOURCE);
         setControlJSON(JSON_RESOURCE);
-        Class[] classes = new Class[2];
+        Class<?>[] classes = new Class<?>[2];
         classes[0] = Customer.class;
         classes[1] = Address.class;
         setClasses(classes);
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmlelementref/inheritance2/Inheritance2TestCases.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmlelementref/inheritance2/Inheritance2TestCases.java
index 1ed7b51..2e4a3c5 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmlelementref/inheritance2/Inheritance2TestCases.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmlelementref/inheritance2/Inheritance2TestCases.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,7 @@ public Inheritance2TestCases(String name) throws Exception {
         super(name);
         setControlDocument(XML_RESOURCE);
         setControlJSON(JSON_RESOURCE);
-        Class[] classes = new Class[2];
+        Class<?>[] classes = new Class<?>[2];
         classes[0] = Customer.class;
         classes[1] = Address.class;
         setClasses(classes);
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmlelementref/missingref/MissingRefTestCases.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmlelementref/missingref/MissingRefTestCases.java
index c2b6b67..0a11b2d 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmlelementref/missingref/MissingRefTestCases.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmlelementref/missingref/MissingRefTestCases.java
@@ -32,7 +32,7 @@ public MissingRefTestCases(String name) throws Exception {
         super(name);
         setControlDocument(XML_RESOURCE);
         setControlJSON(JSON_RESOURCE);
-        Class[] classes = new Class[2];
+        Class<?>[] classes = new Class<?>[2];
         classes[0] = MissingRefObjectFactory.class;
         classes[1] = Person.class;
         setClasses(classes);
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmlelementref/mixed/XmlElementRefMixedContentTestCases.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmlelementref/mixed/XmlElementRefMixedContentTestCases.java
index c63e584..0c2d328 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmlelementref/mixed/XmlElementRefMixedContentTestCases.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmlelementref/mixed/XmlElementRefMixedContentTestCases.java
@@ -27,7 +27,7 @@ public XmlElementRefMixedContentTestCases(String name) throws Exception {
         super(name);
         setControlDocument(XML_RESOURCE);
         setControlJSON(JSON_RESOURCE);
-        Class[] classes = new Class[2];
+        Class<?>[] classes = new Class<?>[2];
         classes[0] = Employee.class;
         classes[1] = Task.class;
         setClasses(classes);
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmlelementref/nills/XmlElementRefNillWithAttributesTestCases.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmlelementref/nills/XmlElementRefNillWithAttributesTestCases.java
index fda67b0..20f4be4 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmlelementref/nills/XmlElementRefNillWithAttributesTestCases.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmlelementref/nills/XmlElementRefNillWithAttributesTestCases.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
@@ -33,7 +33,7 @@ public class XmlElementRefNillWithAttributesTestCases extends JAXBTestCases {
     public XmlElementRefNillWithAttributesTestCases(String name) throws Exception {
         super(name);
         setControlDocument(XML_RESOURCE);
-        Class[] classes = new Class[] {ObjectFactory.class, Employee.class};
+        Class<?>[] classes = new Class<?>[] {ObjectFactory.class, Employee.class};
         setClasses(classes);
     }
 
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmlelementref/notincontext/XmlElementRefNotGivenToContextTestCases.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmlelementref/notincontext/XmlElementRefNotGivenToContextTestCases.java
index 71ac2b3..1e9e41c 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmlelementref/notincontext/XmlElementRefNotGivenToContextTestCases.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmlelementref/notincontext/XmlElementRefNotGivenToContextTestCases.java
@@ -24,7 +24,7 @@ public class XmlElementRefNotGivenToContextTestCases extends JAXBWithJSONTestCas
     private final static String JSON_RESOURCE = "org/eclipse/persistence/testing/jaxb/xmlelementref/root.json";
     public XmlElementRefNotGivenToContextTestCases(String name)throws Exception {
         super(name);
-        setClasses(new Class[]{Root.class});
+        setClasses(new Class<?>[]{Root.class});
         setControlDocument(XML_RESOURCE);
         setControlJSON(JSON_RESOURCE);
     }
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmlelementref/ns/XmlElementRefWithNamespaceTests.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmlelementref/ns/XmlElementRefWithNamespaceTests.java
index 5c63032..ac8d976 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmlelementref/ns/XmlElementRefWithNamespaceTests.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmlelementref/ns/XmlElementRefWithNamespaceTests.java
@@ -36,7 +36,7 @@ public class XmlElementRefWithNamespaceTests extends JAXBWithJSONTestCases {
 
     public XmlElementRefWithNamespaceTests(String name) throws Exception {
         super(name);
-        setClasses(new Class[]{ EchoByteArray.class, ObjectFactory.class });
+        setClasses(new Class<?>[]{ EchoByteArray.class, ObjectFactory.class });
         setControlDocument(XML_RESOURCE);
         setControlJSON(JSON_RESOURCE);
 
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmlelementref/prefix/XmlElementRefPrefixesTestCases.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmlelementref/prefix/XmlElementRefPrefixesTestCases.java
index e7c1f52..6d27430 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmlelementref/prefix/XmlElementRefPrefixesTestCases.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmlelementref/prefix/XmlElementRefPrefixesTestCases.java
@@ -31,7 +31,7 @@ public class XmlElementRefPrefixesTestCases extends JAXBWithJSONTestCases{
 
     public XmlElementRefPrefixesTestCases(String name) throws Exception {
         super(name);
-        setClasses(new Class[]{Root.class});
+        setClasses(new Class<?>[]{Root.class});
         setControlDocument(XML_RESOURCE);
         setControlJSON(JSON_RESOURCE);
     }
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmlelementrefs/adapter/XmlElementRefsAdapterTestCases.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmlelementrefs/adapter/XmlElementRefsAdapterTestCases.java
index ac4dd1e..f1b4147 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmlelementrefs/adapter/XmlElementRefsAdapterTestCases.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmlelementrefs/adapter/XmlElementRefsAdapterTestCases.java
@@ -37,7 +37,7 @@ public XmlElementRefsAdapterTestCases(String name) throws Exception {
         super(name);
         setControlJSON(JSON_RESOURCE);
         setControlDocument(XML_RESOURCE);
-        setClasses(new Class[]{Foo.class, ObjectFactory.class});
+        setClasses(new Class<?>[]{Foo.class, ObjectFactory.class});
     }
 
     @Override
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmlelements/CircularTestCases.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmlelements/CircularTestCases.java
index 94dac74..e4fc540 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmlelements/CircularTestCases.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmlelements/CircularTestCases.java
@@ -30,7 +30,7 @@ public CircularTestCases(String name) throws Exception {
             super(name);
             setControlDocument(XML_RESOURCE);
             setControlJSON(JSON_RESOURCE);
-            Class[] classes = new Class[1];
+            Class<?>[] classes = new Class<?>[1];
             classes[0] = Root.class;
             setClasses(classes);
         }
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmlelements/PredicateAddressTestCases.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmlelements/PredicateAddressTestCases.java
index 365e4f6..7f2c9ab 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmlelements/PredicateAddressTestCases.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmlelements/PredicateAddressTestCases.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,7 +25,7 @@ public PredicateAddressTestCases(String name) throws Exception {
         super(name);
         setControlDocument(XML_RESOURCE);
         setControlJSON(JSON_RESOURCE);
-        setClasses(new Class[]{CustomerPredicate.class});
+        setClasses(new Class<?>[]{CustomerPredicate.class});
     }
 
     @Override
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmlelements/PredicateLinkTestCases.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmlelements/PredicateLinkTestCases.java
index 93e0548..2b2442f 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmlelements/PredicateLinkTestCases.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmlelements/PredicateLinkTestCases.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,7 +25,7 @@ public PredicateLinkTestCases(String name) throws Exception {
         super(name);
         setControlDocument(XML_RESOURCE);
         setControlJSON(JSON_RESOURCE);
-        setClasses(new Class[]{CustomerPredicate.class});
+        setClasses(new Class<?>[]{CustomerPredicate.class});
     }
 
     @Override
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmlelements/SameFieldAddressTestCases.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmlelements/SameFieldAddressTestCases.java
index 662bf9e..cd02910 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmlelements/SameFieldAddressTestCases.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmlelements/SameFieldAddressTestCases.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,7 +25,7 @@ public SameFieldAddressTestCases(String name) throws Exception {
         super(name);
         setControlDocument(XML_RESOURCE);
         setControlJSON(JSON_RESOURCE);
-        setClasses(new Class[]{Customer.class});
+        setClasses(new Class<?>[]{Customer.class});
     }
 
     @Override
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmlelements/SameFieldCollectionAddressTestCases.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmlelements/SameFieldCollectionAddressTestCases.java
index bc2d46b..6b0d40c 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmlelements/SameFieldCollectionAddressTestCases.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmlelements/SameFieldCollectionAddressTestCases.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
@@ -27,7 +27,7 @@ public SameFieldCollectionAddressTestCases(String name) throws Exception {
         super(name);
         setControlDocument(XML_RESOURCE);
         setControlJSON(JSON_RESOURCE);
-        setClasses(new Class[]{CustomerCollection.class});
+        setClasses(new Class<?>[]{CustomerCollection.class});
     }
 
     @Override
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmlelements/SameFieldCollectionLinkTestCases.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmlelements/SameFieldCollectionLinkTestCases.java
index fab1ca1..e074e06 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmlelements/SameFieldCollectionLinkTestCases.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmlelements/SameFieldCollectionLinkTestCases.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
@@ -27,7 +27,7 @@ public SameFieldCollectionLinkTestCases(String name) throws Exception {
         super(name);
         setControlDocument(XML_RESOURCE);
         setControlJSON(JSON_RESOURCE);
-        setClasses(new Class[]{CustomerCollection.class});
+        setClasses(new Class<?>[]{CustomerCollection.class});
     }
 
     @Override
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmlelements/SameFieldLinkTestCases.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmlelements/SameFieldLinkTestCases.java
index 53f4a3a..ef485eb 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmlelements/SameFieldLinkTestCases.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmlelements/SameFieldLinkTestCases.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,7 +25,7 @@ public SameFieldLinkTestCases(String name) throws Exception {
         super(name);
         setControlDocument(XML_RESOURCE);
         setControlJSON(JSON_RESOURCE);
-        setClasses(new Class[]{Customer.class});
+        setClasses(new Class<?>[]{Customer.class});
     }
 
     @Override
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmlelements/XmlElementsAdapterTestCases.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmlelements/XmlElementsAdapterTestCases.java
index d918165..ea2fad1 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmlelements/XmlElementsAdapterTestCases.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmlelements/XmlElementsAdapterTestCases.java
@@ -35,7 +35,7 @@ public XmlElementsAdapterTestCases(String name) throws Exception {
         super(name);
         setControlDocument(XML_RESOURCE);
         setControlJSON(JSON_RESOURCE);
-        Class[] classes = new Class[2];
+        Class<?>[] classes = new Class<?>[2];
         classes[0] = Employee.class;
         classes[1] = Address.class;
         setClasses(classes);
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmlelements/XmlElementsArrayTestCases.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmlelements/XmlElementsArrayTestCases.java
index 4a7b79a..aa4c649 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmlelements/XmlElementsArrayTestCases.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmlelements/XmlElementsArrayTestCases.java
@@ -32,7 +32,7 @@ public XmlElementsArrayTestCases(String name) throws Exception {
         super(name);
         setControlDocument(XML_RESOURCE);
         setControlJSON(JSON_RESOURCE);
-        Class[] classes = new Class[2];
+        Class<?>[] classes = new Class<?>[2];
         classes[0] = EmployeeArray.class;
         classes[1] = Address.class;
         setClasses(classes);
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmlelements/XmlElementsCollectionTestCases.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmlelements/XmlElementsCollectionTestCases.java
index d87d360..6ac4ca9 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmlelements/XmlElementsCollectionTestCases.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmlelements/XmlElementsCollectionTestCases.java
@@ -29,7 +29,7 @@ public XmlElementsCollectionTestCases(String name) throws Exception {
         super(name);
         setControlDocument(XML_RESOURCE);
         setControlJSON(JSON_RESOURCE);
-        Class[] classes = new Class[2];
+        Class<?>[] classes = new Class<?>[2];
         classes[0] = EmployeeCollection.class;
         classes[1] = Address.class;
         setClasses(classes);
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmlelements/XmlElementsComplexTestCases.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmlelements/XmlElementsComplexTestCases.java
index 04f7821..fec4f1e 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmlelements/XmlElementsComplexTestCases.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmlelements/XmlElementsComplexTestCases.java
@@ -32,7 +32,7 @@ public XmlElementsComplexTestCases(String name) throws Exception {
         super(name);
         setControlDocument(XML_RESOURCE);
         setControlJSON(JSON_RESOURCE);
-        Class[] classes = new Class[2];
+        Class<?>[] classes = new Class<?>[2];
         classes[0] = Employee.class;
         classes[1] = Address.class;
         setClasses(classes);
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmlelements/XmlElementsInheritanceTestCases.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmlelements/XmlElementsInheritanceTestCases.java
index 194a8a2..4df6772 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmlelements/XmlElementsInheritanceTestCases.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmlelements/XmlElementsInheritanceTestCases.java
@@ -34,7 +34,7 @@ public XmlElementsInheritanceTestCases(String name) throws Exception {
         super(name);
         setControlDocument(XML_RESOURCE);
         setControlJSON(JSON_RESOURCE);
-        Class[] classes = new Class[3];
+        Class<?>[] classes = new Class<?>[3];
         classes[0] = EmployeeCollection.class;
         classes[1] = Address.class;
         classes[2] = CanadianAddress.class;
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmlelements/XmlElementsIntegerTestCases.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmlelements/XmlElementsIntegerTestCases.java
index 7a1eaae..59b6991 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmlelements/XmlElementsIntegerTestCases.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmlelements/XmlElementsIntegerTestCases.java
@@ -29,7 +29,7 @@ public XmlElementsIntegerTestCases(String name) throws Exception {
         super(name);
         setControlDocument(XML_RESOURCE);
         setControlJSON(JSON_RESOURCE);
-        Class[] classes = new Class[2];
+        Class<?>[] classes = new Class<?>[2];
         classes[0] = Employee.class;
         classes[1] = Address.class;
         setClasses(classes);
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmlelements/XmlElementsReferencedClassTestCases.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmlelements/XmlElementsReferencedClassTestCases.java
index 1beb544..611cc54 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmlelements/XmlElementsReferencedClassTestCases.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmlelements/XmlElementsReferencedClassTestCases.java
@@ -26,7 +26,7 @@ public XmlElementsReferencedClassTestCases(String name) throws Exception {
         super(name);
         setControlDocument(XML_RESOURCE);
         setControlJSON(JSON_RESOURCE);
-        Class[] classes = new Class[1];
+        Class<?>[] classes = new Class<?>[1];
         classes[0] = Employee.class;
         setClasses(classes);
     }
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmlelements/XmlElementsStringTestCases.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmlelements/XmlElementsStringTestCases.java
index 91b9aa1..8d49ba8 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmlelements/XmlElementsStringTestCases.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmlelements/XmlElementsStringTestCases.java
@@ -29,7 +29,7 @@ public XmlElementsStringTestCases(String name) throws Exception {
         super(name);
         setControlDocument(XML_RESOURCE);
         setControlJSON(JSON_RESOURCE);
-        Class[] classes = new Class[2];
+        Class<?>[] classes = new Class<?>[2];
         classes[0] = Employee.class;
         classes[1] = Address.class;
         setClasses(classes);
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 e8740df..3b202fa 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
@@ -44,7 +44,7 @@ public class XmlElementWrapperTestCases extends JAXBWithJSONTestCases{
      */
     public XmlElementWrapperTestCases(String name) throws Exception {
         super(name);
-        setClasses(new Class[] { Department.class });
+        setClasses(new Class<?>[] { Department.class });
         setControlDocument(XML_RESOURCE);
         setControlJSON(JSON_RESOURCE);
     }
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmlenum/EnumSwitchTestCases.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmlenum/EnumSwitchTestCases.java
index b5c60a2..3aa82d5 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmlenum/EnumSwitchTestCases.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmlenum/EnumSwitchTestCases.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,7 @@ public EnumSwitchTestCases(String name) {
     }
 
     public void testCreateContext() throws JAXBException {
-        JAXBContextFactory.createContext(new Class[] {EnumSwitchRoot.class}, null);
+        JAXBContextFactory.createContext(new Class<?>[] {EnumSwitchRoot.class}, null);
     }
 
 }
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmlenum/InvalidEnumValueTestCases.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmlenum/InvalidEnumValueTestCases.java
index 6a1f411..5e36d94 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmlenum/InvalidEnumValueTestCases.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmlenum/InvalidEnumValueTestCases.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,7 @@ public InvalidEnumValueTestCases(String name) {
     public void testCreateContext() throws JAXBException{
         try
         {
-           JAXBContextFactory.createContext(new Class[] {InvalidEnum.class}, null);
+           JAXBContextFactory.createContext(new Class<?>[] {InvalidEnum.class}, null);
         }catch(JAXBException jException){
              org.eclipse.persistence.exceptions.JAXBException linkedException  = ( org.eclipse.persistence.exceptions.JAXBException)jException.getLinkedException();
 
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmlenum/SpaceTestCases.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmlenum/SpaceTestCases.java
index 2b5093d..8ff7020 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmlenum/SpaceTestCases.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmlenum/SpaceTestCases.java
@@ -33,7 +33,7 @@ public SpaceTestCases(String name) throws Exception {
         setControlDocument(XML_RESOURCE);
         setWriteControlDocument(XML_RESOURCE_WRITE);
         setControlJSON(JSON_RESOURCE);
-        Class[] classes = new Class[1];
+        Class<?>[] classes = new Class<?>[1];
         classes[0] = SpaceRoot.class;
         setClasses(classes);
     }
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmlenum/XmlEnumAttributeCollectionTestCases.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmlenum/XmlEnumAttributeCollectionTestCases.java
index 2fe8300..125c4f7 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmlenum/XmlEnumAttributeCollectionTestCases.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmlenum/XmlEnumAttributeCollectionTestCases.java
@@ -33,7 +33,7 @@ public XmlEnumAttributeCollectionTestCases(String name) throws Exception {
         setControlDocument(XML_RESOURCE);
         setControlJSON(JSON_RESOURCE);
 
-        Class[] classes = new Class[2];
+        Class<?>[] classes = new Class<?>[2];
         classes[0] = EmployeeDepartmentAttributeList.class;
         classes[1] = Department.class;
         setClasses(classes);
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmlenum/XmlEnumAttributeTestCases.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmlenum/XmlEnumAttributeTestCases.java
index 3ee60eb..f8fdc6c 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmlenum/XmlEnumAttributeTestCases.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmlenum/XmlEnumAttributeTestCases.java
@@ -31,7 +31,7 @@ public XmlEnumAttributeTestCases(String name) throws Exception {
         super(name);
         setControlDocument(XML_RESOURCE);
         setControlJSON(JSON_RESOURCE);
-        Class[] classes = new Class[2];
+        Class<?>[] classes = new Class<?>[2];
         classes[0] = EmployeeDepartmentAttribute.class;
         classes[1] = Department.class;
         setClasses(classes);
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmlenum/XmlEnumChoiceCollectionTestCases.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmlenum/XmlEnumChoiceCollectionTestCases.java
index 7065ce4..e16f87a 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmlenum/XmlEnumChoiceCollectionTestCases.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmlenum/XmlEnumChoiceCollectionTestCases.java
@@ -30,7 +30,7 @@ public XmlEnumChoiceCollectionTestCases(String name) throws Exception {
         super(name);
         setControlDocument(XML_RESOURCE);
         setControlJSON(JSON_RESOURCE);
-        Class[] classes = new Class[2];
+        Class<?>[] classes = new Class<?>[2];
         classes[0] = EmployeeMultipleDepartmentChoice.class;
         classes[1] = Department.class;
         setClasses(classes);
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmlenum/XmlEnumChoiceObjectTestCases.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmlenum/XmlEnumChoiceObjectTestCases.java
index 40b6708..cf6b3e9 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmlenum/XmlEnumChoiceObjectTestCases.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmlenum/XmlEnumChoiceObjectTestCases.java
@@ -30,7 +30,7 @@ public XmlEnumChoiceObjectTestCases(String name) throws Exception {
         super(name);
         setControlDocument(XML_RESOURCE);
         setControlJSON(JSON_RESOURCE);
-        Class[] classes = new Class[2];
+        Class<?>[] classes = new Class<?>[2];
         classes[0] = EmployeeSingleDepartmentChoice.class;
         classes[1] = Department.class;
         setClasses(classes);
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmlenum/XmlEnumElementArrayTestCases.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmlenum/XmlEnumElementArrayTestCases.java
index 1cd572c..c00b070 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmlenum/XmlEnumElementArrayTestCases.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmlenum/XmlEnumElementArrayTestCases.java
@@ -27,7 +27,7 @@ public XmlEnumElementArrayTestCases(String name) throws Exception {
         super(name);
         setControlDocument(XML_RESOURCE);
         setControlJSON(JSON_RESOURCE);
-        Class[] classes = new Class[2];
+        Class<?>[] classes = new Class<?>[2];
         classes[0] = EmployeeDepartmentArray.class;
         classes[1] = Department.class;
         setClasses(classes);
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmlenum/XmlEnumElementCollectionTestCases.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmlenum/XmlEnumElementCollectionTestCases.java
index 40e4cde..b2faff3 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmlenum/XmlEnumElementCollectionTestCases.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmlenum/XmlEnumElementCollectionTestCases.java
@@ -27,7 +27,7 @@ public XmlEnumElementCollectionTestCases(String name) throws Exception {
         super(name);
         setControlDocument(XML_RESOURCE);
         setControlJSON(JSON_RESOURCE);
-        Class[] classes = new Class[2];
+        Class<?>[] classes = new Class<?>[2];
         classes[0] = EmployeeDepartmentList.class;
         classes[1] = Department.class;
         setClasses(classes);
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmlenum/XmlEnumElementTestCases.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmlenum/XmlEnumElementTestCases.java
index 1caae12..fd0d32a 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmlenum/XmlEnumElementTestCases.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmlenum/XmlEnumElementTestCases.java
@@ -36,7 +36,7 @@ public XmlEnumElementTestCases(String name) throws Exception {
         super(name);
         setControlDocument(XML_RESOURCE);
         setControlJSON(JSON_RESOURCE);
-        Class[] classes = new Class[2];
+        Class<?>[] classes = new Class<?>[2];
         classes[0] = EmployeeSingleDepartment.class;
         classes[1] = Department.class;
         setClasses(classes);
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmlenum/XmlEnumMapKeyTestCases.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmlenum/XmlEnumMapKeyTestCases.java
index 4cccccb..6b3deb0 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmlenum/XmlEnumMapKeyTestCases.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmlenum/XmlEnumMapKeyTestCases.java
@@ -29,7 +29,7 @@ public XmlEnumMapKeyTestCases(String name) throws Exception {
         super(name);
         setControlDocument(XML_RESOURCE);
         setControlJSON(JSON_RESOURCE);
-        Class[] classes = new Class[2];
+        Class<?>[] classes = new Class<?>[2];
         classes[0] = EmployeeMapDepartmentKey.class;
         classes[1] = Department.class;
         setClasses(classes);
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmlenum/XmlEnumRootElemTestCases.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmlenum/XmlEnumRootElemTestCases.java
index accfa0e..edd2708 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmlenum/XmlEnumRootElemTestCases.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmlenum/XmlEnumRootElemTestCases.java
@@ -26,7 +26,7 @@ public XmlEnumRootElemTestCases(String name) throws Exception {
         super(name);
         setControlDocument(XML_RESOURCE);
         setControlJSON(JSON_RESOURCE);
-        Class[] classes = new Class[1];
+        Class<?>[] classes = new Class<?>[1];
         classes[0] = DepartmentRoot.class;
         setClasses(classes);
     }
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmlenum/XmlValueAnnotationWithEnumTestCases.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmlenum/XmlValueAnnotationWithEnumTestCases.java
index 47488f2..928b7b6 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmlenum/XmlValueAnnotationWithEnumTestCases.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmlenum/XmlValueAnnotationWithEnumTestCases.java
@@ -26,7 +26,7 @@ public XmlValueAnnotationWithEnumTestCases(String name) throws Exception {
         super(name);
         setControlDocument(XML_RESOURCE);
         setControlJSON(JSON_RESOURCE);
-        Class[] classes = new Class[2];
+        Class<?>[] classes = new Class<?>[2];
         classes[0] = EmployeeSingleDepartmentWithXmlValue.class;
         classes[1] = Department.class;
         setClasses(classes);
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmlenum/xmlvalue/XmlEnumXmlValueTestCases.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmlenum/xmlvalue/XmlEnumXmlValueTestCases.java
index cbb9440..675c4a3 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmlenum/xmlvalue/XmlEnumXmlValueTestCases.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmlenum/xmlvalue/XmlEnumXmlValueTestCases.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
@@ -27,7 +27,7 @@ public XmlEnumXmlValueTestCases(String name) throws Exception {
         setControlDocument(XML_RESOURCE);
         setControlJSON(JSON_RESOURCE);
 
-        Class[] classes = new Class[2];
+        Class<?>[] classes = new Class<?>[2];
         classes[0] = Root.class;
         classes[1] = Coin.class;
         setClasses(classes);
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmlgregoriancalendar/XMLGregorianCalendarObjectTestCases.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmlgregoriancalendar/XMLGregorianCalendarObjectTestCases.java
index 3572d74..261e1e5 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmlgregoriancalendar/XMLGregorianCalendarObjectTestCases.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmlgregoriancalendar/XMLGregorianCalendarObjectTestCases.java
@@ -53,7 +53,7 @@ public class XMLGregorianCalendarObjectTestCases extends JAXBWithJSONTestCases{
 
     public XMLGregorianCalendarObjectTestCases(String name) throws Exception {
         super(name);
-        setClasses(new Class[] {XMLGregorianCalendarHolder.class});
+        setClasses(new Class<?>[] {XMLGregorianCalendarHolder.class});
     }
 
     @Override
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmlidref/XmlIdRefTestCases.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmlidref/XmlIdRefTestCases.java
index 6506f02..52f4bf5 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmlidref/XmlIdRefTestCases.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmlidref/XmlIdRefTestCases.java
@@ -47,7 +47,7 @@ public class XmlIdRefTestCases  extends JAXBWithJSONTestCases {
 
     public XmlIdRefTestCases(String name) throws Exception {
         super(name);
-        Class[] classes = new Class[3];
+        Class<?>[] classes = new Class<?>[3];
         classes[0] = Address.class;
         classes[1] = Employee.class;
         classes[2] = Root.class;
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmlidref/array/XmlIdRefArrayTestCases.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmlidref/array/XmlIdRefArrayTestCases.java
index d141e0e..67d261e 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmlidref/array/XmlIdRefArrayTestCases.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmlidref/array/XmlIdRefArrayTestCases.java
@@ -47,7 +47,7 @@ public class XmlIdRefArrayTestCases  extends JAXBWithJSONTestCases {
 
     public XmlIdRefArrayTestCases(String name) throws Exception {
         super(name);
-        Class[] classes = new Class[3];
+        Class<?>[] classes = new Class<?>[3];
         classes[0] = AddressArray.class;
         classes[1] = EmployeeArray.class;
         classes[2] = RootArray.class;
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmlidref/inheritance/XmlIdRefInheritanceTestCases.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmlidref/inheritance/XmlIdRefInheritanceTestCases.java
index 9fb9097..7e43459 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmlidref/inheritance/XmlIdRefInheritanceTestCases.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmlidref/inheritance/XmlIdRefInheritanceTestCases.java
@@ -27,7 +27,7 @@ public class XmlIdRefInheritanceTestCases extends JAXBWithJSONTestCases {
 
     public XmlIdRefInheritanceTestCases(String name) throws Exception {
         super(name);
-        Class[] classes = new Class[2];
+        Class<?>[] classes = new Class<?>[2];
         classes[0] = School.class;
         classes[1] = TransferStudent.class;
         setClasses(classes);
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmlidref/object/XmlIdRefObjectTestCases.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmlidref/object/XmlIdRefObjectTestCases.java
index 272c792..4e849fc 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmlidref/object/XmlIdRefObjectTestCases.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmlidref/object/XmlIdRefObjectTestCases.java
@@ -49,7 +49,7 @@ public class XmlIdRefObjectTestCases extends JAXBWithJSONTestCases {
 
     public XmlIdRefObjectTestCases(String name) throws Exception {
         super(name);
-        Class[] classes = new Class[4];
+        Class<?>[] classes = new Class<?>[4];
         classes[0] = Address.class;
         classes[1] = Employee.class;
         classes[2] = Root.class;
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmlidref/object/XmlIdRefObjectWhitespaceTestCases.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmlidref/object/XmlIdRefObjectWhitespaceTestCases.java
index 610cdd4..9ba732e 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmlidref/object/XmlIdRefObjectWhitespaceTestCases.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmlidref/object/XmlIdRefObjectWhitespaceTestCases.java
@@ -37,7 +37,7 @@ public class XmlIdRefObjectWhitespaceTestCases extends JAXBWithJSONTestCases {
 
     public XmlIdRefObjectWhitespaceTestCases(String name) throws Exception {
         super(name);
-        setClasses(new Class[] { Whitespace.class });
+        setClasses(new Class<?>[] { Whitespace.class });
         setControlDocument(XML_RESOURCE);
         setWriteControlDocument(XML_RESOURCE_WRITE);
         setControlJSON(JSON_RESOURCE);
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmlidref/self/XmlIdRefSelfObjectTestCases.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmlidref/self/XmlIdRefSelfObjectTestCases.java
index 0bcd1a7..9819b91 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmlidref/self/XmlIdRefSelfObjectTestCases.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmlidref/self/XmlIdRefSelfObjectTestCases.java
@@ -32,7 +32,7 @@ public class XmlIdRefSelfObjectTestCases extends JAXBWithJSONTestCases {
 
     public XmlIdRefSelfObjectTestCases(String name) throws Exception {
         super(name);
-        Class[] classes = new Class[2];
+        Class<?>[] classes = new Class<?>[2];
         classes[0] = Root.class;
         classes[1] = Item.class;
         setClasses(classes);
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmlidref/xmlelements/XmlElementsIdRefTestCases.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmlidref/xmlelements/XmlElementsIdRefTestCases.java
index 70244d5..6defd30 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmlidref/xmlelements/XmlElementsIdRefTestCases.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmlidref/xmlelements/XmlElementsIdRefTestCases.java
@@ -41,7 +41,7 @@ public class XmlElementsIdRefTestCases extends JAXBWithJSONTestCases {
 
     public XmlElementsIdRefTestCases(String name) throws Exception {
         super(name);
-        Class[] classes = new Class[4];
+        Class<?>[] classes = new Class<?>[4];
         classes[0] = Address.class;
         classes[1] = EmployeeWithElements.class;
         classes[2] = Root.class;
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmlidref/xmlelements/XmlElementsSingleIdRefTestCases.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmlidref/xmlelements/XmlElementsSingleIdRefTestCases.java
index 1dd60fd..13bafc0 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmlidref/xmlelements/XmlElementsSingleIdRefTestCases.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmlidref/xmlelements/XmlElementsSingleIdRefTestCases.java
@@ -41,7 +41,7 @@ public class XmlElementsSingleIdRefTestCases extends JAXBWithJSONTestCases{
 
     public XmlElementsSingleIdRefTestCases(String name) throws Exception {
         super(name);
-        Class[] classes = new Class[4];
+        Class<?>[] classes = new Class<?>[4];
         classes[0] = AddressSingle.class;
         classes[1] = EmployeeSingle.class;
         classes[2] = RootEmployeeSingle.class;
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmlidref/xmlelements/interfaces/XmlElementsIdRefInterfaceTestCases.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmlidref/xmlelements/interfaces/XmlElementsIdRefInterfaceTestCases.java
index d2fb205..1bff63b 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmlidref/xmlelements/interfaces/XmlElementsIdRefInterfaceTestCases.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmlidref/xmlelements/interfaces/XmlElementsIdRefInterfaceTestCases.java
@@ -39,7 +39,7 @@ public class XmlElementsIdRefInterfaceTestCases extends JAXBWithJSONTestCases {
 
     public XmlElementsIdRefInterfaceTestCases(String name) throws Exception {
         super(name);
-        Class[] classes = new Class[1];
+        Class<?>[] classes = new Class<?>[1];
         //classes[1] = EmployeeWithElementsInterface.class;
         classes[0] = RootWithEmployeeInterfaces.class;
         //classes[3] = PhoneNumber.class;
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmlidref/xmlelements/wrapper/XmlElementsWrapperIdRefTestCases.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmlidref/xmlelements/wrapper/XmlElementsWrapperIdRefTestCases.java
index 382c877..aa693d0 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmlidref/xmlelements/wrapper/XmlElementsWrapperIdRefTestCases.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmlidref/xmlelements/wrapper/XmlElementsWrapperIdRefTestCases.java
@@ -27,7 +27,7 @@ public class XmlElementsWrapperIdRefTestCases extends JAXBWithJSONTestCases {
 
     public XmlElementsWrapperIdRefTestCases(String name) throws Exception {
         super(name);
-        Class[] classes = new Class[1];
+        Class<?>[] classes = new Class<?>[1];
         classes[0] = Foo.class;
         setClasses(classes);
         setControlDocument(XML_RESOURCE);
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmlidrefs/XmlIdRefsTestCases.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmlidrefs/XmlIdRefsTestCases.java
index a93da11..f3c9bb3 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmlidrefs/XmlIdRefsTestCases.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmlidrefs/XmlIdRefsTestCases.java
@@ -27,7 +27,7 @@ public class XmlIdRefsTestCases extends JAXBWithJSONTestCases {
 
     public XmlIdRefsTestCases(String name) throws Exception {
         super(name);
-        Class[] classes = new Class[1];
+        Class<?>[] classes = new Class<?>[1];
         classes[0] = Root.class;
         setClasses(classes);
         setControlDocument(XML_RESOURCE);
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmlidrefs/object/XmlIdRefsObjectTestCases.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmlidrefs/object/XmlIdRefsObjectTestCases.java
index f749545..46f99c2 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmlidrefs/object/XmlIdRefsObjectTestCases.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmlidrefs/object/XmlIdRefsObjectTestCases.java
@@ -27,7 +27,7 @@ public class XmlIdRefsObjectTestCases extends JAXBWithJSONTestCases {
 
     public XmlIdRefsObjectTestCases(String name) throws Exception {
         super(name);
-        Class[] classes = new Class[1];
+        Class<?>[] classes = new Class<?>[1];
         classes[0] = Root.class;
         setClasses(classes);
         setControlDocument(XML_RESOURCE);
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmlinlinebinary/InlineDataHandlerCollectionTestCases.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmlinlinebinary/InlineDataHandlerCollectionTestCases.java
index 77296a2..6afc8f2 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmlinlinebinary/InlineDataHandlerCollectionTestCases.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmlinlinebinary/InlineDataHandlerCollectionTestCases.java
@@ -30,7 +30,7 @@ public InlineDataHandlerCollectionTestCases(String name) throws Exception {
         super(name);
         setControlDocument(XML_RESOURCE);
         setControlJSON(JSON_RESOURCE);
-        Class[] classes = new Class[1];
+        Class<?>[] classes = new Class<?>[1];
         classes[0] = Root.class;
         setClasses(classes);
     }
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmlinlinebinary/LargeInlineBinaryTestCases.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmlinlinebinary/LargeInlineBinaryTestCases.java
index 1fb19a2..36211e0 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmlinlinebinary/LargeInlineBinaryTestCases.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmlinlinebinary/LargeInlineBinaryTestCases.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
@@ -46,7 +46,7 @@ public void testOptimizedUnmarshal() throws Exception {
             InputSource inputSource = new XMLStreamReaderInputSource(xmlStreamReader);
             SAXSource saxSource = new SAXSource(xmlReader, inputSource);
 
-            JAXBContext jc = JAXBContextFactory.createContext(new Class[] {LargeInlineBinaryRoot.class}, null);
+            JAXBContext jc = JAXBContextFactory.createContext(new Class<?>[] {LargeInlineBinaryRoot.class}, null);
             Unmarshaller unmarshaller = jc.createUnmarshaller();
             LargeInlineBinaryRoot root = (LargeInlineBinaryRoot) unmarshaller.unmarshal(saxSource);
 
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmlinlinebinary/XmlInlineBinaryDataTestCases.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmlinlinebinary/XmlInlineBinaryDataTestCases.java
index 2163f56..cc1eef3 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmlinlinebinary/XmlInlineBinaryDataTestCases.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmlinlinebinary/XmlInlineBinaryDataTestCases.java
@@ -30,7 +30,7 @@ public XmlInlineBinaryDataTestCases(String name) throws Exception {
         super(name);
         setControlDocument(XML_RESOURCE);
         setControlJSON(JSON_RESOURCE);
-        Class[] classes = new Class[1];
+        Class<?>[] classes = new Class<?>[1];
         classes[0] = MyDataPropertyAnnotation.class;
         setClasses(classes);
     }
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmlinverseref/XmlInverseRefBidirectional2TestCases.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmlinverseref/XmlInverseRefBidirectional2TestCases.java
index a10d776..e068e5e 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmlinverseref/XmlInverseRefBidirectional2TestCases.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmlinverseref/XmlInverseRefBidirectional2TestCases.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,7 @@ public XmlInverseRefBidirectional2TestCases(String name) throws Exception {
         super(name);
         setControlJSON(JSON_RESOURCE);
         setControlDocument(XML_RESOURCE);
-        setClasses(new Class[]{Person.class});
+        setClasses(new Class<?>[]{Person.class});
     }
 
     @Override
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmlinverseref/XmlInverseRefBidirectionalSubTestCases.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmlinverseref/XmlInverseRefBidirectionalSubTestCases.java
index 6407ef0..b67e7a7 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmlinverseref/XmlInverseRefBidirectionalSubTestCases.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmlinverseref/XmlInverseRefBidirectionalSubTestCases.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,7 @@ public XmlInverseRefBidirectionalSubTestCases(String name) throws Exception {
         super(name);
         setControlJSON(JSON_RESOURCE);
         setControlDocument(XML_RESOURCE);
-        setClasses(new Class[]{Child.class});
+        setClasses(new Class<?>[]{Child.class});
     }
 
     @Override
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmlinverseref/XmlInverseRefBidirectionalTestCases.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmlinverseref/XmlInverseRefBidirectionalTestCases.java
index b9f0cc3..7e86f76 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmlinverseref/XmlInverseRefBidirectionalTestCases.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmlinverseref/XmlInverseRefBidirectionalTestCases.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
@@ -24,7 +24,7 @@ public XmlInverseRefBidirectionalTestCases(String name) throws Exception {
         super(name);
         setControlJSON(JSON_RESOURCE);
         setControlDocument(XML_RESOURCE);
-        setClasses(new Class[]{Person.class});
+        setClasses(new Class<?>[]{Person.class});
     }
 
     @Override
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmlinverseref/XmlInverseRefEmployeeTestCases.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmlinverseref/XmlInverseRefEmployeeTestCases.java
index de18d74..4ac8db0 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmlinverseref/XmlInverseRefEmployeeTestCases.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmlinverseref/XmlInverseRefEmployeeTestCases.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,7 @@ public XmlInverseRefEmployeeTestCases(String name) throws Exception {
         super(name);
         setControlJSON(JSON_RESOURCE);
         setControlDocument(XML_RESOURCE);
-        setClasses(new Class[]{Employee.class});
+        setClasses(new Class<?>[]{Employee.class});
     }
 
     @Override
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmlinverseref/XmlInverseRefObjectsTestCases.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmlinverseref/XmlInverseRefObjectsTestCases.java
index aff6121..8bfd89a 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmlinverseref/XmlInverseRefObjectsTestCases.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmlinverseref/XmlInverseRefObjectsTestCases.java
@@ -32,7 +32,7 @@ public XmlInverseRefObjectsTestCases(String name) throws Exception {
         super(name);
         setControlJSON(JSON_RESOURCE);
         setControlDocument(XML_RESOURCE);
-        setClasses(new Class[]{Person.class});
+        setClasses(new Class<?>[]{Person.class});
     }
 
     @Override
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmlinverseref/bindings/InverseBiWriteableBindingsTestCases.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmlinverseref/bindings/InverseBiWriteableBindingsTestCases.java
index 6e6e95a..18a1ae0 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmlinverseref/bindings/InverseBiWriteableBindingsTestCases.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmlinverseref/bindings/InverseBiWriteableBindingsTestCases.java
@@ -38,7 +38,7 @@ public InverseBiWriteableBindingsTestCases(String name) throws Exception {
         super(name);
         setControlJSON(JSON_RESOURCE);
         setControlDocument(XML_RESOURCE);
-        setClasses(new Class[]{Person.class});
+        setClasses(new Class<?>[]{Person.class});
 
     }
 
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmlinverseref/bindings/InverseBindingsTestCases.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmlinverseref/bindings/InverseBindingsTestCases.java
index 62ab452..26cc276 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmlinverseref/bindings/InverseBindingsTestCases.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmlinverseref/bindings/InverseBindingsTestCases.java
@@ -38,7 +38,7 @@ public InverseBindingsTestCases(String name) throws Exception {
         super(name);
         setControlJSON(JSON_RESOURCE);
         setControlDocument(XML_RESOURCE);
-        setClasses(new Class[]{Person.class});
+        setClasses(new Class<?>[]{Person.class});
 
     }
 
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmlinverseref/bindings/InverseWriteableBindingsTestCases.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmlinverseref/bindings/InverseWriteableBindingsTestCases.java
index 08b3d0f..e7693fb 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmlinverseref/bindings/InverseWriteableBindingsTestCases.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmlinverseref/bindings/InverseWriteableBindingsTestCases.java
@@ -38,7 +38,7 @@ public InverseWriteableBindingsTestCases(String name) throws Exception {
         super(name);
         setControlJSON(JSON_RESOURCE);
         setControlDocument(XML_RESOURCE);
-        setClasses(new Class[]{Person.class});
+        setClasses(new Class<?>[]{Person.class});
 
     }
 
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmlinverseref/list/XmlInverseRefBidirectionalList2TestCases.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmlinverseref/list/XmlInverseRefBidirectionalList2TestCases.java
index cea108b..d7a55bb 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmlinverseref/list/XmlInverseRefBidirectionalList2TestCases.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmlinverseref/list/XmlInverseRefBidirectionalList2TestCases.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
@@ -26,7 +26,7 @@ public XmlInverseRefBidirectionalList2TestCases(String name) throws Exception {
         super(name);
         setControlJSON(JSON_RESOURCE);
         setControlDocument(XML_RESOURCE);
-        setClasses(new Class[]{Person.class});
+        setClasses(new Class<?>[]{Person.class});
     }
 
     @Override
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmlinverseref/list/XmlInverseRefBidirectionalList3TestCases.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmlinverseref/list/XmlInverseRefBidirectionalList3TestCases.java
index 864f258..1b0ae7a 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmlinverseref/list/XmlInverseRefBidirectionalList3TestCases.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmlinverseref/list/XmlInverseRefBidirectionalList3TestCases.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
@@ -26,7 +26,7 @@ public XmlInverseRefBidirectionalList3TestCases(String name) throws Exception {
         super(name);
         setControlJSON(JSON_RESOURCE);
         setControlDocument(XML_RESOURCE);
-        setClasses(new Class[]{Person.class});
+        setClasses(new Class<?>[]{Person.class});
     }
 
     @Override
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmlinverseref/list/XmlInverseRefBidirectionalList4TestCases.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmlinverseref/list/XmlInverseRefBidirectionalList4TestCases.java
index 494eb5a..5298eb1 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmlinverseref/list/XmlInverseRefBidirectionalList4TestCases.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmlinverseref/list/XmlInverseRefBidirectionalList4TestCases.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
@@ -25,7 +25,7 @@ public class XmlInverseRefBidirectionalList4TestCases extends XmlInverseRefBidir
 
     public XmlInverseRefBidirectionalList4TestCases(String name)throws Exception {
         super(name);
-        setClasses(new Class[]{Person2.class});
+        setClasses(new Class<?>[]{Person2.class});
     }
 
     @Override
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmlinverseref/list/XmlInverseRefBidirectionalListObjectsTestCases.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmlinverseref/list/XmlInverseRefBidirectionalListObjectsTestCases.java
index ca9903d..17f933f 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmlinverseref/list/XmlInverseRefBidirectionalListObjectsTestCases.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmlinverseref/list/XmlInverseRefBidirectionalListObjectsTestCases.java
@@ -28,7 +28,7 @@ public XmlInverseRefBidirectionalListObjectsTestCases(String name) throws Except
         super(name);
         setControlJSON(JSON_RESOURCE);
         setControlDocument(XML_RESOURCE);
-        setClasses(new Class[]{Person.class});
+        setClasses(new Class<?>[]{Person.class});
     }
 
     @Override
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmlinverseref/list/XmlInverseRefBidirectionalListTestCases.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmlinverseref/list/XmlInverseRefBidirectionalListTestCases.java
index d10f701..e65fe2b 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmlinverseref/list/XmlInverseRefBidirectionalListTestCases.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmlinverseref/list/XmlInverseRefBidirectionalListTestCases.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,7 @@ public XmlInverseRefBidirectionalListTestCases(String name) throws Exception {
         super(name);
         setControlJSON(JSON_RESOURCE);
         setControlDocument(XML_RESOURCE);
-        setClasses(new Class[]{Person.class});
+        setClasses(new Class<?>[]{Person.class});
     }
 
     @Override
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmlinverseref/list/XmlInverseRefWithWrapperTestCases.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmlinverseref/list/XmlInverseRefWithWrapperTestCases.java
index 7e60152..a540e2e 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmlinverseref/list/XmlInverseRefWithWrapperTestCases.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmlinverseref/list/XmlInverseRefWithWrapperTestCases.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,7 @@ public XmlInverseRefWithWrapperTestCases(String name) throws Exception {
         super(name);
         setControlJSON(JSON_RESOURCE);
         setControlDocument(XML_RESOURCE);
-        setClasses(new Class[]{PersonWithWrapper.class});
+        setClasses(new Class<?>[]{PersonWithWrapper.class});
     }
 
     @Override
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmlmarshaller/CharacterEscapeHandlerTestCases.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmlmarshaller/CharacterEscapeHandlerTestCases.java
index 1dab64f..c38f7ab 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmlmarshaller/CharacterEscapeHandlerTestCases.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmlmarshaller/CharacterEscapeHandlerTestCases.java
@@ -26,7 +26,7 @@ public CharacterEscapeHandlerTestCases(String name) throws Exception {
         super(name);
         setControlDocument(CHAR_ESCAPE);
         setControlJSON(CHAR_ESCAPE_JSON);
-        Class[] classes = new Class[1];
+        Class<?>[] classes = new Class<?>[1];
         classes[0] = Employee.class;
         setClasses(classes);
     }
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmlmarshaller/CrNewLineTestCases.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmlmarshaller/CrNewLineTestCases.java
index 050f8a0..1e36c35 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmlmarshaller/CrNewLineTestCases.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmlmarshaller/CrNewLineTestCases.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
@@ -23,7 +23,7 @@ public class CrNewLineTestCases extends JAXBWithJSONTestCases {
 
     public CrNewLineTestCases(String name) throws Exception {
         super(name);
-        setClasses(new Class[] {CrNewLineRoot.class});
+        setClasses(new Class<?>[] {CrNewLineRoot.class});
         setControlDocument(XML);
         setControlJSON(JSON);
     }
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmlmarshaller/FlushTestCases.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmlmarshaller/FlushTestCases.java
index 67ada29..c928aef 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmlmarshaller/FlushTestCases.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmlmarshaller/FlushTestCases.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
@@ -33,7 +33,7 @@ public class FlushTestCases extends TestCase {
 
     @Override
     protected void setUp() throws Exception {
-        JAXBContext jc = JAXBContextFactory.createContext(new Class[] {FlushRoot.class}, null);
+        JAXBContext jc = JAXBContextFactory.createContext(new Class<?>[] {FlushRoot.class}, null);
         marshaller = jc.createMarshaller();
         unmarshaller = jc.createUnmarshaller();
     }
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmlmarshaller/HandleListenerExceptionsTestCases.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmlmarshaller/HandleListenerExceptionsTestCases.java
index 197e6e8..ad3e02e 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmlmarshaller/HandleListenerExceptionsTestCases.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmlmarshaller/HandleListenerExceptionsTestCases.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
@@ -46,7 +46,7 @@ public class HandleListenerExceptionsTestCases extends TestCase {
 
     @Override
     protected void setUp() throws Exception {
-        jc = JAXBContextFactory.createContext(new Class[] {Foo.class}, null);
+        jc = JAXBContextFactory.createContext(new Class<?>[] {Foo.class}, null);
         //jc = JAXBContext.newInstance(Foo.class);
     }
 
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmlmarshaller/ListenerTestCases.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmlmarshaller/ListenerTestCases.java
index 71d8412..8642ba2 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmlmarshaller/ListenerTestCases.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmlmarshaller/ListenerTestCases.java
@@ -68,7 +68,7 @@ public ListenerRootObject getControlRootObject() {
 
     @Override
     protected void setUp() throws Exception {
-        jc = JAXBContextFactory.createContext(new Class[] {ListenerRootObject.class, ListenerElementDeclObject.class, ListenerObjectFactory.class}, null);
+        jc = JAXBContextFactory.createContext(new Class<?>[] {ListenerRootObject.class, ListenerElementDeclObject.class, ListenerObjectFactory.class}, null);
     }
 
     private void testMarshalListenerElementDecl(JAXBElement<ListenerElementDeclObject> jaxbElement, Marshaller marshaller, ListenerMarshal listener) throws Exception {
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmlmarshaller/MarshalSchemaValidationTestCases.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmlmarshaller/MarshalSchemaValidationTestCases.java
index 7666c6b..587c3e7 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmlmarshaller/MarshalSchemaValidationTestCases.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmlmarshaller/MarshalSchemaValidationTestCases.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
@@ -51,7 +51,7 @@ public MarshalSchemaValidationTestCases(String name) {
 
     @Override
     protected void setUp() throws Exception {
-        Class[] classes = {Employee.class};
+        Class<?>[] classes = {Employee.class};
         JAXBContext jc = JAXBContextFactory.createContext(classes, null);
         marshaller = (JAXBMarshaller) jc.createMarshaller();
 
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmlmarshaller/UnmarshalConversionExceptionTestCases.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmlmarshaller/UnmarshalConversionExceptionTestCases.java
index 666b49e..a85d6d2 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmlmarshaller/UnmarshalConversionExceptionTestCases.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmlmarshaller/UnmarshalConversionExceptionTestCases.java
@@ -34,7 +34,7 @@ public class UnmarshalConversionExceptionTestCases extends TestCase {
 
     @Override
     protected void setUp() throws Exception {
-        JAXBContext jc = JAXBContextFactory.createContext(new Class[] {UnmarshalConversionExceptionRoot.class}, null);
+        JAXBContext jc = JAXBContextFactory.createContext(new Class<?>[] {UnmarshalConversionExceptionRoot.class}, null);
         unmarshaller = jc.createUnmarshaller();
     }
 
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmlmarshaller/UnmarshalSchemaValidationTestCases.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmlmarshaller/UnmarshalSchemaValidationTestCases.java
index 21329aa..2d7d405 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmlmarshaller/UnmarshalSchemaValidationTestCases.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmlmarshaller/UnmarshalSchemaValidationTestCases.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
@@ -59,7 +59,7 @@ public UnmarshalSchemaValidationTestCases(String name) {
 
     @Override
     protected void setUp() throws Exception {
-        Class[] classes = {Employee.class};
+        Class<?>[] classes = {Employee.class};
         JAXBContext jc = JAXBContextFactory.createContext(classes, null);
         unmarshaller = (JAXBUnmarshaller) jc.createUnmarshaller();
 
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmlmarshaller/UnmarshallerNullTestCases.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmlmarshaller/UnmarshallerNullTestCases.java
index 6934e0d..3c543f4 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmlmarshaller/UnmarshallerNullTestCases.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmlmarshaller/UnmarshallerNullTestCases.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
@@ -47,7 +47,7 @@ public UnmarshallerNullTestCases(String name) {
 
     @Override
     protected void setUp() throws Exception {
-        Class[] classes = {Employee.class};
+        Class<?>[] classes = {Employee.class};
         JAXBContext jc = JAXBContextFactory.createContext(classes, null);
         unmarshaller = (JAXBUnmarshaller) jc.createUnmarshaller();
     }
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmlmarshaller/locator/AnyCollectionTestCases.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmlmarshaller/locator/AnyCollectionTestCases.java
index 0c1be7c..e8c2a46 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmlmarshaller/locator/AnyCollectionTestCases.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmlmarshaller/locator/AnyCollectionTestCases.java
@@ -35,8 +35,8 @@ public AnyCollectionTestCases(String name) throws Exception {
     }
 
     @Override
-    public Class[] getClasses() {
-        Class[] classes = {AnyCollectionRoot.class, Child.class};
+    public Class<?>[] getClasses() {
+        Class<?>[] classes = {AnyCollectionRoot.class, Child.class};
         return classes;
     }
 
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmlmarshaller/locator/AnyTestCases.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmlmarshaller/locator/AnyTestCases.java
index 5f143ca..0e9ab89 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmlmarshaller/locator/AnyTestCases.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmlmarshaller/locator/AnyTestCases.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
@@ -21,8 +21,8 @@ public AnyTestCases(String name) {
     }
 
     @Override
-    public Class[] getClasses() {
-        Class[] classes = {AnyRoot.class, Child.class};
+    public Class<?>[] getClasses() {
+        Class<?>[] classes = {AnyRoot.class, Child.class};
         return classes;
     }
 
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmlmarshaller/locator/ElementCollectionTestCases.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmlmarshaller/locator/ElementCollectionTestCases.java
index 4919665..c5adc2b 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmlmarshaller/locator/ElementCollectionTestCases.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmlmarshaller/locator/ElementCollectionTestCases.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
@@ -21,8 +21,8 @@ public ElementCollectionTestCases(String name) {
     }
 
     @Override
-    public Class[] getClasses() {
-        Class[] classes = {ElementCollectionRoot.class, Child.class};
+    public Class<?>[] getClasses() {
+        Class<?>[] classes = {ElementCollectionRoot.class, Child.class};
         return classes;
     }
 
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmlmarshaller/locator/ElementTestCases.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmlmarshaller/locator/ElementTestCases.java
index ec62cb9..f268b82 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmlmarshaller/locator/ElementTestCases.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmlmarshaller/locator/ElementTestCases.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
@@ -21,8 +21,8 @@ public ElementTestCases(String name) {
     }
 
     @Override
-    public Class[] getClasses() {
-        Class[] classes = {ElementRoot.class};
+    public Class<?>[] getClasses() {
+        Class<?>[] classes = {ElementRoot.class};
         return classes;
     }
 
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmlmarshaller/locator/LocatorTestCase.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmlmarshaller/locator/LocatorTestCase.java
index 4f81a1a..0d2850d 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmlmarshaller/locator/LocatorTestCase.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmlmarshaller/locator/LocatorTestCase.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,7 @@ public LocatorTestCase(String name) {
         super(name);
     }
 
-    public abstract Class[] getClasses();
+    public abstract Class<?>[] getClasses();
 
     public abstract Object setupRootObject();
 
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmlmixed/XmlMixedTestCases.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmlmixed/XmlMixedTestCases.java
index c6f05e0..03bc95d 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmlmixed/XmlMixedTestCases.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmlmixed/XmlMixedTestCases.java
@@ -29,7 +29,7 @@ public class XmlMixedTestCases extends JAXBTestCases { // extends JAXBWithJSONTe
 
     public XmlMixedTestCases(String name) throws Exception {
         super(name);
-        setClasses(new Class[] {Root.class});
+        setClasses(new Class<?>[] {Root.class});
         setControlDocument(XML_RESOURCE);
         setWriteControlDocument(XML_RESOURCE_WRITE);
         //setControlJSON(JSON_RESOURCE);
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmlpath/XmlPathToAttributeTestCases.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmlpath/XmlPathToAttributeTestCases.java
index 68fb290..544e79e 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmlpath/XmlPathToAttributeTestCases.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmlpath/XmlPathToAttributeTestCases.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,7 +28,7 @@ public XmlPathToAttributeTestCases(String name) throws Exception {
             super(name);
             setControlDocument(XML_RESOURCE);
             setControlJSON(JSON_RESOURCE);
-            setClasses(new Class[]{TestObjectToAttribute.class});
+            setClasses(new Class<?>[]{TestObjectToAttribute.class});
         }
 
         @Override
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmlpath/XmlPathToElementWithXmlAttributeTestCases.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmlpath/XmlPathToElementWithXmlAttributeTestCases.java
index 3da47e1..b0fcab9 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmlpath/XmlPathToElementWithXmlAttributeTestCases.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmlpath/XmlPathToElementWithXmlAttributeTestCases.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,7 +28,7 @@ public XmlPathToElementWithXmlAttributeTestCases(String name) throws Exception {
             super(name);
             setControlDocument(XML_RESOURCE);
             setControlJSON(JSON_RESOURCE);
-            setClasses(new Class[]{TestObjectToElementWithXmlAttribute.class});
+            setClasses(new Class<?>[]{TestObjectToElementWithXmlAttribute.class});
         }
 
         @Override
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmlpath/XmlPathWithMultipleEqualsCharactersTestCases.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmlpath/XmlPathWithMultipleEqualsCharactersTestCases.java
index 94c4b21..efd604f 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmlpath/XmlPathWithMultipleEqualsCharactersTestCases.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmlpath/XmlPathWithMultipleEqualsCharactersTestCases.java
@@ -31,7 +31,7 @@ public class XmlPathWithMultipleEqualsCharactersTestCases extends TestCase {
     private final static String BINDINGS_DOC = "org/eclipse/persistence/testing/jaxb/xmlpath/atom-bindings.xml";
 
     public void testOneEntry() throws Exception {
-        JAXBContext ctx = JAXBContextFactory.createContext(new Class[] { AtomEntriesOne.class }, getProperties());
+        JAXBContext ctx = JAXBContextFactory.createContext(new Class<?>[] { AtomEntriesOne.class }, getProperties());
         Unmarshaller u = ctx.createUnmarshaller();
         InputStream is = ClassLoader.getSystemResourceAsStream(INSTANCE_DOC);
         AtomEntriesOne o = (AtomEntriesOne) u.unmarshal(is);
@@ -39,7 +39,7 @@ public void testOneEntry() throws Exception {
     }
 
     public void testTwoEntries() throws Exception {
-        JAXBContext ctx = JAXBContextFactory.createContext(new Class[] { AtomEntriesTwo.class }, getProperties());
+        JAXBContext ctx = JAXBContextFactory.createContext(new Class<?>[] { AtomEntriesTwo.class }, getProperties());
         Unmarshaller u = ctx.createUnmarshaller();
         InputStream is = ClassLoader.getSystemResourceAsStream(INSTANCE_DOC);
         AtomEntriesTwo o = (AtomEntriesTwo) u.unmarshal(is);
@@ -47,7 +47,7 @@ public void testTwoEntries() throws Exception {
     }
 
     public void testThreeEntries() throws Exception {
-        JAXBContext ctx = JAXBContextFactory.createContext(new Class[] { AtomEntriesThree.class }, getProperties());
+        JAXBContext ctx = JAXBContextFactory.createContext(new Class<?>[] { AtomEntriesThree.class }, getProperties());
         Unmarshaller u = ctx.createUnmarshaller();
         InputStream is = ClassLoader.getSystemResourceAsStream(INSTANCE_DOC);
         AtomEntriesThree o = (AtomEntriesThree) u.unmarshal(is);
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmlpath/XmlPathWithXmlAttributeTestCases.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmlpath/XmlPathWithXmlAttributeTestCases.java
index 22a0abd..e1262df 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmlpath/XmlPathWithXmlAttributeTestCases.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmlpath/XmlPathWithXmlAttributeTestCases.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
@@ -29,7 +29,7 @@ public XmlPathWithXmlAttributeTestCases(String name) throws Exception {
         super(name);
         setControlDocument(XML_RESOURCE);
         setControlJSON(JSON_RESOURCE);
-        setClasses(new Class[]{TestObjectToAttributeWithXmlAttribute.class});
+        setClasses(new Class<?>[]{TestObjectToAttributeWithXmlAttribute.class});
     }
 
     @Override
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmlrootelement/DotTestCases.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmlrootelement/DotTestCases.java
index f9b9f14..1173dd1 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmlrootelement/DotTestCases.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmlrootelement/DotTestCases.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
@@ -23,7 +23,7 @@ public class DotTestCases extends JAXBWithJSONTestCases {
 
     public DotTestCases(String name) throws Exception {
         super(name);
-        setClasses(new Class[] {DotRoot.class});
+        setClasses(new Class<?>[] {DotRoot.class});
         setControlDocument(XML_RESOURCE);
         setControlJSON(JSON_RESOURCE);
     }
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmlrootelement/InnerClassTestCases.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmlrootelement/InnerClassTestCases.java
index 0044fdb..2818c2c 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmlrootelement/InnerClassTestCases.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmlrootelement/InnerClassTestCases.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
@@ -26,7 +26,7 @@ public InnerClassTestCases(String name) throws Exception {
         super(name);
         setControlDocument(XML_RESOURCE);
         setControlJSON(JSON_RESOURCE);
-        Class[] classes = new Class[1];
+        Class<?>[] classes = new Class<?>[1];
         classes[0] = Inner.class;
         setClasses(classes);
     }
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmlrootelement/XmlRootElementNamespaceTestCases.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmlrootelement/XmlRootElementNamespaceTestCases.java
index 56eb8f3..0c3e510 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmlrootelement/XmlRootElementNamespaceTestCases.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmlrootelement/XmlRootElementNamespaceTestCases.java
@@ -39,7 +39,7 @@ public XmlRootElementNamespaceTestCases(String name) throws Exception {
         super(name);
         setControlDocument(XML_RESOURCE);
         setControlJSON(JSON_RESOURCE);
-        Class[] classes = new Class[1];
+        Class<?>[] classes = new Class<?>[1];
         classes[0] = EmployeeNamespace.class;
         setClasses(classes);
 
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmlrootelement/XmlRootElementNilTestCases.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmlrootelement/XmlRootElementNilTestCases.java
index aa10062..9698710 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmlrootelement/XmlRootElementNilTestCases.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmlrootelement/XmlRootElementNilTestCases.java
@@ -29,7 +29,7 @@ public XmlRootElementNilTestCases(String name) throws Exception {
         setWriteControlDocument(XML_WRITE_RESOURCE);
         setControlJSON(JSON_RESOURCE);
         setWriteControlJSON(JSON_WRITE_RESOURCE);
-        Class[] classes = new Class[1];
+        Class<?>[] classes = new Class<?>[1];
         classes[0] = EmployeeNoNamespace.class;
         setClasses(classes);
     }
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmlrootelement/XmlRootElementNoNamespaceTestCases.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmlrootelement/XmlRootElementNoNamespaceTestCases.java
index fd570ac..8925c26 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmlrootelement/XmlRootElementNoNamespaceTestCases.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmlrootelement/XmlRootElementNoNamespaceTestCases.java
@@ -26,7 +26,7 @@ public XmlRootElementNoNamespaceTestCases(String name) throws Exception {
         super(name);
         setControlDocument(XML_RESOURCE);
         setControlJSON(JSON_RESOURCE);
-        Class[] classes = new Class[1];
+        Class<?>[] classes = new Class<?>[1];
         classes[0] = EmployeeNoNamespace.class;
         setClasses(classes);
     }
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmlschema/XMLSchemaModelTestCases.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmlschema/XMLSchemaModelTestCases.java
index f8557a1..182860d 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmlschema/XMLSchemaModelTestCases.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmlschema/XMLSchemaModelTestCases.java
@@ -24,7 +24,7 @@ public class XMLSchemaModelTestCases extends JAXBWithJSONTestCases{
 
     public XMLSchemaModelTestCases(String name) throws Exception {
         super(name);
-        setClasses(new Class[]{ObjectFactory.class});
+        setClasses(new Class<?>[]{ObjectFactory.class});
         setControlDocument(XML_RESOURCE);
         setControlJSON(JSON_RESOURCE);
     }
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmlschema/attributeformdefault/qualified/AttributeNSQualifiedTestCases.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmlschema/attributeformdefault/qualified/AttributeNSQualifiedTestCases.java
index 3115284..2195aee 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmlschema/attributeformdefault/qualified/AttributeNSQualifiedTestCases.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmlschema/attributeformdefault/qualified/AttributeNSQualifiedTestCases.java
@@ -22,7 +22,7 @@ public class AttributeNSQualifiedTestCases extends JAXBWithJSONTestCases{
 
     public AttributeNSQualifiedTestCases(String name) throws Exception {
         super(name);
-        setClasses(new Class[]{RootWithAttributeNS.class});
+        setClasses(new Class<?>[]{RootWithAttributeNS.class});
         setControlDocument(XML_RESOURCE);
         setControlJSON(JSON_RESOURCE);
     }
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmlschema/attributeformdefault/qualified/AttributeQualifiedTestCases.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmlschema/attributeformdefault/qualified/AttributeQualifiedTestCases.java
index e5e523f..c0d41d9 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmlschema/attributeformdefault/qualified/AttributeQualifiedTestCases.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmlschema/attributeformdefault/qualified/AttributeQualifiedTestCases.java
@@ -22,7 +22,7 @@ public class AttributeQualifiedTestCases extends JAXBWithJSONTestCases{
 
     public AttributeQualifiedTestCases(String name) throws Exception {
         super(name);
-        setClasses(new Class[]{RootWithAttribute.class});
+        setClasses(new Class<?>[]{RootWithAttribute.class});
         setControlDocument(XML_RESOURCE);
         setControlJSON(JSON_RESOURCE);
     }
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmlschema/attributeformdefault/qualified/NoAttributeQualifiedTestCases.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmlschema/attributeformdefault/qualified/NoAttributeQualifiedTestCases.java
index a2ea619..3b2c666 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmlschema/attributeformdefault/qualified/NoAttributeQualifiedTestCases.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmlschema/attributeformdefault/qualified/NoAttributeQualifiedTestCases.java
@@ -22,7 +22,7 @@ public class NoAttributeQualifiedTestCases extends JAXBWithJSONTestCases{
 
     public NoAttributeQualifiedTestCases(String name) throws Exception {
         super(name);
-        setClasses(new Class[]{RootNoAttributes.class});
+        setClasses(new Class<?>[]{RootNoAttributes.class});
         setControlDocument(XML_RESOURCE);
         setControlJSON(JSON_RESOURCE);
     }
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmlschema/attributeformdefault/unqualified/AttributeNSUnqualifiedTestCases.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmlschema/attributeformdefault/unqualified/AttributeNSUnqualifiedTestCases.java
index 4a8ef6d..05ffb73 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmlschema/attributeformdefault/unqualified/AttributeNSUnqualifiedTestCases.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmlschema/attributeformdefault/unqualified/AttributeNSUnqualifiedTestCases.java
@@ -22,7 +22,7 @@ public class AttributeNSUnqualifiedTestCases extends JAXBWithJSONTestCases{
 
     public AttributeNSUnqualifiedTestCases(String name) throws Exception {
         super(name);
-        setClasses(new Class[]{RootWithAttributeNS.class});
+        setClasses(new Class<?>[]{RootWithAttributeNS.class});
         setControlDocument(XML_RESOURCE);
         setControlJSON(JSON_RESOURCE);
     }
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmlschema/attributeformdefault/unqualified/AttributeUnqualifiedTestCases.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmlschema/attributeformdefault/unqualified/AttributeUnqualifiedTestCases.java
index 0e62bfa..925f3c4 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmlschema/attributeformdefault/unqualified/AttributeUnqualifiedTestCases.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmlschema/attributeformdefault/unqualified/AttributeUnqualifiedTestCases.java
@@ -25,7 +25,7 @@ public class AttributeUnqualifiedTestCases extends JAXBWithJSONTestCases{
 
     public AttributeUnqualifiedTestCases(String name) throws Exception {
         super(name);
-        setClasses(new Class[]{RootWithAttribute.class});
+        setClasses(new Class<?>[]{RootWithAttribute.class});
         setControlDocument(XML_RESOURCE);
         setControlJSON(JSON_RESOURCE);
     }
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmlschema/attributeformdefault/unqualified/NoAttributeUnqualifiedTestCases.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmlschema/attributeformdefault/unqualified/NoAttributeUnqualifiedTestCases.java
index 364154f..57dc5ba 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmlschema/attributeformdefault/unqualified/NoAttributeUnqualifiedTestCases.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmlschema/attributeformdefault/unqualified/NoAttributeUnqualifiedTestCases.java
@@ -22,7 +22,7 @@ public class NoAttributeUnqualifiedTestCases extends JAXBWithJSONTestCases{
 
     public NoAttributeUnqualifiedTestCases(String name) throws Exception {
         super(name);
-        setClasses(new Class[]{RootNoAttributes.class});
+        setClasses(new Class<?>[]{RootNoAttributes.class});
         setControlDocument(XML_RESOURCE);
         setControlJSON(JSON_RESOURCE);
     }
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmlschematype/CharTestCases.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmlschematype/CharTestCases.java
index c9a257a..8bc6ed9 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmlschematype/CharTestCases.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmlschematype/CharTestCases.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
@@ -30,7 +30,7 @@ public CharTestCases(String name) throws Exception {
         super(name);
         setControlDocument(XML_RESOURCE);
         setControlJSON(JSON_RESOURCE);
-        Class[] classes = new Class[1];
+        Class<?>[] classes = new Class<?>[1];
         classes[0] = CharHolder.class;
         setClasses(classes);
     }
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmlschematype/NonNegativeIntegerSchemaTypeTestCases.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmlschematype/NonNegativeIntegerSchemaTypeTestCases.java
index 45fe452..9ab7892 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmlschematype/NonNegativeIntegerSchemaTypeTestCases.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmlschematype/NonNegativeIntegerSchemaTypeTestCases.java
@@ -31,7 +31,7 @@ public NonNegativeIntegerSchemaTypeTestCases(String name) throws Exception {
             super(name);
             setControlDocument(XML_RESOURCE);
             setControlJSON(JSON_RESOURCE);
-            Class[] classes = new Class[1];
+            Class<?>[] classes = new Class<?>[1];
             classes[0] = Root.class;
             setClasses(classes);
         }
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmlschematype/XSDSchemaTypesTestCases.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmlschematype/XSDSchemaTypesTestCases.java
index d3efa56..1150b41 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmlschematype/XSDSchemaTypesTestCases.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmlschematype/XSDSchemaTypesTestCases.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,7 @@ public XSDSchemaTypesTestCases(String name) throws Exception {
         setControlJSON(JSON_RESOURCE);
         setControlJSON(JSON_WRITE_RESOURCE);
         setWriteControlDocument(XML_WRITE_RESOURCE);
-        Class[] classes = new Class[1];
+        Class<?>[] classes = new Class<?>[1];
         classes[0] = XSDTypesHolder.class;
         setClasses(classes);
         initXsiType();
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmlschematype/XmlSchemaTypeDateEmptyTestCases.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmlschematype/XmlSchemaTypeDateEmptyTestCases.java
index e8100e0..2e151a1 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmlschematype/XmlSchemaTypeDateEmptyTestCases.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmlschematype/XmlSchemaTypeDateEmptyTestCases.java
@@ -31,7 +31,7 @@ public XmlSchemaTypeDateEmptyTestCases(String name) throws Exception {
         setControlJSON(JSON_RESOURCE);
         setWriteControlDocument(XML_RESOURCE_WRITE);
         setWriteControlJSON(JSON_RESOURCE_WRITE);
-        Class[] classes = new Class[1];
+        Class<?>[] classes = new Class<?>[1];
         classes[0] = EmployeeDate.class;
         setClasses(classes);
     }
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmlschematype/XmlSchemaTypeDateTestCases.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmlschematype/XmlSchemaTypeDateTestCases.java
index ba52742..52bffb7 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmlschematype/XmlSchemaTypeDateTestCases.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmlschematype/XmlSchemaTypeDateTestCases.java
@@ -26,7 +26,7 @@ public XmlSchemaTypeDateTestCases(String name) throws Exception {
         super(name);
         setControlDocument(XML_RESOURCE);
         setControlJSON(JSON_RESOURCE);
-        Class[] classes = new Class[1];
+        Class<?>[] classes = new Class<?>[1];
         classes[0] = EmployeeDate.class;
         setClasses(classes);
     }
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmlschematype/XmlSchemaTypeTwoDatesTestCases.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmlschematype/XmlSchemaTypeTwoDatesTestCases.java
index 962618c..ddbc461 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmlschematype/XmlSchemaTypeTwoDatesTestCases.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmlschematype/XmlSchemaTypeTwoDatesTestCases.java
@@ -26,7 +26,7 @@ public XmlSchemaTypeTwoDatesTestCases(String name) throws Exception {
         super(name);
         setControlDocument(XML_RESOURCE);
         setControlJSON(JSON_RESOURCE);
-        Class[] classes = new Class[1];
+        Class<?>[] classes = new Class<?>[1];
         classes[0] = EmployeeTwoDates.class;
         setClasses(classes);
     }
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmltype/XmlTypeNameTestCases.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmltype/XmlTypeNameTestCases.java
index ca23462..0e9546f 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmltype/XmlTypeNameTestCases.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmltype/XmlTypeNameTestCases.java
@@ -30,7 +30,7 @@ public XmlTypeNameTestCases(String name) throws Exception {
         super(name);
         setControlDocument(XML_RESOURCE);
         setControlJSON(JSON_RESOURCE);
-        Class[] classes = new Class[13];
+        Class<?>[] classes = new Class<?>[13];
         classes[0] = GetPageResponse.class;
         classes[1] = A2BCDESomeTest.class; //complex type for this should be "a2BCDESomeTest"
         classes[2] = b.class;  //complex type should be "b"
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmltype/XmlTypeTestCases.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmltype/XmlTypeTestCases.java
index 41532f3..3be53b7 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmltype/XmlTypeTestCases.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmltype/XmlTypeTestCases.java
@@ -35,7 +35,7 @@ public class XmlTypeTestCases extends JAXBWithJSONTestCases {
 
     public XmlTypeTestCases(String name) throws Exception {
         super(name);
-        Class[] classes = new Class[1];
+        Class<?>[] classes = new Class<?>[1];
         classes[0] = Employee.class;
         setClasses(classes);
         setControlDocument(XML_RESOURCE);
@@ -55,7 +55,7 @@ public void testSchemaGen() throws Exception {
 
     public void testBuiltInTypeSchemaGen() throws Exception {
 
-        JAXBContext jctx = (JAXBContext) JAXBContextFactory.createContext(new Class[] { EmploymentPeriod.class, MyDate.class}, null);
+        JAXBContext jctx = (JAXBContext) JAXBContextFactory.createContext(new Class<?>[] { EmploymentPeriod.class, MyDate.class}, null);
         MyStreamSchemaOutputResolver outputResolver = new MyStreamSchemaOutputResolver();
         jctx.generateSchema(outputResolver);
 
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmltype/proporder/ExtraPropTestCases.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmltype/proporder/ExtraPropTestCases.java
index ef6c6e5..ec6ba56 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmltype/proporder/ExtraPropTestCases.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmltype/proporder/ExtraPropTestCases.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
@@ -22,7 +22,7 @@ public class ExtraPropTestCases extends TestCase {
     public void testInvalidPropOrder() {
 
         try {
-            JAXBContextFactory.createContext(new Class[] {ExtraPropRoot.class}, null);
+            JAXBContextFactory.createContext(new Class<?>[] {ExtraPropRoot.class}, null);
 
         } catch(jakarta.xml.bind.JAXBException e) {
             try {
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmltype/proporder/MissingPropTestCases.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmltype/proporder/MissingPropTestCases.java
index 0ed9f39..3f0d436 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmltype/proporder/MissingPropTestCases.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmltype/proporder/MissingPropTestCases.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
@@ -25,7 +25,7 @@ public class MissingPropTestCases extends TestCase {
     public void testInvalidPropOrder() {
 
         try {
-            JAXBContextFactory.createContext(new Class[] {MissingPropRoot.class}, null);
+            JAXBContextFactory.createContext(new Class<?>[] {MissingPropRoot.class}, null);
         } catch(jakarta.xml.bind.JAXBException e) {
             try {
                 throw e.getLinkedException();
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmltype/proporder/NonTransientTestCases.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmltype/proporder/NonTransientTestCases.java
index 56a2da8..04fb749 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmltype/proporder/NonTransientTestCases.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmltype/proporder/NonTransientTestCases.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,7 @@ public NonTransientTestCases(String name) {
 
     public void testCreateContext() {
         try {
-            JAXBContextFactory.createContext(new Class[] {ChildOfRoot.class}, null);
+            JAXBContextFactory.createContext(new Class<?>[] {ChildOfRoot.class}, null);
         } catch(jakarta.xml.bind.JAXBException e) {
             JAXBException jaxbException = (JAXBException) e.getCause();
             assertEquals(JAXBException.NON_EXISTENT_PROPERTY_IN_PROP_ORDER, jaxbException.getErrorCode());
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmltype/proporder/TransientTestCases.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmltype/proporder/TransientTestCases.java
index 80a60f0..42a2456 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmltype/proporder/TransientTestCases.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmltype/proporder/TransientTestCases.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,7 +23,7 @@ public class TransientTestCases extends JAXBWithJSONTestCases {
 
     public TransientTestCases(String name) throws Exception {
         super(name);
-        setClasses(new Class[] {ChildOfTransientRoot.class});
+        setClasses(new Class<?>[] {ChildOfTransientRoot.class});
         setControlDocument(XML_RESOURCE);
         setControlJSON(JSON_RESOURCE);
     }
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmlvalue/XmlValueByteArrayTestCases.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmlvalue/XmlValueByteArrayTestCases.java
index fb2bd14..a6cb6e7 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmlvalue/XmlValueByteArrayTestCases.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmlvalue/XmlValueByteArrayTestCases.java
@@ -36,7 +36,7 @@ public XmlValueByteArrayTestCases(String name) throws Exception {
         super(name);
         setControlDocument(XML_RESOURCE);
         setControlJSON(JSON_RESOURCE);
-        Class[] classes = new Class[1];
+        Class<?>[] classes = new Class<?>[1];
         classes[0] = BytesHolder.class;
         setClasses(classes);
     }
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmlvalue/XmlValueByteArrayWithIdTestCases.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmlvalue/XmlValueByteArrayWithIdTestCases.java
index 012f9d7..d3b1d27 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmlvalue/XmlValueByteArrayWithIdTestCases.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmlvalue/XmlValueByteArrayWithIdTestCases.java
@@ -35,7 +35,7 @@ public XmlValueByteArrayWithIdTestCases(String name) throws Exception {
         super(name);
         setControlDocument(XML_RESOURCE);
         setControlJSON(JSON_RESOURCE);
-        Class[] classes = new Class[2];
+        Class<?>[] classes = new Class<?>[2];
         classes[0] = BytesHolderWithXmlId.class;
         classes[1] = Root.class;
         setClasses(classes);
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmlvalue/XmlValueListTestCases.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmlvalue/XmlValueListTestCases.java
index 717aff8..a491305 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmlvalue/XmlValueListTestCases.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmlvalue/XmlValueListTestCases.java
@@ -29,7 +29,7 @@ public XmlValueListTestCases(String name) throws Exception {
         super(name);
         setControlDocument(XML_RESOURCE);
         setControlJSON(JSON_RESOURCE);
-        Class[] classes = new Class[1];
+        Class<?>[] classes = new Class<?>[1];
         classes[0] = PhoneNumberList.class;
         setClasses(classes);
     }
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmlvalue/XmlValueTestCases.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmlvalue/XmlValueTestCases.java
index 4af8c58..2963c22 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmlvalue/XmlValueTestCases.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmlvalue/XmlValueTestCases.java
@@ -30,7 +30,7 @@ public XmlValueTestCases(String name) throws Exception {
         super(name);
         setControlDocument(XML_RESOURCE);
         setControlJSON(JSON_RESOURCE);
-        Class[] classes = new Class[1];
+        Class<?>[] classes = new Class<?>[1];
         classes[0] = PhoneNumber.class;
         setClasses(classes);
     }
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmlvalue/XmlValueWithAttributesTestCases.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmlvalue/XmlValueWithAttributesTestCases.java
index 2bffa23..87b52fb 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmlvalue/XmlValueWithAttributesTestCases.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmlvalue/XmlValueWithAttributesTestCases.java
@@ -33,7 +33,7 @@ public XmlValueWithAttributesTestCases(String name) throws Exception {
         super(name);
         setControlDocument(XML_RESOURCE);
         setControlJSON(JSON_RESOURCE);
-        Class[] classes = new Class[1];
+        Class<?>[] classes = new Class<?>[1];
         classes[0] = PhoneNumberWithAtts.class;
         setClasses(classes);
     }
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmlvalue/XmlValueWithAttributesXpathTestCases.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmlvalue/XmlValueWithAttributesXpathTestCases.java
index ce515a8..f1e1be0 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmlvalue/XmlValueWithAttributesXpathTestCases.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmlvalue/XmlValueWithAttributesXpathTestCases.java
@@ -34,7 +34,7 @@ public XmlValueWithAttributesXpathTestCases(String name) throws Exception {
         super(name);
         setControlDocument(XML_RESOURCE);
         setControlJSON(JSON_RESOURCE);
-        Class[] classes = new Class[1];
+        Class<?>[] classes = new Class<?>[1];
         classes[0] = PhoneNumberWithAtts.class;
         setClasses(classes);
     }
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmlvalue/XmlValueWithNullAttrTestCases.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmlvalue/XmlValueWithNullAttrTestCases.java
index 880a0bf..fcd382c 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmlvalue/XmlValueWithNullAttrTestCases.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmlvalue/XmlValueWithNullAttrTestCases.java
@@ -33,7 +33,7 @@ public XmlValueWithNullAttrTestCases(String name) throws Exception {
         super(name);
         setControlDocument(XML_RESOURCE);
         setControlJSON(JSON_RESOURCE);
-        Class[] classes = new Class[1];
+        Class<?>[] classes = new Class<?>[1];
         classes[0] = PhoneNumberWithAtts.class;
         setClasses(classes);
     }
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmlvalue/none/InvalidTestCases.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmlvalue/none/InvalidTestCases.java
index c6f8a3f..bc2b771 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmlvalue/none/InvalidTestCases.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmlvalue/none/InvalidTestCases.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,7 @@ public InvalidTestCases(String name) {
 
     public void testCreateContext() throws Exception {
         try {
-            JAXBContextFactory.createContext(new Class[] {InvalidChild.class}, null);
+            JAXBContextFactory.createContext(new Class<?>[] {InvalidChild.class}, null);
         } catch(jakarta.xml.bind.JAXBException e) {
             JAXBException moxyException = (JAXBException) e.getCause();
             assertEquals(JAXBException.SUBCLASS_CANNOT_HAVE_XMLVALUE, moxyException.getErrorCode());
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmlvalue/none/ValidTestCases.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmlvalue/none/ValidTestCases.java
index fd698e8..7b71fb1 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmlvalue/none/ValidTestCases.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmlvalue/none/ValidTestCases.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,7 @@ public class ValidTestCases extends JAXBWithJSONTestCases {
 
     public ValidTestCases(String name) throws Exception {
         super(name);
-        setClasses(new Class[] {ValidChild.class});
+        setClasses(new Class<?>[] {ValidChild.class});
         setControlDocument(XML_RESOURCE);
         setControlJSON(JSON_RESOURCE);
         jaxbMarshaller.setProperty(MarshallerProperties.JSON_ATTRIBUTE_PREFIX, "@");
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmlvariablenode/XmlVariableNodeAdapterTestCases.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmlvariablenode/XmlVariableNodeAdapterTestCases.java
index 51e749d..dbcdf3b 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmlvariablenode/XmlVariableNodeAdapterTestCases.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmlvariablenode/XmlVariableNodeAdapterTestCases.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,7 +34,7 @@ public XmlVariableNodeAdapterTestCases(String name) throws Exception {
         super(name);
         setControlDocument(XML_RESOURCE);
         setControlJSON(JSON_RESOURCE);
-        setClasses(new Class[]{RootAdapter.class});
+        setClasses(new Class<?>[]{RootAdapter.class});
     }
 
 
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmlvariablenode/XmlVariableNodeArrayTestCases.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmlvariablenode/XmlVariableNodeArrayTestCases.java
index b81dcc6..b1c979d 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmlvariablenode/XmlVariableNodeArrayTestCases.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmlvariablenode/XmlVariableNodeArrayTestCases.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
@@ -27,7 +27,7 @@ public XmlVariableNodeArrayTestCases(String name) throws Exception {
         super(name);
         setControlDocument(XML_RESOURCE);
         setControlJSON(JSON_RESOURCE);
-        setClasses(new Class[]{RootArray.class});
+        setClasses(new Class<?>[]{RootArray.class});
     }
 
     @Override
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmlvariablenode/XmlVariableNodeBindingsTestCases.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmlvariablenode/XmlVariableNodeBindingsTestCases.java
index 59f8770..9a6900a 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmlvariablenode/XmlVariableNodeBindingsTestCases.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmlvariablenode/XmlVariableNodeBindingsTestCases.java
@@ -37,7 +37,7 @@ public XmlVariableNodeBindingsTestCases(String name) throws Exception {
         super(name);
         setControlDocument(XML_RESOURCE);
         setControlJSON(JSON_RESOURCE);
-        setClasses(new Class[]{RootNoAnnotations.class});
+        setClasses(new Class<?>[]{RootNoAnnotations.class});
     }
 
     @Override
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmlvariablenode/XmlVariableNodeChildTestCases.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmlvariablenode/XmlVariableNodeChildTestCases.java
index 074e876..4ec98d7 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmlvariablenode/XmlVariableNodeChildTestCases.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmlvariablenode/XmlVariableNodeChildTestCases.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,7 +28,7 @@ public XmlVariableNodeChildTestCases(String name) throws Exception {
         super(name);
         setControlDocument(XML_RESOURCE);
         setControlJSON(JSON_RESOURCE);
-        setClasses(new Class[]{Root.class, Thing.class, Child.class});
+        setClasses(new Class<?>[]{Root.class, Thing.class, Child.class});
     }
 
     @Override
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmlvariablenode/XmlVariableNodeChildTypeTestCases.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmlvariablenode/XmlVariableNodeChildTypeTestCases.java
index 3bf7a18..1a1ffa0 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmlvariablenode/XmlVariableNodeChildTypeTestCases.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmlvariablenode/XmlVariableNodeChildTypeTestCases.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
@@ -26,7 +26,7 @@ public XmlVariableNodeChildTypeTestCases(String name) throws Exception {
         super(name);
         setControlDocument(XML_RESOURCE);
         setControlJSON(JSON_RESOURCE);
-        setClasses(new Class[]{RootChildType.class, Thing.class, Child.class});
+        setClasses(new Class<?>[]{RootChildType.class, Thing.class, Child.class});
     }
 
     @Override
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmlvariablenode/XmlVariableNodeCollectionNullValueTestCases.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmlvariablenode/XmlVariableNodeCollectionNullValueTestCases.java
index 6115331..33666c8 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmlvariablenode/XmlVariableNodeCollectionNullValueTestCases.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmlvariablenode/XmlVariableNodeCollectionNullValueTestCases.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
@@ -27,7 +27,7 @@ public XmlVariableNodeCollectionNullValueTestCases(String name) throws Exception
         super(name);
         setControlDocument(XML_RESOURCE);
         setControlJSON(JSON_RESOURCE);
-        setClasses(new Class[]{RootNull.class, ChildNull.class});
+        setClasses(new Class<?>[]{RootNull.class, ChildNull.class});
     }
 
     @Override
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmlvariablenode/XmlVariableNodeCollectionXPathTestCases.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmlvariablenode/XmlVariableNodeCollectionXPathTestCases.java
index e827fd8..48dbb05 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmlvariablenode/XmlVariableNodeCollectionXPathTestCases.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmlvariablenode/XmlVariableNodeCollectionXPathTestCases.java
@@ -41,7 +41,7 @@ public XmlVariableNodeCollectionXPathTestCases(String name) throws Exception {
         super(name);
         setControlDocument(XML_RESOURCE);
         setControlJSON(JSON_RESOURCE);
-        setClasses(new Class[]{RootNoAnnotations.class});
+        setClasses(new Class<?>[]{RootNoAnnotations.class});
     }
 
     @Override
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmlvariablenode/XmlVariableNodeDuplicatesTestCases.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmlvariablenode/XmlVariableNodeDuplicatesTestCases.java
index 35c7d95..671b073 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmlvariablenode/XmlVariableNodeDuplicatesTestCases.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmlvariablenode/XmlVariableNodeDuplicatesTestCases.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
@@ -26,7 +26,7 @@ public XmlVariableNodeDuplicatesTestCases(String name) throws Exception {
         super(name);
         setControlDocument(XML_RESOURCE);
         setControlJSON(JSON_RESOURCE);
-        setClasses(new Class[]{Root.class});
+        setClasses(new Class<?>[]{Root.class});
     }
 
     @Override
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmlvariablenode/XmlVariableNodeElementWrapperTestCases.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmlvariablenode/XmlVariableNodeElementWrapperTestCases.java
index a7b4e4f..2842120 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmlvariablenode/XmlVariableNodeElementWrapperTestCases.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmlvariablenode/XmlVariableNodeElementWrapperTestCases.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,7 +40,7 @@ public XmlVariableNodeElementWrapperTestCases(String name) throws Exception {
         super(name);
         setControlDocument(XML_RESOURCE);
         setControlJSON(JSON_RESOURCE);
-        setClasses(new Class[]{RootWrapper.class});
+        setClasses(new Class<?>[]{RootWrapper.class});
     }
 
 
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmlvariablenode/XmlVariableNodeInvalidTestCases.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmlvariablenode/XmlVariableNodeInvalidTestCases.java
index 421e5c7..1a0cc9c 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmlvariablenode/XmlVariableNodeInvalidTestCases.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmlvariablenode/XmlVariableNodeInvalidTestCases.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
@@ -31,7 +31,7 @@ public XmlVariableNodeInvalidTestCases(String name) throws Exception {
     }
 
     public void testInvalid(){
-        Class[] classes = new Class[]{RootInvalid.class};
+        Class<?>[] classes = new Class<?>[]{RootInvalid.class};
         try {
             JAXBContext ctx = JAXBContextFactory.createContext(classes, null);
         } catch (JAXBException e) {
@@ -45,7 +45,7 @@ public void testInvalid(){
     }
 
     public void testInvalid2(){
-        Class[] classes = new Class[]{RootInvalid2.class};
+        Class<?>[] classes = new Class<?>[]{RootInvalid2.class};
         try {
             JAXBContext ctx = JAXBContextFactory.createContext(classes, null);
         } catch (JAXBException e) {
@@ -60,7 +60,7 @@ public void testInvalid2(){
     }
 
     public void testInvalid3(){
-        Class[] classes = new Class[]{RootInvalid3.class};
+        Class<?>[] classes = new Class<?>[]{RootInvalid3.class};
         try {
             JAXBContext ctx = JAXBContextFactory.createContext(classes, null);
         } catch (JAXBException e) {
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmlvariablenode/XmlVariableNodeMapTestCases.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmlvariablenode/XmlVariableNodeMapTestCases.java
index efeb3a4..1f79f8d 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmlvariablenode/XmlVariableNodeMapTestCases.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmlvariablenode/XmlVariableNodeMapTestCases.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,7 +41,7 @@ public XmlVariableNodeMapTestCases(String name) throws Exception {
         super(name);
         setControlDocument(XML_RESOURCE);
         setControlJSON(JSON_RESOURCE);
-        setClasses(new Class[]{RootMap.class});
+        setClasses(new Class<?>[]{RootMap.class});
     }
 
 
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmlvariablenode/XmlVariableNodeNullValueTestCases.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmlvariablenode/XmlVariableNodeNullValueTestCases.java
index 06f3dc2..065c599 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmlvariablenode/XmlVariableNodeNullValueTestCases.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmlvariablenode/XmlVariableNodeNullValueTestCases.java
@@ -36,7 +36,7 @@ public XmlVariableNodeNullValueTestCases(String name) throws Exception {
         super(name);
         setControlDocument(XML_RESOURCE);
         setControlJSON(JSON_RESOURCE);
-        setClasses(new Class[]{Root.class});
+        setClasses(new Class<?>[]{Root.class});
         expectsMarshalException = true;
     }
 
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmlvariablenode/XmlVariableNodeNullsTestCases.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmlvariablenode/XmlVariableNodeNullsTestCases.java
index 6d10903..56ad663 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmlvariablenode/XmlVariableNodeNullsTestCases.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmlvariablenode/XmlVariableNodeNullsTestCases.java
@@ -36,7 +36,7 @@ public XmlVariableNodeNullsTestCases(String name) throws Exception {
         super(name);
         setControlDocument(XML_RESOURCE);
         setControlJSON(JSON_RESOURCE);
-        setClasses(new Class[]{Root.class});
+        setClasses(new Class<?>[]{Root.class});
     }
 
     @Override
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmlvariablenode/XmlVariableNodeObjectXPathTestCases.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmlvariablenode/XmlVariableNodeObjectXPathTestCases.java
index ef26798..6165c9d 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmlvariablenode/XmlVariableNodeObjectXPathTestCases.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmlvariablenode/XmlVariableNodeObjectXPathTestCases.java
@@ -41,7 +41,7 @@ public XmlVariableNodeObjectXPathTestCases(String name) throws Exception {
         super(name);
         setControlDocument(XML_RESOURCE);
         setControlJSON(JSON_RESOURCE);
-        setClasses(new Class[]{RootSingle.class});
+        setClasses(new Class<?>[]{RootSingle.class});
     }
 
     @Override
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmlvariablenode/XmlVariableNodeObjectsTestCases.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmlvariablenode/XmlVariableNodeObjectsTestCases.java
index 6e2e55b..ba570fe 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmlvariablenode/XmlVariableNodeObjectsTestCases.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmlvariablenode/XmlVariableNodeObjectsTestCases.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
@@ -26,7 +26,7 @@ public XmlVariableNodeObjectsTestCases(String name) throws Exception {
         super(name);
         setControlDocument(XML_RESOURCE);
         setControlJSON(JSON_RESOURCE);
-        setClasses(new Class[]{RootWithObjectList.class});
+        setClasses(new Class<?>[]{RootWithObjectList.class});
     }
 
     @Override
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmlvariablenode/XmlVariableNodeQNameNSTestCases.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmlvariablenode/XmlVariableNodeQNameNSTestCases.java
index 54b1b6b..8165fd1 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmlvariablenode/XmlVariableNodeQNameNSTestCases.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmlvariablenode/XmlVariableNodeQNameNSTestCases.java
@@ -43,7 +43,7 @@ public XmlVariableNodeQNameNSTestCases(String name) throws Exception {
         setControlDocument(XML_RESOURCE);
         setControlJSON(JSON_RESOURCE);
         setWriteControlDocument(XML_WRITE_RESOURCE);
-        setClasses(new Class[]{RootQName.class});
+        setClasses(new Class<?>[]{RootQName.class});
         Map<String, String> namespaces = new HashMap<String, String>();
         namespaces.put("uri1", "xxx");
         namespaces.put("uri2", "yyy");
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmlvariablenode/XmlVariableNodeQNameTestCases.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmlvariablenode/XmlVariableNodeQNameTestCases.java
index 58448b4..a98fd05 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmlvariablenode/XmlVariableNodeQNameTestCases.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmlvariablenode/XmlVariableNodeQNameTestCases.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,7 +28,7 @@ public XmlVariableNodeQNameTestCases(String name) throws Exception {
         super(name);
         setControlDocument(XML_RESOURCE);
         setControlJSON(JSON_RESOURCE);
-        setClasses(new Class[]{RootQName.class});
+        setClasses(new Class<?>[]{RootQName.class});
     }
 
     @Override
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmlvariablenode/XmlVariableNodeSingleTestCases.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmlvariablenode/XmlVariableNodeSingleTestCases.java
index 71e4a67..b3d5739 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmlvariablenode/XmlVariableNodeSingleTestCases.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmlvariablenode/XmlVariableNodeSingleTestCases.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,7 +34,7 @@ public XmlVariableNodeSingleTestCases(String name) throws Exception {
         super(name);
         setControlDocument(XML_RESOURCE);
         setControlJSON(JSON_RESOURCE);
-        setClasses(new Class[]{RootSingle.class});
+        setClasses(new Class<?>[]{RootSingle.class});
     }
 
     @Override
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmlvariablenode/XmlVariableNodeTestCases.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmlvariablenode/XmlVariableNodeTestCases.java
index ac8a858..2a257d3 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmlvariablenode/XmlVariableNodeTestCases.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmlvariablenode/XmlVariableNodeTestCases.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,7 +40,7 @@ public XmlVariableNodeTestCases(String name) throws Exception {
         super(name);
         setControlDocument(XML_RESOURCE);
         setControlJSON(JSON_RESOURCE);
-        setClasses(new Class[]{Root.class});
+        setClasses(new Class<?>[]{Root.class});
     }
 
 
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmlvariablenode/XmlVariableNodeWithReferenceTestCase.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmlvariablenode/XmlVariableNodeWithReferenceTestCase.java
index cb4d0f4..be50ab6 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmlvariablenode/XmlVariableNodeWithReferenceTestCase.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmlvariablenode/XmlVariableNodeWithReferenceTestCase.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
@@ -37,7 +37,7 @@ public XmlVariableNodeWithReferenceTestCase(String name) throws Exception {
         super(name);
         setControlDocument(XML_RESOURCE);
         setControlJSON(JSON_RESOURCE);
-        setClasses(new Class[]{RootWithReference.class});
+        setClasses(new Class<?>[]{RootWithReference.class});
     }
 
 
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmlvariablenode/XmlVariableNodeXmlValueAttributeTestCases.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmlvariablenode/XmlVariableNodeXmlValueAttributeTestCases.java
index 700458a..8e8dc2b 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmlvariablenode/XmlVariableNodeXmlValueAttributeTestCases.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmlvariablenode/XmlVariableNodeXmlValueAttributeTestCases.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,7 +41,7 @@ public XmlVariableNodeXmlValueAttributeTestCases(String name) throws Exception {
         super(name);
         setControlDocument(XML_RESOURCE);
         setControlJSON(JSON_RESOURCE);
-        setClasses(new Class[]{RootXmlValueAttribute.class});
+        setClasses(new Class<?>[]{RootXmlValueAttribute.class});
         jaxbMarshaller.setProperty(MarshallerProperties.JSON_ATTRIBUTE_PREFIX, "@");
         jaxbUnmarshaller.setProperty(UnmarshallerProperties.JSON_ATTRIBUTE_PREFIX, "@");
     }
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmlvariablenode/XmlVariableNodeXmlValueCollectionAttrTestCases.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmlvariablenode/XmlVariableNodeXmlValueCollectionAttrTestCases.java
index 62b4f21..9a686cd 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmlvariablenode/XmlVariableNodeXmlValueCollectionAttrTestCases.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmlvariablenode/XmlVariableNodeXmlValueCollectionAttrTestCases.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,7 +41,7 @@ public XmlVariableNodeXmlValueCollectionAttrTestCases(String name) throws Except
         super(name);
         setControlDocument(XML_RESOURCE);
         setControlJSON(JSON_RESOURCE);
-        setClasses(new Class[]{RootXmlValueCollectionAttr.class});
+        setClasses(new Class<?>[]{RootXmlValueCollectionAttr.class});
         jaxbMarshaller.setProperty(MarshallerProperties.JSON_ATTRIBUTE_PREFIX, "@");
         jaxbUnmarshaller.setProperty(UnmarshallerProperties.JSON_ATTRIBUTE_PREFIX, "@");
     }
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmlvariablenode/XmlVariableNodeXmlValueCollectionTestCases.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmlvariablenode/XmlVariableNodeXmlValueCollectionTestCases.java
index 1bac251..03ba7c1 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmlvariablenode/XmlVariableNodeXmlValueCollectionTestCases.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmlvariablenode/XmlVariableNodeXmlValueCollectionTestCases.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,7 +41,7 @@ public XmlVariableNodeXmlValueCollectionTestCases(String name) throws Exception
         super(name);
         setControlDocument(XML_RESOURCE);
         setControlJSON(JSON_RESOURCE);
-        setClasses(new Class[]{RootXmlValueCollection.class});
+        setClasses(new Class<?>[]{RootXmlValueCollection.class});
         jaxbMarshaller.setProperty(MarshallerProperties.JSON_ATTRIBUTE_PREFIX, "@");
         jaxbUnmarshaller.setProperty(UnmarshallerProperties.JSON_ATTRIBUTE_PREFIX, "@");
     }
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmlvariablenode/XmlVariableNodeXmlValueTestCases.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmlvariablenode/XmlVariableNodeXmlValueTestCases.java
index 3ae4228..a8973cb 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmlvariablenode/XmlVariableNodeXmlValueTestCases.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmlvariablenode/XmlVariableNodeXmlValueTestCases.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,7 +41,7 @@ public XmlVariableNodeXmlValueTestCases(String name) throws Exception {
         super(name);
         setControlDocument(XML_RESOURCE);
         setControlJSON(JSON_RESOURCE);
-        setClasses(new Class[]{RootXmlValue.class});
+        setClasses(new Class<?>[]{RootXmlValue.class});
         jaxbMarshaller.setProperty(MarshallerProperties.JSON_ATTRIBUTE_PREFIX, "@");
         jaxbUnmarshaller.setProperty(UnmarshallerProperties.JSON_ATTRIBUTE_PREFIX, "@");
     }
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmlvariablenode/method/XmlVariableNodeMethodGetOnlyTestCases.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmlvariablenode/method/XmlVariableNodeMethodGetOnlyTestCases.java
index b092c45..7b739d7 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmlvariablenode/method/XmlVariableNodeMethodGetOnlyTestCases.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmlvariablenode/method/XmlVariableNodeMethodGetOnlyTestCases.java
@@ -26,7 +26,7 @@ public XmlVariableNodeMethodGetOnlyTestCases(String name) throws Exception {
         super(name);
         setControlDocument(XML_RESOURCE);
         setControlJSON(JSON_RESOURCE);
-        setClasses(new Class[]{RootGetOnly.class});
+        setClasses(new Class<?>[]{RootGetOnly.class});
     }
 
     @Override
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmlvariablenode/method/XmlVariableNodeMethodSetOnlyTestCases.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmlvariablenode/method/XmlVariableNodeMethodSetOnlyTestCases.java
index b564cd2..5a91dda 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmlvariablenode/method/XmlVariableNodeMethodSetOnlyTestCases.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmlvariablenode/method/XmlVariableNodeMethodSetOnlyTestCases.java
@@ -30,7 +30,7 @@ public XmlVariableNodeMethodSetOnlyTestCases(String name) throws Exception {
         setControlJSON(JSON_RESOURCE);
         setWriteControlJSON(JSON_WRITE_RESOURCE);
         setWriteControlDocument(XML_WRITE_RESOURCE);
-        setClasses(new Class[]{RootSetOnly.class});
+        setClasses(new Class<?>[]{RootSetOnly.class});
     }
 
     @Override
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmlvariablenode/method/XmlVariableNodeMethodTestCases.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmlvariablenode/method/XmlVariableNodeMethodTestCases.java
index dd39ba7..9c7bdeb 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmlvariablenode/method/XmlVariableNodeMethodTestCases.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmlvariablenode/method/XmlVariableNodeMethodTestCases.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
@@ -26,7 +26,7 @@ public XmlVariableNodeMethodTestCases(String name) throws Exception {
         super(name);
         setControlDocument(XML_RESOURCE);
         setControlJSON(JSON_RESOURCE);
-        setClasses(new Class[]{Root.class});
+        setClasses(new Class<?>[]{Root.class});
     }
 
     @Override
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmlvirtualaccessmethods/XmlVirtualAccessMethodsTestCases.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmlvirtualaccessmethods/XmlVirtualAccessMethodsTestCases.java
index 3440b9d..e69c724 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmlvirtualaccessmethods/XmlVirtualAccessMethodsTestCases.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmlvirtualaccessmethods/XmlVirtualAccessMethodsTestCases.java
@@ -77,7 +77,7 @@ public void testBasicModel() throws Exception {
          *      - forwards (LinkedList of PhoneNumber)
          */
 
-        ctx = JAXBContextFactory.createContext(new Class[] {Employee.class, PhoneNumber.class}, ctxProperties);
+        ctx = JAXBContextFactory.createContext(new Class<?>[] {Employee.class, PhoneNumber.class}, ctxProperties);
 
         Document marshalDoc = DocumentBuilderFactory.newInstance().newDocumentBuilder().newDocument();
 
@@ -130,7 +130,7 @@ public void testCompleteModel() throws Exception {
          *       - myStringArray
          */
 
-        ctx = JAXBContextFactory.createContext(new Class[] {ExtObjectRoot.class, ExtObjectA.class,
+        ctx = JAXBContextFactory.createContext(new Class<?>[] {ExtObjectRoot.class, ExtObjectA.class,
                 ExtObjectB.class, ExtObjectC.class}, ctxProperties);
 
         Document marshalDoc = DocumentBuilderFactory.newInstance().newDocumentBuilder().newDocument();
@@ -194,7 +194,7 @@ public void testSchemaValidationBasic() throws Exception {
         Map<String, Object> ctxProperties = new HashMap<String, Object>();
         ctxProperties.put(JAXBContextProperties.OXM_METADATA_SOURCE, oxm);
 
-        ctx = JAXBContextFactory.createContext(new Class[] {Employee.class, PhoneNumber.class}, ctxProperties);
+        ctx = JAXBContextFactory.createContext(new Class<?>[] {Employee.class, PhoneNumber.class}, ctxProperties);
 
         validateAgainstSchema(ctx, getControlObjectBasic());
     }
@@ -206,7 +206,7 @@ public void testSchemaValidationComplete() throws Exception {
         Map<String, Object> ctxProperties = new HashMap<String, Object>();
         ctxProperties.put(JAXBContextProperties.OXM_METADATA_SOURCE, oxm);
 
-        ctx = JAXBContextFactory.createContext(new Class[] {ExtObjectRoot.class, ExtObjectA.class,
+        ctx = JAXBContextFactory.createContext(new Class<?>[] {ExtObjectRoot.class, ExtObjectA.class,
                 ExtObjectB.class, ExtObjectC.class}, ctxProperties);
 
         validateAgainstSchema(ctx, getControlObjectComplete());
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmlvirtualaccessmethods/proporder/PropOrderTestCases.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmlvirtualaccessmethods/proporder/PropOrderTestCases.java
index d2a3d32..ca6dcab 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmlvirtualaccessmethods/proporder/PropOrderTestCases.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xmlvirtualaccessmethods/proporder/PropOrderTestCases.java
@@ -29,7 +29,7 @@ public PropOrderTestCases(String name) throws Exception {
         super(name);
         setControlDocument("org/eclipse/persistence/testing/jaxb/xmlvirtualaccessmethods/proporder/customer.xml");
         setControlJSON("org/eclipse/persistence/testing/jaxb/xmlvirtualaccessmethods/proporder/customer.json");
-        setTypes(new Class[] {Customer.class, Parent.class, PhoneNumber.class, Address.class});
+        setTypes(new Class<?>[] {Customer.class, Parent.class, PhoneNumber.class, Address.class});
     }
 
 
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xsitype/OtherRootTestCases.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xsitype/OtherRootTestCases.java
index 49bc449..07974fc 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xsitype/OtherRootTestCases.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xsitype/OtherRootTestCases.java
@@ -28,7 +28,7 @@ public OtherRootTestCases(String name) throws Exception {
         super(name);
         setControlDocument(XML_RESOURCE);
         setControlJSON(JSON_RESOURCE);
-        Class[] classes = new Class[3];
+        Class<?>[] classes = new Class<?>[3];
         classes[0] = Root.class;
         classes[1] = Foo.class;
         classes[2] = ObjectFactory.class;
@@ -42,7 +42,7 @@ protected Object getControlObject() {
     }
 
     public void testRI()throws Exception{
-         Class[] classes = new Class[3];
+         Class<?>[] classes = new Class<?>[3];
          classes[0] = Root.class;
          classes[1] = Foo.class;
          classes[2] = ObjectFactory.class;
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xsitype/TypeAttributeInheritanceTestCases.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xsitype/TypeAttributeInheritanceTestCases.java
index e73bf94..a882b51 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xsitype/TypeAttributeInheritanceTestCases.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xsitype/TypeAttributeInheritanceTestCases.java
@@ -28,7 +28,7 @@ public TypeAttributeInheritanceTestCases(String name) throws Exception {
         setControlJSON(JSON_RESOURCE);
         setWriteControlDocument(XML_WRITE_RESOURCE);
         setWriteControlJSON(JSON_WRITE_RESOURCE);
-        Class[] classes = new Class[2];
+        Class<?>[] classes = new Class<?>[2];
         classes[0] = Root.class;
         classes[1] = Child.class;
         setClasses(classes);
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xsitype/TypeAttributeTestCases.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xsitype/TypeAttributeTestCases.java
index f2f49eb..ae16b6e 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xsitype/TypeAttributeTestCases.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/jaxb/xsitype/TypeAttributeTestCases.java
@@ -27,7 +27,7 @@ public TypeAttributeTestCases(String name) throws Exception {
         setControlJSON(JSON_RESOURCE);
         setWriteControlDocument(XML_WRITE_RESOURCE);
         setWriteControlJSON(JSON_WRITE_RESOURCE);
-        Class[] classes = new Class[2];
+        Class<?>[] classes = new Class<?>[2];
         classes[0] = Root.class;
         classes[1] = Foo.class;
         setClasses(classes);
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/oxm/OXTestCase.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/oxm/OXTestCase.java
index c2dea2d..f127b04 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/oxm/OXTestCase.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/oxm/OXTestCase.java
@@ -86,16 +86,16 @@ public abstract class OXTestCase extends XMLTestCase {
         }
         try {
             staxResultClass = PrivilegedAccessHelper.getClassForName(staxResultClassName);
-            staxResultStreamWriterConstructor = PrivilegedAccessHelper.getConstructorFor(staxResultClass, new Class[]{XMLStreamWriter.class}, true);
-            staxResultEventWriterConstructor = PrivilegedAccessHelper.getConstructorFor(staxResultClass, new Class[]{XMLEventWriter.class}, true);
+            staxResultStreamWriterConstructor = PrivilegedAccessHelper.getConstructorFor(staxResultClass, new Class<?>[]{XMLStreamWriter.class}, true);
+            staxResultEventWriterConstructor = PrivilegedAccessHelper.getConstructorFor(staxResultClass, new Class<?>[]{XMLEventWriter.class}, true);
         } catch(Exception ex) {
             staxResultClass = null;
         }
 
         try {
             staxSourceClass = PrivilegedAccessHelper.getClassForName(staxSourceClassName);
-            staxSourceStreamReaderConstructor = PrivilegedAccessHelper.getConstructorFor(staxSourceClass, new Class[]{XMLStreamReader.class}, true);
-            staxSourceEventReaderConstructor = PrivilegedAccessHelper.getConstructorFor(staxSourceClass, new Class[]{XMLEventReader.class}, true);
+            staxSourceStreamReaderConstructor = PrivilegedAccessHelper.getConstructorFor(staxSourceClass, new Class<?>[]{XMLStreamReader.class}, true);
+            staxSourceEventReaderConstructor = PrivilegedAccessHelper.getConstructorFor(staxSourceClass, new Class<?>[]{XMLEventReader.class}, true);
         } catch(Exception ex) {
             staxSourceClass = null;
         }
diff --git a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/oxm/mappings/directtofield/nillable/DirectIsSetNullPolicyElementAbsentIsSetAbsentFalseWithParamsTestCases.java b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/oxm/mappings/directtofield/nillable/DirectIsSetNullPolicyElementAbsentIsSetAbsentFalseWithParamsTestCases.java
index a9957c4..de82f73 100644
--- a/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/oxm/mappings/directtofield/nillable/DirectIsSetNullPolicyElementAbsentIsSetAbsentFalseWithParamsTestCases.java
+++ b/moxy/org.eclipse.persistence.moxy/src/test/java/org/eclipse/persistence/testing/oxm/mappings/directtofield/nillable/DirectIsSetNullPolicyElementAbsentIsSetAbsentFalseWithParamsTestCases.java
@@ -41,7 +41,7 @@ public DirectIsSetNullPolicyElementAbsentIsSetAbsentFalseWithParamsTestCases(Str
         // Alter marshal policy state
         aNullPolicy.setMarshalNullRepresentation(XMLNullRepresentationType.ABSENT_NODE); // no effect when isset=false
 
-        Class[] isSetParameterTypes = {String.class, String.class, Boolean.class, Integer.class, Short.class, Long.class, Double.class, Float.class, Byte.class, Character.class};
+        Class<?>[] isSetParameterTypes = {String.class, String.class, Boolean.class, Integer.class, Short.class, Long.class, Double.class, Float.class, Byte.class, Character.class};
         //Class[] isSetParameterTypes = {String.class, String.class};
 
         // TODO: verify EMPTY_STRING behavior
diff --git a/sdo/org.eclipse.persistence.sdo/src/test/java/org/eclipse/persistence/testing/sdo/helper/classgen/dynamicimpl/DataTypesTestCases.java b/sdo/org.eclipse.persistence.sdo/src/test/java/org/eclipse/persistence/testing/sdo/helper/classgen/dynamicimpl/DataTypesTestCases.java
index 9499393..45b4522 100644
--- a/sdo/org.eclipse.persistence.sdo/src/test/java/org/eclipse/persistence/testing/sdo/helper/classgen/dynamicimpl/DataTypesTestCases.java
+++ b/sdo/org.eclipse.persistence.sdo/src/test/java/org/eclipse/persistence/testing/sdo/helper/classgen/dynamicimpl/DataTypesTestCases.java
@@ -199,7 +199,7 @@ public void testCreateObject() {
     public void testBooleanMethodsExist() throws Exception {
 
         SDOType theType  = (SDOType)aHelperContext.getTypeHelper().getType("http://www.example.com", "DataTypes");
-        Class implClass = theType.getImplClass();
+        Class<?> implClass = theType.getImplClass();
         assertNotNull(implClass);
 
         Method isMethod = implClass.getMethod("isBooleanProperty");
diff --git a/sdo/org.eclipse.persistence.sdo/src/test/java/org/eclipse/persistence/testing/sdo/helper/datafactory/SDODataFactoryCreateSimpleTestCases.java b/sdo/org.eclipse.persistence.sdo/src/test/java/org/eclipse/persistence/testing/sdo/helper/datafactory/SDODataFactoryCreateSimpleTestCases.java
index 0867877..97f9804 100644
--- a/sdo/org.eclipse.persistence.sdo/src/test/java/org/eclipse/persistence/testing/sdo/helper/datafactory/SDODataFactoryCreateSimpleTestCases.java
+++ b/sdo/org.eclipse.persistence.sdo/src/test/java/org/eclipse/persistence/testing/sdo/helper/datafactory/SDODataFactoryCreateSimpleTestCases.java
@@ -47,7 +47,7 @@ public void testCreateByClass() {
     }
 
     public void testCreateByInvalidClass() {
-        Class oldClass = simpleType.getInstanceClass();
+        Class<?> oldClass = simpleType.getInstanceClass();
         simpleType.setInstanceClass(String.class);
         try {
             DataObject dataObject = dataFactory.create(simpleType);
@@ -60,7 +60,7 @@ public void testCreateByInvalidClass() {
     }
 
     public void testCreateByNullClass() {
-        Class oldClass = simpleType.getInstanceClass();
+        Class<?> oldClass = simpleType.getInstanceClass();
         String oldClassName = simpleType.getInstanceClassName();
         simpleType.setInstanceClass(null);
         simpleType.setInstanceClassName(null);
diff --git a/sdo/org.eclipse.persistence.sdo/src/test/java/org/eclipse/persistence/testing/sdo/helper/datafactory/SDODataFactoryExceptionTestCases.java b/sdo/org.eclipse.persistence.sdo/src/test/java/org/eclipse/persistence/testing/sdo/helper/datafactory/SDODataFactoryExceptionTestCases.java
index 9b2d189..5998a7a 100644
--- a/sdo/org.eclipse.persistence.sdo/src/test/java/org/eclipse/persistence/testing/sdo/helper/datafactory/SDODataFactoryExceptionTestCases.java
+++ b/sdo/org.eclipse.persistence.sdo/src/test/java/org/eclipse/persistence/testing/sdo/helper/datafactory/SDODataFactoryExceptionTestCases.java
@@ -52,7 +52,7 @@ public void testOpenTypeException() throws Exception {
     }
 
     public void testNullInterfaceClass() throws Exception {
-        Class theClass = null;
+        Class<?> theClass = null;
         try {
             dataFactory.create(theClass);
             fail("An IllegalArugmentException should have occurred");
@@ -78,7 +78,7 @@ public void testCreateWithNullType() throws Exception {
      }
 
      public void testCreateWithNullInterfaceClass() throws Exception {
-         Class theClass = null;
+         Class<?> theClass = null;
          try {
              dataFactory.create(theClass);
              fail("An IllegalArugmentException should have occurred");
diff --git a/sdo/org.eclipse.persistence.sdo/src/test/java/org/eclipse/persistence/testing/sdo/helper/jaxbhelper/datafactory/DataFactoryTestCases.java b/sdo/org.eclipse.persistence.sdo/src/test/java/org/eclipse/persistence/testing/sdo/helper/jaxbhelper/datafactory/DataFactoryTestCases.java
index 2bbd21e..a074a5f 100644
--- a/sdo/org.eclipse.persistence.sdo/src/test/java/org/eclipse/persistence/testing/sdo/helper/jaxbhelper/datafactory/DataFactoryTestCases.java
+++ b/sdo/org.eclipse.persistence.sdo/src/test/java/org/eclipse/persistence/testing/sdo/helper/jaxbhelper/datafactory/DataFactoryTestCases.java
@@ -47,7 +47,7 @@ public DataFactoryTestCases(String name) {
     @Override
     public void setUp() {
         try {
-            Class[] classes = new Class[1];
+            Class<?>[] classes = new Class<?>[1];
             classes[0] = Root.class;
             JAXBContext jaxbContext = JAXBContext.newInstance(classes);
             jaxbHelperContext = new JAXBHelperContext(jaxbContext);
diff --git a/sdo/org.eclipse.persistence.sdo/src/test/java/org/eclipse/persistence/testing/sdo/helper/jaxbhelper/helpercontext/HelperContextTestCases.java b/sdo/org.eclipse.persistence.sdo/src/test/java/org/eclipse/persistence/testing/sdo/helper/jaxbhelper/helpercontext/HelperContextTestCases.java
index 11fbf0c..1746e90 100644
--- a/sdo/org.eclipse.persistence.sdo/src/test/java/org/eclipse/persistence/testing/sdo/helper/jaxbhelper/helpercontext/HelperContextTestCases.java
+++ b/sdo/org.eclipse.persistence.sdo/src/test/java/org/eclipse/persistence/testing/sdo/helper/jaxbhelper/helpercontext/HelperContextTestCases.java
@@ -62,7 +62,7 @@ public HelperContextTestCases(String name) {
     @Override
     public void setUp() {
         try {
-            Class[] classes = new Class[1];
+            Class<?>[] classes = new Class<?>[1];
             classes[0] = Root.class;
             JAXBContext jaxbContext = JAXBContext.newInstance(classes);
             jaxbHelperContext = new JAXBHelperContext(jaxbContext);
@@ -86,19 +86,19 @@ public void testGetType() {
 
     public void testGetClass() {
         Type rootType = jaxbHelperContext.getTypeHelper().getType("urn:helpercontext", "root");
-        Class pojoClass = jaxbHelperContext.getClass(rootType);
+        Class<?> pojoClass = jaxbHelperContext.getClass(rootType);
         assertSame(Root.class, pojoClass);
     }
 
     public void testGetClassNull() {
-        Class pojoClass = jaxbHelperContext.getClass(null);
+        Class<?> pojoClass = jaxbHelperContext.getClass(null);
         assertNull(pojoClass);
     }
 
     public void testGetClassNegative() {
         try {
             Type propertyType = jaxbHelperContext.getTypeHelper().getType("commonj.sdo", "Property");
-            Class pojoClass = jaxbHelperContext.getClass(propertyType);
+            Class<?> pojoClass = jaxbHelperContext.getClass(propertyType);
         } catch(SDOException e) {
             assertEquals(SDOException.SDO_JAXB_NO_DESCRIPTOR_FOR_TYPE, e.getErrorCode());
             return;
diff --git a/sdo/org.eclipse.persistence.sdo/src/test/java/org/eclipse/persistence/testing/sdo/helper/jaxbhelper/jaxb/JAXBTestCases.java b/sdo/org.eclipse.persistence.sdo/src/test/java/org/eclipse/persistence/testing/sdo/helper/jaxbhelper/jaxb/JAXBTestCases.java
index a00ffd4..d571421 100644
--- a/sdo/org.eclipse.persistence.sdo/src/test/java/org/eclipse/persistence/testing/sdo/helper/jaxbhelper/jaxb/JAXBTestCases.java
+++ b/sdo/org.eclipse.persistence.sdo/src/test/java/org/eclipse/persistence/testing/sdo/helper/jaxbhelper/jaxb/JAXBTestCases.java
@@ -45,7 +45,7 @@ public JAXBTestCases(String name) {
     @Override
     public void setUp() {
         try {
-            Class[] classes = new Class[3];
+            Class<?>[] classes = new Class<?>[3];
             classes[0] = Root.class;
             classes[1] = Child1.class;
             classes[2] = Child2.class;
diff --git a/sdo/org.eclipse.persistence.sdo/src/test/java/org/eclipse/persistence/testing/sdo/helper/jaxbhelper/jaxb/inverse/InverseTestCases.java b/sdo/org.eclipse.persistence.sdo/src/test/java/org/eclipse/persistence/testing/sdo/helper/jaxbhelper/jaxb/inverse/InverseTestCases.java
index 410223b..3b87320 100644
--- a/sdo/org.eclipse.persistence.sdo/src/test/java/org/eclipse/persistence/testing/sdo/helper/jaxbhelper/jaxb/inverse/InverseTestCases.java
+++ b/sdo/org.eclipse.persistence.sdo/src/test/java/org/eclipse/persistence/testing/sdo/helper/jaxbhelper/jaxb/inverse/InverseTestCases.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
@@ -42,7 +42,7 @@ public InverseTestCases(String name) {
     @Override
     public void setUp() {
         try {
-            Class[] classes = new Class[1];
+            Class<?>[] classes = new Class<?>[1];
             classes[0] = Customer.class;
             JAXBContext jaxbContext = JAXBContext.newInstance(classes);
             jaxbHelperContext = new JAXBHelperContext(jaxbContext);
diff --git a/sdo/org.eclipse.persistence.sdo/src/test/java/org/eclipse/persistence/testing/sdo/helper/xmlhelper/datatype/SDOXMLHelperDatatypeBase64TestCases.java b/sdo/org.eclipse.persistence.sdo/src/test/java/org/eclipse/persistence/testing/sdo/helper/xmlhelper/datatype/SDOXMLHelperDatatypeBase64TestCases.java
index f082e0d..7293618 100644
--- a/sdo/org.eclipse.persistence.sdo/src/test/java/org/eclipse/persistence/testing/sdo/helper/xmlhelper/datatype/SDOXMLHelperDatatypeBase64TestCases.java
+++ b/sdo/org.eclipse.persistence.sdo/src/test/java/org/eclipse/persistence/testing/sdo/helper/xmlhelper/datatype/SDOXMLHelperDatatypeBase64TestCases.java
@@ -36,7 +36,7 @@ public static void main(String[] args) {
     }
 
     @Override
-    protected Class getDatatypeJavaClass() {
+    protected Class<?> getDatatypeJavaClass() {
         return byte[].class;
     }
 
diff --git a/sdo/org.eclipse.persistence.sdo/src/test/java/org/eclipse/persistence/testing/sdo/helper/xmlhelper/datatype/SDOXMLHelperDatatypeBooleanTestCases.java b/sdo/org.eclipse.persistence.sdo/src/test/java/org/eclipse/persistence/testing/sdo/helper/xmlhelper/datatype/SDOXMLHelperDatatypeBooleanTestCases.java
index dc528a5..83f782f 100644
--- a/sdo/org.eclipse.persistence.sdo/src/test/java/org/eclipse/persistence/testing/sdo/helper/xmlhelper/datatype/SDOXMLHelperDatatypeBooleanTestCases.java
+++ b/sdo/org.eclipse.persistence.sdo/src/test/java/org/eclipse/persistence/testing/sdo/helper/xmlhelper/datatype/SDOXMLHelperDatatypeBooleanTestCases.java
@@ -37,7 +37,7 @@ public static void main(String[] args) {
     }
 
     @Override
-    protected Class getDatatypeJavaClass() {
+    protected Class<?> getDatatypeJavaClass() {
         return Boolean.class;
     }
 
diff --git a/sdo/org.eclipse.persistence.sdo/src/test/java/org/eclipse/persistence/testing/sdo/helper/xmlhelper/datatype/SDOXMLHelperDatatypeByteTestCases.java b/sdo/org.eclipse.persistence.sdo/src/test/java/org/eclipse/persistence/testing/sdo/helper/xmlhelper/datatype/SDOXMLHelperDatatypeByteTestCases.java
index df572ec..00bd172 100644
--- a/sdo/org.eclipse.persistence.sdo/src/test/java/org/eclipse/persistence/testing/sdo/helper/xmlhelper/datatype/SDOXMLHelperDatatypeByteTestCases.java
+++ b/sdo/org.eclipse.persistence.sdo/src/test/java/org/eclipse/persistence/testing/sdo/helper/xmlhelper/datatype/SDOXMLHelperDatatypeByteTestCases.java
@@ -32,7 +32,7 @@ public static void main(String[] args) {
     }
 
     @Override
-    protected Class getDatatypeJavaClass() {
+    protected Class<?> getDatatypeJavaClass() {
         return Byte.class;
     }
 
diff --git a/sdo/org.eclipse.persistence.sdo/src/test/java/org/eclipse/persistence/testing/sdo/helper/xmlhelper/datatype/SDOXMLHelperDatatypeCharacterTestCases.java b/sdo/org.eclipse.persistence.sdo/src/test/java/org/eclipse/persistence/testing/sdo/helper/xmlhelper/datatype/SDOXMLHelperDatatypeCharacterTestCases.java
index 50cb627..27a8691 100644
--- a/sdo/org.eclipse.persistence.sdo/src/test/java/org/eclipse/persistence/testing/sdo/helper/xmlhelper/datatype/SDOXMLHelperDatatypeCharacterTestCases.java
+++ b/sdo/org.eclipse.persistence.sdo/src/test/java/org/eclipse/persistence/testing/sdo/helper/xmlhelper/datatype/SDOXMLHelperDatatypeCharacterTestCases.java
@@ -32,7 +32,7 @@ public static void main(String[] args) {
     }
 
     @Override
-    protected Class getDatatypeJavaClass() {
+    protected Class<?> getDatatypeJavaClass() {
         return String.class;
     }
 
diff --git a/sdo/org.eclipse.persistence.sdo/src/test/java/org/eclipse/persistence/testing/sdo/helper/xmlhelper/datatype/SDOXMLHelperDatatypeDateTestCases.java b/sdo/org.eclipse.persistence.sdo/src/test/java/org/eclipse/persistence/testing/sdo/helper/xmlhelper/datatype/SDOXMLHelperDatatypeDateTestCases.java
index bd0af1d..f13b9f2 100644
--- a/sdo/org.eclipse.persistence.sdo/src/test/java/org/eclipse/persistence/testing/sdo/helper/xmlhelper/datatype/SDOXMLHelperDatatypeDateTestCases.java
+++ b/sdo/org.eclipse.persistence.sdo/src/test/java/org/eclipse/persistence/testing/sdo/helper/xmlhelper/datatype/SDOXMLHelperDatatypeDateTestCases.java
@@ -34,7 +34,7 @@ public static void main(String[] args) {
     }
 
     @Override
-    protected Class getDatatypeJavaClass() {
+    protected Class<?> getDatatypeJavaClass() {
         return String.class;
     }
 
diff --git a/sdo/org.eclipse.persistence.sdo/src/test/java/org/eclipse/persistence/testing/sdo/helper/xmlhelper/datatype/SDOXMLHelperDatatypeDateTimeTestCases.java b/sdo/org.eclipse.persistence.sdo/src/test/java/org/eclipse/persistence/testing/sdo/helper/xmlhelper/datatype/SDOXMLHelperDatatypeDateTimeTestCases.java
index 5b5df28..d2bc461 100644
--- a/sdo/org.eclipse.persistence.sdo/src/test/java/org/eclipse/persistence/testing/sdo/helper/xmlhelper/datatype/SDOXMLHelperDatatypeDateTimeTestCases.java
+++ b/sdo/org.eclipse.persistence.sdo/src/test/java/org/eclipse/persistence/testing/sdo/helper/xmlhelper/datatype/SDOXMLHelperDatatypeDateTimeTestCases.java
@@ -34,7 +34,7 @@ public static void main(String[] args) {
     }
 
     @Override
-    protected Class getDatatypeJavaClass() {
+    protected Class<?> getDatatypeJavaClass() {
         return String.class;
     }
 
diff --git a/sdo/org.eclipse.persistence.sdo/src/test/java/org/eclipse/persistence/testing/sdo/helper/xmlhelper/datatype/SDOXMLHelperDatatypeDayTestCases.java b/sdo/org.eclipse.persistence.sdo/src/test/java/org/eclipse/persistence/testing/sdo/helper/xmlhelper/datatype/SDOXMLHelperDatatypeDayTestCases.java
index 74124a2..0f87290 100644
--- a/sdo/org.eclipse.persistence.sdo/src/test/java/org/eclipse/persistence/testing/sdo/helper/xmlhelper/datatype/SDOXMLHelperDatatypeDayTestCases.java
+++ b/sdo/org.eclipse.persistence.sdo/src/test/java/org/eclipse/persistence/testing/sdo/helper/xmlhelper/datatype/SDOXMLHelperDatatypeDayTestCases.java
@@ -32,7 +32,7 @@ public static void main(String[] args) {
     }
 
     @Override
-    protected Class getDatatypeJavaClass() {
+    protected Class<?> getDatatypeJavaClass() {
         return String.class;
     }
 
diff --git a/sdo/org.eclipse.persistence.sdo/src/test/java/org/eclipse/persistence/testing/sdo/helper/xmlhelper/datatype/SDOXMLHelperDatatypeDecimalTestCases.java b/sdo/org.eclipse.persistence.sdo/src/test/java/org/eclipse/persistence/testing/sdo/helper/xmlhelper/datatype/SDOXMLHelperDatatypeDecimalTestCases.java
index 0b533fe..52d30bc 100644
--- a/sdo/org.eclipse.persistence.sdo/src/test/java/org/eclipse/persistence/testing/sdo/helper/xmlhelper/datatype/SDOXMLHelperDatatypeDecimalTestCases.java
+++ b/sdo/org.eclipse.persistence.sdo/src/test/java/org/eclipse/persistence/testing/sdo/helper/xmlhelper/datatype/SDOXMLHelperDatatypeDecimalTestCases.java
@@ -34,7 +34,7 @@ public static void main(String[] args) {
     }
 
     @Override
-    protected Class getDatatypeJavaClass() {
+    protected Class<?> getDatatypeJavaClass() {
         return BigDecimal.class;
     }
 
diff --git a/sdo/org.eclipse.persistence.sdo/src/test/java/org/eclipse/persistence/testing/sdo/helper/xmlhelper/datatype/SDOXMLHelperDatatypeDoubleTestCases.java b/sdo/org.eclipse.persistence.sdo/src/test/java/org/eclipse/persistence/testing/sdo/helper/xmlhelper/datatype/SDOXMLHelperDatatypeDoubleTestCases.java
index 7908815..b9cad05 100644
--- a/sdo/org.eclipse.persistence.sdo/src/test/java/org/eclipse/persistence/testing/sdo/helper/xmlhelper/datatype/SDOXMLHelperDatatypeDoubleTestCases.java
+++ b/sdo/org.eclipse.persistence.sdo/src/test/java/org/eclipse/persistence/testing/sdo/helper/xmlhelper/datatype/SDOXMLHelperDatatypeDoubleTestCases.java
@@ -32,7 +32,7 @@ public static void main(String[] args) {
     }
 
     @Override
-    protected Class getDatatypeJavaClass() {
+    protected Class<?> getDatatypeJavaClass() {
         return Double.class;
     }
 
diff --git a/sdo/org.eclipse.persistence.sdo/src/test/java/org/eclipse/persistence/testing/sdo/helper/xmlhelper/datatype/SDOXMLHelperDatatypeFloatTestCases.java b/sdo/org.eclipse.persistence.sdo/src/test/java/org/eclipse/persistence/testing/sdo/helper/xmlhelper/datatype/SDOXMLHelperDatatypeFloatTestCases.java
index ab02f24..3fc9c82 100644
--- a/sdo/org.eclipse.persistence.sdo/src/test/java/org/eclipse/persistence/testing/sdo/helper/xmlhelper/datatype/SDOXMLHelperDatatypeFloatTestCases.java
+++ b/sdo/org.eclipse.persistence.sdo/src/test/java/org/eclipse/persistence/testing/sdo/helper/xmlhelper/datatype/SDOXMLHelperDatatypeFloatTestCases.java
@@ -32,7 +32,7 @@ public static void main(String[] args) {
     }
 
     @Override
-    protected Class getDatatypeJavaClass() {
+    protected Class<?> getDatatypeJavaClass() {
         return Float.class;
     }
 
diff --git a/sdo/org.eclipse.persistence.sdo/src/test/java/org/eclipse/persistence/testing/sdo/helper/xmlhelper/datatype/SDOXMLHelperDatatypeHexTestCases.java b/sdo/org.eclipse.persistence.sdo/src/test/java/org/eclipse/persistence/testing/sdo/helper/xmlhelper/datatype/SDOXMLHelperDatatypeHexTestCases.java
index c766080..c2baf20 100644
--- a/sdo/org.eclipse.persistence.sdo/src/test/java/org/eclipse/persistence/testing/sdo/helper/xmlhelper/datatype/SDOXMLHelperDatatypeHexTestCases.java
+++ b/sdo/org.eclipse.persistence.sdo/src/test/java/org/eclipse/persistence/testing/sdo/helper/xmlhelper/datatype/SDOXMLHelperDatatypeHexTestCases.java
@@ -36,7 +36,7 @@ public static void main(String[] args) {
     }
 
     @Override
-    protected Class getDatatypeJavaClass() {
+    protected Class<?> getDatatypeJavaClass() {
         return byte[].class;
     }
 
diff --git a/sdo/org.eclipse.persistence.sdo/src/test/java/org/eclipse/persistence/testing/sdo/helper/xmlhelper/datatype/SDOXMLHelperDatatypeIntTestCases.java b/sdo/org.eclipse.persistence.sdo/src/test/java/org/eclipse/persistence/testing/sdo/helper/xmlhelper/datatype/SDOXMLHelperDatatypeIntTestCases.java
index 9fdeacd..33e667c 100644
--- a/sdo/org.eclipse.persistence.sdo/src/test/java/org/eclipse/persistence/testing/sdo/helper/xmlhelper/datatype/SDOXMLHelperDatatypeIntTestCases.java
+++ b/sdo/org.eclipse.persistence.sdo/src/test/java/org/eclipse/persistence/testing/sdo/helper/xmlhelper/datatype/SDOXMLHelperDatatypeIntTestCases.java
@@ -32,7 +32,7 @@ public static void main(String[] args) {
     }
 
     @Override
-    protected Class getDatatypeJavaClass() {
+    protected Class<?> getDatatypeJavaClass() {
         return Integer.class;
     }
 
diff --git a/sdo/org.eclipse.persistence.sdo/src/test/java/org/eclipse/persistence/testing/sdo/helper/xmlhelper/datatype/SDOXMLHelperDatatypeIntegerTestCases.java b/sdo/org.eclipse.persistence.sdo/src/test/java/org/eclipse/persistence/testing/sdo/helper/xmlhelper/datatype/SDOXMLHelperDatatypeIntegerTestCases.java
index 052aa82..a25dc29 100644
--- a/sdo/org.eclipse.persistence.sdo/src/test/java/org/eclipse/persistence/testing/sdo/helper/xmlhelper/datatype/SDOXMLHelperDatatypeIntegerTestCases.java
+++ b/sdo/org.eclipse.persistence.sdo/src/test/java/org/eclipse/persistence/testing/sdo/helper/xmlhelper/datatype/SDOXMLHelperDatatypeIntegerTestCases.java
@@ -34,7 +34,7 @@ public static void main(String[] args) {
     }
 
     @Override
-    protected Class getDatatypeJavaClass() {
+    protected Class<?> getDatatypeJavaClass() {
         return BigInteger.class;
     }
 
diff --git a/sdo/org.eclipse.persistence.sdo/src/test/java/org/eclipse/persistence/testing/sdo/helper/xmlhelper/datatype/SDOXMLHelperDatatypeLongTestCases.java b/sdo/org.eclipse.persistence.sdo/src/test/java/org/eclipse/persistence/testing/sdo/helper/xmlhelper/datatype/SDOXMLHelperDatatypeLongTestCases.java
index 12621ce..f6c323e 100644
--- a/sdo/org.eclipse.persistence.sdo/src/test/java/org/eclipse/persistence/testing/sdo/helper/xmlhelper/datatype/SDOXMLHelperDatatypeLongTestCases.java
+++ b/sdo/org.eclipse.persistence.sdo/src/test/java/org/eclipse/persistence/testing/sdo/helper/xmlhelper/datatype/SDOXMLHelperDatatypeLongTestCases.java
@@ -32,7 +32,7 @@ public static void main(String[] args) {
     }
 
     @Override
-    protected Class getDatatypeJavaClass() {
+    protected Class<?> getDatatypeJavaClass() {
         return Long.class;
     }
 
diff --git a/sdo/org.eclipse.persistence.sdo/src/test/java/org/eclipse/persistence/testing/sdo/helper/xmlhelper/datatype/SDOXMLHelperDatatypeMonthDayTestCases.java b/sdo/org.eclipse.persistence.sdo/src/test/java/org/eclipse/persistence/testing/sdo/helper/xmlhelper/datatype/SDOXMLHelperDatatypeMonthDayTestCases.java
index 02a7baf..1093b51 100644
--- a/sdo/org.eclipse.persistence.sdo/src/test/java/org/eclipse/persistence/testing/sdo/helper/xmlhelper/datatype/SDOXMLHelperDatatypeMonthDayTestCases.java
+++ b/sdo/org.eclipse.persistence.sdo/src/test/java/org/eclipse/persistence/testing/sdo/helper/xmlhelper/datatype/SDOXMLHelperDatatypeMonthDayTestCases.java
@@ -32,7 +32,7 @@ public static void main(String[] args) {
     }
 
     @Override
-    protected Class getDatatypeJavaClass() {
+    protected Class<?> getDatatypeJavaClass() {
         return String.class;
     }
 
diff --git a/sdo/org.eclipse.persistence.sdo/src/test/java/org/eclipse/persistence/testing/sdo/helper/xmlhelper/datatype/SDOXMLHelperDatatypeMonthTestCases.java b/sdo/org.eclipse.persistence.sdo/src/test/java/org/eclipse/persistence/testing/sdo/helper/xmlhelper/datatype/SDOXMLHelperDatatypeMonthTestCases.java
index 7eb57fd..a2bc259 100644
--- a/sdo/org.eclipse.persistence.sdo/src/test/java/org/eclipse/persistence/testing/sdo/helper/xmlhelper/datatype/SDOXMLHelperDatatypeMonthTestCases.java
+++ b/sdo/org.eclipse.persistence.sdo/src/test/java/org/eclipse/persistence/testing/sdo/helper/xmlhelper/datatype/SDOXMLHelperDatatypeMonthTestCases.java
@@ -32,7 +32,7 @@ public static void main(String[] args) {
     }
 
     @Override
-    protected Class getDatatypeJavaClass() {
+    protected Class<?> getDatatypeJavaClass() {
         return String.class;
     }
 
diff --git a/sdo/org.eclipse.persistence.sdo/src/test/java/org/eclipse/persistence/testing/sdo/helper/xmlhelper/datatype/SDOXMLHelperDatatypeObjectTestCases.java b/sdo/org.eclipse.persistence.sdo/src/test/java/org/eclipse/persistence/testing/sdo/helper/xmlhelper/datatype/SDOXMLHelperDatatypeObjectTestCases.java
index df99f2c..dd8838a 100644
--- a/sdo/org.eclipse.persistence.sdo/src/test/java/org/eclipse/persistence/testing/sdo/helper/xmlhelper/datatype/SDOXMLHelperDatatypeObjectTestCases.java
+++ b/sdo/org.eclipse.persistence.sdo/src/test/java/org/eclipse/persistence/testing/sdo/helper/xmlhelper/datatype/SDOXMLHelperDatatypeObjectTestCases.java
@@ -32,7 +32,7 @@ public static void main(String[] args) {
     }
 
     @Override
-    protected Class getDatatypeJavaClass() {
+    protected Class<?> getDatatypeJavaClass() {
         return String.class;
     }
 
diff --git a/sdo/org.eclipse.persistence.sdo/src/test/java/org/eclipse/persistence/testing/sdo/helper/xmlhelper/datatype/SDOXMLHelperDatatypeQNameTestCases.java b/sdo/org.eclipse.persistence.sdo/src/test/java/org/eclipse/persistence/testing/sdo/helper/xmlhelper/datatype/SDOXMLHelperDatatypeQNameTestCases.java
index f9659d9..999b3ef 100644
--- a/sdo/org.eclipse.persistence.sdo/src/test/java/org/eclipse/persistence/testing/sdo/helper/xmlhelper/datatype/SDOXMLHelperDatatypeQNameTestCases.java
+++ b/sdo/org.eclipse.persistence.sdo/src/test/java/org/eclipse/persistence/testing/sdo/helper/xmlhelper/datatype/SDOXMLHelperDatatypeQNameTestCases.java
@@ -32,7 +32,7 @@ public SDOXMLHelperDatatypeQNameTestCases(String name) {
     }
 
     @Override
-    protected Class getDatatypeJavaClass() {
+    protected Class<?> getDatatypeJavaClass() {
         return String.class;
     }
 
diff --git a/sdo/org.eclipse.persistence.sdo/src/test/java/org/eclipse/persistence/testing/sdo/helper/xmlhelper/datatype/SDOXMLHelperDatatypeShortTestCases.java b/sdo/org.eclipse.persistence.sdo/src/test/java/org/eclipse/persistence/testing/sdo/helper/xmlhelper/datatype/SDOXMLHelperDatatypeShortTestCases.java
index f35112e..51bd3c9 100644
--- a/sdo/org.eclipse.persistence.sdo/src/test/java/org/eclipse/persistence/testing/sdo/helper/xmlhelper/datatype/SDOXMLHelperDatatypeShortTestCases.java
+++ b/sdo/org.eclipse.persistence.sdo/src/test/java/org/eclipse/persistence/testing/sdo/helper/xmlhelper/datatype/SDOXMLHelperDatatypeShortTestCases.java
@@ -32,7 +32,7 @@ public static void main(String[] args) {
     }
 
     @Override
-    protected Class getDatatypeJavaClass() {
+    protected Class<?> getDatatypeJavaClass() {
         return Short.class;
     }
 
diff --git a/sdo/org.eclipse.persistence.sdo/src/test/java/org/eclipse/persistence/testing/sdo/helper/xmlhelper/datatype/SDOXMLHelperDatatypeStringTestCases.java b/sdo/org.eclipse.persistence.sdo/src/test/java/org/eclipse/persistence/testing/sdo/helper/xmlhelper/datatype/SDOXMLHelperDatatypeStringTestCases.java
index bbe1b30..104aac4 100644
--- a/sdo/org.eclipse.persistence.sdo/src/test/java/org/eclipse/persistence/testing/sdo/helper/xmlhelper/datatype/SDOXMLHelperDatatypeStringTestCases.java
+++ b/sdo/org.eclipse.persistence.sdo/src/test/java/org/eclipse/persistence/testing/sdo/helper/xmlhelper/datatype/SDOXMLHelperDatatypeStringTestCases.java
@@ -32,7 +32,7 @@ public static void main(String[] args) {
     }
 
     @Override
-    protected Class getDatatypeJavaClass() {
+    protected Class<?> getDatatypeJavaClass() {
         return String.class;
     }
 
diff --git a/sdo/org.eclipse.persistence.sdo/src/test/java/org/eclipse/persistence/testing/sdo/helper/xmlhelper/datatype/SDOXMLHelperDatatypeStringsTestCases.java b/sdo/org.eclipse.persistence.sdo/src/test/java/org/eclipse/persistence/testing/sdo/helper/xmlhelper/datatype/SDOXMLHelperDatatypeStringsTestCases.java
index 563d792..af69c18 100644
--- a/sdo/org.eclipse.persistence.sdo/src/test/java/org/eclipse/persistence/testing/sdo/helper/xmlhelper/datatype/SDOXMLHelperDatatypeStringsTestCases.java
+++ b/sdo/org.eclipse.persistence.sdo/src/test/java/org/eclipse/persistence/testing/sdo/helper/xmlhelper/datatype/SDOXMLHelperDatatypeStringsTestCases.java
@@ -32,7 +32,7 @@ public static void main(String[] args) {
     }
 
     @Override
-    protected Class getDatatypeJavaClass() {
+    protected Class<?> getDatatypeJavaClass() {
         return String.class;
     }
 
diff --git a/sdo/org.eclipse.persistence.sdo/src/test/java/org/eclipse/persistence/testing/sdo/helper/xmlhelper/datatype/SDOXMLHelperDatatypeTestCase.java b/sdo/org.eclipse.persistence.sdo/src/test/java/org/eclipse/persistence/testing/sdo/helper/xmlhelper/datatype/SDOXMLHelperDatatypeTestCase.java
index 7e372e8..a65179e 100644
--- a/sdo/org.eclipse.persistence.sdo/src/test/java/org/eclipse/persistence/testing/sdo/helper/xmlhelper/datatype/SDOXMLHelperDatatypeTestCase.java
+++ b/sdo/org.eclipse.persistence.sdo/src/test/java/org/eclipse/persistence/testing/sdo/helper/xmlhelper/datatype/SDOXMLHelperDatatypeTestCase.java
@@ -39,7 +39,7 @@ public SDOXMLHelperDatatypeTestCase(String name) {
 
     // === METHODS TO OVERRIDE ==========================
 
-    protected abstract Class getDatatypeJavaClass();
+    protected abstract Class<?> getDatatypeJavaClass();
 
     protected abstract SDOType getValueType();
 
diff --git a/sdo/org.eclipse.persistence.sdo/src/test/java/org/eclipse/persistence/testing/sdo/helper/xmlhelper/datatype/SDOXMLHelperDatatypeTimeTestCases.java b/sdo/org.eclipse.persistence.sdo/src/test/java/org/eclipse/persistence/testing/sdo/helper/xmlhelper/datatype/SDOXMLHelperDatatypeTimeTestCases.java
index a19579a..8fd55c9 100644
--- a/sdo/org.eclipse.persistence.sdo/src/test/java/org/eclipse/persistence/testing/sdo/helper/xmlhelper/datatype/SDOXMLHelperDatatypeTimeTestCases.java
+++ b/sdo/org.eclipse.persistence.sdo/src/test/java/org/eclipse/persistence/testing/sdo/helper/xmlhelper/datatype/SDOXMLHelperDatatypeTimeTestCases.java
@@ -32,7 +32,7 @@ public static void main(String[] args) {
     }
 
     @Override
-    protected Class getDatatypeJavaClass() {
+    protected Class<?> getDatatypeJavaClass() {
         return String.class;
     }
 
diff --git a/sdo/org.eclipse.persistence.sdo/src/test/java/org/eclipse/persistence/testing/sdo/helper/xmlhelper/datatype/SDOXMLHelperDatatypeUriTestCases.java b/sdo/org.eclipse.persistence.sdo/src/test/java/org/eclipse/persistence/testing/sdo/helper/xmlhelper/datatype/SDOXMLHelperDatatypeUriTestCases.java
index eba4d39..cef9d6d 100644
--- a/sdo/org.eclipse.persistence.sdo/src/test/java/org/eclipse/persistence/testing/sdo/helper/xmlhelper/datatype/SDOXMLHelperDatatypeUriTestCases.java
+++ b/sdo/org.eclipse.persistence.sdo/src/test/java/org/eclipse/persistence/testing/sdo/helper/xmlhelper/datatype/SDOXMLHelperDatatypeUriTestCases.java
@@ -32,7 +32,7 @@ public static void main(String[] args) {
     }
 
     @Override
-    protected Class getDatatypeJavaClass() {
+    protected Class<?> getDatatypeJavaClass() {
         return String.class;
     }
 
diff --git a/sdo/org.eclipse.persistence.sdo/src/test/java/org/eclipse/persistence/testing/sdo/helper/xmlhelper/datatype/SDOXMLHelperDatatypeYearMonthDayTestCases.java b/sdo/org.eclipse.persistence.sdo/src/test/java/org/eclipse/persistence/testing/sdo/helper/xmlhelper/datatype/SDOXMLHelperDatatypeYearMonthDayTestCases.java
index 3e11903..8b6f985 100644
--- a/sdo/org.eclipse.persistence.sdo/src/test/java/org/eclipse/persistence/testing/sdo/helper/xmlhelper/datatype/SDOXMLHelperDatatypeYearMonthDayTestCases.java
+++ b/sdo/org.eclipse.persistence.sdo/src/test/java/org/eclipse/persistence/testing/sdo/helper/xmlhelper/datatype/SDOXMLHelperDatatypeYearMonthDayTestCases.java
@@ -34,7 +34,7 @@ public static void main(String[] args) {
     }
 
     @Override
-    protected Class getDatatypeJavaClass() {
+    protected Class<?> getDatatypeJavaClass() {
         return String.class;
     }
 
diff --git a/sdo/org.eclipse.persistence.sdo/src/test/java/org/eclipse/persistence/testing/sdo/helper/xmlhelper/datatype/SDOXMLHelperDatatypeYearMonthTestCases.java b/sdo/org.eclipse.persistence.sdo/src/test/java/org/eclipse/persistence/testing/sdo/helper/xmlhelper/datatype/SDOXMLHelperDatatypeYearMonthTestCases.java
index e0410a4..2148159 100644
--- a/sdo/org.eclipse.persistence.sdo/src/test/java/org/eclipse/persistence/testing/sdo/helper/xmlhelper/datatype/SDOXMLHelperDatatypeYearMonthTestCases.java
+++ b/sdo/org.eclipse.persistence.sdo/src/test/java/org/eclipse/persistence/testing/sdo/helper/xmlhelper/datatype/SDOXMLHelperDatatypeYearMonthTestCases.java
@@ -32,7 +32,7 @@ public static void main(String[] args) {
     }
 
     @Override
-    protected Class getDatatypeJavaClass() {
+    protected Class<?> getDatatypeJavaClass() {
         return String.class;
     }
 
diff --git a/sdo/org.eclipse.persistence.sdo/src/test/java/org/eclipse/persistence/testing/sdo/helper/xmlhelper/datatype/SDOXMLHelperDatatypeYearTestCases.java b/sdo/org.eclipse.persistence.sdo/src/test/java/org/eclipse/persistence/testing/sdo/helper/xmlhelper/datatype/SDOXMLHelperDatatypeYearTestCases.java
index a52a05a..0ad0134 100644
--- a/sdo/org.eclipse.persistence.sdo/src/test/java/org/eclipse/persistence/testing/sdo/helper/xmlhelper/datatype/SDOXMLHelperDatatypeYearTestCases.java
+++ b/sdo/org.eclipse.persistence.sdo/src/test/java/org/eclipse/persistence/testing/sdo/helper/xmlhelper/datatype/SDOXMLHelperDatatypeYearTestCases.java
@@ -32,7 +32,7 @@ public static void main(String[] args) {
     }
 
     @Override
-    protected Class getDatatypeJavaClass() {
+    protected Class<?> getDatatypeJavaClass() {
         return String.class;
     }
 
diff --git a/sdo/org.eclipse.persistence.sdo/src/test/java/org/eclipse/persistence/testing/sdo/helper/xmlhelper/loadandsave/LoadAndSaveTestCases.java b/sdo/org.eclipse.persistence.sdo/src/test/java/org/eclipse/persistence/testing/sdo/helper/xmlhelper/loadandsave/LoadAndSaveTestCases.java
index 8a97d1f..12d234f 100644
--- a/sdo/org.eclipse.persistence.sdo/src/test/java/org/eclipse/persistence/testing/sdo/helper/xmlhelper/loadandsave/LoadAndSaveTestCases.java
+++ b/sdo/org.eclipse.persistence.sdo/src/test/java/org/eclipse/persistence/testing/sdo/helper/xmlhelper/loadandsave/LoadAndSaveTestCases.java
@@ -76,14 +76,14 @@ public void testClassGenerationLoadAndSave() throws Exception {
         Class<?> urlLoadedClass = myURLLoader.loadClass(className);
 
         ((SDOXMLHelper)xmlHelper).setLoader(new SDOClassLoader(myURLLoader, aHelperContext));
-        Class loadedClass2 = ((SDOXMLHelper)xmlHelper).getLoader().loadClass(className);
+        Class<?> loadedClass2 = ((SDOXMLHelper)xmlHelper).getLoader().loadClass(className);
 
         defineTypes();
 
         assertEquals(urlLoadedClass, loadedClass2);
         FileInputStream inputStream = new FileInputStream(getControlFileName());
         XMLDocument document = xmlHelper.load(inputStream);
-        Class loadedClass = document.getRootObject().getType().getInstanceClass();
+        Class<?> loadedClass = document.getRootObject().getType().getInstanceClass();
         assertEquals(urlLoadedClass, loadedClass);
 
         verifyAfterLoad(document);
diff --git a/sdo/org.eclipse.persistence.sdo/src/test/java/org/eclipse/persistence/testing/sdo/helper/xmlhelper/loadandsave/staticclasses/LoadAndSaveStaticClassesTestCases.java b/sdo/org.eclipse.persistence.sdo/src/test/java/org/eclipse/persistence/testing/sdo/helper/xmlhelper/loadandsave/staticclasses/LoadAndSaveStaticClassesTestCases.java
index 10f34ac..804557e 100644
--- a/sdo/org.eclipse.persistence.sdo/src/test/java/org/eclipse/persistence/testing/sdo/helper/xmlhelper/loadandsave/staticclasses/LoadAndSaveStaticClassesTestCases.java
+++ b/sdo/org.eclipse.persistence.sdo/src/test/java/org/eclipse/persistence/testing/sdo/helper/xmlhelper/loadandsave/staticclasses/LoadAndSaveStaticClassesTestCases.java
@@ -124,10 +124,10 @@ public void testStaticClasses(){
             List types = defineTypes();
             assertTrue(types.size() == 1);
             SDOType theType = (SDOType)types.get(0);
-            Class instanceClass = theType.getInstanceClass();
+            Class<?> instanceClass = theType.getInstanceClass();
             assertTrue(instanceClass != null);
 
-            Class implClass = theType.getImplClass();
+            Class<?> implClass = theType.getImplClass();
             assertTrue(implClass != null);
         }
 }
diff --git a/sdo/org.eclipse.persistence.sdo/src/test/java/org/eclipse/persistence/testing/sdo/model/dataobject/xpathengine/XPathEngineBug242108TestCases.java b/sdo/org.eclipse.persistence.sdo/src/test/java/org/eclipse/persistence/testing/sdo/model/dataobject/xpathengine/XPathEngineBug242108TestCases.java
index 61bfdf3..dd72ca1 100644
--- a/sdo/org.eclipse.persistence.sdo/src/test/java/org/eclipse/persistence/testing/sdo/model/dataobject/xpathengine/XPathEngineBug242108TestCases.java
+++ b/sdo/org.eclipse.persistence.sdo/src/test/java/org/eclipse/persistence/testing/sdo/model/dataobject/xpathengine/XPathEngineBug242108TestCases.java
@@ -51,7 +51,7 @@ public void testSetBracketIndexZero() throws Exception {
         DataObject do1 = dataFactory.create(testObjectUri, testObjectName);
 
         Class<IllegalArgumentException> expectedExceptionClass = IllegalArgumentException.class;
-        Class caughtExceptionClass = null;
+        Class<?> caughtExceptionClass = null;
         try {
             do1.set("activity[0]", new String("Test"));
         } catch (Exception e) {
@@ -67,7 +67,7 @@ public void testSetBracketIndexOutOfBounds() throws Exception {
         DataObject do1 = dataFactory.create(testObjectUri, testObjectName);
 
         Class<IndexOutOfBoundsException> expectedExceptionClass = IndexOutOfBoundsException.class;
-        Class caughtExceptionClass = null;
+        Class<?> caughtExceptionClass = null;
         try {
             do1.set("activity[99]", new String("Test"));
         } catch (Exception e) {
@@ -83,7 +83,7 @@ public void testSetDotIndexOutOfBounds() throws Exception {
         DataObject do1 = dataFactory.create(testObjectUri, testObjectName);
 
         Class<IndexOutOfBoundsException> expectedExceptionClass = IndexOutOfBoundsException.class;
-        Class caughtExceptionClass = null;
+        Class<?> caughtExceptionClass = null;
         try {
             do1.set("activity.99", new String("Test"));
         } catch (Exception e) {
@@ -99,7 +99,7 @@ public void testSetNoIndex() throws Exception {
         DataObject do1 = dataFactory.create(testObjectUri, testObjectName);
 
         Class<IllegalArgumentException> expectedExceptionClass = IllegalArgumentException.class;
-        Class caughtExceptionClass = null;
+        Class<?> caughtExceptionClass = null;
         try {
             do1.set("activity", new String("Test"));
         } catch (Exception e) {
@@ -115,7 +115,7 @@ public void testSetBracketIndexZeroWithChild() throws Exception {
         DataObject do1 = dataFactory.create(testObjectUri, testObjectName);
 
         Class<SDOException> expectedExceptionClass = SDOException.class;
-        Class caughtExceptionClass = null;
+        Class<?> caughtExceptionClass = null;
         try {
             do1.set("activity[0]/what", new String("Test"));
         } catch (Exception e) {
@@ -131,7 +131,7 @@ public void testSetBracketIndexOutOfBoundsWithChild() throws Exception {
         DataObject do1 = dataFactory.create(testObjectUri, testObjectName);
 
         Class<SDOException> expectedExceptionClass = SDOException.class;
-        Class caughtExceptionClass = null;
+        Class<?> caughtExceptionClass = null;
         try {
             do1.set("activity[99]/what", new String("Test"));
         } catch (Exception e) {
@@ -147,7 +147,7 @@ public void testSetDotIndexOutOfBoundsWithChild() throws Exception {
         DataObject do1 = dataFactory.create(testObjectUri, testObjectName);
 
         Class<SDOException> expectedExceptionClass = SDOException.class;
-        Class caughtExceptionClass = null;
+        Class<?> caughtExceptionClass = null;
         try {
             do1.set("activity.99/what", new String("Test"));
         } catch (Exception e) {
@@ -163,7 +163,7 @@ public void testSetNoIndexWithChild() throws Exception {
         DataObject do1 = dataFactory.create(testObjectUri, testObjectName);
 
         Class<SDOException> expectedExceptionClass = SDOException.class;
-        Class caughtExceptionClass = null;
+        Class<?> caughtExceptionClass = null;
         try {
             do1.set("activity/what", new String("Test"));
         } catch (Exception e) {
@@ -180,8 +180,8 @@ public void testGetBracketIndexZero() throws Exception {
         List types = xsdHelper.define(is, null);
         DataObject do1 = dataFactory.create(testObjectUri, testObjectName);
 
-        Class expectedExceptionClass = null;
-        Class caughtExceptionClass = null;
+        Class<?> expectedExceptionClass = null;
+        Class<?> caughtExceptionClass = null;
         try {
             do1.get("activity[0]");
         } catch (Exception e) {
@@ -196,8 +196,8 @@ public void testGetBracketIndexOutOfBounds() throws Exception {
         List types = xsdHelper.define(is, null);
         DataObject do1 = dataFactory.create(testObjectUri, testObjectName);
 
-        Class expectedExceptionClass = null;
-        Class caughtExceptionClass = null;
+        Class<?> expectedExceptionClass = null;
+        Class<?> caughtExceptionClass = null;
         try {
             do1.get("activity[99]");
         } catch (Exception e) {
@@ -212,8 +212,8 @@ public void testGetDotIndexOutOfBounds() throws Exception {
         List types = xsdHelper.define(is, null);
         DataObject do1 = dataFactory.create(testObjectUri, testObjectName);
 
-        Class expectedExceptionClass = null;
-        Class caughtExceptionClass = null;
+        Class<?> expectedExceptionClass = null;
+        Class<?> caughtExceptionClass = null;
         try {
             do1.get("activity.99");
         } catch (Exception e) {
@@ -228,8 +228,8 @@ public void testGetBracketIndexZeroWithChild() throws Exception {
         List types = xsdHelper.define(is, null);
         DataObject do1 = dataFactory.create(testObjectUri, testObjectName);
 
-        Class expectedExceptionClass = null;
-        Class caughtExceptionClass = null;
+        Class<?> expectedExceptionClass = null;
+        Class<?> caughtExceptionClass = null;
         try {
             do1.get("activity[0]/what");
         } catch (Exception e) {
@@ -244,8 +244,8 @@ public void testGetBracketIndexOutOfBoundsWithChild() throws Exception {
         List types = xsdHelper.define(is, null);
         DataObject do1 = dataFactory.create(testObjectUri, testObjectName);
 
-        Class expectedExceptionClass = null;
-        Class caughtExceptionClass = null;
+        Class<?> expectedExceptionClass = null;
+        Class<?> caughtExceptionClass = null;
         try {
             do1.get("activity[99]/what");
         } catch (Exception e) {
@@ -260,8 +260,8 @@ public void testGetDotIndexOutOfBoundsWithChild() throws Exception {
         List types = xsdHelper.define(is, null);
         DataObject do1 = dataFactory.create(testObjectUri, testObjectName);
 
-        Class expectedExceptionClass = null;
-        Class caughtExceptionClass = null;
+        Class<?> expectedExceptionClass = null;
+        Class<?> caughtExceptionClass = null;
         try {
             do1.get("activity.99/what");
         } catch (Exception e) {
@@ -277,7 +277,7 @@ public void testGetNoIndex() throws Exception {
         DataObject do1 = dataFactory.create(testObjectUri, testObjectName);
 
         // This should not throw an exception
-        Class caughtExceptionClass = null;
+        Class<?> caughtExceptionClass = null;
         try {
             do1.get("activity");
         } catch (Exception e) {
@@ -292,8 +292,8 @@ public void testGetNoIndexWithChild() throws Exception {
         List types = xsdHelper.define(is, null);
         DataObject do1 = dataFactory.create(testObjectUri, testObjectName);
 
-        Class expectedExceptionClass = null;
-        Class caughtExceptionClass = null;
+        Class<?> expectedExceptionClass = null;
+        Class<?> caughtExceptionClass = null;
         try {
             do1.get("activity/what");
         } catch (Exception e) {
diff --git a/sdo/org.eclipse.persistence.sdo/src/test/java/org/eclipse/persistence/testing/sdo/model/type/SDOTypeInstanceClassTestCases.java b/sdo/org.eclipse.persistence.sdo/src/test/java/org/eclipse/persistence/testing/sdo/model/type/SDOTypeInstanceClassTestCases.java
index 6c3d146..933c103 100644
--- a/sdo/org.eclipse.persistence.sdo/src/test/java/org/eclipse/persistence/testing/sdo/model/type/SDOTypeInstanceClassTestCases.java
+++ b/sdo/org.eclipse.persistence.sdo/src/test/java/org/eclipse/persistence/testing/sdo/model/type/SDOTypeInstanceClassTestCases.java
@@ -31,7 +31,7 @@ public void testInstanceClassNameWithNullInstanceClass() {
         type.setInstanceClass(null);
         type.setInstanceClassName("org.eclipse.persistence.testing.sdo.model.type.USAddress");
 
-        Class theClass = type.getInstanceClass();
+        Class<?> theClass = type.getInstanceClass();
         assertNotNull(theClass);
     }
 
@@ -41,7 +41,7 @@ public void testInstanceClassInvlaidNameWithNullInstanceClass() {
         type.setInstanceClass(null);
         type.setInstanceClassName("org.eclipse.persistence.testing.sdo.myInvalidClass");
 
-        Class theClass = type.getInstanceClass();
+        Class<?> theClass = type.getInstanceClass();
         assertNull(theClass);
     }
 
diff --git a/sdo/org.eclipse.persistence.sdo/src/test/java/org/eclipse/persistence/testing/sdo/substitution/SubstitutionInheritanceTestCases.java b/sdo/org.eclipse.persistence.sdo/src/test/java/org/eclipse/persistence/testing/sdo/substitution/SubstitutionInheritanceTestCases.java
index 42e5f70..7cbaa20 100644
--- a/sdo/org.eclipse.persistence.sdo/src/test/java/org/eclipse/persistence/testing/sdo/substitution/SubstitutionInheritanceTestCases.java
+++ b/sdo/org.eclipse.persistence.sdo/src/test/java/org/eclipse/persistence/testing/sdo/substitution/SubstitutionInheritanceTestCases.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
@@ -44,10 +44,10 @@ public void testInstanceClasses() throws Exception {
         DataObject root = loadXML(XML, false);
 
         SDOType genericType = (SDOType) typeHelper.getType("hierarchySubstitution", "tGeneric");
-        Class genericElementClass = genericType.getImplClass();
+        Class<?> genericElementClass = genericType.getImplClass();
 
         SDOType substituteType = (SDOType) typeHelper.getType("hierarchySubstitution", "tSubstitute");
-        Class substituteElementClass = substituteType.getImplClass();
+        Class<?> substituteElementClass = substituteType.getImplClass();
 
         List<DataObject> genericElements = root.getList("genericElement");
         for (DataObject genericElement : genericElements) {
