From 6234c11e95cca880c4c5c581cebd866a9195c02b Mon Sep 17 00:00:00 2001
From: K0K0V0K 
Date: Thu, 9 Oct 2025 17:46:44 +0200
Subject: [PATCH 01/17] YARN-11874. FIX YARN REST IF
---
 .../hadoop-client-minicluster/pom.xml         |    7 +
 hadoop-project/pom.xml                        |    5 +
 .../pom.xml                                   |    4 +
 .../webapp/JAXBContextResolver.java           |  144 +-
 .../resourcemanager/webapp/RMWebApp.java      |    6 +-
 .../webapp/dao/NodeLabelsInfo.java            |   32 +-
 .../ClassSerialisationConfig.java             |  247 +++
 .../jsonprovider/ExcludeRootJSONProvider.java |   90 +
 .../jsonprovider/IncludeRootJSONProvider.java |   90 +
 .../jsonprovider/JsonProviderFeature.java     |   36 +
 .../webapp/TestRMWebServiceAppsNodelabel.java |    9 +-
 .../webapp/TestRMWebServices.java             |    6 +-
 .../webapp/TestRMWebServicesAppAttempts.java  |    7 +-
 ...stRMWebServicesAppCustomResourceTypes.java |    3 +-
 .../webapp/TestRMWebServicesApps.java         |   91 +-
 ...tRMWebServicesAppsCustomResourceTypes.java |    7 +-
 .../TestRMWebServicesAppsModification.java    |   91 +-
 .../TestRMWebServicesCapacitySched.java       |    3 +-
 ...MWebServicesCapacitySchedDefaultLabel.java |    3 +-
 ...WebServicesCapacitySchedDynamicConfig.java |    4 +-
 ...apacitySchedDynamicConfigAbsoluteMode.java |    6 +-
 ...sCapacitySchedDynamicConfigWeightMode.java |    4 +-
 ...pacitySchedDynamicConfigWeightModeDQC.java |    4 +-
 ...vicesCapacitySchedLegacyQueueCreation.java |    4 +-
 ...ySchedLegacyQueueCreationAbsoluteMode.java |    3 +-
 ...rvicesCapacitySchedulerConfigMutation.java |    9 +-
 ...WebServicesCapacitySchedulerMixedMode.java |    4 +-
 ...hedulerMixedModeAbsoluteAndPercentage.java |    4 +-
 ...xedModeAbsoluteAndPercentageAndWeight.java |    4 +-
 ...eAbsoluteAndPercentageAndWeightVector.java |    4 +-
 ...rMixedModeAbsoluteAndPercentageVector.java |    4 +-
 ...tySchedulerMixedModeAbsoluteAndWeight.java |    4 +-
 ...dulerMixedModeAbsoluteAndWeightVector.java |    4 +-
 ...SchedulerMixedModePercentageAndWeight.java |    4 +-
 ...lerMixedModePercentageAndWeightVector.java |    4 +-
 ...estRMWebServicesConfigurationMutation.java |   56 +-
 .../webapp/TestRMWebServicesContainers.java   |    4 +-
 ...WebServicesCustomResourceTypesCommons.java |    2 +-
 ...ServicesDelegationTokenAuthentication.java |   16 +-
 .../TestRMWebServicesDelegationTokens.java    |   17 +-
 .../TestRMWebServicesForCSWithPartitions.java |    4 +-
 .../webapp/TestRMWebServicesNodeLabels.java   |   18 +-
 .../webapp/TestRMWebServicesNodes.java        |   29 +-
 .../webapp/TestRMWebServicesReservation.java  |   74 +-
 .../TestRMWebServicesSchedulerActivities.java |    4 +-
 ...edulerActivitiesWithMultiNodesEnabled.java |    4 +-
 .../webapp/TestRMWebappAuthentication.java    |    4 +-
 .../webapp/TestWebServiceUtil.java            |   17 +-
 .../TestRMWebServicesFairScheduler.java       |    6 +-
 ...vicesFairSchedulerCustomResourceTypes.java |   10 +-
 .../helper/AppInfoJsonVerifications.java      |    6 +-
 ...ation-absolute-hierarchy-after-update.json |  412 ++---
 ...tion-absolute-hierarchy-before-update.json |  420 ++---
 ...bsolute-hierarchy-legacy-after-update.json |  412 ++---
 ...solute-hierarchy-legacy-before-update.json |  420 ++---
 .../webapp/dynamic-testAbsoluteMode-0.json    |  624 +++----
 .../webapp/dynamic-testAbsoluteMode-16.json   |  588 ++-----
 .../webapp/dynamic-testAbsoluteMode-32.json   |  588 ++-----
 .../dynamic-testAbsoluteMode-legacy-0.json    |  616 +++----
 .../webapp/dynamic-testPercentageMode-0.json  |  810 ++++-----
 .../webapp/dynamic-testPercentageMode-16.json |  774 ++++-----
 .../dynamic-testPercentageMode-legacy-0.json  |  774 ++++-----
 .../webapp/dynamic-testWeightMode-0.json      |  600 +++----
 .../webapp/dynamic-testWeightMode-16.json     |  564 ++----
 .../webapp/dynamic-testWeightMode-32.json     |  564 ++----
 .../dynamic-testWeightMode-after-aqc.json     | 1524 ++++++-----------
 .../dynamic-testWeightMode-before-aqc.json    |  546 ++----
 .../dynamic-testWeightMode-legacy-0.json      |  556 ++----
 .../dynamic-testWeightMode-legacy-16.json     |  556 ++----
 .../dynamic-testWeightMode-legacy-32.json     |  556 ++----
 ...namic-testWeightMode-legacy-after-aqc.json | 1508 ++++++----------
 ...amic-testWeightMode-legacy-before-aqc.json |  538 ++----
 ...-testSchedulerAbsoluteAndPercentage-0.json |  612 +++----
 ...testSchedulerAbsoluteAndPercentage-16.json |  596 +++----
 ...testSchedulerAbsoluteAndPercentage-32.json |  576 ++-----
 ...dulerAbsoluteAndPercentageAndWeight-0.json |  608 +++----
 ...ulerAbsoluteAndPercentageAndWeight-16.json |  592 +++----
 ...ulerAbsoluteAndPercentageAndWeight-32.json |  572 ++-----
 ...AbsoluteAndPercentageAndWeightMixed-0.json |  610 +++----
 ...bsoluteAndPercentageAndWeightMixed-16.json |  594 +++----
 ...bsoluteAndPercentageAndWeightMixed-32.json |  574 ++-----
 ...ixed-testSchedulerAbsoluteAndWeight-0.json |  612 +++----
 ...xed-testSchedulerAbsoluteAndWeight-16.json |  596 +++----
 ...xed-testSchedulerAbsoluteAndWeight-32.json |  576 ++-----
 ...ed-testSchedulerPercentageAndWeight-0.json |  600 +++----
 ...d-testSchedulerPercentageAndWeight-16.json |  564 ++----
 ...d-testSchedulerPercentageAndWeight-32.json |  564 ++----
 ...sponse-AbsoluteModeLegacyAutoCreation.json |  312 ++--
 .../scheduler-response-PerUserResources.json  |  404 ++---
 ...onse-PercentageModeLegacyAutoCreation.json |  226 +--
 .../resources/webapp/scheduler-response.json  |  352 ++--
 91 files changed, 8792 insertions(+), 16520 deletions(-)
 create mode 100644 hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/webapp/jsonprovider/ClassSerialisationConfig.java
 create mode 100644 hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/webapp/jsonprovider/ExcludeRootJSONProvider.java
 create mode 100644 hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/webapp/jsonprovider/IncludeRootJSONProvider.java
 create mode 100644 hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/webapp/jsonprovider/JsonProviderFeature.java
diff --git a/hadoop-client-modules/hadoop-client-minicluster/pom.xml b/hadoop-client-modules/hadoop-client-minicluster/pom.xml
index fe58ccbf60e2a..4c0dca5032ad1 100644
--- a/hadoop-client-modules/hadoop-client-minicluster/pom.xml
+++ b/hadoop-client-modules/hadoop-client-minicluster/pom.xml
@@ -725,6 +725,13 @@
                         **/*.java 
                       
                     
+                    
+                    
+                      *:* 
+                      
+                        **/*.html 
+                       
+                     
                     
                     
                       *:* 
diff --git a/hadoop-project/pom.xml b/hadoop-project/pom.xml
index f7aa379dac087..5cbfe598eef4a 100644
--- a/hadoop-project/pom.xml
+++ b/hadoop-project/pom.xml
@@ -2146,6 +2146,11 @@
         jersey-media-json-jettison 
         ${jersey2.version} 
       
+      
+        org.glassfish.jersey.media 
+        jersey-media-moxy 
+        ${jersey2.version} 
+       
       
         org.glassfish.jaxb 
         jaxb-runtime 
diff --git a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/pom.xml b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/pom.xml
index b02097814aad6..5bd1a9221d4fd 100644
--- a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/pom.xml
+++ b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/pom.xml
@@ -265,6 +265,10 @@
       org.glassfish.jersey.media 
       jersey-media-json-jettison 
      
+    
+      org.glassfish.jersey.media 
+      jersey-media-moxy 
+     
     
       org.mockito 
       mockito-junit-jupiter 
diff --git a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/webapp/JAXBContextResolver.java b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/webapp/JAXBContextResolver.java
index 37ea2ee04e32f..b4ad232908e82 100644
--- a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/webapp/JAXBContextResolver.java
+++ b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/webapp/JAXBContextResolver.java
@@ -18,15 +18,18 @@
 
 package org.apache.hadoop.yarn.server.resourcemanager.webapp;
 
+import org.eclipse.persistence.jaxb.JAXBContextFactory;
+import org.eclipse.persistence.jaxb.MarshallerProperties;
+import org.glassfish.jersey.jettison.JettisonConfig;
 import org.glassfish.jersey.jettison.JettisonJaxbContext;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
-import java.util.Arrays;
-import java.util.ArrayList;
 import java.util.Collections;
+import java.util.List;
 import java.util.Map;
 import java.util.HashMap;
+import java.util.Set;
 
 import javax.inject.Inject;
 import javax.inject.Singleton;
@@ -35,46 +38,7 @@
 import javax.xml.bind.JAXBContext;
 
 import org.apache.hadoop.conf.Configuration;
-import org.apache.hadoop.yarn.conf.YarnConfiguration;
-import org.apache.hadoop.yarn.server.resourcemanager.scheduler.capacity.UserInfo;
-import org.apache.hadoop.yarn.server.resourcemanager.webapp.dao.AppInfo;
-import org.apache.hadoop.yarn.server.resourcemanager.webapp.dao.AppsInfo;
-import org.apache.hadoop.yarn.server.resourcemanager.webapp.dao.AppAttemptInfo;
-import org.apache.hadoop.yarn.server.resourcemanager.webapp.dao.AppAttemptsInfo;
-import org.apache.hadoop.yarn.server.resourcemanager.webapp.dao.ClusterInfo;
-import org.apache.hadoop.yarn.server.resourcemanager.webapp.dao.CapacitySchedulerQueueInfo;
-import org.apache.hadoop.yarn.server.resourcemanager.webapp.dao.FifoSchedulerInfo;
-import org.apache.hadoop.yarn.server.resourcemanager.webapp.dao.SchedulerTypeInfo;
-import org.apache.hadoop.yarn.server.resourcemanager.webapp.dao.NodeInfo;
-import org.apache.hadoop.yarn.server.resourcemanager.webapp.dao.UserMetricsInfo;
-import org.apache.hadoop.yarn.server.resourcemanager.webapp.dao.CapacitySchedulerInfo;
-import org.apache.hadoop.yarn.server.resourcemanager.webapp.dao.ClusterMetricsInfo;
-import org.apache.hadoop.yarn.server.resourcemanager.webapp.dao.SchedulerInfo;
-import org.apache.hadoop.yarn.server.resourcemanager.webapp.dao.NodesInfo;
-import org.apache.hadoop.yarn.server.resourcemanager.webapp.dao.CapacitySchedulerQueueInfoList;
-import org.apache.hadoop.yarn.server.resourcemanager.webapp.dao.ResourceInfo;
-import org.apache.hadoop.yarn.server.resourcemanager.webapp.dao.UsersInfo;
-import org.apache.hadoop.yarn.server.resourcemanager.webapp.dao.ApplicationStatisticsInfo;
-import org.apache.hadoop.yarn.server.resourcemanager.webapp.dao.StatisticsItemInfo;
-import org.apache.hadoop.yarn.server.resourcemanager.webapp.dao.CapacitySchedulerHealthInfo;
-import org.apache.hadoop.yarn.server.resourcemanager.webapp.dao.FairSchedulerQueueInfoList;
-import org.apache.hadoop.yarn.server.resourcemanager.webapp.dao.AppTimeoutsInfo;
-import org.apache.hadoop.yarn.server.resourcemanager.webapp.dao.AppTimeoutInfo;
-import org.apache.hadoop.yarn.server.resourcemanager.webapp.dao.ResourceInformationsInfo;
-import org.apache.hadoop.yarn.server.resourcemanager.webapp.dao.ActivitiesInfo;
-import org.apache.hadoop.yarn.server.resourcemanager.webapp.dao.AppActivitiesInfo;
-import org.apache.hadoop.yarn.server.resourcemanager.webapp.dao.QueueAclsInfo;
-import org.apache.hadoop.yarn.server.resourcemanager.webapp.dao.QueueAclInfo;
-import org.apache.hadoop.yarn.server.resourcemanager.webapp.dao.BulkActivitiesInfo;
-import org.apache.hadoop.yarn.server.resourcemanager.webapp.dao.NewApplication;
-import org.apache.hadoop.yarn.server.resourcemanager.webapp.dao.ApplicationSubmissionContextInfo;
-import org.apache.hadoop.yarn.server.resourcemanager.webapp.dao.ContainerLaunchContextInfo;
-import org.apache.hadoop.yarn.server.resourcemanager.webapp.dao.LocalResourceInfo;
-import org.apache.hadoop.yarn.server.resourcemanager.webapp.dao.DelegationToken;
-import org.apache.hadoop.yarn.server.resourcemanager.webapp.dao.AppQueue;
-import org.apache.hadoop.yarn.server.resourcemanager.webapp.dao.AppPriority;
-import org.apache.hadoop.yarn.server.resourcemanager.webapp.dao.ResourceOptionInfo;
-import org.apache.hadoop.yarn.webapp.RemoteExceptionData;
+import org.apache.hadoop.yarn.server.resourcemanager.webapp.jsonprovider.ClassSerialisationConfig;
 
 @Singleton
 @Provider
@@ -82,7 +46,7 @@ public class JAXBContextResolver implements ContextResolver {
 
   private static final Logger LOG = LoggerFactory.getLogger(JAXBContextResolver.class.getName());
 
-  private final Map typesContextMap;
+  private final Map typesContextMap = new HashMap<>();
 
   public JAXBContextResolver() throws Exception {
     this(new Configuration());
@@ -90,83 +54,29 @@ public JAXBContextResolver() throws Exception {
 
   @Inject
   public JAXBContextResolver(@javax.inject.Named("conf") Configuration conf) throws Exception {
-
-    JAXBContext context;
-    JAXBContext unWrappedRootContext;
-
-    // you have to specify all the dao classes here
-    final Class[] cTypes =
-        { AppInfo.class, AppAttemptInfo.class, AppAttemptsInfo.class,
-            ClusterInfo.class, CapacitySchedulerQueueInfo.class,
-            FifoSchedulerInfo.class, SchedulerTypeInfo.class, NodeInfo.class,
-            UserMetricsInfo.class, CapacitySchedulerInfo.class,
-            ClusterMetricsInfo.class, SchedulerInfo.class, AppsInfo.class,
-            NodesInfo.class, RemoteExceptionData.class,
-            CapacitySchedulerQueueInfoList.class, ResourceInfo.class,
-            UsersInfo.class, UserInfo.class, ApplicationStatisticsInfo.class,
-            StatisticsItemInfo.class, CapacitySchedulerHealthInfo.class,
-            FairSchedulerQueueInfoList.class, AppTimeoutsInfo.class,
-            AppTimeoutInfo.class, ResourceInformationsInfo.class,
-            ActivitiesInfo.class, AppActivitiesInfo.class,
-            QueueAclsInfo.class, QueueAclInfo.class,
-            BulkActivitiesInfo.class};
-
-    // these dao classes need root unwrapping
-    final Class[] rootUnwrappedTypes =
-        { NewApplication.class, ApplicationSubmissionContextInfo.class,
-            ContainerLaunchContextInfo.class, LocalResourceInfo.class,
-            DelegationToken.class, AppQueue.class, AppPriority.class,
-            ResourceOptionInfo.class };
-
-    ArrayList finalcTypesList = new ArrayList<>();
-    ArrayList finalRootUnwrappedTypesList = new ArrayList<>();
-
-    Collections.addAll(finalcTypesList, cTypes);
-    Collections.addAll(finalRootUnwrappedTypesList, rootUnwrappedTypes);
-
-    // Add Custom DAO Classes
-    Class[] daoClasses = null;
-    Class[] unwrappedDaoClasses = null;
-    boolean loadCustom = true;
-    try {
-      daoClasses = conf
-          .getClasses(YarnConfiguration.YARN_HTTP_WEBAPP_CUSTOM_DAO_CLASSES);
-      unwrappedDaoClasses = conf.getClasses(
-          YarnConfiguration.YARN_HTTP_WEBAPP_CUSTOM_UNWRAPPED_DAO_CLASSES);
-    } catch (Exception e) {
-      LOG.warn("Failed to load custom dao class: ", e);
-      loadCustom = false;
-    }
-
-    if (loadCustom) {
-      if (daoClasses != null) {
-        Collections.addAll(finalcTypesList, daoClasses);
-        LOG.debug("Added custom dao classes: {}.", Arrays.toString(daoClasses));
-      }
-      if (unwrappedDaoClasses != null) {
-        Collections.addAll(finalRootUnwrappedTypesList, unwrappedDaoClasses);
-        LOG.debug("Added custom Unwrapped dao classes: {}", Arrays.toString(unwrappedDaoClasses));
-      }
-    }
-
-    final Class[] finalcTypes = finalcTypesList
-        .toArray(new Class[finalcTypesList.size()]);
-    final Class[] finalRootUnwrappedTypes = finalRootUnwrappedTypesList
-        .toArray(new Class[finalRootUnwrappedTypesList.size()]);
-
-    this.typesContextMap = new HashMap<>();
-    context = new JettisonJaxbContext(finalcTypes);
-    unWrappedRootContext = new JettisonJaxbContext(finalRootUnwrappedTypes);
-    for (Class type : finalcTypes) {
-      typesContextMap.put(type, context);
-    }
-    for (Class type : finalRootUnwrappedTypes) {
-      typesContextMap.put(type, unWrappedRootContext);
-    }
+    ClassSerialisationConfig classSerialisationConfig = new ClassSerialisationConfig(conf);
+    Set> wrappedClasses = classSerialisationConfig.getWrappedClasses();
+    Set> unWrappedClasses = classSerialisationConfig.getUnWrappedClasses();
+
+    //WARNING: AFAIK these properties not respected by MOXyJsonProvider
+    //For details check MOXyJsonProvider#readFrom method
+    JAXBContext wrappedContext = JAXBContextFactory.createContext(
+        wrappedClasses.toArray(new Class[0]),
+        Collections.singletonMap(MarshallerProperties.JSON_INCLUDE_ROOT, true)
+    );
+    JAXBContext unWrappedContext = JAXBContextFactory.createContext(
+        unWrappedClasses.toArray(new Class[0]),
+        Collections.singletonMap(MarshallerProperties.JSON_INCLUDE_ROOT, false)
+    );
+
+    wrappedClasses.forEach(type -> typesContextMap.put(type, wrappedContext));
+    unWrappedClasses.forEach(type -> typesContextMap.put(type, unWrappedContext));
   }
 
   @Override
   public JAXBContext getContext(Class> objectType) {
-    return typesContextMap.get(objectType);
+    JAXBContext jaxbContext = typesContextMap.get(objectType);
+    LOG.trace("Context for {} is {}", objectType,  jaxbContext);
+    return jaxbContext;
   }
 }
diff --git a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/webapp/RMWebApp.java b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/webapp/RMWebApp.java
index b8b24a8c6422b..8619320b1d63b 100644
--- a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/webapp/RMWebApp.java
+++ b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/webapp/RMWebApp.java
@@ -23,10 +23,13 @@
 import java.net.InetSocketAddress;
 
 import org.apache.hadoop.conf.Configuration;
+
+import org.glassfish.jersey.moxy.json.MoxyJsonConfig;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.apache.hadoop.ha.HAServiceProtocol.HAServiceState;
 import org.apache.hadoop.yarn.conf.YarnConfiguration;
+import org.apache.hadoop.yarn.server.resourcemanager.webapp.jsonprovider.JsonProviderFeature;
 import org.apache.hadoop.yarn.util.RMHAUtils;
 import org.apache.hadoop.yarn.server.resourcemanager.RMContext;
 import org.apache.hadoop.yarn.server.resourcemanager.ResourceManager;
@@ -60,7 +63,8 @@ public ResourceConfig resourceConfig() {
     config.register(new JerseyBinder());
     config.register(RMWebServices.class);
     config.register(GenericExceptionHandler.class);
-    config.register(new JettisonFeature()).register(JAXBContextResolver.class);
+    config.register(JsonProviderFeature.class);
+    config.register(JAXBContextResolver.class);
     return config;
   }
 
diff --git a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/webapp/dao/NodeLabelsInfo.java b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/webapp/dao/NodeLabelsInfo.java
index c9809b6d2e3cd..1ba082438ed52 100644
--- a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/webapp/dao/NodeLabelsInfo.java
+++ b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/webapp/dao/NodeLabelsInfo.java
@@ -32,59 +32,63 @@
 public class NodeLabelsInfo {
 
   @XmlElement(name = "nodeLabelInfo")
-  private ArrayList nodeLabelsInfo = new ArrayList<>();
+  private ArrayList nodeLabelInfo = new ArrayList<>();
 
   public NodeLabelsInfo() {
     // JAXB needs this
   }
 
   public NodeLabelsInfo(ArrayList nodeLabels) {
-    this.nodeLabelsInfo = nodeLabels;
+    this.nodeLabelInfo = nodeLabels;
   }
 
   public NodeLabelsInfo(List nodeLabels) {
-    this.nodeLabelsInfo = new ArrayList<>();
+    this.nodeLabelInfo = new ArrayList<>();
     for (NodeLabel label : nodeLabels) {
-      this.nodeLabelsInfo.add(new NodeLabelInfo(label));
+      this.nodeLabelInfo.add(new NodeLabelInfo(label));
     }
   }
-  
+
   public NodeLabelsInfo(Set nodeLabelsName) {
-    this.nodeLabelsInfo = new ArrayList<>();
+    this.nodeLabelInfo = new ArrayList<>();
     for (String labelName : nodeLabelsName) {
-      this.nodeLabelsInfo.add(new NodeLabelInfo(labelName));
+      this.nodeLabelInfo.add(new NodeLabelInfo(labelName));
     }
   }
 
   public NodeLabelsInfo(Collection nodeLabels) {
-    this.nodeLabelsInfo = new ArrayList<>();
+    this.nodeLabelInfo = new ArrayList<>();
     nodeLabels.stream().forEach(nodeLabel -> {
-      this.nodeLabelsInfo.add(new NodeLabelInfo(nodeLabel));
+      this.nodeLabelInfo.add(new NodeLabelInfo(nodeLabel));
     });
   }
 
   public ArrayList getNodeLabelsInfo() {
-    return nodeLabelsInfo;
+    return nodeLabelInfo;
   }
 
   public Set getNodeLabels() {
     Set nodeLabels = new HashSet<>();
-    for (NodeLabelInfo label : nodeLabelsInfo) {
+    for (NodeLabelInfo label : nodeLabelInfo) {
       nodeLabels.add(NodeLabel.newInstance(label.getName(),
           label.getExclusivity()));
     }
     return nodeLabels;
   }
-  
+
   public List getNodeLabelsName() {
     ArrayList nodeLabelsName = new ArrayList<>();
-    for (NodeLabelInfo label : nodeLabelsInfo) {
+    for (NodeLabelInfo label : nodeLabelInfo) {
       nodeLabelsName.add(label.getName());
     }
     return nodeLabelsName;
   }
 
   public void setNodeLabelsInfo(ArrayList nodeLabelInfo) {
-    this.nodeLabelsInfo = nodeLabelInfo;
+    this.nodeLabelInfo = nodeLabelInfo;
+  }
+
+  public void setNodeLabelInfo(ArrayList nodeLabelsInfo) {
+    this.nodeLabelInfo = nodeLabelsInfo;
   }
 }
diff --git a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/webapp/jsonprovider/ClassSerialisationConfig.java b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/webapp/jsonprovider/ClassSerialisationConfig.java
new file mode 100644
index 0000000000000..28f9c290ae406
--- /dev/null
+++ b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/webapp/jsonprovider/ClassSerialisationConfig.java
@@ -0,0 +1,247 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.hadoop.yarn.server.resourcemanager.webapp.jsonprovider;
+
+import java.util.Arrays;
+import java.util.HashSet;
+import java.util.Set;
+import javax.inject.Inject;
+
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import org.apache.hadoop.conf.Configuration;
+import org.apache.hadoop.util.Sets;
+import org.apache.hadoop.yarn.conf.YarnConfiguration;
+import org.apache.hadoop.yarn.server.resourcemanager.scheduler.capacity.UserInfo;
+import org.apache.hadoop.yarn.server.resourcemanager.webapp.dao.ActivitiesInfo;
+import org.apache.hadoop.yarn.server.resourcemanager.webapp.dao.AppActivitiesInfo;
+import org.apache.hadoop.yarn.server.resourcemanager.webapp.dao.AppAttemptInfo;
+import org.apache.hadoop.yarn.server.resourcemanager.webapp.dao.AppAttemptsInfo;
+import org.apache.hadoop.yarn.server.resourcemanager.webapp.dao.AppInfo;
+import org.apache.hadoop.yarn.server.resourcemanager.webapp.dao.AppPriority;
+import org.apache.hadoop.yarn.server.resourcemanager.webapp.dao.AppQueue;
+import org.apache.hadoop.yarn.server.resourcemanager.webapp.dao.AppState;
+import org.apache.hadoop.yarn.server.resourcemanager.webapp.dao.AppTimeoutInfo;
+import org.apache.hadoop.yarn.server.resourcemanager.webapp.dao.AppTimeoutsInfo;
+import org.apache.hadoop.yarn.server.resourcemanager.webapp.dao.ApplicationStatisticsInfo;
+import org.apache.hadoop.yarn.server.resourcemanager.webapp.dao.ApplicationSubmissionContextInfo;
+import org.apache.hadoop.yarn.server.resourcemanager.webapp.dao.AppsInfo;
+import org.apache.hadoop.yarn.server.resourcemanager.webapp.dao.BulkActivitiesInfo;
+import org.apache.hadoop.yarn.server.resourcemanager.webapp.dao.CapacitySchedulerHealthInfo;
+import org.apache.hadoop.yarn.server.resourcemanager.webapp.dao.CapacitySchedulerInfo;
+import org.apache.hadoop.yarn.server.resourcemanager.webapp.dao.CapacitySchedulerQueueInfo;
+import org.apache.hadoop.yarn.server.resourcemanager.webapp.dao.CapacitySchedulerQueueInfoList;
+import org.apache.hadoop.yarn.server.resourcemanager.webapp.dao.ClusterInfo;
+import org.apache.hadoop.yarn.server.resourcemanager.webapp.dao.ClusterMetricsInfo;
+import org.apache.hadoop.yarn.server.resourcemanager.webapp.dao.ClusterUserInfo;
+import org.apache.hadoop.yarn.server.resourcemanager.webapp.dao.ConfigVersionInfo;
+import org.apache.hadoop.yarn.server.resourcemanager.webapp.dao.ContainerLaunchContextInfo;
+import org.apache.hadoop.yarn.server.resourcemanager.webapp.dao.DelegationToken;
+import org.apache.hadoop.yarn.server.resourcemanager.webapp.dao.FairSchedulerQueueInfoList;
+import org.apache.hadoop.yarn.server.resourcemanager.webapp.dao.FifoSchedulerInfo;
+import org.apache.hadoop.yarn.server.resourcemanager.webapp.dao.LabelsToNodesInfo;
+import org.apache.hadoop.yarn.server.resourcemanager.webapp.dao.LocalResourceInfo;
+import org.apache.hadoop.yarn.server.resourcemanager.webapp.dao.NewApplication;
+import org.apache.hadoop.yarn.server.resourcemanager.webapp.dao.NewReservation;
+import org.apache.hadoop.yarn.server.resourcemanager.webapp.dao.NodeInfo;
+import org.apache.hadoop.yarn.server.resourcemanager.webapp.dao.NodeLabelsInfo;
+import org.apache.hadoop.yarn.server.resourcemanager.webapp.dao.NodeToLabelsEntryList;
+import org.apache.hadoop.yarn.server.resourcemanager.webapp.dao.NodeToLabelsInfo;
+import org.apache.hadoop.yarn.server.resourcemanager.webapp.dao.NodesInfo;
+import org.apache.hadoop.yarn.server.resourcemanager.webapp.dao.QueueAclInfo;
+import org.apache.hadoop.yarn.server.resourcemanager.webapp.dao.QueueAclsInfo;
+import org.apache.hadoop.yarn.server.resourcemanager.webapp.dao.ReservationDeleteRequestInfo;
+import org.apache.hadoop.yarn.server.resourcemanager.webapp.dao.ReservationDeleteResponseInfo;
+import org.apache.hadoop.yarn.server.resourcemanager.webapp.dao.ReservationListInfo;
+import org.apache.hadoop.yarn.server.resourcemanager.webapp.dao.ReservationSubmissionRequestInfo;
+import org.apache.hadoop.yarn.server.resourcemanager.webapp.dao.ReservationUpdateRequestInfo;
+import org.apache.hadoop.yarn.server.resourcemanager.webapp.dao.ReservationUpdateResponseInfo;
+import org.apache.hadoop.yarn.server.resourcemanager.webapp.dao.ResourceInfo;
+import org.apache.hadoop.yarn.server.resourcemanager.webapp.dao.ResourceInformationsInfo;
+import org.apache.hadoop.yarn.server.resourcemanager.webapp.dao.ResourceOptionInfo;
+import org.apache.hadoop.yarn.server.resourcemanager.webapp.dao.SchedulerInfo;
+import org.apache.hadoop.yarn.server.resourcemanager.webapp.dao.SchedulerOverviewInfo;
+import org.apache.hadoop.yarn.server.resourcemanager.webapp.dao.SchedulerTypeInfo;
+import org.apache.hadoop.yarn.server.resourcemanager.webapp.dao.StatisticsItemInfo;
+import org.apache.hadoop.yarn.server.resourcemanager.webapp.dao.UserMetricsInfo;
+import org.apache.hadoop.yarn.server.resourcemanager.webapp.dao.UsersInfo;
+import org.apache.hadoop.yarn.webapp.RemoteExceptionData;
+import org.apache.hadoop.yarn.webapp.dao.ConfInfo;
+import org.apache.hadoop.yarn.webapp.dao.SchedConfUpdateInfo;
+
+/**
+ * Configuration holder for class serialization setup used by the ResourceManager web services layer.
+ *
+ * This class manages two categories of data transfer objects (DTOs):
+ * 
+ *   Wrapped classes  – classes whose JSON representation includes a root wrapper element.Unwrapped classes  – classes whose JSON representation omits a root wrapper element. 
+ *
+ * The configuration is initialized with a default list of constant classes and may optionally
+ * include user-defined classes loaded from configuration properties:
+ * 
+ *   {@code yarn.http.webapp.custom.dao.classes} 
+ *   {@code yarn.http.webapp.custom.unwrapped.dao.classes} 
+ *  
+ *
+ * This configuration is primarily used to control JSON serialization behavior in MOXy providers
+ * when serializing REST API objects.
+ *
+ * Example: 
+ * If we have a class like:
+ *
+ * {@code
+ * @XmlRootElement(name = "foo-class")
+ * class Foo {
+ *   String a;
+ *   String b;
+ * }
+ * } 
+ *
+ * and the class is present in the wrapped classes list, it will be marshalled as:
+ *
+ * {@code
+ * {
+ *   "foo-class": {
+ *     "a": "...",
+ *     "b": "..."
+ *   }
+ * }
+ * } 
+ *
+ * or if the class is present in the unwrapped classes list, it will be marshalled as:
+ *
+ * {@code
+ * {
+ *   "a": "...",
+ *   "b": "..."
+ * }
+ * } 
+ */
+public class ClassSerialisationConfig {
+  private static final Logger LOG = LoggerFactory.getLogger(ClassSerialisationConfig.class);
+
+  private static final Set> CONST_WRAPPED_CLASSES = Sets.newHashSet(
+      ActivitiesInfo.class,
+      AppActivitiesInfo.class,
+      AppAttemptInfo.class,
+      AppAttemptsInfo.class,
+      AppInfo.class,
+      ApplicationStatisticsInfo.class,
+      AppsInfo.class,
+      AppTimeoutInfo.class,
+      AppTimeoutsInfo.class,
+      BulkActivitiesInfo.class,
+      CapacitySchedulerHealthInfo.class,
+      CapacitySchedulerInfo.class,
+      CapacitySchedulerQueueInfo.class,
+      CapacitySchedulerQueueInfoList.class,
+      ClusterInfo.class,
+      ClusterMetricsInfo.class,
+      ConfigVersionInfo.class,
+      FairSchedulerQueueInfoList.class,
+      FifoSchedulerInfo.class,
+      NewReservation.class,
+      NodeInfo.class,
+      NodesInfo.class,
+      QueueAclInfo.class,
+      QueueAclsInfo.class,
+      RemoteExceptionData.class,
+      ReservationDeleteRequestInfo.class,
+      ReservationDeleteResponseInfo.class,
+      ReservationSubmissionRequestInfo.class,
+      ReservationUpdateRequestInfo.class,
+      ReservationUpdateResponseInfo.class,
+      ResourceInfo.class,
+      ResourceInformationsInfo.class,
+      SchedulerInfo.class,
+      SchedulerOverviewInfo.class,
+      SchedulerTypeInfo.class,
+      StatisticsItemInfo.class,
+      UserInfo.class,
+      UserMetricsInfo.class,
+      UsersInfo.class
+  );
+
+  private static final Set> CONST_UNWRAPPED_CLASSES = Sets.newHashSet(
+      ApplicationSubmissionContextInfo.class,
+      AppPriority.class,
+      AppQueue.class,
+      AppState.class,
+      ClusterUserInfo.class,
+      ConfInfo.class,
+      ContainerLaunchContextInfo.class,
+      DelegationToken.class,
+      LabelsToNodesInfo.class,
+      LocalResourceInfo.class,
+      NewApplication.class,
+      NodeLabelsInfo.class,
+      NodeToLabelsEntryList.class,
+      NodeToLabelsInfo.class,
+      ReservationListInfo.class,
+      ResourceOptionInfo.class,
+      SchedConfUpdateInfo.class
+  );
+
+  private final Set> wrappedClasses;
+  private final Set> unWrappedClasses;
+
+  public ClassSerialisationConfig() {
+    this(new Configuration());
+  }
+
+  @Inject
+  public ClassSerialisationConfig(@javax.inject.Named("conf") Configuration conf) {
+    wrappedClasses = new HashSet<>(CONST_WRAPPED_CLASSES);
+    try {
+      wrappedClasses.addAll(Arrays.asList(conf.getClasses(YarnConfiguration.YARN_HTTP_WEBAPP_CUSTOM_DAO_CLASSES)));
+    } catch (RuntimeException e) {
+      LOG.warn("Failed to load YARN_HTTP_WEBAPP_CUSTOM_DAO_CLASSES", e);
+    }
+
+    unWrappedClasses = new HashSet<>(CONST_UNWRAPPED_CLASSES);
+    try {
+      wrappedClasses.addAll(Arrays.asList(conf.getClasses(YarnConfiguration.YARN_HTTP_WEBAPP_CUSTOM_UNWRAPPED_DAO_CLASSES)));
+    } catch (RuntimeException e) {
+      LOG.warn("Failed to load YARN_HTTP_WEBAPP_CUSTOM_DAO_CLASSES", e);
+    }
+
+    LOG.trace("ClassSerialisationConfig was created, wrappedClasses: {} unWrappedClasses: {}",
+        wrappedClasses, unWrappedClasses);
+
+    Set> duplicates = new HashSet<>(wrappedClasses);
+    duplicates.retainAll(unWrappedClasses);
+
+    if (!duplicates.isEmpty()) {
+      throw new Error(String.format("Duplicate classes found: %s", duplicates));
+    }
+  }
+
+  public Set> getWrappedClasses() {
+    return wrappedClasses;
+  }
+
+  public Set> getUnWrappedClasses() {
+    return unWrappedClasses;
+  }
+
+
+}
diff --git a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/webapp/jsonprovider/ExcludeRootJSONProvider.java b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/webapp/jsonprovider/ExcludeRootJSONProvider.java
new file mode 100644
index 0000000000000..7b4c79fc4f577
--- /dev/null
+++ b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/webapp/jsonprovider/ExcludeRootJSONProvider.java
@@ -0,0 +1,90 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.hadoop.yarn.server.resourcemanager.webapp.jsonprovider;
+
+import java.lang.annotation.Annotation;
+import java.lang.reflect.Type;
+import javax.inject.Inject;
+import javax.ws.rs.Consumes;
+import javax.ws.rs.Produces;
+import javax.ws.rs.core.MediaType;
+import javax.ws.rs.core.MultivaluedMap;
+import javax.ws.rs.ext.Provider;
+import javax.xml.bind.JAXBException;
+import javax.xml.bind.Marshaller;
+import javax.xml.bind.Unmarshaller;
+
+import com.google.gson.Gson;
+import org.eclipse.persistence.jaxb.MarshallerProperties;
+import org.eclipse.persistence.jaxb.rs.MOXyJsonProvider;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import org.apache.hadoop.conf.Configuration;
+
+@Provider
+@Produces(MediaType.APPLICATION_JSON)
+@Consumes(MediaType.APPLICATION_JSON)
+public class ExcludeRootJSONProvider extends MOXyJsonProvider {
+
+    private final static Logger LOG = LoggerFactory.getLogger(ExcludeRootJSONProvider.class);
+    private final ClassSerialisationConfig classSerialisationConfig;
+
+    public ExcludeRootJSONProvider() {
+        this(new Configuration());
+    }
+
+    @Inject
+    public ExcludeRootJSONProvider(@javax.inject.Named("conf") Configuration conf) {
+        classSerialisationConfig = new ClassSerialisationConfig(conf);
+    }
+
+    @Override
+    public boolean isReadable(Class> type, Type genericType,
+            Annotation[] annotations, MediaType mediaType) {
+        boolean match = classSerialisationConfig.getUnWrappedClasses().contains(type);
+        LOG.trace("ExcludeRootJSONProvider compatibility with {} is {}", type, match);
+        return match;
+    }
+
+    @Override
+    public boolean isWriteable(Class> type, Type genericType,
+            Annotation[] annotations, MediaType mediaType) {
+        return isReadable(type, genericType, annotations, mediaType);
+    }
+
+    @Override
+    protected void preReadFrom(Class type, Type genericType,
+            Annotation[] annotations, MediaType mediaType,
+            MultivaluedMap httpHeaders,
+            Unmarshaller unmarshaller) throws JAXBException {
+        LOG.trace("ExcludeRootJSONProvider preReadFrom with {}", type);
+        unmarshaller.setProperty(MarshallerProperties.JSON_INCLUDE_ROOT, false);
+    }
+
+    @Override
+    protected void preWriteTo(Object object, Class> type, Type genericType,
+            Annotation[] annotations, MediaType mediaType,
+            MultivaluedMap httpHeaders, Marshaller marshaller)
+            throws JAXBException {
+        LOG.trace("ExcludeRootJSONProvider preWriteTo with {}", type);
+        marshaller.setProperty(MarshallerProperties.JSON_MARSHAL_EMPTY_COLLECTIONS, false);
+        marshaller.setProperty(MarshallerProperties.JSON_INCLUDE_ROOT, false);
+    }
+}
\ No newline at end of file
diff --git a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/webapp/jsonprovider/IncludeRootJSONProvider.java b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/webapp/jsonprovider/IncludeRootJSONProvider.java
new file mode 100644
index 0000000000000..f8ce4ab8c2e28
--- /dev/null
+++ b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/webapp/jsonprovider/IncludeRootJSONProvider.java
@@ -0,0 +1,90 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.hadoop.yarn.server.resourcemanager.webapp.jsonprovider;
+
+import java.lang.annotation.Annotation;
+import java.lang.reflect.Type;
+import javax.inject.Inject;
+import javax.ws.rs.Consumes;
+import javax.ws.rs.Produces;
+import javax.ws.rs.core.MediaType;
+import javax.ws.rs.core.MultivaluedMap;
+import javax.ws.rs.ext.Provider;
+import javax.xml.bind.JAXBException;
+import javax.xml.bind.Marshaller;
+import javax.xml.bind.Unmarshaller;
+
+import org.eclipse.persistence.jaxb.MarshallerProperties;
+import org.eclipse.persistence.jaxb.rs.MOXyJsonProvider;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import org.apache.hadoop.conf.Configuration;
+import org.apache.hadoop.yarn.api.records.ResourceInformation;
+
+@Provider
+@Produces(MediaType.APPLICATION_JSON)
+@Consumes(MediaType.APPLICATION_JSON)
+public class IncludeRootJSONProvider extends MOXyJsonProvider {
+    private final static Logger LOG = LoggerFactory.getLogger(IncludeRootJSONProvider.class);
+    private final ClassSerialisationConfig classSerialisationConfig;
+
+    public IncludeRootJSONProvider() {
+        this(new Configuration());
+    }
+
+    @Inject
+    public IncludeRootJSONProvider(@javax.inject.Named("conf") Configuration conf) {
+        classSerialisationConfig = new ClassSerialisationConfig(conf);
+    }
+
+    @Override
+    public boolean isReadable(Class> type, Type genericType,
+            Annotation[] annotations, MediaType mediaType) {
+        boolean match = classSerialisationConfig.getWrappedClasses().contains(type);
+        LOG.trace("IncludeRootJSONProvider compatibility with {} is {}", type, match);
+        return match;
+    }
+
+    @Override
+    public boolean isWriteable(Class> type, Type genericType,
+            Annotation[] annotations, MediaType mediaType) {
+        return isReadable(type, genericType, annotations, mediaType);
+    }
+
+    @Override
+    protected void preReadFrom(Class type, Type genericType,
+            Annotation[] annotations, MediaType mediaType,
+            MultivaluedMap httpHeaders,
+            Unmarshaller unmarshaller) throws JAXBException {
+        LOG.trace("IncludeRootJSONProvider preReadFrom with {}", type);
+        unmarshaller.setProperty(MarshallerProperties.JSON_INCLUDE_ROOT, true);
+    }
+
+    @Override
+    protected void preWriteTo(Object object, Class> type, Type genericType,
+            Annotation[] annotations, MediaType mediaType,
+            MultivaluedMap httpHeaders, Marshaller marshaller)
+            throws JAXBException {
+        LOG.trace("IncludeRootJSONProvider preWriteTo with {}", type);
+        marshaller.setProperty(MarshallerProperties.JSON_MARSHAL_EMPTY_COLLECTIONS, false);
+        marshaller.setProperty(MarshallerProperties.JSON_INCLUDE_ROOT, true);
+    }
+
+}
diff --git a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/webapp/jsonprovider/JsonProviderFeature.java b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/webapp/jsonprovider/JsonProviderFeature.java
new file mode 100644
index 0000000000000..8dc8b796855cb
--- /dev/null
+++ b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/webapp/jsonprovider/JsonProviderFeature.java
@@ -0,0 +1,36 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.hadoop.yarn.server.resourcemanager.webapp.jsonprovider;
+
+import javax.ws.rs.core.Feature;
+import javax.ws.rs.core.FeatureContext;
+
+import org.eclipse.persistence.jaxb.MarshallerProperties;
+import org.glassfish.jersey.CommonProperties;
+
+public class JsonProviderFeature implements Feature {
+  @Override
+  public boolean configure(FeatureContext context) {
+    //Auto discovery should be disabled to ensure the custom providers will be used
+    context.property(CommonProperties.MOXY_JSON_FEATURE_DISABLE, true);
+    context.register(IncludeRootJSONProvider.class, 2001);
+    context.register(ExcludeRootJSONProvider.class, 2002);
+    return true;
+  }
+}
diff --git a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/webapp/TestRMWebServiceAppsNodelabel.java b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/webapp/TestRMWebServiceAppsNodelabel.java
index b5e41cb463510..a3e6cf99988cc 100644
--- a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/webapp/TestRMWebServiceAppsNodelabel.java
+++ b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/webapp/TestRMWebServiceAppsNodelabel.java
@@ -51,6 +51,7 @@
 import org.apache.hadoop.yarn.server.resourcemanager.scheduler.capacity.CapacityScheduler;
 import org.apache.hadoop.yarn.server.resourcemanager.scheduler.capacity.CapacitySchedulerConfiguration;
 import org.apache.hadoop.yarn.server.resourcemanager.scheduler.capacity.QueuePath;
+import org.apache.hadoop.yarn.server.resourcemanager.webapp.jsonprovider.JsonProviderFeature;
 import org.apache.hadoop.yarn.webapp.GenericExceptionHandler;
 import org.apache.hadoop.yarn.webapp.JerseyTestBase;
 import org.codehaus.jettison.json.JSONArray;
@@ -84,7 +85,8 @@ protected Application configure() {
     config.register(new JerseyBinder());
     config.register(RMWebServices.class);
     config.register(GenericExceptionHandler.class);
-    config.register(new JettisonFeature()).register(JAXBContextResolver.class);
+    config.register(JsonProviderFeature.class);
+    config.register(JAXBContextResolver.class);
     forceSet(TestProperties.CONTAINER_PORT, JERSEY_RANDOM_PORT);
     return config;
   }
@@ -198,7 +200,10 @@ public void testAppsRunning() throws JSONException, Exception {
     // Verify apps resource
     JSONObject apps = json.getJSONObject("apps");
     assertEquals(1, apps.length(), "incorrect number of elements");
-    JSONObject jsonObject = apps.getJSONObject("app").getJSONObject("resourceInfo");
+    JSONObject jsonObject = apps
+        .getJSONArray("app")
+        .getJSONObject(0)
+        .getJSONObject("resourceInfo");
     JSONArray jsonArray = jsonObject.getJSONArray("resourceUsagesByPartition");
     assertEquals(2, jsonArray.length(), "Partition expected is 2");
 
diff --git a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/webapp/TestRMWebServices.java b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/webapp/TestRMWebServices.java
index 3ea45d1d3cd5b..d8f8bf12ce88c 100644
--- a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/webapp/TestRMWebServices.java
+++ b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/webapp/TestRMWebServices.java
@@ -97,6 +97,7 @@
 import org.apache.hadoop.yarn.server.resourcemanager.webapp.dao.ApplicationSubmissionContextInfo;
 import org.apache.hadoop.yarn.server.resourcemanager.webapp.dao.AppsInfo;
 import org.apache.hadoop.yarn.server.resourcemanager.webapp.dao.ClusterUserInfo;
+import org.apache.hadoop.yarn.server.resourcemanager.webapp.jsonprovider.JsonProviderFeature;
 import org.apache.hadoop.yarn.server.security.ApplicationACLsManager;
 import org.apache.hadoop.yarn.util.AdHocLogDumper;
 import org.apache.hadoop.yarn.util.AppsCacheKey;
@@ -137,7 +138,8 @@ protected Application configure() {
     config.register(new JerseyBinder());
     config.register(RMWebServices.class);
     config.register(GenericExceptionHandler.class);
-    config.register(new JettisonFeature()).register(JAXBContextResolver.class);
+    config.register(JsonProviderFeature.class);
+    config.register(JAXBContextResolver.class);
     forceSet(TestProperties.CONTAINER_PORT, JERSEY_RANDOM_PORT);
     return config;
   }
@@ -634,7 +636,7 @@ public void verifyClusterSchedulerFifo(JSONObject json) throws JSONException,
     LOG.debug("schedulerInfo: {}", info);
     assertEquals(11, info.length(), "incorrect number of elements in: " + info);
 
-    verifyClusterSchedulerFifoGeneric(info.getString("@xsi.type"),
+    verifyClusterSchedulerFifoGeneric(info.getString("type"),
         info.getString("qstate"), (float) info.getDouble("capacity"),
         (float) info.getDouble("usedCapacity"),
         info.getInt("minQueueMemoryCapacity"),
diff --git a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/webapp/TestRMWebServicesAppAttempts.java b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/webapp/TestRMWebServicesAppAttempts.java
index 4592d9a7585e8..b8730d0bfa3ef 100644
--- a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/webapp/TestRMWebServicesAppAttempts.java
+++ b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/webapp/TestRMWebServicesAppAttempts.java
@@ -37,6 +37,7 @@
 import org.apache.hadoop.yarn.server.resourcemanager.rmapp.attempt.RMAppAttemptState;
 import org.apache.hadoop.yarn.server.resourcemanager.scheduler.ResourceScheduler;
 import org.apache.hadoop.yarn.server.resourcemanager.scheduler.fifo.FifoScheduler;
+import org.apache.hadoop.yarn.server.resourcemanager.webapp.jsonprovider.JsonProviderFeature;
 import org.apache.hadoop.yarn.webapp.GenericExceptionHandler;
 import org.apache.hadoop.yarn.webapp.JerseyTestBase;
 import org.apache.hadoop.yarn.webapp.WebServicesTestUtils;
@@ -83,7 +84,7 @@ protected Application configure() {
     config.register(new JerseyBinder());
     config.register(RMWebServices.class);
     config.register(GenericExceptionHandler.class);
-    config.register(new JettisonFeature()).register(JAXBContextResolver.class);
+    config.register(JsonProviderFeature.class);
     forceSet(TestProperties.CONTAINER_PORT, JERSEY_RANDOM_PORT);
     return config;
   }
@@ -156,9 +157,7 @@ public void testCompletedAppAttempt() throws Exception {
         .get(Response.class);
     JSONObject json = response.readEntity(JSONObject.class);
     JSONObject jsonAppAttempts = json.getJSONObject("appAttempts");
-    JSONObject jsonAppAttempt = jsonAppAttempts.getJSONObject("appAttempt");
-    JSONArray jsonArray = new JSONArray();
-    jsonArray.put(jsonAppAttempt);
+    JSONArray jsonArray = jsonAppAttempts.getJSONArray("appAttempt");
     JSONObject info = jsonArray.getJSONObject(0);
     String logsLink = info.getString("logsLink");
     String containerId = app1.getCurrentAppAttempt().getMasterContainer()
diff --git a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/webapp/TestRMWebServicesAppCustomResourceTypes.java b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/webapp/TestRMWebServicesAppCustomResourceTypes.java
index 947fe7a231ec4..23ad29795bd49 100644
--- a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/webapp/TestRMWebServicesAppCustomResourceTypes.java
+++ b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/webapp/TestRMWebServicesAppCustomResourceTypes.java
@@ -31,6 +31,7 @@
 import org.apache.hadoop.yarn.server.resourcemanager.rmapp.RMApp;
 import org.apache.hadoop.yarn.server.resourcemanager.scheduler.ResourceScheduler;
 import org.apache.hadoop.yarn.server.resourcemanager.scheduler.fifo.FifoScheduler;
+import org.apache.hadoop.yarn.server.resourcemanager.webapp.jsonprovider.JsonProviderFeature;
 import org.apache.hadoop.yarn.util.resource.CustomResourceTypesConfigurationProvider;
 import org.apache.hadoop.yarn.server.resourcemanager.webapp.helper.BufferedClientResponse;
 import org.apache.hadoop.yarn.server.resourcemanager.webapp.helper.JsonCustomResourceTypeTestcase;
@@ -72,7 +73,7 @@ protected Application configure() {
     config.register(new JerseyBinder());
     config.register(RMWebServices.class);
     config.register(GenericExceptionHandler.class);
-    config.register(new JettisonFeature()).register(JAXBContextResolver.class);
+    config.register(JsonProviderFeature.class);
     forceSet(TestProperties.CONTAINER_PORT, JERSEY_RANDOM_PORT);
     return config;
   }
diff --git a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/webapp/TestRMWebServicesApps.java b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/webapp/TestRMWebServicesApps.java
index 8885540de15ed..1d87662332f91 100644
--- a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/webapp/TestRMWebServicesApps.java
+++ b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/webapp/TestRMWebServicesApps.java
@@ -44,6 +44,7 @@
 import org.apache.hadoop.yarn.server.resourcemanager.scheduler.ResourceScheduler;
 import org.apache.hadoop.yarn.server.resourcemanager.scheduler.fifo.FifoScheduler;
 import org.apache.hadoop.yarn.server.resourcemanager.webapp.dao.AppInfo;
+import org.apache.hadoop.yarn.server.resourcemanager.webapp.jsonprovider.JsonProviderFeature;
 import org.apache.hadoop.yarn.webapp.GenericExceptionHandler;
 import org.apache.hadoop.yarn.webapp.JerseyTestBase;
 import org.apache.hadoop.yarn.webapp.WebServicesTestUtils;
@@ -89,7 +90,7 @@ protected Application configure() {
     config.register(new JerseyBinder());
     config.register(RMWebServices.class);
     config.register(GenericExceptionHandler.class);
-    config.register(new JettisonFeature()).register(JAXBContextResolver.class);
+    config.register(JsonProviderFeature.class);
     forceSet(TestProperties.CONTAINER_PORT, JERSEY_RANDOM_PORT);
     return config;
   }
@@ -280,9 +281,7 @@ public void testAppsHelper(String path, RMApp app, String media,
     assertEquals(1, json.length(), "incorrect number of elements");
     JSONObject apps = json.getJSONObject("apps");
     assertEquals(1, apps.length(), "incorrect number of elements");
-    JSONObject jSONObjectApp = apps.getJSONObject("app");
-    JSONArray array = new JSONArray();
-    array.put(jSONObjectApp);
+    JSONArray array = apps.getJSONArray("app");
     assertEquals(1, array.length(), "incorrect number of elements");
     verifyAppInfo(array.getJSONObject(0), app, hasResourceReq);
 
@@ -306,9 +305,7 @@ public void testAppsQueryState() throws JSONException, Exception {
     assertEquals(1, json.length(), "incorrect number of elements");
     JSONObject apps = json.getJSONObject("apps");
     assertEquals(1, apps.length(), "incorrect number of elements");
-    JSONObject app = apps.getJSONObject("app");
-    JSONArray array = new JSONArray();
-    array.put(app);
+    JSONArray array = apps.getJSONArray("app");
     assertEquals(1, array.length(), "incorrect number of elements");
     verifyAppInfo(array.getJSONObject(0), app1, false);
     rm.stop();
@@ -334,9 +331,7 @@ public void testAppsQueryStates() throws JSONException, Exception {
     assertEquals(1, json.length(), "incorrect number of elements");
     JSONObject apps = json.getJSONObject("apps");
     assertEquals(1, apps.length(), "incorrect number of elements");
-    JSONObject app = apps.getJSONObject("app");
-    JSONArray array = new JSONArray();
-    array.put(app);
+    JSONArray array = apps.getJSONArray("app");
     assertEquals(1, array.length(), "incorrect number of elements");
     assertEquals("ACCEPTED", array.getJSONObject(0).getString("state"),
         "state not equal to ACCEPTED");
@@ -384,9 +379,7 @@ public void testAppsQueryStatesComma() throws JSONException, Exception {
     assertEquals(1, json.length(), "incorrect number of elements");
     JSONObject apps = json.getJSONObject("apps");
     assertEquals(1, apps.length(), "incorrect number of elements");
-    JSONObject app = apps.getJSONObject("app");
-    JSONArray array = new JSONArray();
-    array.put(app);
+    JSONArray array = apps.getJSONArray("app");
     assertEquals(1, array.length(), "incorrect number of elements");
     assertEquals("ACCEPTED", array.getJSONObject(0).getString("state"),
         "state not equal to ACCEPTED");
@@ -430,7 +423,7 @@ public void testAppsQueryStatesNone() throws JSONException, Exception {
         response.getMediaType().toString());
     JSONObject json = response.readEntity(JSONObject.class);
     assertEquals(1, json.length(), "incorrect number of elements");
-    assertEquals("", json.get("apps").toString(), "apps is not empty");
+    assertEquals(new JSONObject().toString(), json.get("apps").toString(), "apps is not empty");
     rm.stop();
   }
 
@@ -450,7 +443,7 @@ public void testAppsQueryStateNone() throws JSONException, Exception {
         response.getMediaType().toString());
     JSONObject json = response.readEntity(JSONObject.class);
     assertEquals(1, json.length(), "incorrect number of elements");
-    assertEquals("", json.get("apps").toString(), "apps is not empty");
+    assertEquals(new JSONObject().toString(), json.get("apps").toString(), "apps is not empty");
     rm.stop();
   }
 
@@ -543,9 +536,7 @@ public void testAppsQueryFinalStatus() throws JSONException, Exception {
     assertEquals(1, json.length(), "incorrect number of elements");
     JSONObject apps = json.getJSONObject("apps");
     assertEquals(1, apps.length(), "incorrect number of elements");
-    JSONObject app = apps.getJSONObject("app");
-    JSONArray array = new JSONArray();
-    array.put(app);
+    JSONArray array  = apps.getJSONArray("app");
     assertEquals(1, array.length(), "incorrect number of elements");
     verifyAppInfo(array.getJSONObject(0), app1, false);
     rm.stop();
@@ -566,7 +557,7 @@ public void testAppsQueryFinalStatusNone() throws JSONException, Exception {
         response.getMediaType().toString());
     JSONObject json = response.readEntity(JSONObject.class);
     assertEquals(1, json.length(), "incorrect number of elements");
-    assertEquals("", json.get("apps").toString(), "apps is not null");
+    assertEquals(new JSONObject().toString(), json.get("apps").toString(), "apps is not null");
     rm.stop();
   }
 
@@ -719,9 +710,7 @@ public void testAppsQueryQueueAndStateOneFinishedApp() throws Exception {
     JSONObject apps = json.getJSONObject("apps");
     assertEquals(1, apps.length(), "incorrect number of elements");
 
-    JSONObject app = apps.getJSONObject("app");
-    JSONArray array = new JSONArray();
-    array.put(app);
+    JSONArray array = apps.getJSONArray("app");
 
     Set appIds = getApplicationIds(array);
     assertFalse(appIds.contains(runningApp.getApplicationId().toString()),
@@ -833,9 +822,7 @@ public void testAppsQueryStartBeginSome() throws JSONException, Exception {
     assertEquals(1, json.length(), "incorrect number of elements");
     JSONObject apps = json.getJSONObject("apps");
     assertEquals(1, apps.length(), "incorrect number of elements");
-    JSONObject app = apps.getJSONObject("app");
-    JSONArray array = new JSONArray();
-    array.put(app);
+    JSONArray array = apps.getJSONArray("app");
     assertEquals(1, array.length(), "incorrect number of elements");
     rm.stop();
   }
@@ -857,7 +844,7 @@ public void testAppsQueryStartEnd() throws JSONException, Exception {
         response.getMediaType().toString());
     JSONObject json = response.readEntity(JSONObject.class);
     assertEquals(1, json.length(), "incorrect number of elements");
-    assertEquals("", json.get("apps").toString(), "apps is not empty");
+    assertEquals(new JSONObject().toString(), json.get("apps").toString(), "apps is not empty");
     rm.stop();
   }
 
@@ -910,9 +897,7 @@ public void testAppsQueryFinishBegin() throws JSONException, Exception {
     assertEquals(1, json.length(), "incorrect number of elements");
     JSONObject apps = json.getJSONObject("apps");
     assertEquals(1, apps.length(), "incorrect number of elements");
-    JSONObject appsJSONObject = apps.getJSONObject("app");
-    JSONArray array = new JSONArray();
-    array.put(appsJSONObject);
+    JSONArray array  = apps.getJSONArray("app");
     assertEquals(1, array.length(), "incorrect number of elements");
     rm.stop();
   }
@@ -981,9 +966,7 @@ public void testAppsQueryFinishBeginEnd() throws JSONException, Exception {
     assertEquals(1, json.length(), "incorrect number of elements");
     JSONObject apps = json.getJSONObject("apps");
     assertEquals(1, apps.length(), "incorrect number of elements");
-    JSONObject appsJSONObject = apps.getJSONObject("app");
-    JSONArray array = new JSONArray();
-    array.put(appsJSONObject);
+    JSONArray array  = apps.getJSONArray("app");
     assertEquals(1, array.length(), "incorrect number of elements");
     rm.stop();
   }
@@ -1033,9 +1016,7 @@ public void testAppsQueryAppTypes() throws JSONException, Exception {
     assertEquals(1, json.length(), "incorrect number of elements");
     JSONObject apps = json.getJSONObject("apps");
     assertEquals(1, apps.length(), "incorrect number of elements");
-    JSONObject appsJSONObject = apps.getJSONObject("app");
-    JSONArray array = new JSONArray();
-    array.put(appsJSONObject);
+    JSONArray array = apps.getJSONArray("app");
     assertEquals(1, array.length(), "incorrect number of elements");
     assertEquals("MAPREDUCE",
         array.getJSONObject(0).getString("applicationType"));
@@ -1120,9 +1101,7 @@ public void testAppsQueryAppTypes() throws JSONException, Exception {
     assertEquals(1, json.length(), "incorrect number of elements");
     apps = json.getJSONObject("apps");
     assertEquals(1, apps.length(), "incorrect number of elements");
-    appsJSONObject = apps.getJSONObject("app");
-    array = new JSONArray();
-    array.put(appsJSONObject);
+    array = apps.getJSONArray("app");
     assertEquals(1, array.length(), "incorrect number of elements");
     assertEquals("YARN",
         array.getJSONObject(0).getString("applicationType"));
@@ -1138,9 +1117,7 @@ public void testAppsQueryAppTypes() throws JSONException, Exception {
     assertEquals(1, json.length(), "incorrect number of elements");
     apps = json.getJSONObject("apps");
     assertEquals(1, apps.length(), "incorrect number of elements");
-    appsJSONObject = apps.getJSONObject("app");
-    array = new JSONArray();
-    array.put(appsJSONObject);
+    array = apps.getJSONArray("app");
     assertEquals(1, array.length(), "incorrect number of elements");
     assertEquals("YARN",
         array.getJSONObject(0).getString("applicationType"));
@@ -1255,9 +1232,7 @@ public void testAppsQueryWithDeselects()
     assertEquals(1, json.length(), "incorrect number of elements");
     JSONObject apps = json.getJSONObject("apps");
     assertEquals(1, apps.length(), "incorrect number of elements");
-    JSONObject appsJSONObject = apps.getJSONObject("app");
-    JSONArray array = new JSONArray();
-    array.put(appsJSONObject);
+    JSONArray array = apps.getJSONArray("app");
     assertEquals(1, array.length(), "incorrect number of elements");
     JSONObject app = array.getJSONObject(0);
     assertTrue(!app.has("resourceRequests"), "resource requests shouldn't exist");
@@ -1272,9 +1247,7 @@ public void testAppsQueryWithDeselects()
     assertEquals(1, json.length(), "incorrect number of elements");
     apps = json.getJSONObject("apps");
     assertEquals(1, apps.length(), "incorrect number of elements");
-    appsJSONObject = apps.getJSONObject("app");
-    array = new JSONArray();
-    array.put(appsJSONObject);
+    array  = apps.getJSONArray("app");
     assertEquals(1, array.length(), "incorrect number of elements");
     app = array.getJSONObject(0);
     assertTrue(!app.has("amNodeLabelExpression"),
@@ -1290,9 +1263,7 @@ public void testAppsQueryWithDeselects()
     assertEquals(1, json.length(), "incorrect number of elements");
     apps = json.getJSONObject("apps");
     assertEquals(1, apps.length(), "incorrect number of elements");
-    appsJSONObject = apps.getJSONObject("app");
-    array = new JSONArray();
-    array.put(appsJSONObject);
+    array = apps.getJSONArray("app");
     assertEquals(1, array.length(), "incorrect number of elements");
     app = array.getJSONObject(0);
     assertTrue(!app.has("timeouts"), "Timeouts shouldn't exist");
@@ -1309,9 +1280,7 @@ public void testAppsQueryWithDeselects()
     assertEquals(1, json.length(), "incorrect number of elements");
     apps = json.getJSONObject("apps");
     assertEquals(1, apps.length(), "incorrect number of elements");
-    appsJSONObject = apps.getJSONObject("app");
-    array = new JSONArray();
-    array.put(appsJSONObject);
+    array = apps.getJSONArray("app");
     assertEquals(1, array.length(), "incorrect number of elements");
     app = array.getJSONObject(0);
     assertTrue(!app.has("appNodeLabelExpression"), "AppNodeLabelExpression shouldn't exist");
@@ -1328,9 +1297,7 @@ public void testAppsQueryWithDeselects()
     assertEquals(1, json.length(), "incorrect number of elements");
     apps = json.getJSONObject("apps");
     assertEquals(1, apps.length(), "incorrect number of elements");
-    appsJSONObject = apps.getJSONObject("app");
-    array = new JSONArray();
-    array.put(appsJSONObject);
+    array = apps.getJSONArray("app");
     assertEquals(1, array.length(), "incorrect number of elements");
     app = array.getJSONObject(0);
     assertTrue(!app.has("resourceInfo"), "Resource info shouldn't exist");
@@ -1421,9 +1388,7 @@ public void testAppStatistics() throws JSONException, Exception {
       assertEquals(1, json.length(), "incorrect number of elements");
       appsStatInfo = json.getJSONObject("appStatInfo");
       assertEquals(1, appsStatInfo.length(), "incorrect number of elements");
-      JSONObject statItem = appsStatInfo.getJSONObject("statItem");
-      statItems = new JSONArray();
-      statItems.put(statItem);
+      statItems = appsStatInfo.getJSONArray("statItem");
       assertEquals(1, statItems.length(), "incorrect number of elements");
       assertEquals("ACCEPTED", statItems.getJSONObject(0).getString("state"));
       assertEquals("*", statItems.getJSONObject(0).getString("type"));
@@ -1789,7 +1754,7 @@ public void verifyAppsXML(NodeList nodes, RMApp app, boolean hasResourceReq)
   public void verifyAppInfo(JSONObject info, RMApp app, boolean hasResourceReqs)
       throws JSONException, Exception {
 
-    int expectedNumberOfElements = 41 + (hasResourceReqs ? 2 : 0);
+    int expectedNumberOfElements = 40 + (hasResourceReqs ? 2 : 0);
     String appNodeLabelExpression = null;
     String amNodeLabelExpression = null;
     if (app.getApplicationSubmissionContext()
@@ -1836,10 +1801,8 @@ public void verifyAppInfo(JSONObject info, RMApp app, boolean hasResourceReqs)
         amRPCAddress);
 
     if (hasResourceReqs) {
-      JSONObject resourceRequests = info.getJSONObject("resourceRequests");
-      JSONArray array = new JSONArray();
-      array.put(resourceRequests);
-      verifyResourceRequests(array, app);
+      JSONArray resourceRequests = info.getJSONArray("resourceRequests");
+      verifyResourceRequests(resourceRequests, app);
     }
   }
 
diff --git a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/webapp/TestRMWebServicesAppsCustomResourceTypes.java b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/webapp/TestRMWebServicesAppsCustomResourceTypes.java
index f1c8dd3137e58..ccdcd29bc01a0 100644
--- a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/webapp/TestRMWebServicesAppsCustomResourceTypes.java
+++ b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/webapp/TestRMWebServicesAppsCustomResourceTypes.java
@@ -34,6 +34,7 @@
 import org.apache.hadoop.yarn.server.resourcemanager.scheduler.ResourceScheduler;
 import org.apache.hadoop.yarn.server.resourcemanager.scheduler.fifo.FifoScheduler;
 
+import org.apache.hadoop.yarn.server.resourcemanager.webapp.jsonprovider.JsonProviderFeature;
 import org.apache.hadoop.yarn.util.resource.CustomResourceTypesConfigurationProvider;
 import org.apache.hadoop.yarn.server.resourcemanager.webapp.helper.BufferedClientResponse;
 import org.apache.hadoop.yarn.server.resourcemanager.webapp.helper.JsonCustomResourceTypeTestcase;
@@ -79,7 +80,7 @@ protected Application configure() {
     config.register(new JerseyBinder());
     config.register(RMWebServices.class);
     config.register(GenericExceptionHandler.class);
-    config.register(new JettisonFeature()).register(JAXBContextResolver.class);
+    config.register(JsonProviderFeature.class);
     forceSet(TestProperties.CONTAINER_PORT, JERSEY_RANDOM_PORT);
     return config;
   }
@@ -174,9 +175,7 @@ public void testRunningAppsJson() throws Exception {
         assertEquals(1, json.length(), "incorrect number of apps elements");
         JSONObject apps = json.getJSONObject("apps");
         assertEquals(1, apps.length(), "incorrect number of app elements");
-        JSONObject app = apps.getJSONObject("app");
-        JSONArray array = new JSONArray();
-        array.put(app);
+        JSONArray array = apps.getJSONArray("app");
         assertEquals(1, array.length(), "incorrect count of app");
 
         verifyAppInfoJson(array.getJSONObject(0), app1, rm);
diff --git a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/webapp/TestRMWebServicesAppsModification.java b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/webapp/TestRMWebServicesAppsModification.java
index a28e0e9084412..d5422d3b92615 100644
--- a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/webapp/TestRMWebServicesAppsModification.java
+++ b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/webapp/TestRMWebServicesAppsModification.java
@@ -25,6 +25,7 @@
 import static org.mockito.Mockito.mock;
 
 import java.io.ByteArrayInputStream;
+import java.io.ByteArrayOutputStream;
 import java.io.DataInputStream;
 import java.io.File;
 import java.io.IOException;
@@ -105,6 +106,8 @@
 import org.apache.hadoop.yarn.server.resourcemanager.webapp.dao.CredentialsInfo;
 import org.apache.hadoop.yarn.server.resourcemanager.webapp.dao.LocalResourceInfo;
 import org.apache.hadoop.yarn.server.resourcemanager.webapp.dao.LogAggregationContextInfo;
+import org.apache.hadoop.yarn.server.resourcemanager.webapp.jsonprovider.IncludeRootJSONProvider;
+import org.apache.hadoop.yarn.server.resourcemanager.webapp.jsonprovider.JsonProviderFeature;
 import org.apache.hadoop.yarn.server.resourcemanager.webapp.reader.AppStateReader;
 import org.apache.hadoop.yarn.server.resourcemanager.webapp.reader.ApplicationSubmissionContextInfoReader;
 import org.apache.hadoop.yarn.server.resourcemanager.webapp.writer.ApplicationSubmissionContextInfoWriter;
@@ -112,6 +115,9 @@
 import org.apache.hadoop.yarn.webapp.GenericExceptionHandler;
 import org.apache.hadoop.yarn.webapp.JerseyTestBase;
 import org.apache.hadoop.yarn.webapp.WebServicesTestUtils;
+
+import com.google.gson.Gson;
+import org.codehaus.jettison.json.JSONArray;
 import org.codehaus.jettison.json.JSONException;
 import org.codehaus.jettison.json.JSONObject;
 import org.junit.jupiter.api.AfterEach;
@@ -159,55 +165,14 @@ public class TestRMWebServicesAppsModification extends JerseyTestBase {
   private HttpServletRequest hsRequest = mock(HttpServletRequest.class);
   private HttpServletResponse hsResponse = mock(HttpServletResponse.class);
 
-  private static final JettisonMarshaller APP_STATE_WRITER;
-  static {
-    try {
-      JettisonJaxbContext jettisonJaxbContext = new JettisonJaxbContext(AppState.class);
-      APP_STATE_WRITER = jettisonJaxbContext.createJsonMarshaller();
-    } catch (JAXBException e) {
-      throw new RuntimeException(e);
-    }
-  }
-
-  private static final JettisonMarshaller APP_PRIORITY_WRITER;
-  static {
-    try {
-      JettisonJaxbContext jettisonJaxbContext = new JettisonJaxbContext(AppPriority.class);
-      APP_PRIORITY_WRITER = jettisonJaxbContext.createJsonMarshaller();
-    } catch (JAXBException e) {
-      throw new RuntimeException(e);
-    }
-  }
-
-  private static final JettisonMarshaller APP_QUEUE_WRITER;
-  static {
-    try {
-      JettisonJaxbContext jettisonJaxbContext = new JettisonJaxbContext(AppQueue.class);
-      APP_QUEUE_WRITER = jettisonJaxbContext.createJsonMarshaller();
-    } catch (JAXBException e) {
-      throw new RuntimeException(e);
-    }
-  }
-
-  private static final JettisonMarshaller APP_TIMEOUT_WRITER;
-  static {
-    try {
-      JettisonJaxbContext jettisonJaxbContext = new JettisonJaxbContext(AppTimeoutInfo.class);
-      APP_TIMEOUT_WRITER = jettisonJaxbContext.createJsonMarshaller();
-    } catch (JAXBException e) {
-      throw new RuntimeException(e);
-    }
-  }
-
   @Override
   protected Application configure() {
     config = new ResourceConfig();
     config.register(RMWebServices.class);
     config.register(GenericExceptionHandler.class);
-    config.register(ApplicationSubmissionContextInfoWriter.class);
-    config.register(ApplicationSubmissionContextInfoReader.class);
     config.register(TestRMCustomAuthFilter.class);
-    config.register(new JettisonFeature()).register(JAXBContextResolver.class);
+    config.register(JsonProviderFeature.class);
+    config.register(JAXBContextResolver.class);
     forceSet(TestProperties.CONTAINER_PORT, JERSEY_RANDOM_PORT);
     return config;
   }
@@ -378,11 +343,7 @@ private WebTarget constructWebResource(WebTarget r, String... paths) {
   }
 
   private WebTarget constructWebResource(String... paths) {
-    WebTarget r = target()
-        .register(App.class)
-        .register(AppStateReader.class)
-        .register(ApplicationSubmissionContextInfoReader.class)
-        .register(ApplicationSubmissionContextInfoWriter.class);
+    WebTarget r = target().register(App.class);
     WebTarget ws = r.path("ws").path("v1").path("cluster");
     return this.constructWebResource(ws, paths);
   }
@@ -565,9 +526,7 @@ public void testSingleAppKillInvalidState(int run) throws Exception {
   }
 
   private static String appStateToJSON(AppState state) throws Exception {
-    StringWriter stringWriter = new StringWriter();
-    APP_STATE_WRITER.marshallToJSON(state, stringWriter);
-    return stringWriter.toString();
+    return new Gson().toJson(state);
   }
 
   protected static void verifyAppStateJson(Response response,
@@ -577,7 +536,7 @@ protected static void verifyAppStateJson(Response response,
         response.getMediaType().toString());
     JSONObject json = response.readEntity(JSONObject.class);
     assertEquals(1, json.length(), "incorrect number of elements");
-    String responseState = json.getJSONObject("appstate").getString("state");
+    String responseState = json.getString("state");
     boolean valid = false;
     for (RMAppState state : states) {
       if (state.toString().equals(responseState)) {
@@ -774,8 +733,7 @@ protected String validateGetNewApplicationResponse(Response resp)
     String ret = "";
     if (resp.getMediaType().toString().contains(MediaType.APPLICATION_JSON)) {
       JSONObject json = resp.readEntity(JSONObject.class);
-      JSONObject newApplication = json.getJSONObject("NewApplication");
-      ret = validateGetNewApplicationJsonResponse(newApplication);
+      ret = validateGetNewApplicationJsonResponse(json);
     } else if (resp.getMediaType().toString().contains(MediaType.APPLICATION_XML)) {
       String xml = resp.readEntity(String.class);
       ret = validateGetNewApplicationXMLResponse(xml);
@@ -938,10 +896,11 @@ public void testAppSubmit(String acceptMedia, String contentMedia)
     String reservationId = ReservationId.newInstance(
         System.currentTimeMillis(), 1).toString();
     appInfo.setReservationId(reservationId);
+    Entity entity = Entity.entity(appInfo, contentMedia);
 
     Response response =
         this.constructWebResource(urlPath).request(acceptMedia)
-        .post(Entity.entity(appInfo, contentMedia), Response.class);
+        .post(entity, Response.class);
 
     if (!this.isAuthenticationEnabled()) {
       assertResponseStatusCode(Response.Status.UNAUTHORIZED, response.getStatusInfo());
@@ -1336,15 +1295,11 @@ public void testAppMove(int run) throws Exception {
 
   protected static String appPriorityToJSON(AppPriority targetPriority)
       throws Exception {
-    StringWriter stringWriter = new StringWriter();
-    APP_PRIORITY_WRITER.marshallToJSON(targetPriority, stringWriter);
-    return stringWriter.toString();
+    return new Gson().toJson(targetPriority);
   }
 
   protected static String appQueueToJSON(AppQueue targetQueue) throws Exception {
-    StringWriter stringWriter = new StringWriter();
-    APP_QUEUE_WRITER.marshallToJSON(targetQueue, stringWriter);
-    return stringWriter.toString();
+    return new Gson().toJson(targetQueue);
   }
 
   protected static void verifyAppPriorityJson(Response response,
@@ -1353,8 +1308,7 @@ protected static void verifyAppPriorityJson(Response response,
         response.getMediaType().toString());
     JSONObject json = response.readEntity(JSONObject.class);
     assertEquals(1, json.length(), "incorrect number of elements");
-    JSONObject applicationpriority = json.getJSONObject("applicationpriority");
-    int responsePriority = applicationpriority.getInt("priority");
+    int responsePriority = json.getInt("priority");
     assertEquals(expectedPriority, responsePriority);
   }
 
@@ -1382,7 +1336,7 @@ protected static void verifyAppQueueJson(Response response, String queue)
         response.getMediaType().toString());
     JSONObject json = response.readEntity(JSONObject.class);
     assertEquals(1, json.length(), "incorrect number of elements");
-    String responseQueue = json.getJSONObject("appqueue").getString("queue");
+    String responseQueue = json.getString("queue");
     assertEquals(queue, responseQueue);
   }
 
@@ -1433,8 +1387,8 @@ public void testUpdateAppTimeout(int run) throws Exception {
               response.getMediaType().toString());
           JSONObject js =
               response.readEntity(JSONObject.class).getJSONObject("timeouts");
-          JSONObject entity = js.getJSONObject("timeout");
-          verifyAppTimeoutJson(entity,
+          JSONArray entity = js.getJSONArray("timeout");
+          verifyAppTimeoutJson(entity.getJSONObject(0),
               ApplicationTimeoutType.LIFETIME, "UNLIMITED", -1);
         }
 
@@ -1454,6 +1408,7 @@ public void testUpdateAppTimeout(int run) throws Exception {
               response.getStatusInfo());
           continue;
         }
+
         assertResponseStatusCode(Response.Status.OK, response.getStatusInfo());
         if (mediaType.contains(MediaType.APPLICATION_JSON)) {
           verifyAppTimeoutJson(response, ApplicationTimeoutType.LIFETIME,
@@ -1548,7 +1503,9 @@ protected static void verifyAppTimeoutXML(Response response,
   protected static String appTimeoutToJSON(AppTimeoutInfo timeout)
       throws Exception {
     StringWriter stringWriter = new StringWriter();
-    APP_TIMEOUT_WRITER.marshallToJSON(timeout, stringWriter);
+    JettisonJaxbContext jettisonJaxbContext = new JettisonJaxbContext(AppTimeoutInfo.class);
+    JettisonMarshaller jettisonMarshaller = jettisonJaxbContext.createJsonMarshaller();
+    jettisonMarshaller.marshallToJSON(timeout, stringWriter);
     return stringWriter.toString();
   }
 }
diff --git a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/webapp/TestRMWebServicesCapacitySched.java b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/webapp/TestRMWebServicesCapacitySched.java
index 3e9f7f30ea61d..6fd3721209573 100644
--- a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/webapp/TestRMWebServicesCapacitySched.java
+++ b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/webapp/TestRMWebServicesCapacitySched.java
@@ -31,6 +31,7 @@
 import org.apache.hadoop.yarn.server.resourcemanager.ResourceManager;
 import org.apache.hadoop.yarn.server.resourcemanager.scheduler.ResourceScheduler;
 import org.apache.hadoop.yarn.server.resourcemanager.scheduler.fifo.FifoScheduler;
+import org.apache.hadoop.yarn.server.resourcemanager.webapp.jsonprovider.JsonProviderFeature;
 import org.apache.hadoop.yarn.server.resourcemanager.webapp.reader.ApplicationSubmissionContextInfoReader;
 import org.apache.hadoop.yarn.server.resourcemanager.webapp.writer.ApplicationSubmissionContextInfoWriter;
 import org.apache.hadoop.yarn.webapp.GenericExceptionHandler;
@@ -81,7 +82,7 @@ protected Application configure() {
     config.register(ApplicationSubmissionContextInfoWriter.class);
     config.register(ApplicationSubmissionContextInfoReader.class);
     config.register(TestRMWebServicesAppsModification.TestRMCustomAuthFilter.class);
-    config.register(new JettisonFeature()).register(JAXBContextResolver.class);
+    config.register(JsonProviderFeature.class);
     return config;
   }
 
diff --git a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/webapp/TestRMWebServicesCapacitySchedDefaultLabel.java b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/webapp/TestRMWebServicesCapacitySchedDefaultLabel.java
index 49c5f9f46f95d..1a881540f7acd 100644
--- a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/webapp/TestRMWebServicesCapacitySchedDefaultLabel.java
+++ b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/webapp/TestRMWebServicesCapacitySchedDefaultLabel.java
@@ -24,6 +24,7 @@
 import org.apache.hadoop.yarn.server.resourcemanager.ResourceManager;
 import org.apache.hadoop.yarn.server.resourcemanager.scheduler.capacity.CapacitySchedulerConfiguration;
 import org.apache.hadoop.yarn.server.resourcemanager.scheduler.capacity.QueuePath;
+import org.apache.hadoop.yarn.server.resourcemanager.webapp.jsonprovider.JsonProviderFeature;
 import org.apache.hadoop.yarn.server.resourcemanager.webapp.reader.ApplicationSubmissionContextInfoReader;
 import org.apache.hadoop.yarn.server.resourcemanager.webapp.writer.ApplicationSubmissionContextInfoWriter;
 import org.apache.hadoop.yarn.webapp.GenericExceptionHandler;
@@ -72,7 +73,7 @@ protected Application configure() {
     config.register(ApplicationSubmissionContextInfoWriter.class);
     config.register(ApplicationSubmissionContextInfoReader.class);
     config.register(TestRMWebServicesAppsModification.TestRMCustomAuthFilter.class);
-    config.register(new JettisonFeature()).register(JAXBContextResolver.class);
+    config.register(JsonProviderFeature.class);
     return config;
   }
 
diff --git a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/webapp/TestRMWebServicesCapacitySchedDynamicConfig.java b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/webapp/TestRMWebServicesCapacitySchedDynamicConfig.java
index 042defbc6f358..8e0d417e6433d 100644
--- a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/webapp/TestRMWebServicesCapacitySchedDynamicConfig.java
+++ b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/webapp/TestRMWebServicesCapacitySchedDynamicConfig.java
@@ -25,6 +25,7 @@
 
 import org.apache.hadoop.yarn.conf.YarnConfiguration;
 import org.apache.hadoop.yarn.server.resourcemanager.ResourceManager;
+import org.apache.hadoop.yarn.server.resourcemanager.webapp.jsonprovider.JsonProviderFeature;
 import org.apache.hadoop.yarn.server.resourcemanager.webapp.reader.ApplicationSubmissionContextInfoReader;
 import org.apache.hadoop.yarn.server.resourcemanager.webapp.writer.ApplicationSubmissionContextInfoWriter;
 import org.apache.hadoop.yarn.webapp.GenericExceptionHandler;
@@ -94,7 +95,8 @@ protected Application configure() {
     config.register(ApplicationSubmissionContextInfoWriter.class);
     config.register(ApplicationSubmissionContextInfoReader.class);
     config.register(TestRMWebServicesAppsModification.TestRMCustomAuthFilter.class);
-    config.register(new JettisonFeature()).register(JAXBContextResolver.class);
+    config.register(JsonProviderFeature.class);
+    config.register(JAXBContextResolver.class);
     return config;
   }
 
diff --git a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/webapp/TestRMWebServicesCapacitySchedDynamicConfigAbsoluteMode.java b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/webapp/TestRMWebServicesCapacitySchedDynamicConfigAbsoluteMode.java
index 2e16928ab97bf..84b170cdf6184 100644
--- a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/webapp/TestRMWebServicesCapacitySchedDynamicConfigAbsoluteMode.java
+++ b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/webapp/TestRMWebServicesCapacitySchedDynamicConfigAbsoluteMode.java
@@ -24,6 +24,7 @@
 import org.apache.hadoop.yarn.server.resourcemanager.ResourceManager;
 import org.apache.hadoop.yarn.server.resourcemanager.scheduler.ResourceScheduler;
 import org.apache.hadoop.yarn.server.resourcemanager.scheduler.fifo.FifoScheduler;
+import org.apache.hadoop.yarn.server.resourcemanager.webapp.jsonprovider.JsonProviderFeature;
 import org.apache.hadoop.yarn.server.resourcemanager.webapp.reader.ApplicationSubmissionContextInfoReader;
 import org.apache.hadoop.yarn.server.resourcemanager.webapp.writer.ApplicationSubmissionContextInfoWriter;
 import org.apache.hadoop.yarn.webapp.GenericExceptionHandler;
@@ -91,10 +92,9 @@ protected Application configure() {
     config.register(RMWebServices.class);
     config.register(new JerseyBinder());
     config.register(GenericExceptionHandler.class);
-    config.register(ApplicationSubmissionContextInfoWriter.class);
-    config.register(ApplicationSubmissionContextInfoReader.class);
     config.register(TestRMWebServicesAppsModification.TestRMCustomAuthFilter.class);
-    config.register(new JettisonFeature()).register(JAXBContextResolver.class);
+    config.register(JsonProviderFeature.class);
+    config.register(JAXBContextResolver.class);
     return config;
   }
 
diff --git a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/webapp/TestRMWebServicesCapacitySchedDynamicConfigWeightMode.java b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/webapp/TestRMWebServicesCapacitySchedDynamicConfigWeightMode.java
index 586954be7e8b6..d6072e4b5beff 100644
--- a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/webapp/TestRMWebServicesCapacitySchedDynamicConfigWeightMode.java
+++ b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/webapp/TestRMWebServicesCapacitySchedDynamicConfigWeightMode.java
@@ -24,6 +24,7 @@
 import org.apache.hadoop.yarn.server.resourcemanager.ResourceManager;
 import org.apache.hadoop.yarn.server.resourcemanager.scheduler.ResourceScheduler;
 import org.apache.hadoop.yarn.server.resourcemanager.scheduler.fifo.FifoScheduler;
+import org.apache.hadoop.yarn.server.resourcemanager.webapp.jsonprovider.JsonProviderFeature;
 import org.apache.hadoop.yarn.server.resourcemanager.webapp.reader.ApplicationSubmissionContextInfoReader;
 import org.apache.hadoop.yarn.server.resourcemanager.webapp.writer.ApplicationSubmissionContextInfoWriter;
 import org.apache.hadoop.yarn.webapp.GenericExceptionHandler;
@@ -93,7 +94,8 @@ protected Application configure() {
     config.register(ApplicationSubmissionContextInfoWriter.class);
     config.register(ApplicationSubmissionContextInfoReader.class);
     config.register(TestRMWebServicesAppsModification.TestRMCustomAuthFilter.class);
-    config.register(new JettisonFeature()).register(JAXBContextResolver.class);
+    config.register(JsonProviderFeature.class);
+    config.register(JAXBContextResolver.class);
     return config;
   }
 
diff --git a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/webapp/TestRMWebServicesCapacitySchedDynamicConfigWeightModeDQC.java b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/webapp/TestRMWebServicesCapacitySchedDynamicConfigWeightModeDQC.java
index 563d888a5752c..333a6e95cdcbd 100644
--- a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/webapp/TestRMWebServicesCapacitySchedDynamicConfigWeightModeDQC.java
+++ b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/webapp/TestRMWebServicesCapacitySchedDynamicConfigWeightModeDQC.java
@@ -26,6 +26,7 @@
 import org.apache.hadoop.yarn.server.resourcemanager.scheduler.capacity.CapacityScheduler;
 import org.apache.hadoop.yarn.server.resourcemanager.scheduler.capacity.CapacitySchedulerQueueManager;
 import org.apache.hadoop.yarn.server.resourcemanager.scheduler.capacity.QueuePath;
+import org.apache.hadoop.yarn.server.resourcemanager.webapp.jsonprovider.JsonProviderFeature;
 import org.apache.hadoop.yarn.server.resourcemanager.webapp.reader.ApplicationSubmissionContextInfoReader;
 import org.apache.hadoop.yarn.server.resourcemanager.webapp.writer.ApplicationSubmissionContextInfoWriter;
 import org.apache.hadoop.yarn.webapp.GenericExceptionHandler;
@@ -104,7 +105,8 @@ protected Application configure() {
     config.register(ApplicationSubmissionContextInfoWriter.class);
     config.register(ApplicationSubmissionContextInfoReader.class);
     config.register(TestRMWebServicesAppsModification.TestRMCustomAuthFilter.class);
-    config.register(new JettisonFeature()).register(JAXBContextResolver.class);
+    config.register(JsonProviderFeature.class);
+    config.register(JAXBContextResolver.class);
     return config;
   }
 
diff --git a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/webapp/TestRMWebServicesCapacitySchedLegacyQueueCreation.java b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/webapp/TestRMWebServicesCapacitySchedLegacyQueueCreation.java
index 2b00bb99c469d..561ce51d2bc38 100644
--- a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/webapp/TestRMWebServicesCapacitySchedLegacyQueueCreation.java
+++ b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/webapp/TestRMWebServicesCapacitySchedLegacyQueueCreation.java
@@ -31,6 +31,7 @@
 import org.apache.hadoop.conf.Configuration;
 import org.apache.hadoop.yarn.conf.YarnConfiguration;
 import org.apache.hadoop.yarn.server.resourcemanager.ResourceManager;
+import org.apache.hadoop.yarn.server.resourcemanager.webapp.jsonprovider.JsonProviderFeature;
 import org.apache.hadoop.yarn.server.resourcemanager.webapp.reader.ApplicationSubmissionContextInfoReader;
 import org.apache.hadoop.yarn.server.resourcemanager.webapp.writer.ApplicationSubmissionContextInfoWriter;
 import org.apache.hadoop.yarn.webapp.GenericExceptionHandler;
@@ -73,7 +74,8 @@ protected Application configure() {
     config.register(ApplicationSubmissionContextInfoWriter.class);
     config.register(ApplicationSubmissionContextInfoReader.class);
     config.register(TestRMWebServicesAppsModification.TestRMCustomAuthFilter.class);
-    config.register(new JettisonFeature()).register(JAXBContextResolver.class);
+    config.register(JsonProviderFeature.class);
+    config.register(JAXBContextResolver.class);
     return config;
   }
 
diff --git a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/webapp/TestRMWebServicesCapacitySchedLegacyQueueCreationAbsoluteMode.java b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/webapp/TestRMWebServicesCapacitySchedLegacyQueueCreationAbsoluteMode.java
index ee85faa00c5ac..87b4171fc5ec4 100644
--- a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/webapp/TestRMWebServicesCapacitySchedLegacyQueueCreationAbsoluteMode.java
+++ b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/webapp/TestRMWebServicesCapacitySchedLegacyQueueCreationAbsoluteMode.java
@@ -25,6 +25,7 @@
 import org.apache.hadoop.yarn.server.resourcemanager.scheduler.capacity.CapacityScheduler;
 import org.apache.hadoop.yarn.server.resourcemanager.scheduler.capacity.CapacitySchedulerQueueManager;
 import org.apache.hadoop.yarn.server.resourcemanager.scheduler.capacity.QueuePath;
+import org.apache.hadoop.yarn.server.resourcemanager.webapp.jsonprovider.JsonProviderFeature;
 import org.apache.hadoop.yarn.webapp.GenericExceptionHandler;
 import org.apache.hadoop.yarn.webapp.JerseyTestBase;
 import org.glassfish.jersey.internal.inject.AbstractBinder;
@@ -72,7 +73,7 @@ protected Application configure() {
     config.register(new JerseyBinder());
     config.register(GenericExceptionHandler.class);
     config.register(TestRMWebServicesAppsModification.TestRMCustomAuthFilter.class);
-    config.register(new JettisonFeature()).register(JAXBContextResolver.class);
+    config.register(JsonProviderFeature.class);
     forceSet(TestProperties.CONTAINER_PORT, JERSEY_RANDOM_PORT);
     return config;
   }
diff --git a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/webapp/TestRMWebServicesCapacitySchedulerConfigMutation.java b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/webapp/TestRMWebServicesCapacitySchedulerConfigMutation.java
index a470bcb8c077d..773e81dfaeee5 100644
--- a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/webapp/TestRMWebServicesCapacitySchedulerConfigMutation.java
+++ b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/webapp/TestRMWebServicesCapacitySchedulerConfigMutation.java
@@ -36,6 +36,7 @@
 import org.apache.hadoop.yarn.conf.YarnConfiguration;
 import org.apache.hadoop.yarn.server.resourcemanager.ResourceManager;
 import org.apache.hadoop.yarn.server.resourcemanager.scheduler.capacity.CapacitySchedulerConfiguration;
+import org.apache.hadoop.yarn.server.resourcemanager.webapp.jsonprovider.JsonProviderFeature;
 import org.apache.hadoop.yarn.server.resourcemanager.webapp.reader.ApplicationSubmissionContextInfoReader;
 import org.apache.hadoop.yarn.server.resourcemanager.webapp.writer.ApplicationSubmissionContextInfoWriter;
 import org.apache.hadoop.yarn.server.resourcemanager.webapp.writer.SchedConfUpdateInfoWriter;
@@ -83,11 +84,9 @@ protected Application configure() {
     config.register(RMWebServices.class);
     config.register(new JerseyBinder());
     config.register(GenericExceptionHandler.class);
-    config.register(ApplicationSubmissionContextInfoWriter.class);
-    config.register(SchedConfUpdateInfoWriter.class);
-    config.register(ApplicationSubmissionContextInfoReader.class);
     config.register(TestRMWebServicesAppsModification.TestRMCustomAuthFilter.class);
-    config.register(new JettisonFeature()).register(JAXBContextResolver.class);
+    config.register(JsonProviderFeature.class);
+    config.register(JAXBContextResolver.class);
     return config;
   }
 
@@ -161,7 +160,7 @@ public void testUpdateAbsoluteHierarchyWithZeroCapacities(boolean pLegacyQueueMo
     QueueConfigInfo b = new QueueConfigInfo("root.a", capacityChange);
     updateInfo.getUpdateQueueInfo().add(b);
 
-    Response response = target().register(SchedConfUpdateInfoWriter.class)
+    Response response = target()
         .path("ws/v1/cluster/scheduler-conf")
         .queryParam("user.name", userName)
         .request(MediaType.APPLICATION_JSON)
diff --git a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/webapp/TestRMWebServicesCapacitySchedulerMixedMode.java b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/webapp/TestRMWebServicesCapacitySchedulerMixedMode.java
index 8141cee7e81b8..4034d3ded9610 100644
--- a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/webapp/TestRMWebServicesCapacitySchedulerMixedMode.java
+++ b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/webapp/TestRMWebServicesCapacitySchedulerMixedMode.java
@@ -24,6 +24,7 @@
 import org.apache.hadoop.conf.Configuration;
 import org.apache.hadoop.yarn.server.resourcemanager.MockRM;
 import org.apache.hadoop.yarn.server.resourcemanager.ResourceManager;
+import org.apache.hadoop.yarn.server.resourcemanager.webapp.jsonprovider.JsonProviderFeature;
 import org.apache.hadoop.yarn.webapp.GenericExceptionHandler;
 import org.apache.hadoop.yarn.webapp.JerseyTestBase;
 import org.glassfish.jersey.internal.inject.AbstractBinder;
@@ -79,7 +80,8 @@ protected Application configure() {
     config.register(new JerseyBinder());
     config.register(GenericExceptionHandler.class);
     config.register(TestRMWebServicesAppsModification.TestRMCustomAuthFilter.class);
-    config.register(new JettisonFeature()).register(JAXBContextResolver.class);
+    config.register(JsonProviderFeature.class);
+    config.register(JAXBContextResolver.class);
     return config;
   }
 
diff --git a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/webapp/TestRMWebServicesCapacitySchedulerMixedModeAbsoluteAndPercentage.java b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/webapp/TestRMWebServicesCapacitySchedulerMixedModeAbsoluteAndPercentage.java
index 4782b44c1275a..dea9d31ee7779 100644
--- a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/webapp/TestRMWebServicesCapacitySchedulerMixedModeAbsoluteAndPercentage.java
+++ b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/webapp/TestRMWebServicesCapacitySchedulerMixedModeAbsoluteAndPercentage.java
@@ -20,6 +20,7 @@
 import org.apache.hadoop.conf.Configuration;
 import org.apache.hadoop.yarn.server.resourcemanager.MockRM;
 import org.apache.hadoop.yarn.server.resourcemanager.ResourceManager;
+import org.apache.hadoop.yarn.server.resourcemanager.webapp.jsonprovider.JsonProviderFeature;
 import org.apache.hadoop.yarn.webapp.GenericExceptionHandler;
 import org.apache.hadoop.yarn.webapp.JerseyTestBase;
 import org.glassfish.jersey.internal.inject.AbstractBinder;
@@ -79,7 +80,8 @@ protected Application configure() {
     config.register(new JerseyBinder());
     config.register(GenericExceptionHandler.class);
     config.register(TestRMWebServicesAppsModification.TestRMCustomAuthFilter.class);
-    config.register(new JettisonFeature()).register(JAXBContextResolver.class);
+    config.register(JsonProviderFeature.class);
+    config.register(JAXBContextResolver.class);
     return config;
   }
 
diff --git a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/webapp/TestRMWebServicesCapacitySchedulerMixedModeAbsoluteAndPercentageAndWeight.java b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/webapp/TestRMWebServicesCapacitySchedulerMixedModeAbsoluteAndPercentageAndWeight.java
index a300c10f33f30..2d4325fd4344c 100644
--- a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/webapp/TestRMWebServicesCapacitySchedulerMixedModeAbsoluteAndPercentageAndWeight.java
+++ b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/webapp/TestRMWebServicesCapacitySchedulerMixedModeAbsoluteAndPercentageAndWeight.java
@@ -20,6 +20,7 @@
 import org.apache.hadoop.conf.Configuration;
 import org.apache.hadoop.yarn.server.resourcemanager.MockRM;
 import org.apache.hadoop.yarn.server.resourcemanager.ResourceManager;
+import org.apache.hadoop.yarn.server.resourcemanager.webapp.jsonprovider.JsonProviderFeature;
 import org.apache.hadoop.yarn.webapp.GenericExceptionHandler;
 import org.apache.hadoop.yarn.webapp.JerseyTestBase;
 import org.glassfish.jersey.internal.inject.AbstractBinder;
@@ -78,7 +79,8 @@ protected Application configure() {
     config.register(new JerseyBinder());
     config.register(GenericExceptionHandler.class);
     config.register(TestRMWebServicesAppsModification.TestRMCustomAuthFilter.class);
-    config.register(new JettisonFeature()).register(JAXBContextResolver.class);
+    config.register(JsonProviderFeature.class);
+    config.register(JAXBContextResolver.class);
     return config;
   }
 
diff --git a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/webapp/TestRMWebServicesCapacitySchedulerMixedModeAbsoluteAndPercentageAndWeightVector.java b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/webapp/TestRMWebServicesCapacitySchedulerMixedModeAbsoluteAndPercentageAndWeightVector.java
index a1cc259060e38..22ab95418f33c 100644
--- a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/webapp/TestRMWebServicesCapacitySchedulerMixedModeAbsoluteAndPercentageAndWeightVector.java
+++ b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/webapp/TestRMWebServicesCapacitySchedulerMixedModeAbsoluteAndPercentageAndWeightVector.java
@@ -20,6 +20,7 @@
 import org.apache.hadoop.conf.Configuration;
 import org.apache.hadoop.yarn.server.resourcemanager.MockRM;
 import org.apache.hadoop.yarn.server.resourcemanager.ResourceManager;
+import org.apache.hadoop.yarn.server.resourcemanager.webapp.jsonprovider.JsonProviderFeature;
 import org.apache.hadoop.yarn.webapp.GenericExceptionHandler;
 import org.apache.hadoop.yarn.webapp.JerseyTestBase;
 import org.glassfish.jersey.internal.inject.AbstractBinder;
@@ -78,7 +79,8 @@ protected Application configure() {
     config.register(new JerseyBinder());
     config.register(GenericExceptionHandler.class);
     config.register(TestRMWebServicesAppsModification.TestRMCustomAuthFilter.class);
-    config.register(new JettisonFeature()).register(JAXBContextResolver.class);
+    config.register(JsonProviderFeature.class);
+    config.register(JAXBContextResolver.class);
     return config;
   }
 
diff --git a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/webapp/TestRMWebServicesCapacitySchedulerMixedModeAbsoluteAndPercentageVector.java b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/webapp/TestRMWebServicesCapacitySchedulerMixedModeAbsoluteAndPercentageVector.java
index 0829f24d545ff..89aee88f92d4c 100644
--- a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/webapp/TestRMWebServicesCapacitySchedulerMixedModeAbsoluteAndPercentageVector.java
+++ b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/webapp/TestRMWebServicesCapacitySchedulerMixedModeAbsoluteAndPercentageVector.java
@@ -20,6 +20,7 @@
 import org.apache.hadoop.conf.Configuration;
 import org.apache.hadoop.yarn.server.resourcemanager.MockRM;
 import org.apache.hadoop.yarn.server.resourcemanager.ResourceManager;
+import org.apache.hadoop.yarn.server.resourcemanager.webapp.jsonprovider.JsonProviderFeature;
 import org.apache.hadoop.yarn.webapp.GenericExceptionHandler;
 import org.apache.hadoop.yarn.webapp.JerseyTestBase;
 import org.glassfish.jersey.internal.inject.AbstractBinder;
@@ -78,7 +79,8 @@ protected Application configure() {
     config.register(new JerseyBinder());
     config.register(GenericExceptionHandler.class);
     config.register(TestRMWebServicesAppsModification.TestRMCustomAuthFilter.class);
-    config.register(new JettisonFeature()).register(JAXBContextResolver.class);
+    config.register(JsonProviderFeature.class);
+    config.register(JAXBContextResolver.class);
     return config;
   }
 
diff --git a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/webapp/TestRMWebServicesCapacitySchedulerMixedModeAbsoluteAndWeight.java b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/webapp/TestRMWebServicesCapacitySchedulerMixedModeAbsoluteAndWeight.java
index 40cc024052d3a..aba0732574c79 100644
--- a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/webapp/TestRMWebServicesCapacitySchedulerMixedModeAbsoluteAndWeight.java
+++ b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/webapp/TestRMWebServicesCapacitySchedulerMixedModeAbsoluteAndWeight.java
@@ -20,6 +20,7 @@
 import org.apache.hadoop.conf.Configuration;
 import org.apache.hadoop.yarn.server.resourcemanager.MockRM;
 import org.apache.hadoop.yarn.server.resourcemanager.ResourceManager;
+import org.apache.hadoop.yarn.server.resourcemanager.webapp.jsonprovider.JsonProviderFeature;
 import org.apache.hadoop.yarn.webapp.GenericExceptionHandler;
 import org.apache.hadoop.yarn.webapp.JerseyTestBase;
 import org.glassfish.jersey.internal.inject.AbstractBinder;
@@ -78,7 +79,8 @@ protected Application configure() {
     config.register(new JerseyBinder());
     config.register(GenericExceptionHandler.class);
     config.register(TestRMWebServicesAppsModification.TestRMCustomAuthFilter.class);
-    config.register(new JettisonFeature()).register(JAXBContextResolver.class);
+    config.register(JsonProviderFeature.class);
+    config.register(JAXBContextResolver.class);
     return config;
   }
 
diff --git a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/webapp/TestRMWebServicesCapacitySchedulerMixedModeAbsoluteAndWeightVector.java b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/webapp/TestRMWebServicesCapacitySchedulerMixedModeAbsoluteAndWeightVector.java
index 71c2cb5bb69b2..968c48ed3abcc 100644
--- a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/webapp/TestRMWebServicesCapacitySchedulerMixedModeAbsoluteAndWeightVector.java
+++ b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/webapp/TestRMWebServicesCapacitySchedulerMixedModeAbsoluteAndWeightVector.java
@@ -20,6 +20,7 @@
 import org.apache.hadoop.conf.Configuration;
 import org.apache.hadoop.yarn.server.resourcemanager.MockRM;
 import org.apache.hadoop.yarn.server.resourcemanager.ResourceManager;
+import org.apache.hadoop.yarn.server.resourcemanager.webapp.jsonprovider.JsonProviderFeature;
 import org.apache.hadoop.yarn.webapp.GenericExceptionHandler;
 import org.apache.hadoop.yarn.webapp.JerseyTestBase;
 import org.glassfish.jersey.internal.inject.AbstractBinder;
@@ -78,7 +79,8 @@ protected Application configure() {
     config.register(new JerseyBinder());
     config.register(GenericExceptionHandler.class);
     config.register(TestRMWebServicesAppsModification.TestRMCustomAuthFilter.class);
-    config.register(new JettisonFeature()).register(JAXBContextResolver.class);
+    config.register(JsonProviderFeature.class);
+    config.register(JAXBContextResolver.class);
     return config;
   }
 
diff --git a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/webapp/TestRMWebServicesCapacitySchedulerMixedModePercentageAndWeight.java b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/webapp/TestRMWebServicesCapacitySchedulerMixedModePercentageAndWeight.java
index 25ba549f7f22e..6c202dbea6c7d 100644
--- a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/webapp/TestRMWebServicesCapacitySchedulerMixedModePercentageAndWeight.java
+++ b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/webapp/TestRMWebServicesCapacitySchedulerMixedModePercentageAndWeight.java
@@ -20,6 +20,7 @@
 import org.apache.hadoop.conf.Configuration;
 import org.apache.hadoop.yarn.server.resourcemanager.MockRM;
 import org.apache.hadoop.yarn.server.resourcemanager.ResourceManager;
+import org.apache.hadoop.yarn.server.resourcemanager.webapp.jsonprovider.JsonProviderFeature;
 import org.apache.hadoop.yarn.webapp.GenericExceptionHandler;
 import org.apache.hadoop.yarn.webapp.JerseyTestBase;
 import org.glassfish.jersey.internal.inject.AbstractBinder;
@@ -77,7 +78,8 @@ protected Application configure() {
     config.register(new JerseyBinder());
     config.register(GenericExceptionHandler.class);
     config.register(TestRMWebServicesAppsModification.TestRMCustomAuthFilter.class);
-    config.register(new JettisonFeature()).register(JAXBContextResolver.class);
+    config.register(JsonProviderFeature.class);
+    config.register(JAXBContextResolver.class);
     return config;
   }
 
diff --git a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/webapp/TestRMWebServicesCapacitySchedulerMixedModePercentageAndWeightVector.java b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/webapp/TestRMWebServicesCapacitySchedulerMixedModePercentageAndWeightVector.java
index 058acf8080b06..96a419a339130 100644
--- a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/webapp/TestRMWebServicesCapacitySchedulerMixedModePercentageAndWeightVector.java
+++ b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/webapp/TestRMWebServicesCapacitySchedulerMixedModePercentageAndWeightVector.java
@@ -20,6 +20,7 @@
 import org.apache.hadoop.conf.Configuration;
 import org.apache.hadoop.yarn.server.resourcemanager.MockRM;
 import org.apache.hadoop.yarn.server.resourcemanager.ResourceManager;
+import org.apache.hadoop.yarn.server.resourcemanager.webapp.jsonprovider.JsonProviderFeature;
 import org.apache.hadoop.yarn.webapp.GenericExceptionHandler;
 import org.apache.hadoop.yarn.webapp.JerseyTestBase;
 import org.glassfish.jersey.internal.inject.AbstractBinder;
@@ -78,7 +79,8 @@ protected Application configure() {
     config.register(new JerseyBinder());
     config.register(GenericExceptionHandler.class);
     config.register(TestRMWebServicesAppsModification.TestRMCustomAuthFilter.class);
-    config.register(new JettisonFeature()).register(JAXBContextResolver.class);
+    config.register(JsonProviderFeature.class);
+    config.register(JAXBContextResolver.class);
     return config;
   }
 
diff --git a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/webapp/TestRMWebServicesConfigurationMutation.java b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/webapp/TestRMWebServicesConfigurationMutation.java
index 5ddaf054be4e8..bd11e1accdc2f 100644
--- a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/webapp/TestRMWebServicesConfigurationMutation.java
+++ b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/webapp/TestRMWebServicesConfigurationMutation.java
@@ -19,7 +19,6 @@
 package org.apache.hadoop.yarn.server.resourcemanager.webapp;
 
 import org.glassfish.jersey.internal.inject.AbstractBinder;
-import org.glassfish.jersey.jettison.JettisonFeature;
 import org.glassfish.jersey.server.ResourceConfig;
 import org.apache.hadoop.conf.Configuration;
 import org.apache.hadoop.http.JettyUtils;
@@ -36,8 +35,8 @@
 import org.apache.hadoop.yarn.server.resourcemanager.scheduler.capacity.QueuePrefixes;
 import org.apache.hadoop.yarn.server.resourcemanager.webapp.dao.NodeLabelInfo;
 import org.apache.hadoop.yarn.server.resourcemanager.webapp.dao.NodeLabelsInfo;
+import org.apache.hadoop.yarn.server.resourcemanager.webapp.jsonprovider.JsonProviderFeature;
 import org.apache.hadoop.yarn.server.resourcemanager.webapp.reader.NodeLabelsInfoReader;
-import org.apache.hadoop.yarn.server.resourcemanager.webapp.writer.SchedConfUpdateInfoWriter;
 import org.apache.hadoop.yarn.webapp.GenericExceptionHandler;
 import org.apache.hadoop.yarn.webapp.JerseyTestBase;
 import org.apache.hadoop.yarn.webapp.dao.QueueConfigInfo;
@@ -75,7 +74,7 @@
 import static org.apache.hadoop.yarn.server.resourcemanager.webapp.TestWebServiceUtil.getCapacitySchedulerConfigFileInTarget;
 import static org.apache.hadoop.yarn.server.resourcemanager.webapp.TestWebServiceUtil.backupSchedulerConfigFileInTarget;
 import static org.apache.hadoop.yarn.server.resourcemanager.webapp.TestWebServiceUtil.restoreSchedulerConfigFileInTarget;
-import static org.apache.hadoop.yarn.server.resourcemanager.webapp.TestWebServiceUtil.toJson;
+import static org.apache.hadoop.yarn.server.resourcemanager.webapp.TestWebServiceUtil.toJsonNoRoot;
 import static org.junit.jupiter.api.Assertions.assertEquals;
 import static org.junit.jupiter.api.Assertions.assertNull;
 import static org.junit.jupiter.api.Assertions.assertNotNull;
@@ -112,7 +111,8 @@ protected Application configure() {
     config.register(GenericExceptionHandler.class);
     config.register(NodeLabelsInfoReader.class);
     config.register(TestRMWebServicesAppsModification.TestRMCustomAuthFilter.class);
-    config.register(new JettisonFeature()).register(JAXBContextResolver.class);
+    config.register(JsonProviderFeature.class);
+    config.register(JAXBContextResolver.class);
     return config;
   }
 
@@ -207,8 +207,7 @@ private CapacitySchedulerConfiguration getSchedulerConf()
             .request(MediaType.APPLICATION_JSON)
             .get(Response.class);
     assertEquals(Status.OK.getStatusCode(), response.getStatus());
-    JSONObject json = response.readEntity(JSONObject.class).
-        getJSONObject("configuration");
+    JSONObject json = response.readEntity(JSONObject.class);
     JSONArray items = (JSONArray) json.get("property");
     CapacitySchedulerConfiguration parsedConf =
         new CapacitySchedulerConfiguration();
@@ -248,7 +247,7 @@ public void testFormatSchedulerConf() throws Exception {
     updateInfo.getUpdateQueueInfo().add(stoppedInfo);
 
     // Add a queue root.formattest to the existing three queues
-    WebTarget r = target().register(SchedConfUpdateInfoWriter.class);
+    WebTarget r = target();
     Response response = r.path("ws").path("v1").path("cluster")
         .path("scheduler-conf").queryParam("user.name", userName)
         .request(MediaType.APPLICATION_JSON)
@@ -293,7 +292,7 @@ public void testAddNestedQueue() throws Exception {
     assertNotNull(orgConf);
     assertEquals(4, orgConf.getQueues(ROOT).size());
 
-    WebTarget r = target().register(SchedConfUpdateInfoWriter.class);
+    WebTarget r = target();
 
     Response response;
 
@@ -338,7 +337,7 @@ public void testAddNestedQueue() throws Exception {
 
   @Test
   public void testAddWithUpdate() throws Exception {
-    WebTarget r = target().register(SchedConfUpdateInfoWriter.class);
+    WebTarget r = target();
 
     Response response;
 
@@ -368,7 +367,7 @@ public void testAddWithUpdate() throws Exception {
 
   @Test
   public void testUnsetParentQueueOrderingPolicy() throws Exception {
-    WebTarget r = target().register(SchedConfUpdateInfoWriter.class);
+    WebTarget r = target();
     Response response;
 
     // Update ordering policy of Leaf Queue root.b to fair
@@ -415,7 +414,7 @@ public void testUnsetParentQueueOrderingPolicy() throws Exception {
 
   @Test
   public void testUnsetLeafQueueOrderingPolicy() throws Exception {
-    WebTarget r = target().register(SchedConfUpdateInfoWriter.class);
+    WebTarget r = target();
     Response response;
 
     // Update ordering policy of Parent Queue root.c to priority-utilization
@@ -459,7 +458,7 @@ public void testUnsetLeafQueueOrderingPolicy() throws Exception {
 
   @Test
   public void testRemoveQueue() throws Exception {
-    WebTarget r = target().register(SchedConfUpdateInfoWriter.class);
+    WebTarget r = target();
 
     Response response;
 
@@ -485,7 +484,7 @@ public void testRemoveQueue() throws Exception {
 
   @Test
   public void testStopWithRemoveQueue() throws Exception {
-    WebTarget r = target().register(SchedConfUpdateInfoWriter.class);
+    WebTarget r = target();
 
     Response response;
 
@@ -514,7 +513,7 @@ public void testStopWithRemoveQueue() throws Exception {
 
   @Test
   public void testRemoveQueueWhichHasQueueMapping() throws Exception {
-    WebTarget r = target().register(SchedConfUpdateInfoWriter.class);
+    WebTarget r = target();
 
     Response response;
     CapacityScheduler cs = (CapacityScheduler) rm.getResourceScheduler();
@@ -553,7 +552,7 @@ public void testRemoveQueueWhichHasQueueMapping() throws Exception {
 
   @Test
   public void testStopWithConvertLeafToParentQueue() throws Exception {
-    WebTarget r = target().register(SchedConfUpdateInfoWriter.class);
+    WebTarget r = target();
     Response response;
 
     // Set state of queues to STOPPED.
@@ -584,7 +583,7 @@ public void testStopWithConvertLeafToParentQueue() throws Exception {
 
   @Test
   public void testRemoveParentQueue() throws Exception {
-    WebTarget r = target().register(SchedConfUpdateInfoWriter.class);
+    WebTarget r = target();
 
     Response response;
 
@@ -607,7 +606,7 @@ public void testRemoveParentQueue() throws Exception {
 
   @Test
   public void testRemoveParentQueueWithCapacity() throws Exception {
-    WebTarget r = target().register(SchedConfUpdateInfoWriter.class);
+    WebTarget r = target();
 
     Response response;
 
@@ -637,7 +636,7 @@ public void testRemoveParentQueueWithCapacity() throws Exception {
 
   @Test
   public void testRemoveMultipleQueues() throws Exception {
-    WebTarget r = target().register(SchedConfUpdateInfoWriter.class);
+    WebTarget r = target();
 
     Response response;
 
@@ -664,7 +663,7 @@ public void testRemoveMultipleQueues() throws Exception {
   }
 
   private void stopQueue(QueuePath... queuePaths) throws Exception {
-    WebTarget r = target().register(SchedConfUpdateInfoWriter.class);
+    WebTarget r = target();
 
     Response response;
 
@@ -692,7 +691,7 @@ private void stopQueue(QueuePath... queuePaths) throws Exception {
 
   @Test
   public void testUpdateQueue() throws Exception {
-    WebTarget r = target().register(SchedConfUpdateInfoWriter.class);
+    WebTarget r = target();
 
     Response response;
 
@@ -743,7 +742,7 @@ public void testUpdateQueue() throws Exception {
 
   @Test
   public void testUpdateQueueCapacity() throws Exception {
-    WebTarget r = target().register(SchedConfUpdateInfoWriter.class);
+    WebTarget r = target();
 
     Response response;
 
@@ -770,7 +769,7 @@ public void testUpdateQueueCapacity() throws Exception {
 
   @Test
   public void testGlobalConfChange() throws Exception {
-    WebTarget r = target().register(SchedConfUpdateInfoWriter.class);
+    WebTarget r = target();
 
     Response response;
 
@@ -805,9 +804,10 @@ public void testGlobalConfChange() throws Exception {
         newCSConf.getMaximumSystemApplications());
   }
 
+  //TODO: fix, some missing label
   @Test
   public void testNodeLabelRemovalResidualConfigsAreCleared() throws Exception {
-    WebTarget r = target().register(NodeLabelsInfoReader.class);
+    WebTarget r = target();
     Response response;
 
     // 1. Create Node Label: label1
@@ -824,7 +824,7 @@ public void testNodeLabelRemovalResidualConfigsAreCleared() throws Exception {
     response = addNodeLabelsResource.queryParam("user.name", userName)
         .request(MediaType.APPLICATION_JSON)
         .post(Entity.entity(logAndReturnJson(addNodeLabelsResource,
-        toJson(nodeLabelsInfo, NodeLabelsInfo.class)), MediaType.APPLICATION_JSON), Response.class);
+        toJsonNoRoot(nodeLabelsInfo, NodeLabelsInfo.class)), MediaType.APPLICATION_JSON), Response.class);
 
     // 2. Verify new Node Label
     response = getNodeLabelsResource.queryParam("user.name", userName)
@@ -854,7 +854,7 @@ public void testNodeLabelRemovalResidualConfigsAreCleared() throws Exception {
     response = schedulerConfResource
         .queryParam("user.name", userName)
         .request(MediaType.APPLICATION_JSON)
-        .put(Entity.entity(logAndReturnJson(schedulerConfResource, toJson(updateInfo,
+        .put(Entity.entity(logAndReturnJson(schedulerConfResource, toJsonNoRoot(updateInfo,
         SchedConfUpdateInfo.class)), MediaType.APPLICATION_JSON), Response.class);
     assertEquals(Status.OK.getStatusCode(), response.getStatus());
 
@@ -901,7 +901,7 @@ public void testNodeLabelRemovalResidualConfigsAreCleared() throws Exception {
     response = schedulerConfResource
         .queryParam("user.name", userName)
         .request(MediaType.APPLICATION_JSON)
-        .put(Entity.entity(logAndReturnJson(schedulerConfResource, toJson(updateInfo,
+        .put(Entity.entity(logAndReturnJson(schedulerConfResource, toJsonNoRoot(updateInfo,
         SchedConfUpdateInfo.class)), MediaType.APPLICATION_JSON),
         Response.class);
     assertEquals(Status.OK.getStatusCode(), response.getStatus());
@@ -953,7 +953,7 @@ public void testNodeLabelRemovalResidualConfigsAreCleared() throws Exception {
     response = schedulerConfResource
         .queryParam("user.name", userName)
         .request(MediaType.APPLICATION_JSON)
-        .put(Entity.entity(logAndReturnJson(schedulerConfResource, toJson(updateInfo,
+        .put(Entity.entity(logAndReturnJson(schedulerConfResource, toJsonNoRoot(updateInfo,
         SchedConfUpdateInfo.class)), MediaType.APPLICATION_JSON), Response.class);
     assertEquals(Status.OK.getStatusCode(), response.getStatus());
     assertEquals(Sets.newHashSet("*"),
@@ -1010,7 +1010,7 @@ private String getAccessibleNodeLabelsMaxCapacityPropertyName(String label) {
 
   @Test
   public void testValidateWithClusterMaxAllocation() throws Exception {
-    WebTarget r = target().register(SchedConfUpdateInfoWriter.class);
+    WebTarget r = target();
     int clusterMax = YarnConfiguration.
         DEFAULT_RM_SCHEDULER_MAXIMUM_ALLOCATION_MB * 2;
     conf.setInt(YarnConfiguration.RM_SCHEDULER_MAXIMUM_ALLOCATION_MB,
diff --git a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/webapp/TestRMWebServicesContainers.java b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/webapp/TestRMWebServicesContainers.java
index 4869cdd4c5221..d9158f00a1c33 100644
--- a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/webapp/TestRMWebServicesContainers.java
+++ b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/webapp/TestRMWebServicesContainers.java
@@ -46,6 +46,7 @@
 import org.apache.hadoop.yarn.server.resourcemanager.rmapp.attempt.RMAppAttemptState;
 import org.apache.hadoop.yarn.server.resourcemanager.scheduler.ResourceScheduler;
 import org.apache.hadoop.yarn.server.resourcemanager.scheduler.fifo.FifoScheduler;
+import org.apache.hadoop.yarn.server.resourcemanager.webapp.jsonprovider.JsonProviderFeature;
 import org.apache.hadoop.yarn.server.resourcemanager.webapp.reader.ApplicationSubmissionContextInfoReader;
 import org.apache.hadoop.yarn.server.resourcemanager.webapp.writer.ApplicationSubmissionContextInfoWriter;
 import org.apache.hadoop.yarn.webapp.GenericExceptionHandler;
@@ -75,7 +76,8 @@ protected Application configure() {
     config.register(ApplicationSubmissionContextInfoWriter.class);
     config.register(ApplicationSubmissionContextInfoReader.class);
     config.register(TestRMWebServicesAppsModification.TestRMCustomAuthFilter.class);
-    config.register(new JettisonFeature()).register(JAXBContextResolver.class);
+    config.register(JsonProviderFeature.class);
+    config.register(JAXBContextResolver.class);
     forceSet(TestProperties.CONTAINER_PORT, JERSEY_RANDOM_PORT);
     return config;
   }
diff --git a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/webapp/TestRMWebServicesCustomResourceTypesCommons.java b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/webapp/TestRMWebServicesCustomResourceTypesCommons.java
index 3307056dee150..bbd5a5c71d100 100644
--- a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/webapp/TestRMWebServicesCustomResourceTypesCommons.java
+++ b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/webapp/TestRMWebServicesCustomResourceTypesCommons.java
@@ -93,7 +93,7 @@ public static JSONArray parseResourceRequests(JSONObject info) throws JSONExcept
   }
 
   static int getExpectedNumberOfElements(RMApp app) {
-    int expectedNumberOfElements = 40 + 2; // 2 -> resourceRequests
+    int expectedNumberOfElements = 39 + 2; // 2 -> resourceRequests
     if (app.getApplicationSubmissionContext()
         .getNodeLabelExpression() != null) {
       expectedNumberOfElements++;
diff --git a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/webapp/TestRMWebServicesDelegationTokenAuthentication.java b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/webapp/TestRMWebServicesDelegationTokenAuthentication.java
index c813f477f9d88..37c273aadb666 100644
--- a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/webapp/TestRMWebServicesDelegationTokenAuthentication.java
+++ b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/webapp/TestRMWebServicesDelegationTokenAuthentication.java
@@ -18,7 +18,7 @@
 
 package org.apache.hadoop.yarn.server.resourcemanager.webapp;
 
-import static org.apache.hadoop.yarn.server.resourcemanager.webapp.TestWebServiceUtil.toJson;
+import static org.apache.hadoop.yarn.server.resourcemanager.webapp.TestWebServiceUtil.toJsonNoRoot;
 import static org.junit.jupiter.api.Assertions.assertEquals;
 import static org.junit.jupiter.api.Assertions.assertTrue;
 import static org.junit.jupiter.api.Assertions.fail;
@@ -311,11 +311,11 @@ public void testDelegationTokenOps(String header) throws Exception {
     DelegationToken createRequestToken = new DelegationToken();
     createRequestToken.setRenewer("test");
     String createRequest =
-        toJson(createRequestToken, DelegationToken.class);
+        toJsonNoRoot(createRequestToken, DelegationToken.class);
     DelegationToken renewRequestToken = new DelegationToken();
     renewRequestToken.setToken(token);
     String renewRequest =
-        toJson(renewRequestToken, DelegationToken.class);
+        toJsonNoRoot(renewRequestToken, DelegationToken.class);
 
     // first test create and renew
     String[] requests = { createRequest, renewRequest };
@@ -363,7 +363,7 @@ public Void call() throws Exception {
         String renewer = "renewer";
         DelegationToken token2 = new DelegationToken();
         token2.setRenewer(renewer);
-        String body = toJson(token2, DelegationToken.class);
+        String body = toJsonNoRoot(token2, DelegationToken.class);
         URL url =
             new URL("http://localhost:8088/ws/v1/cluster/delegation-token?doAs=client2");
         HttpURLConnection conn = (HttpURLConnection) url.openConnection();
@@ -374,7 +374,7 @@ public Void call() throws Exception {
         try {
           reader = new BufferedReader(new InputStreamReader(response, StandardCharsets.UTF_8));
           for (String line; (line = reader.readLine()) != null;) {
-            JSONObject obj = new JSONObject(line).getJSONObject("delegation-token");
+            JSONObject obj = new JSONObject(line);
             if (obj.has("token")) {
               token = obj.getString("token");
             }
@@ -399,7 +399,7 @@ public Void call() throws Exception {
     String renewer = "renewer";
     DelegationToken token2 = new DelegationToken();
     token2.setRenewer(renewer);
-    String body = toJson(token2, DelegationToken.class);
+    String body = toJsonNoRoot(token2, DelegationToken.class);
 
     URL url =
         new URL("http://localhost:8088/ws/v1/cluster/delegation-token?doAs=client2");
@@ -445,7 +445,7 @@ public String call() throws Exception {
         String ret = null;
         DelegationToken token = new DelegationToken();
         token.setRenewer(renewer);
-        String body = toJson(token, DelegationToken.class);
+        String body = toJsonNoRoot(token, DelegationToken.class);
         URL url =
             new URL("http://localhost:8088/ws/v1/cluster/delegation-token");
         HttpURLConnection conn = (HttpURLConnection) url.openConnection();
@@ -457,7 +457,7 @@ public String call() throws Exception {
           String line;
           while ((line = reader.readLine()) != null) {
             String dtoken = line;
-            JSONObject obj = new JSONObject(dtoken).getJSONObject("delegation-token");
+            JSONObject obj = new JSONObject(dtoken);
             if (obj.has("token")) {
               reader.close();
               response.close();
diff --git a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/webapp/TestRMWebServicesDelegationTokens.java b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/webapp/TestRMWebServicesDelegationTokens.java
index 45b7cd3952579..3134fadc259ec 100644
--- a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/webapp/TestRMWebServicesDelegationTokens.java
+++ b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/webapp/TestRMWebServicesDelegationTokens.java
@@ -63,6 +63,7 @@
 import org.apache.hadoop.yarn.server.resourcemanager.scheduler.ResourceScheduler;
 import org.apache.hadoop.yarn.server.resourcemanager.scheduler.fifo.FifoScheduler;
 import org.apache.hadoop.yarn.server.resourcemanager.webapp.dao.DelegationToken;
+import org.apache.hadoop.yarn.server.resourcemanager.webapp.jsonprovider.JsonProviderFeature;
 import org.apache.hadoop.yarn.webapp.GenericExceptionHandler;
 import org.apache.hadoop.yarn.webapp.JerseyTestBase;
 import org.apache.hadoop.yarn.webapp.WebServicesTestUtils;
@@ -85,10 +86,9 @@
 
 import static org.mockito.Mockito.mock;
 import static org.mockito.Mockito.when;
-import static org.apache.hadoop.yarn.server.resourcemanager.webapp.TestWebServiceUtil.toJson;
+import static org.apache.hadoop.yarn.server.resourcemanager.webapp.TestWebServiceUtil.toJsonNoRoot;
 import static org.apache.hadoop.yarn.server.resourcemanager.webapp.TestWebServiceUtil.toEntity;
 import org.glassfish.jersey.internal.inject.AbstractBinder;
-import org.glassfish.jersey.jettison.JettisonFeature;
 import org.glassfish.jersey.logging.LoggingFeature;
 import org.glassfish.jersey.server.ResourceConfig;
 
@@ -111,7 +111,8 @@ protected Application configure() {
     config.register(RMWebServices.class);
     config.register(GenericExceptionHandler.class);
     config.register(TestRMWebServicesAppsModification.TestRMCustomAuthFilter.class);
-    config.register(new JettisonFeature()).register(JAXBContextResolver.class);
+    config.register(JsonProviderFeature.class);
+    config.register(JAXBContextResolver.class);
     return config;
   }
 
@@ -278,7 +279,7 @@ public void testCreateDelegationToken(int run) throws Exception {
     final String renewer = "test-renewer";
     DelegationToken token = new DelegationToken();
     token.setRenewer(renewer);
-    String jsonBody = toJson(token, DelegationToken.class);
+    String jsonBody = toJsonNoRoot(token, DelegationToken.class);
     String xmlBody =
         "" + renewer
             + " " + token
@@ -510,7 +511,7 @@ private void verifySimpleAuthRenew(String mediaType, String contentType) throws
       DelegationToken delegationToken = new DelegationToken();
       body = "{\"token\": \"" + token + "\" }";
       delegationToken.setToken("test-123");
-      body = toJson(delegationToken, DelegationToken.class);
+      body = toJsonNoRoot(delegationToken, DelegationToken.class);
     } else {
       body =
           "" + token + " " + token + " 
Date: Wed, 15 Oct 2025 16:47:07 +0200
Subject: [PATCH 02/17] Temporally move from yetus to ayushtkn
---
 dev-support/Jenkinsfile | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/dev-support/Jenkinsfile b/dev-support/Jenkinsfile
index 672061ea09ad9..8cc03dff69d5f 100644
--- a/dev-support/Jenkinsfile
+++ b/dev-support/Jenkinsfile
@@ -55,7 +55,7 @@ pipeline {
     environment {
         YETUS='yetus'
         // Branch or tag name.  Yetus release tags are 'rel/X.Y.Z'
-        YETUS_VERSION='rel/0.14.0'
+        YETUS_VERSION='a7d29a6a72750a0c5c39512f33945e773e69303e'
     }
 
     parameters {
@@ -71,7 +71,7 @@ pipeline {
                     checkout([
                         $class: 'GitSCM',
                         branches: [[name: "${env.YETUS_VERSION}"]],
-                        userRemoteConfigs: [[ url: 'https://github.com/apache/yetus.git']]]
+                        userRemoteConfigs: [[ url: 'https://github.com/ayushtkn/yetus.git']]]
                     )
                 }
             }
From 932565e037d77c3b6bff7710fc83cfae85ab3627 Mon Sep 17 00:00:00 2001
From: K0K0V0K 
Date: Thu, 16 Oct 2025 09:49:01 +0200
Subject: [PATCH 03/17] Fix some test
---
 .../webapp/JAXBContextResolver.java           |   2 -
 .../webapp/TestRMWebServicesApps.java         |   2 +
 .../TestRMWebServicesAppsModification.java    |   7 -
 ...estRMWebServicesConfigurationMutation.java |  13 +-
 ...ServicesDelegationTokenAuthentication.java |  12 +-
 .../TestRMWebServicesDelegationTokens.java    |  10 +-
 .../webapp/TestRMWebServicesReservation.java  |   8 +-
 .../webapp/TestRMWebappAuthentication.java    |   4 +-
 .../webapp/TestWebServiceUtil.java            |  31 +-
 .../webapp/reader/AppStateReader.java         |  71 ---
 .../webapp/dynamic-testPercentageMode-0.json  | 210 ++-----
 .../webapp/dynamic-testPercentageMode-16.json | 210 ++-----
 .../webapp/dynamic-testPercentageMode-32.json | 564 ++++++------------
 .../dynamic-testPercentageMode-legacy-0.json  | 210 ++-----
 14 files changed, 386 insertions(+), 968 deletions(-)
 delete mode 100644 hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/webapp/reader/AppStateReader.java
diff --git a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/webapp/JAXBContextResolver.java b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/webapp/JAXBContextResolver.java
index b4ad232908e82..4fb58449a4a53 100644
--- a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/webapp/JAXBContextResolver.java
+++ b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/webapp/JAXBContextResolver.java
@@ -43,9 +43,7 @@
 @Singleton
 @Provider
 public class JAXBContextResolver implements ContextResolver {
-
   private static final Logger LOG = LoggerFactory.getLogger(JAXBContextResolver.class.getName());
-
   private final Map typesContextMap = new HashMap<>();
 
   public JAXBContextResolver() throws Exception {
diff --git a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/webapp/TestRMWebServicesApps.java b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/webapp/TestRMWebServicesApps.java
index 1d87662332f91..62b4116a52d09 100644
--- a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/webapp/TestRMWebServicesApps.java
+++ b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/webapp/TestRMWebServicesApps.java
@@ -25,6 +25,7 @@
 import org.apache.hadoop.conf.Configuration;
 import org.apache.hadoop.http.JettyUtils;
 import org.apache.hadoop.security.UserGroupInformation;
+import org.apache.hadoop.test.tags.FlakyTest;
 import org.apache.hadoop.util.Sets;
 import org.apache.hadoop.util.XMLUtils;
 import org.apache.hadoop.yarn.api.records.ContainerState;
@@ -69,6 +70,7 @@
 import javax.xml.parsers.DocumentBuilderFactory;
 import java.io.StringReader;
 import java.util.ArrayList;
+import java.util.Arrays;
 import java.util.Set;
 
 import static org.apache.hadoop.yarn.webapp.WebServicesTestUtils.assertResponseStatusCode;
diff --git a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/webapp/TestRMWebServicesAppsModification.java b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/webapp/TestRMWebServicesAppsModification.java
index d5422d3b92615..81783da272df9 100644
--- a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/webapp/TestRMWebServicesAppsModification.java
+++ b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/webapp/TestRMWebServicesAppsModification.java
@@ -25,7 +25,6 @@
 import static org.mockito.Mockito.mock;
 
 import java.io.ByteArrayInputStream;
-import java.io.ByteArrayOutputStream;
 import java.io.DataInputStream;
 import java.io.File;
 import java.io.IOException;
@@ -56,7 +55,6 @@
 import javax.ws.rs.core.Application;
 import javax.ws.rs.core.MediaType;
 import javax.ws.rs.core.Response;
-import javax.xml.bind.JAXBException;
 import javax.xml.parsers.DocumentBuilder;
 import javax.xml.parsers.DocumentBuilderFactory;
 import javax.xml.parsers.ParserConfigurationException;
@@ -106,11 +104,7 @@
 import org.apache.hadoop.yarn.server.resourcemanager.webapp.dao.CredentialsInfo;
 import org.apache.hadoop.yarn.server.resourcemanager.webapp.dao.LocalResourceInfo;
 import org.apache.hadoop.yarn.server.resourcemanager.webapp.dao.LogAggregationContextInfo;
-import org.apache.hadoop.yarn.server.resourcemanager.webapp.jsonprovider.IncludeRootJSONProvider;
 import org.apache.hadoop.yarn.server.resourcemanager.webapp.jsonprovider.JsonProviderFeature;
-import org.apache.hadoop.yarn.server.resourcemanager.webapp.reader.AppStateReader;
-import org.apache.hadoop.yarn.server.resourcemanager.webapp.reader.ApplicationSubmissionContextInfoReader;
-import org.apache.hadoop.yarn.server.resourcemanager.webapp.writer.ApplicationSubmissionContextInfoWriter;
 import org.apache.hadoop.yarn.util.Times;
 import org.apache.hadoop.yarn.webapp.GenericExceptionHandler;
 import org.apache.hadoop.yarn.webapp.JerseyTestBase;
@@ -135,7 +129,6 @@
 import org.glassfish.jersey.jettison.JettisonMarshaller;
 import org.glassfish.jersey.jettison.internal.entity.JettisonObjectProvider.App;
 import org.glassfish.jersey.internal.inject.AbstractBinder;
-import org.glassfish.jersey.jettison.JettisonFeature;
 import org.glassfish.jersey.server.ResourceConfig;
 import org.glassfish.jersey.test.TestProperties;
 import static javax.ws.rs.core.Response.Status.ACCEPTED;
diff --git a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/webapp/TestRMWebServicesConfigurationMutation.java b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/webapp/TestRMWebServicesConfigurationMutation.java
index bd11e1accdc2f..8ffd187d7a494 100644
--- a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/webapp/TestRMWebServicesConfigurationMutation.java
+++ b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/webapp/TestRMWebServicesConfigurationMutation.java
@@ -36,7 +36,6 @@
 import org.apache.hadoop.yarn.server.resourcemanager.webapp.dao.NodeLabelInfo;
 import org.apache.hadoop.yarn.server.resourcemanager.webapp.dao.NodeLabelsInfo;
 import org.apache.hadoop.yarn.server.resourcemanager.webapp.jsonprovider.JsonProviderFeature;
-import org.apache.hadoop.yarn.server.resourcemanager.webapp.reader.NodeLabelsInfoReader;
 import org.apache.hadoop.yarn.webapp.GenericExceptionHandler;
 import org.apache.hadoop.yarn.webapp.JerseyTestBase;
 import org.apache.hadoop.yarn.webapp.dao.QueueConfigInfo;
@@ -74,7 +73,7 @@
 import static org.apache.hadoop.yarn.server.resourcemanager.webapp.TestWebServiceUtil.getCapacitySchedulerConfigFileInTarget;
 import static org.apache.hadoop.yarn.server.resourcemanager.webapp.TestWebServiceUtil.backupSchedulerConfigFileInTarget;
 import static org.apache.hadoop.yarn.server.resourcemanager.webapp.TestWebServiceUtil.restoreSchedulerConfigFileInTarget;
-import static org.apache.hadoop.yarn.server.resourcemanager.webapp.TestWebServiceUtil.toJsonNoRoot;
+import static org.apache.hadoop.yarn.server.resourcemanager.webapp.TestWebServiceUtil.toJson;
 import static org.junit.jupiter.api.Assertions.assertEquals;
 import static org.junit.jupiter.api.Assertions.assertNull;
 import static org.junit.jupiter.api.Assertions.assertNotNull;
@@ -109,7 +108,6 @@ protected Application configure() {
     config.register(RMWebServices.class);
     config.register(new JerseyBinder());
     config.register(GenericExceptionHandler.class);
-    config.register(NodeLabelsInfoReader.class);
     config.register(TestRMWebServicesAppsModification.TestRMCustomAuthFilter.class);
     config.register(JsonProviderFeature.class);
     config.register(JAXBContextResolver.class);
@@ -804,7 +802,6 @@ public void testGlobalConfChange() throws Exception {
         newCSConf.getMaximumSystemApplications());
   }
 
-  //TODO: fix, some missing label
   @Test
   public void testNodeLabelRemovalResidualConfigsAreCleared() throws Exception {
     WebTarget r = target();
@@ -824,7 +821,7 @@ public void testNodeLabelRemovalResidualConfigsAreCleared() throws Exception {
     response = addNodeLabelsResource.queryParam("user.name", userName)
         .request(MediaType.APPLICATION_JSON)
         .post(Entity.entity(logAndReturnJson(addNodeLabelsResource,
-        toJsonNoRoot(nodeLabelsInfo, NodeLabelsInfo.class)), MediaType.APPLICATION_JSON), Response.class);
+        toJson(nodeLabelsInfo, NodeLabelsInfo.class)), MediaType.APPLICATION_JSON), Response.class);
 
     // 2. Verify new Node Label
     response = getNodeLabelsResource.queryParam("user.name", userName)
@@ -854,7 +851,7 @@ public void testNodeLabelRemovalResidualConfigsAreCleared() throws Exception {
     response = schedulerConfResource
         .queryParam("user.name", userName)
         .request(MediaType.APPLICATION_JSON)
-        .put(Entity.entity(logAndReturnJson(schedulerConfResource, toJsonNoRoot(updateInfo,
+        .put(Entity.entity(logAndReturnJson(schedulerConfResource, toJson(updateInfo,
         SchedConfUpdateInfo.class)), MediaType.APPLICATION_JSON), Response.class);
     assertEquals(Status.OK.getStatusCode(), response.getStatus());
 
@@ -901,7 +898,7 @@ public void testNodeLabelRemovalResidualConfigsAreCleared() throws Exception {
     response = schedulerConfResource
         .queryParam("user.name", userName)
         .request(MediaType.APPLICATION_JSON)
-        .put(Entity.entity(logAndReturnJson(schedulerConfResource, toJsonNoRoot(updateInfo,
+        .put(Entity.entity(logAndReturnJson(schedulerConfResource, toJson(updateInfo,
         SchedConfUpdateInfo.class)), MediaType.APPLICATION_JSON),
         Response.class);
     assertEquals(Status.OK.getStatusCode(), response.getStatus());
@@ -953,7 +950,7 @@ public void testNodeLabelRemovalResidualConfigsAreCleared() throws Exception {
     response = schedulerConfResource
         .queryParam("user.name", userName)
         .request(MediaType.APPLICATION_JSON)
-        .put(Entity.entity(logAndReturnJson(schedulerConfResource, toJsonNoRoot(updateInfo,
+        .put(Entity.entity(logAndReturnJson(schedulerConfResource, toJson(updateInfo,
         SchedConfUpdateInfo.class)), MediaType.APPLICATION_JSON), Response.class);
     assertEquals(Status.OK.getStatusCode(), response.getStatus());
     assertEquals(Sets.newHashSet("*"),
diff --git a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/webapp/TestRMWebServicesDelegationTokenAuthentication.java b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/webapp/TestRMWebServicesDelegationTokenAuthentication.java
index 37c273aadb666..aa6a1c1ffd588 100644
--- a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/webapp/TestRMWebServicesDelegationTokenAuthentication.java
+++ b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/webapp/TestRMWebServicesDelegationTokenAuthentication.java
@@ -18,7 +18,7 @@
 
 package org.apache.hadoop.yarn.server.resourcemanager.webapp;
 
-import static org.apache.hadoop.yarn.server.resourcemanager.webapp.TestWebServiceUtil.toJsonNoRoot;
+import static org.apache.hadoop.yarn.server.resourcemanager.webapp.TestWebServiceUtil.toJson;
 import static org.junit.jupiter.api.Assertions.assertEquals;
 import static org.junit.jupiter.api.Assertions.assertTrue;
 import static org.junit.jupiter.api.Assertions.fail;
@@ -311,11 +311,11 @@ public void testDelegationTokenOps(String header) throws Exception {
     DelegationToken createRequestToken = new DelegationToken();
     createRequestToken.setRenewer("test");
     String createRequest =
-        toJsonNoRoot(createRequestToken, DelegationToken.class);
+        toJson(createRequestToken, DelegationToken.class);
     DelegationToken renewRequestToken = new DelegationToken();
     renewRequestToken.setToken(token);
     String renewRequest =
-        toJsonNoRoot(renewRequestToken, DelegationToken.class);
+        toJson(renewRequestToken, DelegationToken.class);
 
     // first test create and renew
     String[] requests = { createRequest, renewRequest };
@@ -363,7 +363,7 @@ public Void call() throws Exception {
         String renewer = "renewer";
         DelegationToken token2 = new DelegationToken();
         token2.setRenewer(renewer);
-        String body = toJsonNoRoot(token2, DelegationToken.class);
+        String body = toJson(token2, DelegationToken.class);
         URL url =
             new URL("http://localhost:8088/ws/v1/cluster/delegation-token?doAs=client2");
         HttpURLConnection conn = (HttpURLConnection) url.openConnection();
@@ -399,7 +399,7 @@ public Void call() throws Exception {
     String renewer = "renewer";
     DelegationToken token2 = new DelegationToken();
     token2.setRenewer(renewer);
-    String body = toJsonNoRoot(token2, DelegationToken.class);
+    String body = toJson(token2, DelegationToken.class);
 
     URL url =
         new URL("http://localhost:8088/ws/v1/cluster/delegation-token?doAs=client2");
@@ -445,7 +445,7 @@ public String call() throws Exception {
         String ret = null;
         DelegationToken token = new DelegationToken();
         token.setRenewer(renewer);
-        String body = toJsonNoRoot(token, DelegationToken.class);
+        String body = toJson(token, DelegationToken.class);
         URL url =
             new URL("http://localhost:8088/ws/v1/cluster/delegation-token");
         HttpURLConnection conn = (HttpURLConnection) url.openConnection();
diff --git a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/webapp/TestRMWebServicesDelegationTokens.java b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/webapp/TestRMWebServicesDelegationTokens.java
index 3134fadc259ec..51aac290b465d 100644
--- a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/webapp/TestRMWebServicesDelegationTokens.java
+++ b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/webapp/TestRMWebServicesDelegationTokens.java
@@ -86,7 +86,7 @@
 
 import static org.mockito.Mockito.mock;
 import static org.mockito.Mockito.when;
-import static org.apache.hadoop.yarn.server.resourcemanager.webapp.TestWebServiceUtil.toJsonNoRoot;
+import static org.apache.hadoop.yarn.server.resourcemanager.webapp.TestWebServiceUtil.toJson;
 import static org.apache.hadoop.yarn.server.resourcemanager.webapp.TestWebServiceUtil.toEntity;
 import org.glassfish.jersey.internal.inject.AbstractBinder;
 import org.glassfish.jersey.logging.LoggingFeature;
@@ -279,7 +279,7 @@ public void testCreateDelegationToken(int run) throws Exception {
     final String renewer = "test-renewer";
     DelegationToken token = new DelegationToken();
     token.setRenewer(renewer);
-    String jsonBody = toJsonNoRoot(token, DelegationToken.class);
+    String jsonBody = toJson(token, DelegationToken.class);
     String xmlBody =
         "" + renewer
             + " " + token
@@ -511,7 +511,7 @@ private void verifySimpleAuthRenew(String mediaType, String contentType) throws
       DelegationToken delegationToken = new DelegationToken();
       body = "{\"token\": \"" + token + "\" }";
       delegationToken.setToken("test-123");
-      body = toJsonNoRoot(delegationToken, DelegationToken.class);
+      body = toJson(delegationToken, DelegationToken.class);
     } else {
       body =
           "" + token + " " + token + "  {
-
-  private JettisonUnmarshaller jsonUnmarshaller;
-
-  public AppStateReader() {
-    try {
-      JettisonJaxbContext jettisonJaxbContext = new JettisonJaxbContext(AppState.class);
-      jsonUnmarshaller = jettisonJaxbContext.createJsonUnmarshaller();
-    } catch (JAXBException e) {
-    }
-  }
-
-  @Override
-  public boolean isReadable(Class> type, Type genericType, Annotation[] annotations,
-      MediaType mediaType) {
-    return type == AppState.class;
-  }
-
-  @Override
-  public AppState readFrom(Class type, Type genericType, Annotation[] annotations,
-      MediaType mediaType, MultivaluedMap httpHeaders, InputStream entityStream)
-      throws IOException, WebApplicationException {
-    try {
-      return jsonUnmarshaller.unmarshalFromJSON(entityStream, AppState.class);
-    } catch (JAXBException e) {
-      throw new IOException(e);
-    }
-  }
-}
diff --git a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/resources/webapp/dynamic-testPercentageMode-0.json b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/resources/webapp/dynamic-testPercentageMode-0.json
index b821aaa14ec39..7febd32875778 100644
--- a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/resources/webapp/dynamic-testPercentageMode-0.json
+++ b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/resources/webapp/dynamic-testPercentageMode-0.json
@@ -91,26 +91,19 @@
                 "vCores" : 0,
                 "resourceInformations" : {
                   "resourceInformation" : [ {
-                    "maximumAllocation" : 9223372036854775807,
-                    "minimumAllocation" : 0,
+                    "maximumAllocation" : 8192,
+                    "minimumAllocation" : 1024,
                     "name" : "memory-mb",
                     "resourceType" : "COUNTABLE",
                     "units" : "Mi",
                     "value" : 0
                   }, {
-                    "maximumAllocation" : 9223372036854775807,
-                    "minimumAllocation" : 0,
+                    "maximumAllocation" : 4,
+                    "minimumAllocation" : 1,
                     "name" : "vcores",
                     "resourceType" : "COUNTABLE",
                     "units" : "",
                     "value" : 0
-                  }, {
-                    "maximumAllocation" : 2147483647,
-                    "minimumAllocation" : 0,
-                    "name" : "yarn.io/gpu",
-                    "resourceType" : "COUNTABLE",
-                    "units" : "",
-                    "value" : 0
                   } ]
                 }
               },
@@ -119,26 +112,19 @@
                 "vCores" : 0,
                 "resourceInformations" : {
                   "resourceInformation" : [ {
-                    "maximumAllocation" : 9223372036854775807,
-                    "minimumAllocation" : 0,
+                    "maximumAllocation" : 8192,
+                    "minimumAllocation" : 1024,
                     "name" : "memory-mb",
                     "resourceType" : "COUNTABLE",
                     "units" : "Mi",
                     "value" : 0
                   }, {
-                    "maximumAllocation" : 9223372036854775807,
-                    "minimumAllocation" : 0,
+                    "maximumAllocation" : 4,
+                    "minimumAllocation" : 1,
                     "name" : "vcores",
                     "resourceType" : "COUNTABLE",
                     "units" : "",
                     "value" : 0
-                  }, {
-                    "maximumAllocation" : 2147483647,
-                    "minimumAllocation" : 0,
-                    "name" : "yarn.io/gpu",
-                    "resourceType" : "COUNTABLE",
-                    "units" : "",
-                    "value" : 0
                   } ]
                 }
               },
@@ -566,26 +552,19 @@
                     "vCores" : 0,
                     "resourceInformations" : {
                       "resourceInformation" : [ {
-                        "maximumAllocation" : 9223372036854775807,
-                        "minimumAllocation" : 0,
+                        "maximumAllocation" : 8192,
+                        "minimumAllocation" : 1024,
                         "name" : "memory-mb",
                         "resourceType" : "COUNTABLE",
                         "units" : "Mi",
                         "value" : 0
                       }, {
-                        "maximumAllocation" : 9223372036854775807,
-                        "minimumAllocation" : 0,
+                        "maximumAllocation" : 4,
+                        "minimumAllocation" : 1,
                         "name" : "vcores",
                         "resourceType" : "COUNTABLE",
                         "units" : "",
                         "value" : 0
-                      }, {
-                        "maximumAllocation" : 2147483647,
-                        "minimumAllocation" : 0,
-                        "name" : "yarn.io/gpu",
-                        "resourceType" : "COUNTABLE",
-                        "units" : "",
-                        "value" : 0
                       } ]
                     }
                   },
@@ -594,26 +573,19 @@
                     "vCores" : 0,
                     "resourceInformations" : {
                       "resourceInformation" : [ {
-                        "maximumAllocation" : 9223372036854775807,
-                        "minimumAllocation" : 0,
+                        "maximumAllocation" : 8192,
+                        "minimumAllocation" : 1024,
                         "name" : "memory-mb",
                         "resourceType" : "COUNTABLE",
                         "units" : "Mi",
                         "value" : 0
                       }, {
-                        "maximumAllocation" : 9223372036854775807,
-                        "minimumAllocation" : 0,
+                        "maximumAllocation" : 4,
+                        "minimumAllocation" : 1,
                         "name" : "vcores",
                         "resourceType" : "COUNTABLE",
                         "units" : "",
                         "value" : 0
-                      }, {
-                        "maximumAllocation" : 2147483647,
-                        "minimumAllocation" : 0,
-                        "name" : "yarn.io/gpu",
-                        "resourceType" : "COUNTABLE",
-                        "units" : "",
-                        "value" : 0
                       } ]
                     }
                   },
@@ -1025,26 +997,19 @@
                     "vCores" : 0,
                     "resourceInformations" : {
                       "resourceInformation" : [ {
-                        "maximumAllocation" : 9223372036854775807,
-                        "minimumAllocation" : 0,
+                        "maximumAllocation" : 8192,
+                        "minimumAllocation" : 1024,
                         "name" : "memory-mb",
                         "resourceType" : "COUNTABLE",
                         "units" : "Mi",
                         "value" : 0
                       }, {
-                        "maximumAllocation" : 9223372036854775807,
-                        "minimumAllocation" : 0,
+                        "maximumAllocation" : 4,
+                        "minimumAllocation" : 1,
                         "name" : "vcores",
                         "resourceType" : "COUNTABLE",
                         "units" : "",
                         "value" : 0
-                      }, {
-                        "maximumAllocation" : 2147483647,
-                        "minimumAllocation" : 0,
-                        "name" : "yarn.io/gpu",
-                        "resourceType" : "COUNTABLE",
-                        "units" : "",
-                        "value" : 0
                       } ]
                     }
                   },
@@ -1053,26 +1018,19 @@
                     "vCores" : 0,
                     "resourceInformations" : {
                       "resourceInformation" : [ {
-                        "maximumAllocation" : 9223372036854775807,
-                        "minimumAllocation" : 0,
+                        "maximumAllocation" : 8192,
+                        "minimumAllocation" : 1024,
                         "name" : "memory-mb",
                         "resourceType" : "COUNTABLE",
                         "units" : "Mi",
                         "value" : 0
                       }, {
-                        "maximumAllocation" : 9223372036854775807,
-                        "minimumAllocation" : 0,
+                        "maximumAllocation" : 4,
+                        "minimumAllocation" : 1,
                         "name" : "vcores",
                         "resourceType" : "COUNTABLE",
                         "units" : "",
                         "value" : 0
-                      }, {
-                        "maximumAllocation" : 2147483647,
-                        "minimumAllocation" : 0,
-                        "name" : "yarn.io/gpu",
-                        "resourceType" : "COUNTABLE",
-                        "units" : "",
-                        "value" : 0
                       } ]
                     }
                   },
@@ -1484,26 +1442,19 @@
                     "vCores" : 0,
                     "resourceInformations" : {
                       "resourceInformation" : [ {
-                        "maximumAllocation" : 9223372036854775807,
-                        "minimumAllocation" : 0,
+                        "maximumAllocation" : 8192,
+                        "minimumAllocation" : 1024,
                         "name" : "memory-mb",
                         "resourceType" : "COUNTABLE",
                         "units" : "Mi",
                         "value" : 0
                       }, {
-                        "maximumAllocation" : 9223372036854775807,
-                        "minimumAllocation" : 0,
+                        "maximumAllocation" : 4,
+                        "minimumAllocation" : 1,
                         "name" : "vcores",
                         "resourceType" : "COUNTABLE",
                         "units" : "",
                         "value" : 0
-                      }, {
-                        "maximumAllocation" : 2147483647,
-                        "minimumAllocation" : 0,
-                        "name" : "yarn.io/gpu",
-                        "resourceType" : "COUNTABLE",
-                        "units" : "",
-                        "value" : 0
                       } ]
                     }
                   },
@@ -1512,26 +1463,19 @@
                     "vCores" : 0,
                     "resourceInformations" : {
                       "resourceInformation" : [ {
-                        "maximumAllocation" : 9223372036854775807,
-                        "minimumAllocation" : 0,
+                        "maximumAllocation" : 8192,
+                        "minimumAllocation" : 1024,
                         "name" : "memory-mb",
                         "resourceType" : "COUNTABLE",
                         "units" : "Mi",
                         "value" : 0
                       }, {
-                        "maximumAllocation" : 9223372036854775807,
-                        "minimumAllocation" : 0,
+                        "maximumAllocation" : 4,
+                        "minimumAllocation" : 1,
                         "name" : "vcores",
                         "resourceType" : "COUNTABLE",
                         "units" : "",
                         "value" : 0
-                      }, {
-                        "maximumAllocation" : 2147483647,
-                        "minimumAllocation" : 0,
-                        "name" : "yarn.io/gpu",
-                        "resourceType" : "COUNTABLE",
-                        "units" : "",
-                        "value" : 0
                       } ]
                     }
                   },
@@ -1929,26 +1873,19 @@
                 "vCores" : 0,
                 "resourceInformations" : {
                   "resourceInformation" : [ {
-                    "maximumAllocation" : 9223372036854775807,
-                    "minimumAllocation" : 0,
+                    "maximumAllocation" : 8192,
+                    "minimumAllocation" : 1024,
                     "name" : "memory-mb",
                     "resourceType" : "COUNTABLE",
                     "units" : "Mi",
                     "value" : 0
                   }, {
-                    "maximumAllocation" : 9223372036854775807,
-                    "minimumAllocation" : 0,
+                    "maximumAllocation" : 4,
+                    "minimumAllocation" : 1,
                     "name" : "vcores",
                     "resourceType" : "COUNTABLE",
                     "units" : "",
                     "value" : 0
-                  }, {
-                    "maximumAllocation" : 2147483647,
-                    "minimumAllocation" : 0,
-                    "name" : "yarn.io/gpu",
-                    "resourceType" : "COUNTABLE",
-                    "units" : "",
-                    "value" : 0
                   } ]
                 }
               },
@@ -1957,26 +1894,19 @@
                 "vCores" : 0,
                 "resourceInformations" : {
                   "resourceInformation" : [ {
-                    "maximumAllocation" : 9223372036854775807,
-                    "minimumAllocation" : 0,
+                    "maximumAllocation" : 8192,
+                    "minimumAllocation" : 1024,
                     "name" : "memory-mb",
                     "resourceType" : "COUNTABLE",
                     "units" : "Mi",
                     "value" : 0
                   }, {
-                    "maximumAllocation" : 9223372036854775807,
-                    "minimumAllocation" : 0,
+                    "maximumAllocation" : 4,
+                    "minimumAllocation" : 1,
                     "name" : "vcores",
                     "resourceType" : "COUNTABLE",
                     "units" : "",
                     "value" : 0
-                  }, {
-                    "maximumAllocation" : 2147483647,
-                    "minimumAllocation" : 0,
-                    "name" : "yarn.io/gpu",
-                    "resourceType" : "COUNTABLE",
-                    "units" : "",
-                    "value" : 0
                   } ]
                 }
               },
@@ -2247,26 +2177,19 @@
                 "vCores" : 0,
                 "resourceInformations" : {
                   "resourceInformation" : [ {
-                    "maximumAllocation" : 9223372036854775807,
-                    "minimumAllocation" : 0,
+                    "maximumAllocation" : 8192,
+                    "minimumAllocation" : 1024,
                     "name" : "memory-mb",
                     "resourceType" : "COUNTABLE",
                     "units" : "Mi",
                     "value" : 0
                   }, {
-                    "maximumAllocation" : 9223372036854775807,
-                    "minimumAllocation" : 0,
+                    "maximumAllocation" : 4,
+                    "minimumAllocation" : 1,
                     "name" : "vcores",
                     "resourceType" : "COUNTABLE",
                     "units" : "",
                     "value" : 0
-                  }, {
-                    "maximumAllocation" : 2147483647,
-                    "minimumAllocation" : 0,
-                    "name" : "yarn.io/gpu",
-                    "resourceType" : "COUNTABLE",
-                    "units" : "",
-                    "value" : 0
                   } ]
                 }
               },
@@ -2275,26 +2198,19 @@
                 "vCores" : 0,
                 "resourceInformations" : {
                   "resourceInformation" : [ {
-                    "maximumAllocation" : 9223372036854775807,
-                    "minimumAllocation" : 0,
+                    "maximumAllocation" : 8192,
+                    "minimumAllocation" : 1024,
                     "name" : "memory-mb",
                     "resourceType" : "COUNTABLE",
                     "units" : "Mi",
                     "value" : 0
                   }, {
-                    "maximumAllocation" : 9223372036854775807,
-                    "minimumAllocation" : 0,
+                    "maximumAllocation" : 4,
+                    "minimumAllocation" : 1,
                     "name" : "vcores",
                     "resourceType" : "COUNTABLE",
                     "units" : "",
                     "value" : 0
-                  }, {
-                    "maximumAllocation" : 2147483647,
-                    "minimumAllocation" : 0,
-                    "name" : "yarn.io/gpu",
-                    "resourceType" : "COUNTABLE",
-                    "units" : "",
-                    "value" : 0
                   } ]
                 }
               },
@@ -2666,26 +2582,19 @@
             "vCores" : 0,
             "resourceInformations" : {
               "resourceInformation" : [ {
-                "maximumAllocation" : 9223372036854775807,
-                "minimumAllocation" : 0,
+                "maximumAllocation" : 8192,
+                "minimumAllocation" : 1024,
                 "name" : "memory-mb",
                 "resourceType" : "COUNTABLE",
                 "units" : "Mi",
                 "value" : 0
               }, {
-                "maximumAllocation" : 9223372036854775807,
-                "minimumAllocation" : 0,
+                "maximumAllocation" : 4,
+                "minimumAllocation" : 1,
                 "name" : "vcores",
                 "resourceType" : "COUNTABLE",
                 "units" : "",
                 "value" : 0
-              }, {
-                "maximumAllocation" : 2147483647,
-                "minimumAllocation" : 0,
-                "name" : "yarn.io/gpu",
-                "resourceType" : "COUNTABLE",
-                "units" : "",
-                "value" : 0
               } ]
             }
           },
@@ -2694,26 +2603,19 @@
             "vCores" : 0,
             "resourceInformations" : {
               "resourceInformation" : [ {
-                "maximumAllocation" : 9223372036854775807,
-                "minimumAllocation" : 0,
+                "maximumAllocation" : 8192,
+                "minimumAllocation" : 1024,
                 "name" : "memory-mb",
                 "resourceType" : "COUNTABLE",
                 "units" : "Mi",
                 "value" : 0
               }, {
-                "maximumAllocation" : 9223372036854775807,
-                "minimumAllocation" : 0,
+                "maximumAllocation" : 4,
+                "minimumAllocation" : 1,
                 "name" : "vcores",
                 "resourceType" : "COUNTABLE",
                 "units" : "",
                 "value" : 0
-              }, {
-                "maximumAllocation" : 2147483647,
-                "minimumAllocation" : 0,
-                "name" : "yarn.io/gpu",
-                "resourceType" : "COUNTABLE",
-                "units" : "",
-                "value" : 0
               } ]
             }
           },
diff --git a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/resources/webapp/dynamic-testPercentageMode-16.json b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/resources/webapp/dynamic-testPercentageMode-16.json
index 400181bcbe05b..c1a4eed4cf9be 100644
--- a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/resources/webapp/dynamic-testPercentageMode-16.json
+++ b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/resources/webapp/dynamic-testPercentageMode-16.json
@@ -91,26 +91,19 @@
                 "vCores" : 0,
                 "resourceInformations" : {
                   "resourceInformation" : [ {
-                    "maximumAllocation" : 9223372036854775807,
-                    "minimumAllocation" : 0,
+                    "maximumAllocation" : 8192,
+                    "minimumAllocation" : 1024,
                     "name" : "memory-mb",
                     "resourceType" : "COUNTABLE",
                     "units" : "Mi",
                     "value" : 0
                   }, {
-                    "maximumAllocation" : 9223372036854775807,
-                    "minimumAllocation" : 0,
+                    "maximumAllocation" : 4,
+                    "minimumAllocation" : 1,
                     "name" : "vcores",
                     "resourceType" : "COUNTABLE",
                     "units" : "",
                     "value" : 0
-                  }, {
-                    "maximumAllocation" : 2147483647,
-                    "minimumAllocation" : 0,
-                    "name" : "yarn.io/gpu",
-                    "resourceType" : "COUNTABLE",
-                    "units" : "",
-                    "value" : 0
                   } ]
                 }
               },
@@ -119,26 +112,19 @@
                 "vCores" : 0,
                 "resourceInformations" : {
                   "resourceInformation" : [ {
-                    "maximumAllocation" : 9223372036854775807,
-                    "minimumAllocation" : 0,
+                    "maximumAllocation" : 8192,
+                    "minimumAllocation" : 1024,
                     "name" : "memory-mb",
                     "resourceType" : "COUNTABLE",
                     "units" : "Mi",
                     "value" : 0
                   }, {
-                    "maximumAllocation" : 9223372036854775807,
-                    "minimumAllocation" : 0,
+                    "maximumAllocation" : 4,
+                    "minimumAllocation" : 1,
                     "name" : "vcores",
                     "resourceType" : "COUNTABLE",
                     "units" : "",
                     "value" : 0
-                  }, {
-                    "maximumAllocation" : 2147483647,
-                    "minimumAllocation" : 0,
-                    "name" : "yarn.io/gpu",
-                    "resourceType" : "COUNTABLE",
-                    "units" : "",
-                    "value" : 0
                   } ]
                 }
               },
@@ -566,26 +552,19 @@
                     "vCores" : 0,
                     "resourceInformations" : {
                       "resourceInformation" : [ {
-                        "maximumAllocation" : 9223372036854775807,
-                        "minimumAllocation" : 0,
+                        "maximumAllocation" : 8192,
+                        "minimumAllocation" : 1024,
                         "name" : "memory-mb",
                         "resourceType" : "COUNTABLE",
                         "units" : "Mi",
                         "value" : 0
                       }, {
-                        "maximumAllocation" : 9223372036854775807,
-                        "minimumAllocation" : 0,
+                        "maximumAllocation" : 4,
+                        "minimumAllocation" : 1,
                         "name" : "vcores",
                         "resourceType" : "COUNTABLE",
                         "units" : "",
                         "value" : 0
-                      }, {
-                        "maximumAllocation" : 2147483647,
-                        "minimumAllocation" : 0,
-                        "name" : "yarn.io/gpu",
-                        "resourceType" : "COUNTABLE",
-                        "units" : "",
-                        "value" : 0
                       } ]
                     }
                   },
@@ -594,26 +573,19 @@
                     "vCores" : 0,
                     "resourceInformations" : {
                       "resourceInformation" : [ {
-                        "maximumAllocation" : 9223372036854775807,
-                        "minimumAllocation" : 0,
+                        "maximumAllocation" : 8192,
+                        "minimumAllocation" : 1024,
                         "name" : "memory-mb",
                         "resourceType" : "COUNTABLE",
                         "units" : "Mi",
                         "value" : 0
                       }, {
-                        "maximumAllocation" : 9223372036854775807,
-                        "minimumAllocation" : 0,
+                        "maximumAllocation" : 4,
+                        "minimumAllocation" : 1,
                         "name" : "vcores",
                         "resourceType" : "COUNTABLE",
                         "units" : "",
                         "value" : 0
-                      }, {
-                        "maximumAllocation" : 2147483647,
-                        "minimumAllocation" : 0,
-                        "name" : "yarn.io/gpu",
-                        "resourceType" : "COUNTABLE",
-                        "units" : "",
-                        "value" : 0
                       } ]
                     }
                   },
@@ -1025,26 +997,19 @@
                     "vCores" : 0,
                     "resourceInformations" : {
                       "resourceInformation" : [ {
-                        "maximumAllocation" : 9223372036854775807,
-                        "minimumAllocation" : 0,
+                        "maximumAllocation" : 8192,
+                        "minimumAllocation" : 1024,
                         "name" : "memory-mb",
                         "resourceType" : "COUNTABLE",
                         "units" : "Mi",
                         "value" : 0
                       }, {
-                        "maximumAllocation" : 9223372036854775807,
-                        "minimumAllocation" : 0,
+                        "maximumAllocation" : 4,
+                        "minimumAllocation" : 1,
                         "name" : "vcores",
                         "resourceType" : "COUNTABLE",
                         "units" : "",
                         "value" : 0
-                      }, {
-                        "maximumAllocation" : 2147483647,
-                        "minimumAllocation" : 0,
-                        "name" : "yarn.io/gpu",
-                        "resourceType" : "COUNTABLE",
-                        "units" : "",
-                        "value" : 0
                       } ]
                     }
                   },
@@ -1053,26 +1018,19 @@
                     "vCores" : 0,
                     "resourceInformations" : {
                       "resourceInformation" : [ {
-                        "maximumAllocation" : 9223372036854775807,
-                        "minimumAllocation" : 0,
+                        "maximumAllocation" : 8192,
+                        "minimumAllocation" : 1024,
                         "name" : "memory-mb",
                         "resourceType" : "COUNTABLE",
                         "units" : "Mi",
                         "value" : 0
                       }, {
-                        "maximumAllocation" : 9223372036854775807,
-                        "minimumAllocation" : 0,
+                        "maximumAllocation" : 4,
+                        "minimumAllocation" : 1,
                         "name" : "vcores",
                         "resourceType" : "COUNTABLE",
                         "units" : "",
                         "value" : 0
-                      }, {
-                        "maximumAllocation" : 2147483647,
-                        "minimumAllocation" : 0,
-                        "name" : "yarn.io/gpu",
-                        "resourceType" : "COUNTABLE",
-                        "units" : "",
-                        "value" : 0
                       } ]
                     }
                   },
@@ -1484,26 +1442,19 @@
                     "vCores" : 0,
                     "resourceInformations" : {
                       "resourceInformation" : [ {
-                        "maximumAllocation" : 9223372036854775807,
-                        "minimumAllocation" : 0,
+                        "maximumAllocation" : 8192,
+                        "minimumAllocation" : 1024,
                         "name" : "memory-mb",
                         "resourceType" : "COUNTABLE",
                         "units" : "Mi",
                         "value" : 0
                       }, {
-                        "maximumAllocation" : 9223372036854775807,
-                        "minimumAllocation" : 0,
+                        "maximumAllocation" : 4,
+                        "minimumAllocation" : 1,
                         "name" : "vcores",
                         "resourceType" : "COUNTABLE",
                         "units" : "",
                         "value" : 0
-                      }, {
-                        "maximumAllocation" : 2147483647,
-                        "minimumAllocation" : 0,
-                        "name" : "yarn.io/gpu",
-                        "resourceType" : "COUNTABLE",
-                        "units" : "",
-                        "value" : 0
                       } ]
                     }
                   },
@@ -1512,26 +1463,19 @@
                     "vCores" : 0,
                     "resourceInformations" : {
                       "resourceInformation" : [ {
-                        "maximumAllocation" : 9223372036854775807,
-                        "minimumAllocation" : 0,
+                        "maximumAllocation" : 8192,
+                        "minimumAllocation" : 1024,
                         "name" : "memory-mb",
                         "resourceType" : "COUNTABLE",
                         "units" : "Mi",
                         "value" : 0
                       }, {
-                        "maximumAllocation" : 9223372036854775807,
-                        "minimumAllocation" : 0,
+                        "maximumAllocation" : 4,
+                        "minimumAllocation" : 1,
                         "name" : "vcores",
                         "resourceType" : "COUNTABLE",
                         "units" : "",
                         "value" : 0
-                      }, {
-                        "maximumAllocation" : 2147483647,
-                        "minimumAllocation" : 0,
-                        "name" : "yarn.io/gpu",
-                        "resourceType" : "COUNTABLE",
-                        "units" : "",
-                        "value" : 0
                       } ]
                     }
                   },
@@ -1929,26 +1873,19 @@
                 "vCores" : 0,
                 "resourceInformations" : {
                   "resourceInformation" : [ {
-                    "maximumAllocation" : 9223372036854775807,
-                    "minimumAllocation" : 0,
+                    "maximumAllocation" : 8192,
+                    "minimumAllocation" : 1024,
                     "name" : "memory-mb",
                     "resourceType" : "COUNTABLE",
                     "units" : "Mi",
                     "value" : 0
                   }, {
-                    "maximumAllocation" : 9223372036854775807,
-                    "minimumAllocation" : 0,
+                    "maximumAllocation" : 4,
+                    "minimumAllocation" : 1,
                     "name" : "vcores",
                     "resourceType" : "COUNTABLE",
                     "units" : "",
                     "value" : 0
-                  }, {
-                    "maximumAllocation" : 2147483647,
-                    "minimumAllocation" : 0,
-                    "name" : "yarn.io/gpu",
-                    "resourceType" : "COUNTABLE",
-                    "units" : "",
-                    "value" : 0
                   } ]
                 }
               },
@@ -1957,26 +1894,19 @@
                 "vCores" : 0,
                 "resourceInformations" : {
                   "resourceInformation" : [ {
-                    "maximumAllocation" : 9223372036854775807,
-                    "minimumAllocation" : 0,
+                    "maximumAllocation" : 8192,
+                    "minimumAllocation" : 1024,
                     "name" : "memory-mb",
                     "resourceType" : "COUNTABLE",
                     "units" : "Mi",
                     "value" : 0
                   }, {
-                    "maximumAllocation" : 9223372036854775807,
-                    "minimumAllocation" : 0,
+                    "maximumAllocation" : 4,
+                    "minimumAllocation" : 1,
                     "name" : "vcores",
                     "resourceType" : "COUNTABLE",
                     "units" : "",
                     "value" : 0
-                  }, {
-                    "maximumAllocation" : 2147483647,
-                    "minimumAllocation" : 0,
-                    "name" : "yarn.io/gpu",
-                    "resourceType" : "COUNTABLE",
-                    "units" : "",
-                    "value" : 0
                   } ]
                 }
               },
@@ -2247,26 +2177,19 @@
                 "vCores" : 0,
                 "resourceInformations" : {
                   "resourceInformation" : [ {
-                    "maximumAllocation" : 9223372036854775807,
-                    "minimumAllocation" : 0,
+                    "maximumAllocation" : 8192,
+                    "minimumAllocation" : 1024,
                     "name" : "memory-mb",
                     "resourceType" : "COUNTABLE",
                     "units" : "Mi",
                     "value" : 0
                   }, {
-                    "maximumAllocation" : 9223372036854775807,
-                    "minimumAllocation" : 0,
+                    "maximumAllocation" : 4,
+                    "minimumAllocation" : 1,
                     "name" : "vcores",
                     "resourceType" : "COUNTABLE",
                     "units" : "",
                     "value" : 0
-                  }, {
-                    "maximumAllocation" : 2147483647,
-                    "minimumAllocation" : 0,
-                    "name" : "yarn.io/gpu",
-                    "resourceType" : "COUNTABLE",
-                    "units" : "",
-                    "value" : 0
                   } ]
                 }
               },
@@ -2275,26 +2198,19 @@
                 "vCores" : 0,
                 "resourceInformations" : {
                   "resourceInformation" : [ {
-                    "maximumAllocation" : 9223372036854775807,
-                    "minimumAllocation" : 0,
+                    "maximumAllocation" : 8192,
+                    "minimumAllocation" : 1024,
                     "name" : "memory-mb",
                     "resourceType" : "COUNTABLE",
                     "units" : "Mi",
                     "value" : 0
                   }, {
-                    "maximumAllocation" : 9223372036854775807,
-                    "minimumAllocation" : 0,
+                    "maximumAllocation" : 4,
+                    "minimumAllocation" : 1,
                     "name" : "vcores",
                     "resourceType" : "COUNTABLE",
                     "units" : "",
                     "value" : 0
-                  }, {
-                    "maximumAllocation" : 2147483647,
-                    "minimumAllocation" : 0,
-                    "name" : "yarn.io/gpu",
-                    "resourceType" : "COUNTABLE",
-                    "units" : "",
-                    "value" : 0
                   } ]
                 }
               },
@@ -2666,26 +2582,19 @@
             "vCores" : 0,
             "resourceInformations" : {
               "resourceInformation" : [ {
-                "maximumAllocation" : 9223372036854775807,
-                "minimumAllocation" : 0,
+                "maximumAllocation" : 8192,
+                "minimumAllocation" : 1024,
                 "name" : "memory-mb",
                 "resourceType" : "COUNTABLE",
                 "units" : "Mi",
                 "value" : 0
               }, {
-                "maximumAllocation" : 9223372036854775807,
-                "minimumAllocation" : 0,
+                "maximumAllocation" : 4,
+                "minimumAllocation" : 1,
                 "name" : "vcores",
                 "resourceType" : "COUNTABLE",
                 "units" : "",
                 "value" : 0
-              }, {
-                "maximumAllocation" : 2147483647,
-                "minimumAllocation" : 0,
-                "name" : "yarn.io/gpu",
-                "resourceType" : "COUNTABLE",
-                "units" : "",
-                "value" : 0
               } ]
             }
           },
@@ -2694,26 +2603,19 @@
             "vCores" : 0,
             "resourceInformations" : {
               "resourceInformation" : [ {
-                "maximumAllocation" : 9223372036854775807,
-                "minimumAllocation" : 0,
+                "maximumAllocation" : 8192,
+                "minimumAllocation" : 1024,
                 "name" : "memory-mb",
                 "resourceType" : "COUNTABLE",
                 "units" : "Mi",
                 "value" : 0
               }, {
-                "maximumAllocation" : 9223372036854775807,
-                "minimumAllocation" : 0,
+                "maximumAllocation" : 4,
+                "minimumAllocation" : 1,
                 "name" : "vcores",
                 "resourceType" : "COUNTABLE",
                 "units" : "",
                 "value" : 0
-              }, {
-                "maximumAllocation" : 2147483647,
-                "minimumAllocation" : 0,
-                "name" : "yarn.io/gpu",
-                "resourceType" : "COUNTABLE",
-                "units" : "",
-                "value" : 0
               } ]
             }
           },
diff --git a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/resources/webapp/dynamic-testPercentageMode-32.json b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/resources/webapp/dynamic-testPercentageMode-32.json
index 8dfd8e726ed51..be45d10c04fbf 100644
--- a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/resources/webapp/dynamic-testPercentageMode-32.json
+++ b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/resources/webapp/dynamic-testPercentageMode-32.json
@@ -1,12 +1,12 @@
 {
   "scheduler" : {
     "schedulerInfo" : {
-      "@xsi.type" : "capacityScheduler",
-      "capacity" : 100,
-      "usedCapacity" : 0,
-      "maxCapacity" : 100,
-      "weight" : -1,
-      "normalizedWeight" : 0,
+      "type" : "capacityScheduler",
+      "capacity" : 100.0,
+      "usedCapacity" : 0.0,
+      "maxCapacity" : 100.0,
+      "weight" : -1.0,
+      "normalizedWeight" : 0.0,
       "queueCapacityVectorInfo" : {
         "configuredCapacityVector" : "[memory-mb=100.0%,vcores=100.0%]",
         "capacityVectorEntries" : [ {
@@ -23,16 +23,16 @@
       "isAbsoluteResource" : false,
       "queues" : {
         "queue" : [ {
-          "@xsi.type" : "capacitySchedulerLeafQueueInfo",
+          "type" : "capacitySchedulerLeafQueueInfo",
           "queuePath" : "root.default",
           "capacity" : 12.5,
-          "usedCapacity" : 0,
-          "maxCapacity" : 100,
+          "usedCapacity" : 0.0,
+          "maxCapacity" : 100.0,
           "absoluteCapacity" : 12.5,
-          "absoluteMaxCapacity" : 100,
-          "absoluteUsedCapacity" : 0,
-          "weight" : -1,
-          "normalizedWeight" : 0,
+          "absoluteMaxCapacity" : 100.0,
+          "absoluteUsedCapacity" : 0.0,
+          "weight" : -1.0,
+          "normalizedWeight" : 0.0,
           "numApplications" : 0,
           "maxParallelApps" : 2147483647,
           "queueName" : "default",
@@ -43,7 +43,6 @@
             "vCores" : 0,
             "resourceInformations" : {
               "resourceInformation" : [ {
-                "attributes" : "",
                 "maximumAllocation" : 9223372036854775807,
                 "minimumAllocation" : 0,
                 "name" : "memory-mb",
@@ -51,7 +50,6 @@
                 "units" : "Mi",
                 "value" : 0
               }, {
-                "attributes" : "",
                 "maximumAllocation" : 9223372036854775807,
                 "minimumAllocation" : 0,
                 "name" : "vcores",
@@ -62,12 +60,12 @@
             }
           },
           "hideReservationQueues" : false,
-          "nodeLabels" : "*",
+          "nodeLabels" : [ "*" ],
           "allocatedContainers" : 0,
           "reservedContainers" : 0,
           "pendingContainers" : 0,
           "capacities" : {
-            "queueCapacitiesByPartition" : {
+            "queueCapacitiesByPartition" : [ {
               "partitionName" : "",
               "queueCapacityVectorInfo" : {
                 "configuredCapacityVector" : "[memory-mb=12.5%,vcores=12.5%]",
@@ -80,20 +78,19 @@
                 } ]
               },
               "capacity" : 12.5,
-              "usedCapacity" : 0,
-              "maxCapacity" : 100,
+              "usedCapacity" : 0.0,
+              "maxCapacity" : 100.0,
               "absoluteCapacity" : 12.5,
-              "absoluteUsedCapacity" : 0,
-              "absoluteMaxCapacity" : 100,
-              "maxAMLimitPercentage" : 10,
-              "weight" : -1,
-              "normalizedWeight" : 0,
+              "absoluteUsedCapacity" : 0.0,
+              "absoluteMaxCapacity" : 100.0,
+              "maxAMLimitPercentage" : 10.0,
+              "weight" : -1.0,
+              "normalizedWeight" : 0.0,
               "configuredMinResource" : {
                 "memory" : 0,
                 "vCores" : 0,
                 "resourceInformations" : {
                   "resourceInformation" : [ {
-                    "attributes" : "",
                     "maximumAllocation" : 8192,
                     "minimumAllocation" : 1024,
                     "name" : "memory-mb",
@@ -101,7 +98,6 @@
                     "units" : "Mi",
                     "value" : 0
                   }, {
-                    "attributes" : "",
                     "maximumAllocation" : 4,
                     "minimumAllocation" : 1,
                     "name" : "vcores",
@@ -116,7 +112,6 @@
                 "vCores" : 0,
                 "resourceInformations" : {
                   "resourceInformation" : [ {
-                    "attributes" : "",
                     "maximumAllocation" : 8192,
                     "minimumAllocation" : 1024,
                     "name" : "memory-mb",
@@ -124,7 +119,6 @@
                     "units" : "Mi",
                     "value" : 0
                   }, {
-                    "attributes" : "",
                     "maximumAllocation" : 4,
                     "minimumAllocation" : 1,
                     "name" : "vcores",
@@ -139,7 +133,6 @@
                 "vCores" : 4,
                 "resourceInformations" : {
                   "resourceInformation" : [ {
-                    "attributes" : "",
                     "maximumAllocation" : 9223372036854775807,
                     "minimumAllocation" : 0,
                     "name" : "memory-mb",
@@ -147,7 +140,6 @@
                     "units" : "Mi",
                     "value" : 4096
                   }, {
-                    "attributes" : "",
                     "maximumAllocation" : 9223372036854775807,
                     "minimumAllocation" : 0,
                     "name" : "vcores",
@@ -162,7 +154,6 @@
                 "vCores" : 32,
                 "resourceInformations" : {
                   "resourceInformation" : [ {
-                    "attributes" : "",
                     "maximumAllocation" : 9223372036854775807,
                     "minimumAllocation" : 0,
                     "name" : "memory-mb",
@@ -170,7 +161,6 @@
                     "units" : "Mi",
                     "value" : 32768
                   }, {
-                    "attributes" : "",
                     "maximumAllocation" : 9223372036854775807,
                     "minimumAllocation" : 0,
                     "name" : "vcores",
@@ -180,17 +170,16 @@
                   } ]
                 }
               }
-            }
+            } ]
           },
           "resources" : {
-            "resourceUsagesByPartition" : {
+            "resourceUsagesByPartition" : [ {
               "partitionName" : "",
               "used" : {
                 "memory" : 0,
                 "vCores" : 0,
                 "resourceInformations" : {
                   "resourceInformation" : [ {
-                    "attributes" : "",
                     "maximumAllocation" : 9223372036854775807,
                     "minimumAllocation" : 0,
                     "name" : "memory-mb",
@@ -198,7 +187,6 @@
                     "units" : "Mi",
                     "value" : 0
                   }, {
-                    "attributes" : "",
                     "maximumAllocation" : 9223372036854775807,
                     "minimumAllocation" : 0,
                     "name" : "vcores",
@@ -213,7 +201,6 @@
                 "vCores" : 0,
                 "resourceInformations" : {
                   "resourceInformation" : [ {
-                    "attributes" : "",
                     "maximumAllocation" : 9223372036854775807,
                     "minimumAllocation" : 0,
                     "name" : "memory-mb",
@@ -221,7 +208,6 @@
                     "units" : "Mi",
                     "value" : 0
                   }, {
-                    "attributes" : "",
                     "maximumAllocation" : 9223372036854775807,
                     "minimumAllocation" : 0,
                     "name" : "vcores",
@@ -236,7 +222,6 @@
                 "vCores" : 0,
                 "resourceInformations" : {
                   "resourceInformation" : [ {
-                    "attributes" : "",
                     "maximumAllocation" : 9223372036854775807,
                     "minimumAllocation" : 0,
                     "name" : "memory-mb",
@@ -244,7 +229,6 @@
                     "units" : "Mi",
                     "value" : 0
                   }, {
-                    "attributes" : "",
                     "maximumAllocation" : 9223372036854775807,
                     "minimumAllocation" : 0,
                     "name" : "vcores",
@@ -259,7 +243,6 @@
                 "vCores" : 0,
                 "resourceInformations" : {
                   "resourceInformation" : [ {
-                    "attributes" : "",
                     "maximumAllocation" : 9223372036854775807,
                     "minimumAllocation" : 0,
                     "name" : "memory-mb",
@@ -267,7 +250,6 @@
                     "units" : "Mi",
                     "value" : 0
                   }, {
-                    "attributes" : "",
                     "maximumAllocation" : 9223372036854775807,
                     "minimumAllocation" : 0,
                     "name" : "vcores",
@@ -282,7 +264,6 @@
                 "vCores" : 1,
                 "resourceInformations" : {
                   "resourceInformation" : [ {
-                    "attributes" : "",
                     "maximumAllocation" : 9223372036854775807,
                     "minimumAllocation" : 0,
                     "name" : "memory-mb",
@@ -290,7 +271,6 @@
                     "units" : "Mi",
                     "value" : 4096
                   }, {
-                    "attributes" : "",
                     "maximumAllocation" : 9223372036854775807,
                     "minimumAllocation" : 0,
                     "name" : "vcores",
@@ -305,7 +285,6 @@
                 "vCores" : 0,
                 "resourceInformations" : {
                   "resourceInformation" : [ {
-                    "attributes" : "",
                     "maximumAllocation" : 9223372036854775807,
                     "minimumAllocation" : 0,
                     "name" : "memory-mb",
@@ -313,7 +292,6 @@
                     "units" : "Mi",
                     "value" : 0
                   }, {
-                    "attributes" : "",
                     "maximumAllocation" : 9223372036854775807,
                     "minimumAllocation" : 0,
                     "name" : "vcores",
@@ -323,14 +301,13 @@
                   } ]
                 }
               }
-            }
+            } ]
           },
           "minEffectiveCapacity" : {
             "memory" : 4096,
             "vCores" : 4,
             "resourceInformations" : {
               "resourceInformation" : [ {
-                "attributes" : "",
                 "maximumAllocation" : 9223372036854775807,
                 "minimumAllocation" : 0,
                 "name" : "memory-mb",
@@ -338,7 +315,6 @@
                 "units" : "Mi",
                 "value" : 4096
               }, {
-                "attributes" : "",
                 "maximumAllocation" : 9223372036854775807,
                 "minimumAllocation" : 0,
                 "name" : "vcores",
@@ -353,7 +329,6 @@
             "vCores" : 32,
             "resourceInformations" : {
               "resourceInformation" : [ {
-                "attributes" : "",
                 "maximumAllocation" : 9223372036854775807,
                 "minimumAllocation" : 0,
                 "name" : "memory-mb",
@@ -361,7 +336,6 @@
                 "units" : "Mi",
                 "value" : 32768
               }, {
-                "attributes" : "",
                 "maximumAllocation" : 9223372036854775807,
                 "minimumAllocation" : 0,
                 "name" : "vcores",
@@ -376,7 +350,6 @@
             "vCores" : 4,
             "resourceInformations" : {
               "resourceInformation" : [ {
-                "attributes" : "",
                 "maximumAllocation" : 9223372036854775807,
                 "minimumAllocation" : 0,
                 "name" : "memory-mb",
@@ -384,7 +357,6 @@
                 "units" : "Mi",
                 "value" : 8192
               }, {
-                "attributes" : "",
                 "maximumAllocation" : 9223372036854775807,
                 "minimumAllocation" : 0,
                 "name" : "vcores",
@@ -409,29 +381,28 @@
           "queuePriority" : 0,
           "orderingPolicyInfo" : "fifo",
           "autoCreateChildQueueEnabled" : false,
-          "leafQueueTemplate" : "",
+          "leafQueueTemplate" : { },
           "mode" : "percentage",
           "queueType" : "leaf",
           "creationMethod" : "static",
           "autoCreationEligibility" : "off",
-          "autoQueueTemplateProperties" : "",
-          "autoQueueParentTemplateProperties" : "",
-          "autoQueueLeafTemplateProperties" : "",
+          "autoQueueTemplateProperties" : { },
+          "autoQueueParentTemplateProperties" : { },
+          "autoQueueLeafTemplateProperties" : { },
           "numActiveApplications" : 0,
           "numPendingApplications" : 0,
           "numContainers" : 0,
           "maxApplications" : 1250,
           "maxApplicationsPerUser" : 1250,
-          "userLimit" : 100,
-          "users" : "",
-          "userLimitFactor" : 1,
+          "userLimit" : 100.0,
+          "users" : { },
+          "userLimitFactor" : 1.0,
           "configuredMaxAMResourceLimit" : 0.1,
           "AMResourceLimit" : {
             "memory" : 4096,
             "vCores" : 1,
             "resourceInformations" : {
               "resourceInformation" : [ {
-                "attributes" : "",
                 "maximumAllocation" : 9223372036854775807,
                 "minimumAllocation" : 0,
                 "name" : "memory-mb",
@@ -439,7 +410,6 @@
                 "units" : "Mi",
                 "value" : 4096
               }, {
-                "attributes" : "",
                 "maximumAllocation" : 9223372036854775807,
                 "minimumAllocation" : 0,
                 "name" : "vcores",
@@ -454,7 +424,6 @@
             "vCores" : 0,
             "resourceInformations" : {
               "resourceInformation" : [ {
-                "attributes" : "",
                 "maximumAllocation" : 9223372036854775807,
                 "minimumAllocation" : 0,
                 "name" : "memory-mb",
@@ -462,7 +431,6 @@
                 "units" : "Mi",
                 "value" : 0
               }, {
-                "attributes" : "",
                 "maximumAllocation" : 9223372036854775807,
                 "minimumAllocation" : 0,
                 "name" : "vcores",
@@ -477,7 +445,6 @@
             "vCores" : 1,
             "resourceInformations" : {
               "resourceInformation" : [ {
-                "attributes" : "",
                 "maximumAllocation" : 9223372036854775807,
                 "minimumAllocation" : 0,
                 "name" : "memory-mb",
@@ -485,7 +452,6 @@
                 "units" : "Mi",
                 "value" : 4096
               }, {
-                "attributes" : "",
                 "maximumAllocation" : 9223372036854775807,
                 "minimumAllocation" : 0,
                 "name" : "vcores",
@@ -503,14 +469,14 @@
           "defaultApplicationLifetime" : -1
         }, {
           "queuePath" : "root.test1",
-          "capacity" : 50,
-          "usedCapacity" : 0,
-          "maxCapacity" : 100,
-          "absoluteCapacity" : 50,
-          "absoluteMaxCapacity" : 100,
-          "absoluteUsedCapacity" : 0,
-          "weight" : -1,
-          "normalizedWeight" : 0,
+          "capacity" : 50.0,
+          "usedCapacity" : 0.0,
+          "maxCapacity" : 100.0,
+          "absoluteCapacity" : 50.0,
+          "absoluteMaxCapacity" : 100.0,
+          "absoluteUsedCapacity" : 0.0,
+          "weight" : -1.0,
+          "normalizedWeight" : 0.0,
           "numApplications" : 0,
           "maxParallelApps" : 2147483647,
           "queueName" : "test1",
@@ -518,16 +484,16 @@
           "state" : "RUNNING",
           "queues" : {
             "queue" : [ {
-              "@xsi.type" : "capacitySchedulerLeafQueueInfo",
+              "type" : "capacitySchedulerLeafQueueInfo",
               "queuePath" : "root.test1.test1_1",
               "capacity" : 12.5,
-              "usedCapacity" : 0,
-              "maxCapacity" : 100,
+              "usedCapacity" : 0.0,
+              "maxCapacity" : 100.0,
               "absoluteCapacity" : 6.25,
-              "absoluteMaxCapacity" : 100,
-              "absoluteUsedCapacity" : 0,
-              "weight" : -1,
-              "normalizedWeight" : 0,
+              "absoluteMaxCapacity" : 100.0,
+              "absoluteUsedCapacity" : 0.0,
+              "weight" : -1.0,
+              "normalizedWeight" : 0.0,
               "numApplications" : 0,
               "maxParallelApps" : 2147483647,
               "queueName" : "test1_1",
@@ -538,7 +504,6 @@
                 "vCores" : 0,
                 "resourceInformations" : {
                   "resourceInformation" : [ {
-                    "attributes" : "",
                     "maximumAllocation" : 9223372036854775807,
                     "minimumAllocation" : 0,
                     "name" : "memory-mb",
@@ -546,7 +511,6 @@
                     "units" : "Mi",
                     "value" : 0
                   }, {
-                    "attributes" : "",
                     "maximumAllocation" : 9223372036854775807,
                     "minimumAllocation" : 0,
                     "name" : "vcores",
@@ -557,12 +521,12 @@
                 }
               },
               "hideReservationQueues" : false,
-              "nodeLabels" : "*",
+              "nodeLabels" : [ "*" ],
               "allocatedContainers" : 0,
               "reservedContainers" : 0,
               "pendingContainers" : 0,
               "capacities" : {
-                "queueCapacitiesByPartition" : {
+                "queueCapacitiesByPartition" : [ {
                   "partitionName" : "",
                   "queueCapacityVectorInfo" : {
                     "configuredCapacityVector" : "[memory-mb=12.5%,vcores=12.5%]",
@@ -575,20 +539,19 @@
                     } ]
                   },
                   "capacity" : 12.5,
-                  "usedCapacity" : 0,
-                  "maxCapacity" : 100,
+                  "usedCapacity" : 0.0,
+                  "maxCapacity" : 100.0,
                   "absoluteCapacity" : 6.25,
-                  "absoluteUsedCapacity" : 0,
-                  "absoluteMaxCapacity" : 100,
-                  "maxAMLimitPercentage" : 10,
-                  "weight" : -1,
-                  "normalizedWeight" : 0,
+                  "absoluteUsedCapacity" : 0.0,
+                  "absoluteMaxCapacity" : 100.0,
+                  "maxAMLimitPercentage" : 10.0,
+                  "weight" : -1.0,
+                  "normalizedWeight" : 0.0,
                   "configuredMinResource" : {
                     "memory" : 0,
                     "vCores" : 0,
                     "resourceInformations" : {
                       "resourceInformation" : [ {
-                        "attributes" : "",
                         "maximumAllocation" : 8192,
                         "minimumAllocation" : 1024,
                         "name" : "memory-mb",
@@ -596,7 +559,6 @@
                         "units" : "Mi",
                         "value" : 0
                       }, {
-                        "attributes" : "",
                         "maximumAllocation" : 4,
                         "minimumAllocation" : 1,
                         "name" : "vcores",
@@ -611,7 +573,6 @@
                     "vCores" : 0,
                     "resourceInformations" : {
                       "resourceInformation" : [ {
-                        "attributes" : "",
                         "maximumAllocation" : 8192,
                         "minimumAllocation" : 1024,
                         "name" : "memory-mb",
@@ -619,7 +580,6 @@
                         "units" : "Mi",
                         "value" : 0
                       }, {
-                        "attributes" : "",
                         "maximumAllocation" : 4,
                         "minimumAllocation" : 1,
                         "name" : "vcores",
@@ -634,7 +594,6 @@
                     "vCores" : 2,
                     "resourceInformations" : {
                       "resourceInformation" : [ {
-                        "attributes" : "",
                         "maximumAllocation" : 9223372036854775807,
                         "minimumAllocation" : 0,
                         "name" : "memory-mb",
@@ -642,7 +601,6 @@
                         "units" : "Mi",
                         "value" : 2048
                       }, {
-                        "attributes" : "",
                         "maximumAllocation" : 9223372036854775807,
                         "minimumAllocation" : 0,
                         "name" : "vcores",
@@ -657,7 +615,6 @@
                     "vCores" : 32,
                     "resourceInformations" : {
                       "resourceInformation" : [ {
-                        "attributes" : "",
                         "maximumAllocation" : 9223372036854775807,
                         "minimumAllocation" : 0,
                         "name" : "memory-mb",
@@ -665,7 +622,6 @@
                         "units" : "Mi",
                         "value" : 32768
                       }, {
-                        "attributes" : "",
                         "maximumAllocation" : 9223372036854775807,
                         "minimumAllocation" : 0,
                         "name" : "vcores",
@@ -675,17 +631,16 @@
                       } ]
                     }
                   }
-                }
+                } ]
               },
               "resources" : {
-                "resourceUsagesByPartition" : {
+                "resourceUsagesByPartition" : [ {
                   "partitionName" : "",
                   "used" : {
                     "memory" : 0,
                     "vCores" : 0,
                     "resourceInformations" : {
                       "resourceInformation" : [ {
-                        "attributes" : "",
                         "maximumAllocation" : 9223372036854775807,
                         "minimumAllocation" : 0,
                         "name" : "memory-mb",
@@ -693,7 +648,6 @@
                         "units" : "Mi",
                         "value" : 0
                       }, {
-                        "attributes" : "",
                         "maximumAllocation" : 9223372036854775807,
                         "minimumAllocation" : 0,
                         "name" : "vcores",
@@ -708,7 +662,6 @@
                     "vCores" : 0,
                     "resourceInformations" : {
                       "resourceInformation" : [ {
-                        "attributes" : "",
                         "maximumAllocation" : 9223372036854775807,
                         "minimumAllocation" : 0,
                         "name" : "memory-mb",
@@ -716,7 +669,6 @@
                         "units" : "Mi",
                         "value" : 0
                       }, {
-                        "attributes" : "",
                         "maximumAllocation" : 9223372036854775807,
                         "minimumAllocation" : 0,
                         "name" : "vcores",
@@ -731,7 +683,6 @@
                     "vCores" : 0,
                     "resourceInformations" : {
                       "resourceInformation" : [ {
-                        "attributes" : "",
                         "maximumAllocation" : 9223372036854775807,
                         "minimumAllocation" : 0,
                         "name" : "memory-mb",
@@ -739,7 +690,6 @@
                         "units" : "Mi",
                         "value" : 0
                       }, {
-                        "attributes" : "",
                         "maximumAllocation" : 9223372036854775807,
                         "minimumAllocation" : 0,
                         "name" : "vcores",
@@ -754,7 +704,6 @@
                     "vCores" : 0,
                     "resourceInformations" : {
                       "resourceInformation" : [ {
-                        "attributes" : "",
                         "maximumAllocation" : 9223372036854775807,
                         "minimumAllocation" : 0,
                         "name" : "memory-mb",
@@ -762,7 +711,6 @@
                         "units" : "Mi",
                         "value" : 0
                       }, {
-                        "attributes" : "",
                         "maximumAllocation" : 9223372036854775807,
                         "minimumAllocation" : 0,
                         "name" : "vcores",
@@ -777,7 +725,6 @@
                     "vCores" : 1,
                     "resourceInformations" : {
                       "resourceInformation" : [ {
-                        "attributes" : "",
                         "maximumAllocation" : 9223372036854775807,
                         "minimumAllocation" : 0,
                         "name" : "memory-mb",
@@ -785,7 +732,6 @@
                         "units" : "Mi",
                         "value" : 4096
                       }, {
-                        "attributes" : "",
                         "maximumAllocation" : 9223372036854775807,
                         "minimumAllocation" : 0,
                         "name" : "vcores",
@@ -800,7 +746,6 @@
                     "vCores" : 0,
                     "resourceInformations" : {
                       "resourceInformation" : [ {
-                        "attributes" : "",
                         "maximumAllocation" : 9223372036854775807,
                         "minimumAllocation" : 0,
                         "name" : "memory-mb",
@@ -808,7 +753,6 @@
                         "units" : "Mi",
                         "value" : 0
                       }, {
-                        "attributes" : "",
                         "maximumAllocation" : 9223372036854775807,
                         "minimumAllocation" : 0,
                         "name" : "vcores",
@@ -818,14 +762,13 @@
                       } ]
                     }
                   }
-                }
+                } ]
               },
               "minEffectiveCapacity" : {
                 "memory" : 2048,
                 "vCores" : 2,
                 "resourceInformations" : {
                   "resourceInformation" : [ {
-                    "attributes" : "",
                     "maximumAllocation" : 9223372036854775807,
                     "minimumAllocation" : 0,
                     "name" : "memory-mb",
@@ -833,7 +776,6 @@
                     "units" : "Mi",
                     "value" : 2048
                   }, {
-                    "attributes" : "",
                     "maximumAllocation" : 9223372036854775807,
                     "minimumAllocation" : 0,
                     "name" : "vcores",
@@ -848,7 +790,6 @@
                 "vCores" : 32,
                 "resourceInformations" : {
                   "resourceInformation" : [ {
-                    "attributes" : "",
                     "maximumAllocation" : 9223372036854775807,
                     "minimumAllocation" : 0,
                     "name" : "memory-mb",
@@ -856,7 +797,6 @@
                     "units" : "Mi",
                     "value" : 32768
                   }, {
-                    "attributes" : "",
                     "maximumAllocation" : 9223372036854775807,
                     "minimumAllocation" : 0,
                     "name" : "vcores",
@@ -871,7 +811,6 @@
                 "vCores" : 4,
                 "resourceInformations" : {
                   "resourceInformation" : [ {
-                    "attributes" : "",
                     "maximumAllocation" : 9223372036854775807,
                     "minimumAllocation" : 0,
                     "name" : "memory-mb",
@@ -879,7 +818,6 @@
                     "units" : "Mi",
                     "value" : 8192
                   }, {
-                    "attributes" : "",
                     "maximumAllocation" : 9223372036854775807,
                     "minimumAllocation" : 0,
                     "name" : "vcores",
@@ -904,29 +842,28 @@
               "queuePriority" : 0,
               "orderingPolicyInfo" : "fifo",
               "autoCreateChildQueueEnabled" : false,
-              "leafQueueTemplate" : "",
+              "leafQueueTemplate" : { },
               "mode" : "percentage",
               "queueType" : "leaf",
               "creationMethod" : "static",
               "autoCreationEligibility" : "off",
-              "autoQueueTemplateProperties" : "",
-              "autoQueueParentTemplateProperties" : "",
-              "autoQueueLeafTemplateProperties" : "",
+              "autoQueueTemplateProperties" : { },
+              "autoQueueParentTemplateProperties" : { },
+              "autoQueueLeafTemplateProperties" : { },
               "numActiveApplications" : 0,
               "numPendingApplications" : 0,
               "numContainers" : 0,
               "maxApplications" : 625,
               "maxApplicationsPerUser" : 625,
-              "userLimit" : 100,
-              "users" : "",
-              "userLimitFactor" : 1,
+              "userLimit" : 100.0,
+              "users" : { },
+              "userLimitFactor" : 1.0,
               "configuredMaxAMResourceLimit" : 0.1,
               "AMResourceLimit" : {
                 "memory" : 4096,
                 "vCores" : 1,
                 "resourceInformations" : {
                   "resourceInformation" : [ {
-                    "attributes" : "",
                     "maximumAllocation" : 9223372036854775807,
                     "minimumAllocation" : 0,
                     "name" : "memory-mb",
@@ -934,7 +871,6 @@
                     "units" : "Mi",
                     "value" : 4096
                   }, {
-                    "attributes" : "",
                     "maximumAllocation" : 9223372036854775807,
                     "minimumAllocation" : 0,
                     "name" : "vcores",
@@ -949,7 +885,6 @@
                 "vCores" : 0,
                 "resourceInformations" : {
                   "resourceInformation" : [ {
-                    "attributes" : "",
                     "maximumAllocation" : 9223372036854775807,
                     "minimumAllocation" : 0,
                     "name" : "memory-mb",
@@ -957,7 +892,6 @@
                     "units" : "Mi",
                     "value" : 0
                   }, {
-                    "attributes" : "",
                     "maximumAllocation" : 9223372036854775807,
                     "minimumAllocation" : 0,
                     "name" : "vcores",
@@ -972,7 +906,6 @@
                 "vCores" : 1,
                 "resourceInformations" : {
                   "resourceInformation" : [ {
-                    "attributes" : "",
                     "maximumAllocation" : 9223372036854775807,
                     "minimumAllocation" : 0,
                     "name" : "memory-mb",
@@ -980,7 +913,6 @@
                     "units" : "Mi",
                     "value" : 4096
                   }, {
-                    "attributes" : "",
                     "maximumAllocation" : 9223372036854775807,
                     "minimumAllocation" : 0,
                     "name" : "vcores",
@@ -997,16 +929,16 @@
               "maxApplicationLifetime" : -1,
               "defaultApplicationLifetime" : -1
             }, {
-              "@xsi.type" : "capacitySchedulerLeafQueueInfo",
+              "type" : "capacitySchedulerLeafQueueInfo",
               "queuePath" : "root.test1.test1_2",
               "capacity" : 12.5,
-              "usedCapacity" : 0,
-              "maxCapacity" : 100,
+              "usedCapacity" : 0.0,
+              "maxCapacity" : 100.0,
               "absoluteCapacity" : 6.25,
-              "absoluteMaxCapacity" : 100,
-              "absoluteUsedCapacity" : 0,
-              "weight" : -1,
-              "normalizedWeight" : 0,
+              "absoluteMaxCapacity" : 100.0,
+              "absoluteUsedCapacity" : 0.0,
+              "weight" : -1.0,
+              "normalizedWeight" : 0.0,
               "numApplications" : 0,
               "maxParallelApps" : 2147483647,
               "queueName" : "test1_2",
@@ -1017,7 +949,6 @@
                 "vCores" : 0,
                 "resourceInformations" : {
                   "resourceInformation" : [ {
-                    "attributes" : "",
                     "maximumAllocation" : 9223372036854775807,
                     "minimumAllocation" : 0,
                     "name" : "memory-mb",
@@ -1025,7 +956,6 @@
                     "units" : "Mi",
                     "value" : 0
                   }, {
-                    "attributes" : "",
                     "maximumAllocation" : 9223372036854775807,
                     "minimumAllocation" : 0,
                     "name" : "vcores",
@@ -1036,12 +966,12 @@
                 }
               },
               "hideReservationQueues" : false,
-              "nodeLabels" : "*",
+              "nodeLabels" : [ "*" ],
               "allocatedContainers" : 0,
               "reservedContainers" : 0,
               "pendingContainers" : 0,
               "capacities" : {
-                "queueCapacitiesByPartition" : {
+                "queueCapacitiesByPartition" : [ {
                   "partitionName" : "",
                   "queueCapacityVectorInfo" : {
                     "configuredCapacityVector" : "[memory-mb=12.5%,vcores=12.5%]",
@@ -1054,20 +984,19 @@
                     } ]
                   },
                   "capacity" : 12.5,
-                  "usedCapacity" : 0,
-                  "maxCapacity" : 100,
+                  "usedCapacity" : 0.0,
+                  "maxCapacity" : 100.0,
                   "absoluteCapacity" : 6.25,
-                  "absoluteUsedCapacity" : 0,
-                  "absoluteMaxCapacity" : 100,
-                  "maxAMLimitPercentage" : 10,
-                  "weight" : -1,
-                  "normalizedWeight" : 0,
+                  "absoluteUsedCapacity" : 0.0,
+                  "absoluteMaxCapacity" : 100.0,
+                  "maxAMLimitPercentage" : 10.0,
+                  "weight" : -1.0,
+                  "normalizedWeight" : 0.0,
                   "configuredMinResource" : {
                     "memory" : 0,
                     "vCores" : 0,
                     "resourceInformations" : {
                       "resourceInformation" : [ {
-                        "attributes" : "",
                         "maximumAllocation" : 8192,
                         "minimumAllocation" : 1024,
                         "name" : "memory-mb",
@@ -1075,7 +1004,6 @@
                         "units" : "Mi",
                         "value" : 0
                       }, {
-                        "attributes" : "",
                         "maximumAllocation" : 4,
                         "minimumAllocation" : 1,
                         "name" : "vcores",
@@ -1090,7 +1018,6 @@
                     "vCores" : 0,
                     "resourceInformations" : {
                       "resourceInformation" : [ {
-                        "attributes" : "",
                         "maximumAllocation" : 8192,
                         "minimumAllocation" : 1024,
                         "name" : "memory-mb",
@@ -1098,7 +1025,6 @@
                         "units" : "Mi",
                         "value" : 0
                       }, {
-                        "attributes" : "",
                         "maximumAllocation" : 4,
                         "minimumAllocation" : 1,
                         "name" : "vcores",
@@ -1113,7 +1039,6 @@
                     "vCores" : 2,
                     "resourceInformations" : {
                       "resourceInformation" : [ {
-                        "attributes" : "",
                         "maximumAllocation" : 9223372036854775807,
                         "minimumAllocation" : 0,
                         "name" : "memory-mb",
@@ -1121,7 +1046,6 @@
                         "units" : "Mi",
                         "value" : 2048
                       }, {
-                        "attributes" : "",
                         "maximumAllocation" : 9223372036854775807,
                         "minimumAllocation" : 0,
                         "name" : "vcores",
@@ -1136,7 +1060,6 @@
                     "vCores" : 32,
                     "resourceInformations" : {
                       "resourceInformation" : [ {
-                        "attributes" : "",
                         "maximumAllocation" : 9223372036854775807,
                         "minimumAllocation" : 0,
                         "name" : "memory-mb",
@@ -1144,7 +1067,6 @@
                         "units" : "Mi",
                         "value" : 32768
                       }, {
-                        "attributes" : "",
                         "maximumAllocation" : 9223372036854775807,
                         "minimumAllocation" : 0,
                         "name" : "vcores",
@@ -1154,17 +1076,16 @@
                       } ]
                     }
                   }
-                }
+                } ]
               },
               "resources" : {
-                "resourceUsagesByPartition" : {
+                "resourceUsagesByPartition" : [ {
                   "partitionName" : "",
                   "used" : {
                     "memory" : 0,
                     "vCores" : 0,
                     "resourceInformations" : {
                       "resourceInformation" : [ {
-                        "attributes" : "",
                         "maximumAllocation" : 9223372036854775807,
                         "minimumAllocation" : 0,
                         "name" : "memory-mb",
@@ -1172,7 +1093,6 @@
                         "units" : "Mi",
                         "value" : 0
                       }, {
-                        "attributes" : "",
                         "maximumAllocation" : 9223372036854775807,
                         "minimumAllocation" : 0,
                         "name" : "vcores",
@@ -1187,7 +1107,6 @@
                     "vCores" : 0,
                     "resourceInformations" : {
                       "resourceInformation" : [ {
-                        "attributes" : "",
                         "maximumAllocation" : 9223372036854775807,
                         "minimumAllocation" : 0,
                         "name" : "memory-mb",
@@ -1195,7 +1114,6 @@
                         "units" : "Mi",
                         "value" : 0
                       }, {
-                        "attributes" : "",
                         "maximumAllocation" : 9223372036854775807,
                         "minimumAllocation" : 0,
                         "name" : "vcores",
@@ -1210,7 +1128,6 @@
                     "vCores" : 0,
                     "resourceInformations" : {
                       "resourceInformation" : [ {
-                        "attributes" : "",
                         "maximumAllocation" : 9223372036854775807,
                         "minimumAllocation" : 0,
                         "name" : "memory-mb",
@@ -1218,7 +1135,6 @@
                         "units" : "Mi",
                         "value" : 0
                       }, {
-                        "attributes" : "",
                         "maximumAllocation" : 9223372036854775807,
                         "minimumAllocation" : 0,
                         "name" : "vcores",
@@ -1233,7 +1149,6 @@
                     "vCores" : 0,
                     "resourceInformations" : {
                       "resourceInformation" : [ {
-                        "attributes" : "",
                         "maximumAllocation" : 9223372036854775807,
                         "minimumAllocation" : 0,
                         "name" : "memory-mb",
@@ -1241,7 +1156,6 @@
                         "units" : "Mi",
                         "value" : 0
                       }, {
-                        "attributes" : "",
                         "maximumAllocation" : 9223372036854775807,
                         "minimumAllocation" : 0,
                         "name" : "vcores",
@@ -1256,7 +1170,6 @@
                     "vCores" : 1,
                     "resourceInformations" : {
                       "resourceInformation" : [ {
-                        "attributes" : "",
                         "maximumAllocation" : 9223372036854775807,
                         "minimumAllocation" : 0,
                         "name" : "memory-mb",
@@ -1264,7 +1177,6 @@
                         "units" : "Mi",
                         "value" : 4096
                       }, {
-                        "attributes" : "",
                         "maximumAllocation" : 9223372036854775807,
                         "minimumAllocation" : 0,
                         "name" : "vcores",
@@ -1279,7 +1191,6 @@
                     "vCores" : 0,
                     "resourceInformations" : {
                       "resourceInformation" : [ {
-                        "attributes" : "",
                         "maximumAllocation" : 9223372036854775807,
                         "minimumAllocation" : 0,
                         "name" : "memory-mb",
@@ -1287,7 +1198,6 @@
                         "units" : "Mi",
                         "value" : 0
                       }, {
-                        "attributes" : "",
                         "maximumAllocation" : 9223372036854775807,
                         "minimumAllocation" : 0,
                         "name" : "vcores",
@@ -1297,14 +1207,13 @@
                       } ]
                     }
                   }
-                }
+                } ]
               },
               "minEffectiveCapacity" : {
                 "memory" : 2048,
                 "vCores" : 2,
                 "resourceInformations" : {
                   "resourceInformation" : [ {
-                    "attributes" : "",
                     "maximumAllocation" : 9223372036854775807,
                     "minimumAllocation" : 0,
                     "name" : "memory-mb",
@@ -1312,7 +1221,6 @@
                     "units" : "Mi",
                     "value" : 2048
                   }, {
-                    "attributes" : "",
                     "maximumAllocation" : 9223372036854775807,
                     "minimumAllocation" : 0,
                     "name" : "vcores",
@@ -1327,7 +1235,6 @@
                 "vCores" : 32,
                 "resourceInformations" : {
                   "resourceInformation" : [ {
-                    "attributes" : "",
                     "maximumAllocation" : 9223372036854775807,
                     "minimumAllocation" : 0,
                     "name" : "memory-mb",
@@ -1335,7 +1242,6 @@
                     "units" : "Mi",
                     "value" : 32768
                   }, {
-                    "attributes" : "",
                     "maximumAllocation" : 9223372036854775807,
                     "minimumAllocation" : 0,
                     "name" : "vcores",
@@ -1350,7 +1256,6 @@
                 "vCores" : 4,
                 "resourceInformations" : {
                   "resourceInformation" : [ {
-                    "attributes" : "",
                     "maximumAllocation" : 9223372036854775807,
                     "minimumAllocation" : 0,
                     "name" : "memory-mb",
@@ -1358,7 +1263,6 @@
                     "units" : "Mi",
                     "value" : 8192
                   }, {
-                    "attributes" : "",
                     "maximumAllocation" : 9223372036854775807,
                     "minimumAllocation" : 0,
                     "name" : "vcores",
@@ -1383,29 +1287,28 @@
               "queuePriority" : 0,
               "orderingPolicyInfo" : "fifo",
               "autoCreateChildQueueEnabled" : false,
-              "leafQueueTemplate" : "",
+              "leafQueueTemplate" : { },
               "mode" : "percentage",
               "queueType" : "leaf",
               "creationMethod" : "static",
               "autoCreationEligibility" : "off",
-              "autoQueueTemplateProperties" : "",
-              "autoQueueParentTemplateProperties" : "",
-              "autoQueueLeafTemplateProperties" : "",
+              "autoQueueTemplateProperties" : { },
+              "autoQueueParentTemplateProperties" : { },
+              "autoQueueLeafTemplateProperties" : { },
               "numActiveApplications" : 0,
               "numPendingApplications" : 0,
               "numContainers" : 0,
               "maxApplications" : 625,
               "maxApplicationsPerUser" : 625,
-              "userLimit" : 100,
-              "users" : "",
-              "userLimitFactor" : 1,
+              "userLimit" : 100.0,
+              "users" : { },
+              "userLimitFactor" : 1.0,
               "configuredMaxAMResourceLimit" : 0.1,
               "AMResourceLimit" : {
                 "memory" : 4096,
                 "vCores" : 1,
                 "resourceInformations" : {
                   "resourceInformation" : [ {
-                    "attributes" : "",
                     "maximumAllocation" : 9223372036854775807,
                     "minimumAllocation" : 0,
                     "name" : "memory-mb",
@@ -1413,7 +1316,6 @@
                     "units" : "Mi",
                     "value" : 4096
                   }, {
-                    "attributes" : "",
                     "maximumAllocation" : 9223372036854775807,
                     "minimumAllocation" : 0,
                     "name" : "vcores",
@@ -1428,7 +1330,6 @@
                 "vCores" : 0,
                 "resourceInformations" : {
                   "resourceInformation" : [ {
-                    "attributes" : "",
                     "maximumAllocation" : 9223372036854775807,
                     "minimumAllocation" : 0,
                     "name" : "memory-mb",
@@ -1436,7 +1337,6 @@
                     "units" : "Mi",
                     "value" : 0
                   }, {
-                    "attributes" : "",
                     "maximumAllocation" : 9223372036854775807,
                     "minimumAllocation" : 0,
                     "name" : "vcores",
@@ -1451,7 +1351,6 @@
                 "vCores" : 1,
                 "resourceInformations" : {
                   "resourceInformation" : [ {
-                    "attributes" : "",
                     "maximumAllocation" : 9223372036854775807,
                     "minimumAllocation" : 0,
                     "name" : "memory-mb",
@@ -1459,7 +1358,6 @@
                     "units" : "Mi",
                     "value" : 4096
                   }, {
-                    "attributes" : "",
                     "maximumAllocation" : 9223372036854775807,
                     "minimumAllocation" : 0,
                     "name" : "vcores",
@@ -1476,16 +1374,16 @@
               "maxApplicationLifetime" : -1,
               "defaultApplicationLifetime" : -1
             }, {
-              "@xsi.type" : "capacitySchedulerLeafQueueInfo",
+              "type" : "capacitySchedulerLeafQueueInfo",
               "queuePath" : "root.test1.test1_3",
-              "capacity" : 75,
-              "usedCapacity" : 0,
-              "maxCapacity" : 100,
+              "capacity" : 75.0,
+              "usedCapacity" : 0.0,
+              "maxCapacity" : 100.0,
               "absoluteCapacity" : 37.5,
-              "absoluteMaxCapacity" : 100,
-              "absoluteUsedCapacity" : 0,
-              "weight" : -1,
-              "normalizedWeight" : 0,
+              "absoluteMaxCapacity" : 100.0,
+              "absoluteUsedCapacity" : 0.0,
+              "weight" : -1.0,
+              "normalizedWeight" : 0.0,
               "numApplications" : 0,
               "maxParallelApps" : 2147483647,
               "queueName" : "test1_3",
@@ -1496,7 +1394,6 @@
                 "vCores" : 0,
                 "resourceInformations" : {
                   "resourceInformation" : [ {
-                    "attributes" : "",
                     "maximumAllocation" : 9223372036854775807,
                     "minimumAllocation" : 0,
                     "name" : "memory-mb",
@@ -1504,7 +1401,6 @@
                     "units" : "Mi",
                     "value" : 0
                   }, {
-                    "attributes" : "",
                     "maximumAllocation" : 9223372036854775807,
                     "minimumAllocation" : 0,
                     "name" : "vcores",
@@ -1515,12 +1411,12 @@
                 }
               },
               "hideReservationQueues" : false,
-              "nodeLabels" : "*",
+              "nodeLabels" : [ "*" ],
               "allocatedContainers" : 0,
               "reservedContainers" : 0,
               "pendingContainers" : 0,
               "capacities" : {
-                "queueCapacitiesByPartition" : {
+                "queueCapacitiesByPartition" : [ {
                   "partitionName" : "",
                   "queueCapacityVectorInfo" : {
                     "configuredCapacityVector" : "[memory-mb=75.0%,vcores=75.0%]",
@@ -1532,21 +1428,20 @@
                       "resourceValue" : "75.0%"
                     } ]
                   },
-                  "capacity" : 75,
-                  "usedCapacity" : 0,
-                  "maxCapacity" : 100,
+                  "capacity" : 75.0,
+                  "usedCapacity" : 0.0,
+                  "maxCapacity" : 100.0,
                   "absoluteCapacity" : 37.5,
-                  "absoluteUsedCapacity" : 0,
-                  "absoluteMaxCapacity" : 100,
-                  "maxAMLimitPercentage" : 10,
-                  "weight" : -1,
-                  "normalizedWeight" : 0,
+                  "absoluteUsedCapacity" : 0.0,
+                  "absoluteMaxCapacity" : 100.0,
+                  "maxAMLimitPercentage" : 10.0,
+                  "weight" : -1.0,
+                  "normalizedWeight" : 0.0,
                   "configuredMinResource" : {
                     "memory" : 0,
                     "vCores" : 0,
                     "resourceInformations" : {
                       "resourceInformation" : [ {
-                        "attributes" : "",
                         "maximumAllocation" : 8192,
                         "minimumAllocation" : 1024,
                         "name" : "memory-mb",
@@ -1554,7 +1449,6 @@
                         "units" : "Mi",
                         "value" : 0
                       }, {
-                        "attributes" : "",
                         "maximumAllocation" : 4,
                         "minimumAllocation" : 1,
                         "name" : "vcores",
@@ -1569,7 +1463,6 @@
                     "vCores" : 0,
                     "resourceInformations" : {
                       "resourceInformation" : [ {
-                        "attributes" : "",
                         "maximumAllocation" : 8192,
                         "minimumAllocation" : 1024,
                         "name" : "memory-mb",
@@ -1577,7 +1470,6 @@
                         "units" : "Mi",
                         "value" : 0
                       }, {
-                        "attributes" : "",
                         "maximumAllocation" : 4,
                         "minimumAllocation" : 1,
                         "name" : "vcores",
@@ -1592,7 +1484,6 @@
                     "vCores" : 12,
                     "resourceInformations" : {
                       "resourceInformation" : [ {
-                        "attributes" : "",
                         "maximumAllocation" : 9223372036854775807,
                         "minimumAllocation" : 0,
                         "name" : "memory-mb",
@@ -1600,7 +1491,6 @@
                         "units" : "Mi",
                         "value" : 12288
                       }, {
-                        "attributes" : "",
                         "maximumAllocation" : 9223372036854775807,
                         "minimumAllocation" : 0,
                         "name" : "vcores",
@@ -1615,7 +1505,6 @@
                     "vCores" : 32,
                     "resourceInformations" : {
                       "resourceInformation" : [ {
-                        "attributes" : "",
                         "maximumAllocation" : 9223372036854775807,
                         "minimumAllocation" : 0,
                         "name" : "memory-mb",
@@ -1623,7 +1512,6 @@
                         "units" : "Mi",
                         "value" : 32768
                       }, {
-                        "attributes" : "",
                         "maximumAllocation" : 9223372036854775807,
                         "minimumAllocation" : 0,
                         "name" : "vcores",
@@ -1633,17 +1521,16 @@
                       } ]
                     }
                   }
-                }
+                } ]
               },
               "resources" : {
-                "resourceUsagesByPartition" : {
+                "resourceUsagesByPartition" : [ {
                   "partitionName" : "",
                   "used" : {
                     "memory" : 0,
                     "vCores" : 0,
                     "resourceInformations" : {
                       "resourceInformation" : [ {
-                        "attributes" : "",
                         "maximumAllocation" : 9223372036854775807,
                         "minimumAllocation" : 0,
                         "name" : "memory-mb",
@@ -1651,7 +1538,6 @@
                         "units" : "Mi",
                         "value" : 0
                       }, {
-                        "attributes" : "",
                         "maximumAllocation" : 9223372036854775807,
                         "minimumAllocation" : 0,
                         "name" : "vcores",
@@ -1666,7 +1552,6 @@
                     "vCores" : 0,
                     "resourceInformations" : {
                       "resourceInformation" : [ {
-                        "attributes" : "",
                         "maximumAllocation" : 9223372036854775807,
                         "minimumAllocation" : 0,
                         "name" : "memory-mb",
@@ -1674,7 +1559,6 @@
                         "units" : "Mi",
                         "value" : 0
                       }, {
-                        "attributes" : "",
                         "maximumAllocation" : 9223372036854775807,
                         "minimumAllocation" : 0,
                         "name" : "vcores",
@@ -1689,7 +1573,6 @@
                     "vCores" : 0,
                     "resourceInformations" : {
                       "resourceInformation" : [ {
-                        "attributes" : "",
                         "maximumAllocation" : 9223372036854775807,
                         "minimumAllocation" : 0,
                         "name" : "memory-mb",
@@ -1697,7 +1580,6 @@
                         "units" : "Mi",
                         "value" : 0
                       }, {
-                        "attributes" : "",
                         "maximumAllocation" : 9223372036854775807,
                         "minimumAllocation" : 0,
                         "name" : "vcores",
@@ -1712,7 +1594,6 @@
                     "vCores" : 0,
                     "resourceInformations" : {
                       "resourceInformation" : [ {
-                        "attributes" : "",
                         "maximumAllocation" : 9223372036854775807,
                         "minimumAllocation" : 0,
                         "name" : "memory-mb",
@@ -1720,7 +1601,6 @@
                         "units" : "Mi",
                         "value" : 0
                       }, {
-                        "attributes" : "",
                         "maximumAllocation" : 9223372036854775807,
                         "minimumAllocation" : 0,
                         "name" : "vcores",
@@ -1735,7 +1615,6 @@
                     "vCores" : 1,
                     "resourceInformations" : {
                       "resourceInformation" : [ {
-                        "attributes" : "",
                         "maximumAllocation" : 9223372036854775807,
                         "minimumAllocation" : 0,
                         "name" : "memory-mb",
@@ -1743,7 +1622,6 @@
                         "units" : "Mi",
                         "value" : 4096
                       }, {
-                        "attributes" : "",
                         "maximumAllocation" : 9223372036854775807,
                         "minimumAllocation" : 0,
                         "name" : "vcores",
@@ -1758,7 +1636,6 @@
                     "vCores" : 0,
                     "resourceInformations" : {
                       "resourceInformation" : [ {
-                        "attributes" : "",
                         "maximumAllocation" : 9223372036854775807,
                         "minimumAllocation" : 0,
                         "name" : "memory-mb",
@@ -1766,7 +1643,6 @@
                         "units" : "Mi",
                         "value" : 0
                       }, {
-                        "attributes" : "",
                         "maximumAllocation" : 9223372036854775807,
                         "minimumAllocation" : 0,
                         "name" : "vcores",
@@ -1776,14 +1652,13 @@
                       } ]
                     }
                   }
-                }
+                } ]
               },
               "minEffectiveCapacity" : {
                 "memory" : 12288,
                 "vCores" : 12,
                 "resourceInformations" : {
                   "resourceInformation" : [ {
-                    "attributes" : "",
                     "maximumAllocation" : 9223372036854775807,
                     "minimumAllocation" : 0,
                     "name" : "memory-mb",
@@ -1791,7 +1666,6 @@
                     "units" : "Mi",
                     "value" : 12288
                   }, {
-                    "attributes" : "",
                     "maximumAllocation" : 9223372036854775807,
                     "minimumAllocation" : 0,
                     "name" : "vcores",
@@ -1806,7 +1680,6 @@
                 "vCores" : 32,
                 "resourceInformations" : {
                   "resourceInformation" : [ {
-                    "attributes" : "",
                     "maximumAllocation" : 9223372036854775807,
                     "minimumAllocation" : 0,
                     "name" : "memory-mb",
@@ -1814,7 +1687,6 @@
                     "units" : "Mi",
                     "value" : 32768
                   }, {
-                    "attributes" : "",
                     "maximumAllocation" : 9223372036854775807,
                     "minimumAllocation" : 0,
                     "name" : "vcores",
@@ -1829,7 +1701,6 @@
                 "vCores" : 4,
                 "resourceInformations" : {
                   "resourceInformation" : [ {
-                    "attributes" : "",
                     "maximumAllocation" : 9223372036854775807,
                     "minimumAllocation" : 0,
                     "name" : "memory-mb",
@@ -1837,7 +1708,6 @@
                     "units" : "Mi",
                     "value" : 8192
                   }, {
-                    "attributes" : "",
                     "maximumAllocation" : 9223372036854775807,
                     "minimumAllocation" : 0,
                     "name" : "vcores",
@@ -1862,29 +1732,28 @@
               "queuePriority" : 0,
               "orderingPolicyInfo" : "fifo",
               "autoCreateChildQueueEnabled" : false,
-              "leafQueueTemplate" : "",
+              "leafQueueTemplate" : { },
               "mode" : "percentage",
               "queueType" : "leaf",
               "creationMethod" : "static",
               "autoCreationEligibility" : "off",
-              "autoQueueTemplateProperties" : "",
-              "autoQueueParentTemplateProperties" : "",
-              "autoQueueLeafTemplateProperties" : "",
+              "autoQueueTemplateProperties" : { },
+              "autoQueueParentTemplateProperties" : { },
+              "autoQueueLeafTemplateProperties" : { },
               "numActiveApplications" : 0,
               "numPendingApplications" : 0,
               "numContainers" : 0,
               "maxApplications" : 3750,
               "maxApplicationsPerUser" : 3750,
-              "userLimit" : 100,
-              "users" : "",
-              "userLimitFactor" : 1,
+              "userLimit" : 100.0,
+              "users" : { },
+              "userLimitFactor" : 1.0,
               "configuredMaxAMResourceLimit" : 0.1,
               "AMResourceLimit" : {
                 "memory" : 4096,
                 "vCores" : 1,
                 "resourceInformations" : {
                   "resourceInformation" : [ {
-                    "attributes" : "",
                     "maximumAllocation" : 9223372036854775807,
                     "minimumAllocation" : 0,
                     "name" : "memory-mb",
@@ -1892,7 +1761,6 @@
                     "units" : "Mi",
                     "value" : 4096
                   }, {
-                    "attributes" : "",
                     "maximumAllocation" : 9223372036854775807,
                     "minimumAllocation" : 0,
                     "name" : "vcores",
@@ -1907,7 +1775,6 @@
                 "vCores" : 0,
                 "resourceInformations" : {
                   "resourceInformation" : [ {
-                    "attributes" : "",
                     "maximumAllocation" : 9223372036854775807,
                     "minimumAllocation" : 0,
                     "name" : "memory-mb",
@@ -1915,7 +1782,6 @@
                     "units" : "Mi",
                     "value" : 0
                   }, {
-                    "attributes" : "",
                     "maximumAllocation" : 9223372036854775807,
                     "minimumAllocation" : 0,
                     "name" : "vcores",
@@ -1930,7 +1796,6 @@
                 "vCores" : 1,
                 "resourceInformations" : {
                   "resourceInformation" : [ {
-                    "attributes" : "",
                     "maximumAllocation" : 9223372036854775807,
                     "minimumAllocation" : 0,
                     "name" : "memory-mb",
@@ -1938,7 +1803,6 @@
                     "units" : "Mi",
                     "value" : 4096
                   }, {
-                    "attributes" : "",
                     "maximumAllocation" : 9223372036854775807,
                     "minimumAllocation" : 0,
                     "name" : "vcores",
@@ -1961,7 +1825,6 @@
             "vCores" : 0,
             "resourceInformations" : {
               "resourceInformation" : [ {
-                "attributes" : "",
                 "maximumAllocation" : 9223372036854775807,
                 "minimumAllocation" : 0,
                 "name" : "memory-mb",
@@ -1969,7 +1832,6 @@
                 "units" : "Mi",
                 "value" : 0
               }, {
-                "attributes" : "",
                 "maximumAllocation" : 9223372036854775807,
                 "minimumAllocation" : 0,
                 "name" : "vcores",
@@ -1980,12 +1842,12 @@
             }
           },
           "hideReservationQueues" : false,
-          "nodeLabels" : "*",
+          "nodeLabels" : [ "*" ],
           "allocatedContainers" : 0,
           "reservedContainers" : 0,
           "pendingContainers" : 0,
           "capacities" : {
-            "queueCapacitiesByPartition" : {
+            "queueCapacitiesByPartition" : [ {
               "partitionName" : "",
               "queueCapacityVectorInfo" : {
                 "configuredCapacityVector" : "[memory-mb=50.0%,vcores=50.0%]",
@@ -1997,21 +1859,20 @@
                   "resourceValue" : "50.0%"
                 } ]
               },
-              "capacity" : 50,
-              "usedCapacity" : 0,
-              "maxCapacity" : 100,
-              "absoluteCapacity" : 50,
-              "absoluteUsedCapacity" : 0,
-              "absoluteMaxCapacity" : 100,
-              "maxAMLimitPercentage" : 0,
-              "weight" : -1,
-              "normalizedWeight" : 0,
+              "capacity" : 50.0,
+              "usedCapacity" : 0.0,
+              "maxCapacity" : 100.0,
+              "absoluteCapacity" : 50.0,
+              "absoluteUsedCapacity" : 0.0,
+              "absoluteMaxCapacity" : 100.0,
+              "maxAMLimitPercentage" : 0.0,
+              "weight" : -1.0,
+              "normalizedWeight" : 0.0,
               "configuredMinResource" : {
                 "memory" : 0,
                 "vCores" : 0,
                 "resourceInformations" : {
                   "resourceInformation" : [ {
-                    "attributes" : "",
                     "maximumAllocation" : 8192,
                     "minimumAllocation" : 1024,
                     "name" : "memory-mb",
@@ -2019,7 +1880,6 @@
                     "units" : "Mi",
                     "value" : 0
                   }, {
-                    "attributes" : "",
                     "maximumAllocation" : 4,
                     "minimumAllocation" : 1,
                     "name" : "vcores",
@@ -2034,7 +1894,6 @@
                 "vCores" : 0,
                 "resourceInformations" : {
                   "resourceInformation" : [ {
-                    "attributes" : "",
                     "maximumAllocation" : 8192,
                     "minimumAllocation" : 1024,
                     "name" : "memory-mb",
@@ -2042,7 +1901,6 @@
                     "units" : "Mi",
                     "value" : 0
                   }, {
-                    "attributes" : "",
                     "maximumAllocation" : 4,
                     "minimumAllocation" : 1,
                     "name" : "vcores",
@@ -2057,7 +1915,6 @@
                 "vCores" : 16,
                 "resourceInformations" : {
                   "resourceInformation" : [ {
-                    "attributes" : "",
                     "maximumAllocation" : 9223372036854775807,
                     "minimumAllocation" : 0,
                     "name" : "memory-mb",
@@ -2065,7 +1922,6 @@
                     "units" : "Mi",
                     "value" : 16384
                   }, {
-                    "attributes" : "",
                     "maximumAllocation" : 9223372036854775807,
                     "minimumAllocation" : 0,
                     "name" : "vcores",
@@ -2080,7 +1936,6 @@
                 "vCores" : 32,
                 "resourceInformations" : {
                   "resourceInformation" : [ {
-                    "attributes" : "",
                     "maximumAllocation" : 9223372036854775807,
                     "minimumAllocation" : 0,
                     "name" : "memory-mb",
@@ -2088,7 +1943,6 @@
                     "units" : "Mi",
                     "value" : 32768
                   }, {
-                    "attributes" : "",
                     "maximumAllocation" : 9223372036854775807,
                     "minimumAllocation" : 0,
                     "name" : "vcores",
@@ -2098,17 +1952,16 @@
                   } ]
                 }
               }
-            }
+            } ]
           },
           "resources" : {
-            "resourceUsagesByPartition" : {
+            "resourceUsagesByPartition" : [ {
               "partitionName" : "",
               "used" : {
                 "memory" : 0,
                 "vCores" : 0,
                 "resourceInformations" : {
                   "resourceInformation" : [ {
-                    "attributes" : "",
                     "maximumAllocation" : 9223372036854775807,
                     "minimumAllocation" : 0,
                     "name" : "memory-mb",
@@ -2116,7 +1969,6 @@
                     "units" : "Mi",
                     "value" : 0
                   }, {
-                    "attributes" : "",
                     "maximumAllocation" : 9223372036854775807,
                     "minimumAllocation" : 0,
                     "name" : "vcores",
@@ -2131,7 +1983,6 @@
                 "vCores" : 0,
                 "resourceInformations" : {
                   "resourceInformation" : [ {
-                    "attributes" : "",
                     "maximumAllocation" : 9223372036854775807,
                     "minimumAllocation" : 0,
                     "name" : "memory-mb",
@@ -2139,7 +1990,6 @@
                     "units" : "Mi",
                     "value" : 0
                   }, {
-                    "attributes" : "",
                     "maximumAllocation" : 9223372036854775807,
                     "minimumAllocation" : 0,
                     "name" : "vcores",
@@ -2154,7 +2004,6 @@
                 "vCores" : 0,
                 "resourceInformations" : {
                   "resourceInformation" : [ {
-                    "attributes" : "",
                     "maximumAllocation" : 9223372036854775807,
                     "minimumAllocation" : 0,
                     "name" : "memory-mb",
@@ -2162,7 +2011,6 @@
                     "units" : "Mi",
                     "value" : 0
                   }, {
-                    "attributes" : "",
                     "maximumAllocation" : 9223372036854775807,
                     "minimumAllocation" : 0,
                     "name" : "vcores",
@@ -2172,14 +2020,13 @@
                   } ]
                 }
               }
-            }
+            } ]
           },
           "minEffectiveCapacity" : {
             "memory" : 16384,
             "vCores" : 16,
             "resourceInformations" : {
               "resourceInformation" : [ {
-                "attributes" : "",
                 "maximumAllocation" : 9223372036854775807,
                 "minimumAllocation" : 0,
                 "name" : "memory-mb",
@@ -2187,7 +2034,6 @@
                 "units" : "Mi",
                 "value" : 16384
               }, {
-                "attributes" : "",
                 "maximumAllocation" : 9223372036854775807,
                 "minimumAllocation" : 0,
                 "name" : "vcores",
@@ -2202,7 +2048,6 @@
             "vCores" : 32,
             "resourceInformations" : {
               "resourceInformation" : [ {
-                "attributes" : "",
                 "maximumAllocation" : 9223372036854775807,
                 "minimumAllocation" : 0,
                 "name" : "memory-mb",
@@ -2210,7 +2055,6 @@
                 "units" : "Mi",
                 "value" : 32768
               }, {
-                "attributes" : "",
                 "maximumAllocation" : 9223372036854775807,
                 "minimumAllocation" : 0,
                 "name" : "vcores",
@@ -2225,7 +2069,6 @@
             "vCores" : 4,
             "resourceInformations" : {
               "resourceInformation" : [ {
-                "attributes" : "",
                 "maximumAllocation" : 9223372036854775807,
                 "minimumAllocation" : 0,
                 "name" : "memory-mb",
@@ -2233,7 +2076,6 @@
                 "units" : "Mi",
                 "value" : 8192
               }, {
-                "attributes" : "",
                 "maximumAllocation" : 9223372036854775807,
                 "minimumAllocation" : 0,
                 "name" : "vcores",
@@ -2258,25 +2100,25 @@
           "queuePriority" : 0,
           "orderingPolicyInfo" : "utilization",
           "autoCreateChildQueueEnabled" : false,
-          "leafQueueTemplate" : "",
+          "leafQueueTemplate" : { },
           "mode" : "percentage",
           "queueType" : "parent",
           "creationMethod" : "static",
           "autoCreationEligibility" : "off",
-          "autoQueueTemplateProperties" : "",
-          "autoQueueParentTemplateProperties" : "",
-          "autoQueueLeafTemplateProperties" : ""
+          "autoQueueTemplateProperties" : { },
+          "autoQueueParentTemplateProperties" : { },
+          "autoQueueLeafTemplateProperties" : { }
         }, {
-          "@xsi.type" : "capacitySchedulerLeafQueueInfo",
+          "type" : "capacitySchedulerLeafQueueInfo",
           "queuePath" : "root.test2",
           "capacity" : 37.5,
-          "usedCapacity" : 0,
-          "maxCapacity" : 100,
+          "usedCapacity" : 0.0,
+          "maxCapacity" : 100.0,
           "absoluteCapacity" : 37.5,
-          "absoluteMaxCapacity" : 100,
-          "absoluteUsedCapacity" : 0,
-          "weight" : -1,
-          "normalizedWeight" : 0,
+          "absoluteMaxCapacity" : 100.0,
+          "absoluteUsedCapacity" : 0.0,
+          "weight" : -1.0,
+          "normalizedWeight" : 0.0,
           "numApplications" : 0,
           "maxParallelApps" : 2147483647,
           "queueName" : "test2",
@@ -2287,7 +2129,6 @@
             "vCores" : 0,
             "resourceInformations" : {
               "resourceInformation" : [ {
-                "attributes" : "",
                 "maximumAllocation" : 9223372036854775807,
                 "minimumAllocation" : 0,
                 "name" : "memory-mb",
@@ -2295,7 +2136,6 @@
                 "units" : "Mi",
                 "value" : 0
               }, {
-                "attributes" : "",
                 "maximumAllocation" : 9223372036854775807,
                 "minimumAllocation" : 0,
                 "name" : "vcores",
@@ -2306,12 +2146,12 @@
             }
           },
           "hideReservationQueues" : false,
-          "nodeLabels" : "*",
+          "nodeLabels" : [ "*" ],
           "allocatedContainers" : 0,
           "reservedContainers" : 0,
           "pendingContainers" : 0,
           "capacities" : {
-            "queueCapacitiesByPartition" : {
+            "queueCapacitiesByPartition" : [ {
               "partitionName" : "",
               "queueCapacityVectorInfo" : {
                 "configuredCapacityVector" : "[memory-mb=37.5%,vcores=37.5%]",
@@ -2324,20 +2164,19 @@
                 } ]
               },
               "capacity" : 37.5,
-              "usedCapacity" : 0,
-              "maxCapacity" : 100,
+              "usedCapacity" : 0.0,
+              "maxCapacity" : 100.0,
               "absoluteCapacity" : 37.5,
-              "absoluteUsedCapacity" : 0,
-              "absoluteMaxCapacity" : 100,
-              "maxAMLimitPercentage" : 10,
-              "weight" : -1,
-              "normalizedWeight" : 0,
+              "absoluteUsedCapacity" : 0.0,
+              "absoluteMaxCapacity" : 100.0,
+              "maxAMLimitPercentage" : 10.0,
+              "weight" : -1.0,
+              "normalizedWeight" : 0.0,
               "configuredMinResource" : {
                 "memory" : 0,
                 "vCores" : 0,
                 "resourceInformations" : {
                   "resourceInformation" : [ {
-                    "attributes" : "",
                     "maximumAllocation" : 8192,
                     "minimumAllocation" : 1024,
                     "name" : "memory-mb",
@@ -2345,7 +2184,6 @@
                     "units" : "Mi",
                     "value" : 0
                   }, {
-                    "attributes" : "",
                     "maximumAllocation" : 4,
                     "minimumAllocation" : 1,
                     "name" : "vcores",
@@ -2360,7 +2198,6 @@
                 "vCores" : 0,
                 "resourceInformations" : {
                   "resourceInformation" : [ {
-                    "attributes" : "",
                     "maximumAllocation" : 8192,
                     "minimumAllocation" : 1024,
                     "name" : "memory-mb",
@@ -2368,7 +2205,6 @@
                     "units" : "Mi",
                     "value" : 0
                   }, {
-                    "attributes" : "",
                     "maximumAllocation" : 4,
                     "minimumAllocation" : 1,
                     "name" : "vcores",
@@ -2383,7 +2219,6 @@
                 "vCores" : 12,
                 "resourceInformations" : {
                   "resourceInformation" : [ {
-                    "attributes" : "",
                     "maximumAllocation" : 9223372036854775807,
                     "minimumAllocation" : 0,
                     "name" : "memory-mb",
@@ -2391,7 +2226,6 @@
                     "units" : "Mi",
                     "value" : 12288
                   }, {
-                    "attributes" : "",
                     "maximumAllocation" : 9223372036854775807,
                     "minimumAllocation" : 0,
                     "name" : "vcores",
@@ -2406,7 +2240,6 @@
                 "vCores" : 32,
                 "resourceInformations" : {
                   "resourceInformation" : [ {
-                    "attributes" : "",
                     "maximumAllocation" : 9223372036854775807,
                     "minimumAllocation" : 0,
                     "name" : "memory-mb",
@@ -2414,7 +2247,6 @@
                     "units" : "Mi",
                     "value" : 32768
                   }, {
-                    "attributes" : "",
                     "maximumAllocation" : 9223372036854775807,
                     "minimumAllocation" : 0,
                     "name" : "vcores",
@@ -2424,17 +2256,16 @@
                   } ]
                 }
               }
-            }
+            } ]
           },
           "resources" : {
-            "resourceUsagesByPartition" : {
+            "resourceUsagesByPartition" : [ {
               "partitionName" : "",
               "used" : {
                 "memory" : 0,
                 "vCores" : 0,
                 "resourceInformations" : {
                   "resourceInformation" : [ {
-                    "attributes" : "",
                     "maximumAllocation" : 9223372036854775807,
                     "minimumAllocation" : 0,
                     "name" : "memory-mb",
@@ -2442,7 +2273,6 @@
                     "units" : "Mi",
                     "value" : 0
                   }, {
-                    "attributes" : "",
                     "maximumAllocation" : 9223372036854775807,
                     "minimumAllocation" : 0,
                     "name" : "vcores",
@@ -2457,7 +2287,6 @@
                 "vCores" : 0,
                 "resourceInformations" : {
                   "resourceInformation" : [ {
-                    "attributes" : "",
                     "maximumAllocation" : 9223372036854775807,
                     "minimumAllocation" : 0,
                     "name" : "memory-mb",
@@ -2465,7 +2294,6 @@
                     "units" : "Mi",
                     "value" : 0
                   }, {
-                    "attributes" : "",
                     "maximumAllocation" : 9223372036854775807,
                     "minimumAllocation" : 0,
                     "name" : "vcores",
@@ -2480,7 +2308,6 @@
                 "vCores" : 0,
                 "resourceInformations" : {
                   "resourceInformation" : [ {
-                    "attributes" : "",
                     "maximumAllocation" : 9223372036854775807,
                     "minimumAllocation" : 0,
                     "name" : "memory-mb",
@@ -2488,7 +2315,6 @@
                     "units" : "Mi",
                     "value" : 0
                   }, {
-                    "attributes" : "",
                     "maximumAllocation" : 9223372036854775807,
                     "minimumAllocation" : 0,
                     "name" : "vcores",
@@ -2503,7 +2329,6 @@
                 "vCores" : 0,
                 "resourceInformations" : {
                   "resourceInformation" : [ {
-                    "attributes" : "",
                     "maximumAllocation" : 9223372036854775807,
                     "minimumAllocation" : 0,
                     "name" : "memory-mb",
@@ -2511,7 +2336,6 @@
                     "units" : "Mi",
                     "value" : 0
                   }, {
-                    "attributes" : "",
                     "maximumAllocation" : 9223372036854775807,
                     "minimumAllocation" : 0,
                     "name" : "vcores",
@@ -2526,7 +2350,6 @@
                 "vCores" : 1,
                 "resourceInformations" : {
                   "resourceInformation" : [ {
-                    "attributes" : "",
                     "maximumAllocation" : 9223372036854775807,
                     "minimumAllocation" : 0,
                     "name" : "memory-mb",
@@ -2534,7 +2357,6 @@
                     "units" : "Mi",
                     "value" : 4096
                   }, {
-                    "attributes" : "",
                     "maximumAllocation" : 9223372036854775807,
                     "minimumAllocation" : 0,
                     "name" : "vcores",
@@ -2549,7 +2371,6 @@
                 "vCores" : 0,
                 "resourceInformations" : {
                   "resourceInformation" : [ {
-                    "attributes" : "",
                     "maximumAllocation" : 9223372036854775807,
                     "minimumAllocation" : 0,
                     "name" : "memory-mb",
@@ -2557,7 +2378,6 @@
                     "units" : "Mi",
                     "value" : 0
                   }, {
-                    "attributes" : "",
                     "maximumAllocation" : 9223372036854775807,
                     "minimumAllocation" : 0,
                     "name" : "vcores",
@@ -2567,14 +2387,13 @@
                   } ]
                 }
               }
-            }
+            } ]
           },
           "minEffectiveCapacity" : {
             "memory" : 12288,
             "vCores" : 12,
             "resourceInformations" : {
               "resourceInformation" : [ {
-                "attributes" : "",
                 "maximumAllocation" : 9223372036854775807,
                 "minimumAllocation" : 0,
                 "name" : "memory-mb",
@@ -2582,7 +2401,6 @@
                 "units" : "Mi",
                 "value" : 12288
               }, {
-                "attributes" : "",
                 "maximumAllocation" : 9223372036854775807,
                 "minimumAllocation" : 0,
                 "name" : "vcores",
@@ -2597,7 +2415,6 @@
             "vCores" : 32,
             "resourceInformations" : {
               "resourceInformation" : [ {
-                "attributes" : "",
                 "maximumAllocation" : 9223372036854775807,
                 "minimumAllocation" : 0,
                 "name" : "memory-mb",
@@ -2605,7 +2422,6 @@
                 "units" : "Mi",
                 "value" : 32768
               }, {
-                "attributes" : "",
                 "maximumAllocation" : 9223372036854775807,
                 "minimumAllocation" : 0,
                 "name" : "vcores",
@@ -2620,7 +2436,6 @@
             "vCores" : 4,
             "resourceInformations" : {
               "resourceInformation" : [ {
-                "attributes" : "",
                 "maximumAllocation" : 9223372036854775807,
                 "minimumAllocation" : 0,
                 "name" : "memory-mb",
@@ -2628,7 +2443,6 @@
                 "units" : "Mi",
                 "value" : 8192
               }, {
-                "attributes" : "",
                 "maximumAllocation" : 9223372036854775807,
                 "minimumAllocation" : 0,
                 "name" : "vcores",
@@ -2653,29 +2467,28 @@
           "queuePriority" : 0,
           "orderingPolicyInfo" : "fifo",
           "autoCreateChildQueueEnabled" : false,
-          "leafQueueTemplate" : "",
+          "leafQueueTemplate" : { },
           "mode" : "percentage",
           "queueType" : "leaf",
           "creationMethod" : "static",
           "autoCreationEligibility" : "off",
-          "autoQueueTemplateProperties" : "",
-          "autoQueueParentTemplateProperties" : "",
-          "autoQueueLeafTemplateProperties" : "",
+          "autoQueueTemplateProperties" : { },
+          "autoQueueParentTemplateProperties" : { },
+          "autoQueueLeafTemplateProperties" : { },
           "numActiveApplications" : 0,
           "numPendingApplications" : 0,
           "numContainers" : 0,
           "maxApplications" : 3750,
           "maxApplicationsPerUser" : 3750,
-          "userLimit" : 100,
-          "users" : "",
-          "userLimitFactor" : 1,
+          "userLimit" : 100.0,
+          "users" : { },
+          "userLimitFactor" : 1.0,
           "configuredMaxAMResourceLimit" : 0.1,
           "AMResourceLimit" : {
             "memory" : 4096,
             "vCores" : 1,
             "resourceInformations" : {
               "resourceInformation" : [ {
-                "attributes" : "",
                 "maximumAllocation" : 9223372036854775807,
                 "minimumAllocation" : 0,
                 "name" : "memory-mb",
@@ -2683,7 +2496,6 @@
                 "units" : "Mi",
                 "value" : 4096
               }, {
-                "attributes" : "",
                 "maximumAllocation" : 9223372036854775807,
                 "minimumAllocation" : 0,
                 "name" : "vcores",
@@ -2698,7 +2510,6 @@
             "vCores" : 0,
             "resourceInformations" : {
               "resourceInformation" : [ {
-                "attributes" : "",
                 "maximumAllocation" : 9223372036854775807,
                 "minimumAllocation" : 0,
                 "name" : "memory-mb",
@@ -2706,7 +2517,6 @@
                 "units" : "Mi",
                 "value" : 0
               }, {
-                "attributes" : "",
                 "maximumAllocation" : 9223372036854775807,
                 "minimumAllocation" : 0,
                 "name" : "vcores",
@@ -2721,7 +2531,6 @@
             "vCores" : 1,
             "resourceInformations" : {
               "resourceInformation" : [ {
-                "attributes" : "",
                 "maximumAllocation" : 9223372036854775807,
                 "minimumAllocation" : 0,
                 "name" : "memory-mb",
@@ -2729,7 +2538,6 @@
                 "units" : "Mi",
                 "value" : 4096
               }, {
-                "attributes" : "",
                 "maximumAllocation" : 9223372036854775807,
                 "minimumAllocation" : 0,
                 "name" : "vcores",
@@ -2748,7 +2556,7 @@
         } ]
       },
       "capacities" : {
-        "queueCapacitiesByPartition" : {
+        "queueCapacitiesByPartition" : [ {
           "partitionName" : "",
           "queueCapacityVectorInfo" : {
             "configuredCapacityVector" : "[memory-mb=100.0%,vcores=100.0%]",
@@ -2760,21 +2568,20 @@
               "resourceValue" : "100.0%"
             } ]
           },
-          "capacity" : 100,
-          "usedCapacity" : 0,
-          "maxCapacity" : 100,
-          "absoluteCapacity" : 100,
-          "absoluteUsedCapacity" : 0,
-          "absoluteMaxCapacity" : 100,
-          "maxAMLimitPercentage" : 0,
-          "weight" : -1,
-          "normalizedWeight" : 0,
+          "capacity" : 100.0,
+          "usedCapacity" : 0.0,
+          "maxCapacity" : 100.0,
+          "absoluteCapacity" : 100.0,
+          "absoluteUsedCapacity" : 0.0,
+          "absoluteMaxCapacity" : 100.0,
+          "maxAMLimitPercentage" : 0.0,
+          "weight" : -1.0,
+          "normalizedWeight" : 0.0,
           "configuredMinResource" : {
             "memory" : 0,
             "vCores" : 0,
             "resourceInformations" : {
               "resourceInformation" : [ {
-                "attributes" : "",
                 "maximumAllocation" : 8192,
                 "minimumAllocation" : 1024,
                 "name" : "memory-mb",
@@ -2782,7 +2589,6 @@
                 "units" : "Mi",
                 "value" : 0
               }, {
-                "attributes" : "",
                 "maximumAllocation" : 4,
                 "minimumAllocation" : 1,
                 "name" : "vcores",
@@ -2797,7 +2603,6 @@
             "vCores" : 0,
             "resourceInformations" : {
               "resourceInformation" : [ {
-                "attributes" : "",
                 "maximumAllocation" : 8192,
                 "minimumAllocation" : 1024,
                 "name" : "memory-mb",
@@ -2805,7 +2610,6 @@
                 "units" : "Mi",
                 "value" : 0
               }, {
-                "attributes" : "",
                 "maximumAllocation" : 4,
                 "minimumAllocation" : 1,
                 "name" : "vcores",
@@ -2820,7 +2624,6 @@
             "vCores" : 32,
             "resourceInformations" : {
               "resourceInformation" : [ {
-                "attributes" : "",
                 "maximumAllocation" : 9223372036854775807,
                 "minimumAllocation" : 0,
                 "name" : "memory-mb",
@@ -2828,7 +2631,6 @@
                 "units" : "Mi",
                 "value" : 32768
               }, {
-                "attributes" : "",
                 "maximumAllocation" : 9223372036854775807,
                 "minimumAllocation" : 0,
                 "name" : "vcores",
@@ -2843,7 +2645,6 @@
             "vCores" : 32,
             "resourceInformations" : {
               "resourceInformation" : [ {
-                "attributes" : "",
                 "maximumAllocation" : 9223372036854775807,
                 "minimumAllocation" : 0,
                 "name" : "memory-mb",
@@ -2851,7 +2652,6 @@
                 "units" : "Mi",
                 "value" : 32768
               }, {
-                "attributes" : "",
                 "maximumAllocation" : 9223372036854775807,
                 "minimumAllocation" : 0,
                 "name" : "vcores",
@@ -2861,7 +2661,7 @@
               } ]
             }
           }
-        }
+        } ]
       },
       "health" : {
         "lastrun" : 0,
@@ -2894,7 +2694,6 @@
             "vCores" : 0,
             "resourceInformations" : {
               "resourceInformation" : [ {
-                "attributes" : "",
                 "maximumAllocation" : 9223372036854775807,
                 "minimumAllocation" : 0,
                 "name" : "memory-mb",
@@ -2902,7 +2701,6 @@
                 "units" : "Mi",
                 "value" : 0
               }, {
-                "attributes" : "",
                 "maximumAllocation" : 9223372036854775807,
                 "minimumAllocation" : 0,
                 "name" : "vcores",
@@ -2920,7 +2718,6 @@
             "vCores" : 0,
             "resourceInformations" : {
               "resourceInformation" : [ {
-                "attributes" : "",
                 "maximumAllocation" : 9223372036854775807,
                 "minimumAllocation" : 0,
                 "name" : "memory-mb",
@@ -2928,7 +2725,6 @@
                 "units" : "Mi",
                 "value" : 0
               }, {
-                "attributes" : "",
                 "maximumAllocation" : 9223372036854775807,
                 "minimumAllocation" : 0,
                 "name" : "vcores",
@@ -2946,7 +2742,6 @@
             "vCores" : 0,
             "resourceInformations" : {
               "resourceInformation" : [ {
-                "attributes" : "",
                 "maximumAllocation" : 9223372036854775807,
                 "minimumAllocation" : 0,
                 "name" : "memory-mb",
@@ -2954,7 +2749,6 @@
                 "units" : "Mi",
                 "value" : 0
               }, {
-                "attributes" : "",
                 "maximumAllocation" : 9223372036854775807,
                 "minimumAllocation" : 0,
                 "name" : "vcores",
@@ -2971,7 +2765,6 @@
         "vCores" : 4,
         "resourceInformations" : {
           "resourceInformation" : [ {
-            "attributes" : "",
             "maximumAllocation" : 9223372036854775807,
             "minimumAllocation" : 0,
             "name" : "memory-mb",
@@ -2979,7 +2772,6 @@
             "units" : "Mi",
             "value" : 8192
           }, {
-            "attributes" : "",
             "maximumAllocation" : 9223372036854775807,
             "minimumAllocation" : 0,
             "name" : "vcores",
@@ -3007,9 +2799,9 @@
       "queueType" : "parent",
       "creationMethod" : "static",
       "autoCreationEligibility" : "off",
-      "autoQueueTemplateProperties" : "",
-      "autoQueueParentTemplateProperties" : "",
-      "autoQueueLeafTemplateProperties" : ""
+      "autoQueueTemplateProperties" : { },
+      "autoQueueParentTemplateProperties" : { },
+      "autoQueueLeafTemplateProperties" : { }
     }
   }
 }
\ No newline at end of file
diff --git a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/resources/webapp/dynamic-testPercentageMode-legacy-0.json b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/resources/webapp/dynamic-testPercentageMode-legacy-0.json
index f581827546f06..94c7381604c8d 100644
--- a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/resources/webapp/dynamic-testPercentageMode-legacy-0.json
+++ b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/resources/webapp/dynamic-testPercentageMode-legacy-0.json
@@ -91,26 +91,19 @@
                 "vCores" : 0,
                 "resourceInformations" : {
                   "resourceInformation" : [ {
-                    "maximumAllocation" : 9223372036854775807,
-                    "minimumAllocation" : 0,
+                    "maximumAllocation" : 8192,
+                    "minimumAllocation" : 1024,
                     "name" : "memory-mb",
                     "resourceType" : "COUNTABLE",
                     "units" : "Mi",
                     "value" : 0
                   }, {
-                    "maximumAllocation" : 9223372036854775807,
-                    "minimumAllocation" : 0,
+                    "maximumAllocation" : 4,
+                    "minimumAllocation" : 1,
                     "name" : "vcores",
                     "resourceType" : "COUNTABLE",
                     "units" : "",
                     "value" : 0
-                  }, {
-                    "maximumAllocation" : 2147483647,
-                    "minimumAllocation" : 0,
-                    "name" : "yarn.io/gpu",
-                    "resourceType" : "COUNTABLE",
-                    "units" : "",
-                    "value" : 0
                   } ]
                 }
               },
@@ -119,26 +112,19 @@
                 "vCores" : 0,
                 "resourceInformations" : {
                   "resourceInformation" : [ {
-                    "maximumAllocation" : 9223372036854775807,
-                    "minimumAllocation" : 0,
+                    "maximumAllocation" : 8192,
+                    "minimumAllocation" : 1024,
                     "name" : "memory-mb",
                     "resourceType" : "COUNTABLE",
                     "units" : "Mi",
                     "value" : 0
                   }, {
-                    "maximumAllocation" : 9223372036854775807,
-                    "minimumAllocation" : 0,
+                    "maximumAllocation" : 4,
+                    "minimumAllocation" : 1,
                     "name" : "vcores",
                     "resourceType" : "COUNTABLE",
                     "units" : "",
                     "value" : 0
-                  }, {
-                    "maximumAllocation" : 2147483647,
-                    "minimumAllocation" : 0,
-                    "name" : "yarn.io/gpu",
-                    "resourceType" : "COUNTABLE",
-                    "units" : "",
-                    "value" : 0
                   } ]
                 }
               },
@@ -566,26 +552,19 @@
                     "vCores" : 0,
                     "resourceInformations" : {
                       "resourceInformation" : [ {
-                        "maximumAllocation" : 9223372036854775807,
-                        "minimumAllocation" : 0,
+                        "maximumAllocation" : 8192,
+                        "minimumAllocation" : 1024,
                         "name" : "memory-mb",
                         "resourceType" : "COUNTABLE",
                         "units" : "Mi",
                         "value" : 0
                       }, {
-                        "maximumAllocation" : 9223372036854775807,
-                        "minimumAllocation" : 0,
+                        "maximumAllocation" : 4,
+                        "minimumAllocation" : 1,
                         "name" : "vcores",
                         "resourceType" : "COUNTABLE",
                         "units" : "",
                         "value" : 0
-                      }, {
-                        "maximumAllocation" : 2147483647,
-                        "minimumAllocation" : 0,
-                        "name" : "yarn.io/gpu",
-                        "resourceType" : "COUNTABLE",
-                        "units" : "",
-                        "value" : 0
                       } ]
                     }
                   },
@@ -594,26 +573,19 @@
                     "vCores" : 0,
                     "resourceInformations" : {
                       "resourceInformation" : [ {
-                        "maximumAllocation" : 9223372036854775807,
-                        "minimumAllocation" : 0,
+                        "maximumAllocation" : 8192,
+                        "minimumAllocation" : 1024,
                         "name" : "memory-mb",
                         "resourceType" : "COUNTABLE",
                         "units" : "Mi",
                         "value" : 0
                       }, {
-                        "maximumAllocation" : 9223372036854775807,
-                        "minimumAllocation" : 0,
+                        "maximumAllocation" : 4,
+                        "minimumAllocation" : 1,
                         "name" : "vcores",
                         "resourceType" : "COUNTABLE",
                         "units" : "",
                         "value" : 0
-                      }, {
-                        "maximumAllocation" : 2147483647,
-                        "minimumAllocation" : 0,
-                        "name" : "yarn.io/gpu",
-                        "resourceType" : "COUNTABLE",
-                        "units" : "",
-                        "value" : 0
                       } ]
                     }
                   },
@@ -1025,26 +997,19 @@
                     "vCores" : 0,
                     "resourceInformations" : {
                       "resourceInformation" : [ {
-                        "maximumAllocation" : 9223372036854775807,
-                        "minimumAllocation" : 0,
+                        "maximumAllocation" : 8192,
+                        "minimumAllocation" : 1024,
                         "name" : "memory-mb",
                         "resourceType" : "COUNTABLE",
                         "units" : "Mi",
                         "value" : 0
                       }, {
-                        "maximumAllocation" : 9223372036854775807,
-                        "minimumAllocation" : 0,
+                        "maximumAllocation" : 4,
+                        "minimumAllocation" : 1,
                         "name" : "vcores",
                         "resourceType" : "COUNTABLE",
                         "units" : "",
                         "value" : 0
-                      }, {
-                        "maximumAllocation" : 2147483647,
-                        "minimumAllocation" : 0,
-                        "name" : "yarn.io/gpu",
-                        "resourceType" : "COUNTABLE",
-                        "units" : "",
-                        "value" : 0
                       } ]
                     }
                   },
@@ -1053,26 +1018,19 @@
                     "vCores" : 0,
                     "resourceInformations" : {
                       "resourceInformation" : [ {
-                        "maximumAllocation" : 9223372036854775807,
-                        "minimumAllocation" : 0,
+                        "maximumAllocation" : 8192,
+                        "minimumAllocation" : 1024,
                         "name" : "memory-mb",
                         "resourceType" : "COUNTABLE",
                         "units" : "Mi",
                         "value" : 0
                       }, {
-                        "maximumAllocation" : 9223372036854775807,
-                        "minimumAllocation" : 0,
+                        "maximumAllocation" : 4,
+                        "minimumAllocation" : 1,
                         "name" : "vcores",
                         "resourceType" : "COUNTABLE",
                         "units" : "",
                         "value" : 0
-                      }, {
-                        "maximumAllocation" : 2147483647,
-                        "minimumAllocation" : 0,
-                        "name" : "yarn.io/gpu",
-                        "resourceType" : "COUNTABLE",
-                        "units" : "",
-                        "value" : 0
                       } ]
                     }
                   },
@@ -1484,26 +1442,19 @@
                     "vCores" : 0,
                     "resourceInformations" : {
                       "resourceInformation" : [ {
-                        "maximumAllocation" : 9223372036854775807,
-                        "minimumAllocation" : 0,
+                        "maximumAllocation" : 8192,
+                        "minimumAllocation" : 1024,
                         "name" : "memory-mb",
                         "resourceType" : "COUNTABLE",
                         "units" : "Mi",
                         "value" : 0
                       }, {
-                        "maximumAllocation" : 9223372036854775807,
-                        "minimumAllocation" : 0,
+                        "maximumAllocation" : 4,
+                        "minimumAllocation" : 1,
                         "name" : "vcores",
                         "resourceType" : "COUNTABLE",
                         "units" : "",
                         "value" : 0
-                      }, {
-                        "maximumAllocation" : 2147483647,
-                        "minimumAllocation" : 0,
-                        "name" : "yarn.io/gpu",
-                        "resourceType" : "COUNTABLE",
-                        "units" : "",
-                        "value" : 0
                       } ]
                     }
                   },
@@ -1512,26 +1463,19 @@
                     "vCores" : 0,
                     "resourceInformations" : {
                       "resourceInformation" : [ {
-                        "maximumAllocation" : 9223372036854775807,
-                        "minimumAllocation" : 0,
+                        "maximumAllocation" : 8192,
+                        "minimumAllocation" : 1024,
                         "name" : "memory-mb",
                         "resourceType" : "COUNTABLE",
                         "units" : "Mi",
                         "value" : 0
                       }, {
-                        "maximumAllocation" : 9223372036854775807,
-                        "minimumAllocation" : 0,
+                        "maximumAllocation" : 4,
+                        "minimumAllocation" : 1,
                         "name" : "vcores",
                         "resourceType" : "COUNTABLE",
                         "units" : "",
                         "value" : 0
-                      }, {
-                        "maximumAllocation" : 2147483647,
-                        "minimumAllocation" : 0,
-                        "name" : "yarn.io/gpu",
-                        "resourceType" : "COUNTABLE",
-                        "units" : "",
-                        "value" : 0
                       } ]
                     }
                   },
@@ -1929,26 +1873,19 @@
                 "vCores" : 0,
                 "resourceInformations" : {
                   "resourceInformation" : [ {
-                    "maximumAllocation" : 9223372036854775807,
-                    "minimumAllocation" : 0,
+                    "maximumAllocation" : 8192,
+                    "minimumAllocation" : 1024,
                     "name" : "memory-mb",
                     "resourceType" : "COUNTABLE",
                     "units" : "Mi",
                     "value" : 0
                   }, {
-                    "maximumAllocation" : 9223372036854775807,
-                    "minimumAllocation" : 0,
+                    "maximumAllocation" : 4,
+                    "minimumAllocation" : 1,
                     "name" : "vcores",
                     "resourceType" : "COUNTABLE",
                     "units" : "",
                     "value" : 0
-                  }, {
-                    "maximumAllocation" : 2147483647,
-                    "minimumAllocation" : 0,
-                    "name" : "yarn.io/gpu",
-                    "resourceType" : "COUNTABLE",
-                    "units" : "",
-                    "value" : 0
                   } ]
                 }
               },
@@ -1957,26 +1894,19 @@
                 "vCores" : 0,
                 "resourceInformations" : {
                   "resourceInformation" : [ {
-                    "maximumAllocation" : 9223372036854775807,
-                    "minimumAllocation" : 0,
+                    "maximumAllocation" : 8192,
+                    "minimumAllocation" : 1024,
                     "name" : "memory-mb",
                     "resourceType" : "COUNTABLE",
                     "units" : "Mi",
                     "value" : 0
                   }, {
-                    "maximumAllocation" : 9223372036854775807,
-                    "minimumAllocation" : 0,
+                    "maximumAllocation" : 4,
+                    "minimumAllocation" : 1,
                     "name" : "vcores",
                     "resourceType" : "COUNTABLE",
                     "units" : "",
                     "value" : 0
-                  }, {
-                    "maximumAllocation" : 2147483647,
-                    "minimumAllocation" : 0,
-                    "name" : "yarn.io/gpu",
-                    "resourceType" : "COUNTABLE",
-                    "units" : "",
-                    "value" : 0
                   } ]
                 }
               },
@@ -2247,26 +2177,19 @@
                 "vCores" : 0,
                 "resourceInformations" : {
                   "resourceInformation" : [ {
-                    "maximumAllocation" : 9223372036854775807,
-                    "minimumAllocation" : 0,
+                    "maximumAllocation" : 8192,
+                    "minimumAllocation" : 1024,
                     "name" : "memory-mb",
                     "resourceType" : "COUNTABLE",
                     "units" : "Mi",
                     "value" : 0
                   }, {
-                    "maximumAllocation" : 9223372036854775807,
-                    "minimumAllocation" : 0,
+                    "maximumAllocation" : 4,
+                    "minimumAllocation" : 1,
                     "name" : "vcores",
                     "resourceType" : "COUNTABLE",
                     "units" : "",
                     "value" : 0
-                  }, {
-                    "maximumAllocation" : 2147483647,
-                    "minimumAllocation" : 0,
-                    "name" : "yarn.io/gpu",
-                    "resourceType" : "COUNTABLE",
-                    "units" : "",
-                    "value" : 0
                   } ]
                 }
               },
@@ -2275,26 +2198,19 @@
                 "vCores" : 0,
                 "resourceInformations" : {
                   "resourceInformation" : [ {
-                    "maximumAllocation" : 9223372036854775807,
-                    "minimumAllocation" : 0,
+                    "maximumAllocation" : 8192,
+                    "minimumAllocation" : 1024,
                     "name" : "memory-mb",
                     "resourceType" : "COUNTABLE",
                     "units" : "Mi",
                     "value" : 0
                   }, {
-                    "maximumAllocation" : 9223372036854775807,
-                    "minimumAllocation" : 0,
+                    "maximumAllocation" : 4,
+                    "minimumAllocation" : 1,
                     "name" : "vcores",
                     "resourceType" : "COUNTABLE",
                     "units" : "",
                     "value" : 0
-                  }, {
-                    "maximumAllocation" : 2147483647,
-                    "minimumAllocation" : 0,
-                    "name" : "yarn.io/gpu",
-                    "resourceType" : "COUNTABLE",
-                    "units" : "",
-                    "value" : 0
                   } ]
                 }
               },
@@ -2666,26 +2582,19 @@
             "vCores" : 0,
             "resourceInformations" : {
               "resourceInformation" : [ {
-                "maximumAllocation" : 9223372036854775807,
-                "minimumAllocation" : 0,
+                "maximumAllocation" : 8192,
+                "minimumAllocation" : 1024,
                 "name" : "memory-mb",
                 "resourceType" : "COUNTABLE",
                 "units" : "Mi",
                 "value" : 0
               }, {
-                "maximumAllocation" : 9223372036854775807,
-                "minimumAllocation" : 0,
+                "maximumAllocation" : 4,
+                "minimumAllocation" : 1,
                 "name" : "vcores",
                 "resourceType" : "COUNTABLE",
                 "units" : "",
                 "value" : 0
-              }, {
-                "maximumAllocation" : 2147483647,
-                "minimumAllocation" : 0,
-                "name" : "yarn.io/gpu",
-                "resourceType" : "COUNTABLE",
-                "units" : "",
-                "value" : 0
               } ]
             }
           },
@@ -2694,26 +2603,19 @@
             "vCores" : 0,
             "resourceInformations" : {
               "resourceInformation" : [ {
-                "maximumAllocation" : 9223372036854775807,
-                "minimumAllocation" : 0,
+                "maximumAllocation" : 8192,
+                "minimumAllocation" : 1024,
                 "name" : "memory-mb",
                 "resourceType" : "COUNTABLE",
                 "units" : "Mi",
                 "value" : 0
               }, {
-                "maximumAllocation" : 9223372036854775807,
-                "minimumAllocation" : 0,
+                "maximumAllocation" : 4,
+                "minimumAllocation" : 1,
                 "name" : "vcores",
                 "resourceType" : "COUNTABLE",
                 "units" : "",
                 "value" : 0
-              }, {
-                "maximumAllocation" : 2147483647,
-                "minimumAllocation" : 0,
-                "name" : "yarn.io/gpu",
-                "resourceType" : "COUNTABLE",
-                "units" : "",
-                "value" : 0
               } ]
             }
           },
From 5bc92110f6b60caf312c650041e3e89cb9a43a44 Mon Sep 17 00:00:00 2001
From: K0K0V0K 
Date: Thu, 16 Oct 2025 14:13:12 +0200
Subject: [PATCH 04/17] Delete helper marshallers
---
 .../webapp/TestRMWebServiceAppsNodelabel.java |   5 +-
 .../webapp/TestRMWebServices.java             |  27 ++---
 .../webapp/TestRMWebServicesAppAttempts.java  |  11 +-
 .../webapp/TestRMWebServicesApps.java         | 107 +++++++++---------
 .../TestRMWebServicesAppsModification.java    |  11 +-
 .../TestRMWebServicesCapacitySched.java       |   8 +-
 ...MWebServicesCapacitySchedDefaultLabel.java |   5 -
 ...WebServicesCapacitySchedDynamicConfig.java |   5 -
 ...apacitySchedDynamicConfigAbsoluteMode.java |   3 -
 ...sCapacitySchedDynamicConfigWeightMode.java |   5 -
 ...pacitySchedDynamicConfigWeightModeDQC.java |   5 -
 ...vicesCapacitySchedLegacyQueueCreation.java |   5 -
 ...rvicesCapacitySchedulerConfigMutation.java |   4 -
 ...estRMWebServicesConfigurationMutation.java |   5 +-
 .../webapp/TestRMWebServicesContainers.java   |   5 -
 .../TestRMWebServicesDelegationTokens.java    |   4 +-
 .../TestRMWebServicesForCSWithPartitions.java |   7 +-
 .../webapp/TestRMWebServicesNodeLabels.java   |  12 +-
 .../webapp/TestRMWebServicesNodes.java        |  36 +++---
 .../webapp/TestRMWebServicesReservation.java  |   3 +-
 .../TestRMWebServicesSchedulerActivities.java |  45 ++++----
 ...edulerActivitiesWithMultiNodesEnabled.java |   9 +-
 .../webapp/TestWebServiceUtil.java            |  11 ++
 .../TestRMWebServicesFairScheduler.java       |   9 +-
 ...pplicationSubmissionContextInfoReader.java |  75 ------------
 .../reader/LabelsToNodesInfoReader.java       |  74 ------------
 .../webapp/reader/NodeLabelsInfoReader.java   |  74 ------------
 .../webapp/reader/NodeToLabelsInfoReader.java |  74 ------------
 .../reader/ResourceOptionInfoReader.java      |  74 ------------
 ...pplicationSubmissionContextInfoWriter.java |  89 ---------------
 .../writer/ResourceOptionInfoWriter.java      |  87 --------------
 .../writer/SchedConfUpdateInfoWriter.java     |  87 --------------
 32 files changed, 158 insertions(+), 823 deletions(-)
 delete mode 100644 hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/webapp/reader/ApplicationSubmissionContextInfoReader.java
 delete mode 100644 hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/webapp/reader/LabelsToNodesInfoReader.java
 delete mode 100644 hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/webapp/reader/NodeLabelsInfoReader.java
 delete mode 100644 hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/webapp/reader/NodeToLabelsInfoReader.java
 delete mode 100644 hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/webapp/reader/ResourceOptionInfoReader.java
 delete mode 100644 hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/webapp/writer/ApplicationSubmissionContextInfoWriter.java
 delete mode 100644 hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/webapp/writer/ResourceOptionInfoWriter.java
 delete mode 100644 hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/webapp/writer/SchedConfUpdateInfoWriter.java
diff --git a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/webapp/TestRMWebServiceAppsNodelabel.java b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/webapp/TestRMWebServiceAppsNodelabel.java
index a3e6cf99988cc..6fc73ea019f73 100644
--- a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/webapp/TestRMWebServiceAppsNodelabel.java
+++ b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/webapp/TestRMWebServiceAppsNodelabel.java
@@ -18,6 +18,7 @@
 
 package org.apache.hadoop.yarn.server.resourcemanager.webapp;
 
+import static org.apache.hadoop.yarn.server.resourcemanager.webapp.TestWebServiceUtil.responseToJson;
 import static org.junit.jupiter.api.Assertions.assertEquals;
 import static org.junit.jupiter.api.Assertions.assertTrue;
 import static org.junit.jupiter.api.Assertions.fail;
@@ -154,7 +155,7 @@ public void testAppsFinished() throws JSONException, Exception {
     Response response =
         r.path("ws").path("v1").path("cluster").path("apps")
         .request(MediaType.APPLICATION_JSON).get(Response.class);
-    JSONObject json = response.readEntity(JSONObject.class);
+    JSONObject json = responseToJson(response);
     JSONObject apps = json.getJSONObject("apps");
     assertEquals(1, apps.length(), "incorrect number of elements");
     try {
@@ -195,7 +196,7 @@ public void testAppsRunning() throws JSONException, Exception {
 
     Response response = r.path("ws").path("v1").path("cluster").path("apps")
         .request(MediaType.APPLICATION_JSON).get(Response.class);
-    JSONObject json = response.readEntity(JSONObject.class);
+    JSONObject json = responseToJson(response);
 
     // Verify apps resource
     JSONObject apps = json.getJSONObject("apps");
diff --git a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/webapp/TestRMWebServices.java b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/webapp/TestRMWebServices.java
index d8f8bf12ce88c..e4b4e7b7ba533 100644
--- a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/webapp/TestRMWebServices.java
+++ b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/webapp/TestRMWebServices.java
@@ -18,6 +18,7 @@
 
 package org.apache.hadoop.yarn.server.resourcemanager.webapp;
 
+import static org.apache.hadoop.yarn.server.resourcemanager.webapp.TestWebServiceUtil.responseToJson;
 import static org.apache.hadoop.yarn.webapp.WebServicesTestUtils.assertResponseStatusCode;
 import static org.junit.jupiter.api.Assertions.assertEquals;
 import static org.junit.jupiter.api.Assertions.assertFalse;
@@ -244,7 +245,7 @@ public void testCluster() throws JSONException, Exception {
 
     assertEquals(MediaType.APPLICATION_JSON + ";" + JettyUtils.UTF_8,
         response.getMediaType().toString());
-    JSONObject json = response.readEntity(JSONObject.class);
+    JSONObject json = responseToJson(response);
     verifyClusterInfo(json);
   }
 
@@ -257,7 +258,7 @@ public void testClusterSlash() throws JSONException, Exception {
 
     assertEquals(MediaType.APPLICATION_JSON + ";" + JettyUtils.UTF_8,
         response.getMediaType().toString());
-    JSONObject json = response.readEntity(JSONObject.class);
+    JSONObject json = responseToJson(response);
     verifyClusterInfo(json);
   }
 
@@ -270,7 +271,7 @@ public void testClusterDefault() throws JSONException, Exception {
 
     assertEquals(MediaType.APPLICATION_JSON + ";" + JettyUtils.UTF_8,
         response.getMediaType().toString());
-    JSONObject json = response.readEntity(JSONObject.class);
+    JSONObject json = responseToJson(response);
     verifyClusterInfo(json);
   }
 
@@ -283,7 +284,7 @@ public void testInfo() throws JSONException, Exception {
 
     assertEquals(MediaType.APPLICATION_JSON + ";" + JettyUtils.UTF_8,
         response.getMediaType().toString());
-    JSONObject json = response.readEntity(JSONObject.class);
+    JSONObject json = responseToJson(response);
     verifyClusterInfo(json);
   }
 
@@ -297,7 +298,7 @@ public void testInfoSlash() throws JSONException, Exception {
 
     assertEquals(MediaType.APPLICATION_JSON + ";" + JettyUtils.UTF_8,
         response.getMediaType().toString());
-    JSONObject json = response.readEntity(JSONObject.class);
+    JSONObject json = responseToJson(response);
     verifyClusterInfo(json);
   }
 
@@ -309,7 +310,7 @@ public void testInfoDefault() throws JSONException, Exception {
 
     assertEquals(MediaType.APPLICATION_JSON + ";" + JettyUtils.UTF_8,
         response.getMediaType().toString());
-    JSONObject json = response.readEntity(JSONObject.class);
+    JSONObject json = responseToJson(response);
     verifyClusterInfo(json);
   }
 
@@ -397,7 +398,7 @@ public void testClusterMetrics() throws JSONException, Exception {
 
     assertEquals(MediaType.APPLICATION_JSON + ";" + JettyUtils.UTF_8,
         response.getMediaType().toString());
-    JSONObject json = response.readEntity(JSONObject.class);
+    JSONObject json = responseToJson(response);
     verifyClusterMetricsJSON(json);
   }
 
@@ -410,7 +411,7 @@ public void testClusterMetricsSlash() throws JSONException, Exception {
 
     assertEquals(MediaType.APPLICATION_JSON + ";" + JettyUtils.UTF_8,
         response.getMediaType().toString());
-    JSONObject json = response.readEntity(JSONObject.class);
+    JSONObject json = responseToJson(response);
     verifyClusterMetricsJSON(json);
   }
 
@@ -422,7 +423,7 @@ public void testClusterMetricsDefault() throws JSONException, Exception {
 
     assertEquals(MediaType.APPLICATION_JSON + ";" + JettyUtils.UTF_8,
         response.getMediaType().toString());
-    JSONObject json =response.readEntity(JSONObject.class);
+    JSONObject json =responseToJson(response);
     verifyClusterMetricsJSON(json);
   }
 
@@ -554,7 +555,7 @@ public void testClusterSchedulerFifo() throws JSONException, Exception {
 
     assertEquals(MediaType.APPLICATION_JSON + ";" + JettyUtils.UTF_8,
         response.getMediaType().toString());
-    JSONObject json = response.readEntity(JSONObject.class);
+    JSONObject json = responseToJson(response);
     verifyClusterSchedulerFifo(json);
   }
 
@@ -567,7 +568,7 @@ public void testClusterSchedulerFifoSlash() throws JSONException, Exception {
 
     assertEquals(MediaType.APPLICATION_JSON + ";" + JettyUtils.UTF_8,
         response.getMediaType().toString());
-    JSONObject json = response.readEntity(JSONObject.class);
+    JSONObject json = responseToJson(response);
     verifyClusterSchedulerFifo(json);
   }
 
@@ -579,7 +580,7 @@ public void testClusterSchedulerFifoDefault() throws JSONException, Exception {
 
     assertEquals(MediaType.APPLICATION_JSON + ";" + JettyUtils.UTF_8,
         response.getMediaType().toString());
-    JSONObject json = response.readEntity(JSONObject.class);
+    JSONObject json = responseToJson(response);
     verifyClusterSchedulerFifo(json);
   }
 
@@ -1091,7 +1092,7 @@ public void testClusterSchedulerOverviewFifo() throws JSONException, Exception {
 
     assertEquals(MediaType.APPLICATION_JSON + ";" + JettyUtils.UTF_8,
         response.getMediaType().toString());
-    JSONObject json = response.readEntity(JSONObject.class);
+    JSONObject json = responseToJson(response);
     JSONObject schedulerJson = json.getJSONObject("scheduler");
     verifyClusterSchedulerOverView(schedulerJson, "Fifo Scheduler");
   }
diff --git a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/webapp/TestRMWebServicesAppAttempts.java b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/webapp/TestRMWebServicesAppAttempts.java
index b8730d0bfa3ef..04f23952bee82 100644
--- a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/webapp/TestRMWebServicesAppAttempts.java
+++ b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/webapp/TestRMWebServicesAppAttempts.java
@@ -64,6 +64,7 @@
 import java.io.StringReader;
 import java.util.Collection;
 
+import static org.apache.hadoop.yarn.server.resourcemanager.webapp.TestWebServiceUtil.responseToJson;
 import static org.apache.hadoop.yarn.webapp.WebServicesTestUtils.assertResponseStatusCode;
 import static org.apache.hadoop.yarn.webapp.WebServicesTestUtils.checkStringMatch;
 import static org.assertj.core.api.Assertions.assertThat;
@@ -155,7 +156,7 @@ public void testCompletedAppAttempt() throws Exception {
         .path("apps").path(app1.getApplicationId().toString())
         .path("appattempts").request(MediaType.APPLICATION_JSON)
         .get(Response.class);
-    JSONObject json = response.readEntity(JSONObject.class);
+    JSONObject json = responseToJson(response);
     JSONObject jsonAppAttempts = json.getJSONObject("appAttempts");
     JSONArray jsonArray = jsonAppAttempts.getJSONArray("appAttempt");
     JSONObject info = jsonArray.getJSONObject(0);
@@ -247,7 +248,7 @@ public void testInvalidAppIdGetAttempts() throws Exception {
       assertResponseStatusCode(Response.Status.BAD_REQUEST, response.getStatusInfo());
       assertEquals(MediaType.APPLICATION_JSON_TYPE + ";" + JettyUtils.UTF_8,
           response.getMediaType().toString());
-      JSONObject msg = response.readEntity(JSONObject.class);
+      JSONObject msg = responseToJson(response);
       JSONObject exception = msg.getJSONObject("RemoteException");
       assertEquals(3, exception.length(), "incorrect number of elements");
       String message = exception.getString("message");
@@ -284,7 +285,7 @@ public void testInvalidAppAttemptId() throws Exception {
           response.getStatusInfo());
       assertEquals(MediaType.APPLICATION_JSON_TYPE + ";" + JettyUtils.UTF_8,
           response.getMediaType().toString());
-      JSONObject msg = response.readEntity(JSONObject.class);
+      JSONObject msg = responseToJson(response);
       JSONObject exception = msg.getJSONObject("RemoteException");
       assertEquals(3, exception.length(), "incorrect number of elements");
       String message = exception.getString("message");
@@ -325,7 +326,7 @@ public void testNonexistAppAttempts() throws Exception {
       assertEquals(MediaType.APPLICATION_JSON_TYPE + ";" + JettyUtils.UTF_8,
           response.getMediaType().toString());
 
-      JSONObject msg = response.readEntity(JSONObject.class);
+      JSONObject msg = responseToJson(response);
       JSONObject exception = msg.getJSONObject("RemoteException");
       assertEquals(3, exception.length(), "incorrect number of elements");
       String message = exception.getString("message");
@@ -349,7 +350,7 @@ private void testAppAttemptsHelper(String path, RMApp app, String media)
         .get(Response.class);
     assertEquals(MediaType.APPLICATION_JSON_TYPE + ";" + JettyUtils.UTF_8,
         response.getMediaType().toString());
-    JSONObject json = response.readEntity(JSONObject.class);
+    JSONObject json = responseToJson(response);
     assertEquals(1, json.length(), "incorrect number of elements");
     JSONObject jsonAppAttempts = json.getJSONObject("appAttempts");
     assertEquals(1, jsonAppAttempts.length(), "incorrect number of elements");
diff --git a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/webapp/TestRMWebServicesApps.java b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/webapp/TestRMWebServicesApps.java
index 62b4116a52d09..6e95e668cac6f 100644
--- a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/webapp/TestRMWebServicesApps.java
+++ b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/webapp/TestRMWebServicesApps.java
@@ -73,6 +73,7 @@
 import java.util.Arrays;
 import java.util.Set;
 
+import static org.apache.hadoop.yarn.server.resourcemanager.webapp.TestWebServiceUtil.responseToJson;
 import static org.apache.hadoop.yarn.webapp.WebServicesTestUtils.assertResponseStatusCode;
 import static org.junit.jupiter.api.Assertions.assertEquals;
 import static org.junit.jupiter.api.Assertions.assertFalse;
@@ -279,7 +280,7 @@ public void testAppsHelper(String path, RMApp app, String media,
         .path(path).request(media).get(Response.class);
     assertEquals(MediaType.APPLICATION_JSON_TYPE + ";" + JettyUtils.UTF_8,
         response.getMediaType().toString());
-    JSONObject json = response.readEntity(JSONObject.class);
+    JSONObject json = responseToJson(response);
     assertEquals(1, json.length(), "incorrect number of elements");
     JSONObject apps = json.getJSONObject("apps");
     assertEquals(1, apps.length(), "incorrect number of elements");
@@ -303,7 +304,7 @@ public void testAppsQueryState() throws JSONException, Exception {
         .request(MediaType.APPLICATION_JSON).get(Response.class);
     assertEquals(MediaType.APPLICATION_JSON_TYPE + ";" + JettyUtils.UTF_8,
         response.getMediaType().toString());
-    JSONObject json = response.readEntity(JSONObject.class);
+    JSONObject json = responseToJson(response);
     assertEquals(1, json.length(), "incorrect number of elements");
     JSONObject apps = json.getJSONObject("apps");
     assertEquals(1, apps.length(), "incorrect number of elements");
@@ -329,7 +330,7 @@ public void testAppsQueryStates() throws JSONException, Exception {
         .request(MediaType.APPLICATION_JSON).get(Response.class);
     assertEquals(MediaType.APPLICATION_JSON_TYPE + ";" + JettyUtils.UTF_8,
         response.getMediaType().toString());
-    JSONObject json = response.readEntity(JSONObject.class);
+    JSONObject json = responseToJson(response);
     assertEquals(1, json.length(), "incorrect number of elements");
     JSONObject apps = json.getJSONObject("apps");
     assertEquals(1, apps.length(), "incorrect number of elements");
@@ -345,7 +346,7 @@ public void testAppsQueryStates() throws JSONException, Exception {
         .request(MediaType.APPLICATION_JSON).get(Response.class);
     assertEquals(MediaType.APPLICATION_JSON_TYPE + ";" + JettyUtils.UTF_8,
         response.getMediaType().toString());
-    json = response.readEntity(JSONObject.class);
+    json = responseToJson(response);
     assertEquals(1, json.length(), "incorrect number of elements");
     apps = json.getJSONObject("apps");
     assertEquals(1, apps.length(), "incorrect number of elements");
@@ -377,7 +378,7 @@ public void testAppsQueryStatesComma() throws JSONException, Exception {
         .request(MediaType.APPLICATION_JSON).get(Response.class);
     assertEquals(MediaType.APPLICATION_JSON_TYPE + ";" + JettyUtils.UTF_8,
         response.getMediaType().toString());
-    JSONObject json = response.readEntity(JSONObject.class);
+    JSONObject json = responseToJson(response);
     assertEquals(1, json.length(), "incorrect number of elements");
     JSONObject apps = json.getJSONObject("apps");
     assertEquals(1, apps.length(), "incorrect number of elements");
@@ -393,7 +394,7 @@ public void testAppsQueryStatesComma() throws JSONException, Exception {
         .request(MediaType.APPLICATION_JSON).get(Response.class);
     assertEquals(MediaType.APPLICATION_JSON_TYPE + ";" + JettyUtils.UTF_8,
         response.getMediaType().toString());
-    json = response.readEntity(JSONObject.class);
+    json = responseToJson(response);
     assertEquals(1, json.length(), "incorrect number of elements");
     apps = json.getJSONObject("apps");
     assertEquals(1, apps.length(), "incorrect number of elements");
@@ -423,7 +424,7 @@ public void testAppsQueryStatesNone() throws JSONException, Exception {
         .request(MediaType.APPLICATION_JSON).get(Response.class);
     assertEquals(MediaType.APPLICATION_JSON_TYPE + ";" + JettyUtils.UTF_8,
         response.getMediaType().toString());
-    JSONObject json = response.readEntity(JSONObject.class);
+    JSONObject json = responseToJson(response);
     assertEquals(1, json.length(), "incorrect number of elements");
     assertEquals(new JSONObject().toString(), json.get("apps").toString(), "apps is not empty");
     rm.stop();
@@ -443,7 +444,7 @@ public void testAppsQueryStateNone() throws JSONException, Exception {
         .request(MediaType.APPLICATION_JSON).get(Response.class);
     assertEquals(MediaType.APPLICATION_JSON_TYPE + ";" + JettyUtils.UTF_8,
         response.getMediaType().toString());
-    JSONObject json = response.readEntity(JSONObject.class);
+    JSONObject json = responseToJson(response);
     assertEquals(1, json.length(), "incorrect number of elements");
     assertEquals(new JSONObject().toString(), json.get("apps").toString(), "apps is not empty");
     rm.stop();
@@ -467,7 +468,7 @@ public void testAppsQueryStatesInvalid() throws JSONException, Exception {
       assertResponseStatusCode(Response.Status.BAD_REQUEST, response.getStatusInfo());
       assertEquals(MediaType.APPLICATION_JSON_TYPE + ";" + JettyUtils.UTF_8,
           response.getMediaType().toString());
-      JSONObject msg = response.readEntity(JSONObject.class);
+      JSONObject msg = responseToJson(response);
       JSONObject exception = msg.getJSONObject("RemoteException");
       assertEquals(3, exception.length(), "incorrect number of elements");
       String message = exception.getString("message");
@@ -503,7 +504,7 @@ public void testAppsQueryStateInvalid() throws JSONException, Exception {
       assertResponseStatusCode(Response.Status.BAD_REQUEST, response.getStatusInfo());
       assertEquals(MediaType.APPLICATION_JSON_TYPE + ";" + JettyUtils.UTF_8,
           response.getMediaType().toString());
-      JSONObject msg = response.readEntity(JSONObject.class);
+      JSONObject msg = responseToJson(response);
       JSONObject exception = msg.getJSONObject("RemoteException");
       assertEquals(3, exception.length(), "incorrect number of elements");
       String message = exception.getString("message");
@@ -534,7 +535,7 @@ public void testAppsQueryFinalStatus() throws JSONException, Exception {
         .request(MediaType.APPLICATION_JSON).get();
     assertEquals(MediaType.APPLICATION_JSON_TYPE + ";" + JettyUtils.UTF_8,
         response.getMediaType().toString());
-    JSONObject json = response.readEntity(JSONObject.class);
+    JSONObject json = responseToJson(response);
     assertEquals(1, json.length(), "incorrect number of elements");
     JSONObject apps = json.getJSONObject("apps");
     assertEquals(1, apps.length(), "incorrect number of elements");
@@ -557,7 +558,7 @@ public void testAppsQueryFinalStatusNone() throws JSONException, Exception {
         .request(MediaType.APPLICATION_JSON).get(Response.class);
     assertEquals(MediaType.APPLICATION_JSON_TYPE + ";" + JettyUtils.UTF_8,
         response.getMediaType().toString());
-    JSONObject json = response.readEntity(JSONObject.class);
+    JSONObject json = responseToJson(response);
     assertEquals(1, json.length(), "incorrect number of elements");
     assertEquals(new JSONObject().toString(), json.get("apps").toString(), "apps is not null");
     rm.stop();
@@ -581,7 +582,7 @@ public void testAppsQueryFinalStatusInvalid() throws Exception {
       assertResponseStatusCode(Response.Status.BAD_REQUEST, response.getStatusInfo());
       assertEquals(MediaType.APPLICATION_JSON_TYPE + ";" + JettyUtils.UTF_8,
           response.getMediaType().toString());
-      JSONObject msg = response.readEntity(JSONObject.class);
+      JSONObject msg = responseToJson(response);
       JSONObject exception = msg.getJSONObject("RemoteException");
       assertEquals(3, exception.length(), "incorrect number of elements");
       String message = exception.getString("message");
@@ -618,7 +619,7 @@ public void testAppsQueryUser() throws JSONException, Exception {
         .request(MediaType.APPLICATION_JSON).get(Response.class);
     assertEquals(MediaType.APPLICATION_JSON_TYPE + ";" + JettyUtils.UTF_8,
         response.getMediaType().toString());
-    JSONObject json = response.readEntity(JSONObject.class);
+    JSONObject json = responseToJson(response);
 
     assertEquals(1, json.length(), "incorrect number of elements");
     JSONObject apps = json.getJSONObject("apps");
@@ -643,7 +644,7 @@ public void testAppsQueryQueue() throws JSONException, Exception {
         .request(MediaType.APPLICATION_JSON).get(Response.class);
     assertEquals(MediaType.APPLICATION_JSON_TYPE + ";" + JettyUtils.UTF_8,
         response.getMediaType().toString());
-    JSONObject json = response.readEntity(JSONObject.class);
+    JSONObject json = responseToJson(response);
     assertEquals(1, json.length(), "incorrect number of elements");
     JSONObject apps = json.getJSONObject("apps");
     assertEquals(1, apps.length(), "incorrect number of elements");
@@ -672,7 +673,7 @@ public void testAppsQueryQueueAndStateTwoFinishedApps() throws Exception {
         .request(MediaType.APPLICATION_JSON).get(Response.class);
     assertEquals(MediaType.APPLICATION_JSON_TYPE + ";" + JettyUtils.UTF_8,
         response.getMediaType().toString());
-    JSONObject json = response.readEntity(JSONObject.class);
+    JSONObject json = responseToJson(response);
     assertEquals(1, json.length(), "incorrect number of elements");
     JSONObject apps = json.getJSONObject("apps");
     assertEquals(1, apps.length(), "incorrect number of elements");
@@ -707,7 +708,7 @@ public void testAppsQueryQueueAndStateOneFinishedApp() throws Exception {
         .request(MediaType.APPLICATION_JSON).get(Response.class);
     assertEquals(MediaType.APPLICATION_JSON_TYPE + ";" + JettyUtils.UTF_8,
         response.getMediaType().toString());
-    JSONObject json = response.readEntity(JSONObject.class);
+    JSONObject json = responseToJson(response);
     assertEquals(1, json.length(), "incorrect number of elements");
     JSONObject apps = json.getJSONObject("apps");
     assertEquals(1, apps.length(), "incorrect number of elements");
@@ -742,7 +743,7 @@ public void testAppsQueryQueueOneFinishedApp() throws Exception {
         .request(MediaType.APPLICATION_JSON).get(Response.class);
     assertEquals(MediaType.APPLICATION_JSON_TYPE + ";" + JettyUtils.UTF_8,
         response.getMediaType().toString());
-    JSONObject json = response.readEntity(JSONObject.class);
+    JSONObject json = responseToJson(response);
     assertEquals(1, json.length(), "incorrect number of elements");
     JSONObject apps = json.getJSONObject("apps");
     assertEquals(1, apps.length(), "incorrect number of elements");
@@ -772,7 +773,7 @@ public void testAppsQueryLimit() throws JSONException, Exception {
         .request(MediaType.APPLICATION_JSON).get(Response.class);
     assertEquals(MediaType.APPLICATION_JSON_TYPE + ";" + JettyUtils.UTF_8,
         response.getMediaType().toString());
-    JSONObject json = response.readEntity(JSONObject.class);
+    JSONObject json = responseToJson(response);
     assertEquals(1, json.length(), "incorrect number of elements");
     JSONObject apps = json.getJSONObject("apps");
     assertEquals(1, apps.length(), "incorrect number of elements");
@@ -796,7 +797,7 @@ public void testAppsQueryStartBegin() throws JSONException, Exception {
         .request(MediaType.APPLICATION_JSON).get(Response.class);
     assertEquals(MediaType.APPLICATION_JSON_TYPE + ";" + JettyUtils.UTF_8,
         response.getMediaType().toString());
-    JSONObject json = response.readEntity(JSONObject.class);
+    JSONObject json = responseToJson(response);
     assertEquals(1, json.length(), "incorrect number of elements");
     JSONObject apps = json.getJSONObject("apps");
     assertEquals(1, apps.length(), "incorrect number of elements");
@@ -820,7 +821,7 @@ public void testAppsQueryStartBeginSome() throws JSONException, Exception {
         .request(MediaType.APPLICATION_JSON).get(Response.class);
     assertEquals(MediaType.APPLICATION_JSON_TYPE + ";" + JettyUtils.UTF_8,
         response.getMediaType().toString());
-    JSONObject json = response.readEntity(JSONObject.class);
+    JSONObject json = responseToJson(response);
     assertEquals(1, json.length(), "incorrect number of elements");
     JSONObject apps = json.getJSONObject("apps");
     assertEquals(1, apps.length(), "incorrect number of elements");
@@ -844,7 +845,7 @@ public void testAppsQueryStartEnd() throws JSONException, Exception {
         .request(MediaType.APPLICATION_JSON).get(Response.class);
     assertEquals(MediaType.APPLICATION_JSON_TYPE + ";" + JettyUtils.UTF_8,
         response.getMediaType().toString());
-    JSONObject json = response.readEntity(JSONObject.class);
+    JSONObject json = responseToJson(response);
     assertEquals(1, json.length(), "incorrect number of elements");
     assertEquals(new JSONObject().toString(), json.get("apps").toString(), "apps is not empty");
     rm.stop();
@@ -868,7 +869,7 @@ public void testAppsQueryStartBeginEnd() throws JSONException, Exception {
         .request(MediaType.APPLICATION_JSON).get(Response.class);
     assertEquals(MediaType.APPLICATION_JSON_TYPE + ";" + JettyUtils.UTF_8,
         response.getMediaType().toString());
-    JSONObject json = response.readEntity(JSONObject.class);
+    JSONObject json = responseToJson(response);
     assertEquals(1, json.length(), "incorrect number of elements");
     JSONObject apps = json.getJSONObject("apps");
     assertEquals(1, apps.length(), "incorrect number of elements");
@@ -895,7 +896,7 @@ public void testAppsQueryFinishBegin() throws JSONException, Exception {
         .request(MediaType.APPLICATION_JSON).get(Response.class);
     assertEquals(MediaType.APPLICATION_JSON_TYPE + ";" + JettyUtils.UTF_8,
         response.getMediaType().toString());
-    JSONObject json = response.readEntity(JSONObject.class);
+    JSONObject json = responseToJson(response);
     assertEquals(1, json.length(), "incorrect number of elements");
     JSONObject apps = json.getJSONObject("apps");
     assertEquals(1, apps.length(), "incorrect number of elements");
@@ -933,7 +934,7 @@ public void testAppsQueryFinishEnd() throws JSONException, Exception {
         .request(MediaType.APPLICATION_JSON).get(Response.class);
     assertEquals(MediaType.APPLICATION_JSON_TYPE + ";" + JettyUtils.UTF_8,
         response.getMediaType().toString());
-    JSONObject json = response.readEntity(JSONObject.class);
+    JSONObject json = responseToJson(response);
     assertEquals(1, json.length(), "incorrect number of elements");
     JSONObject apps = json.getJSONObject("apps");
     assertEquals(1, apps.length(), "incorrect number of elements");
@@ -964,7 +965,7 @@ public void testAppsQueryFinishBeginEnd() throws JSONException, Exception {
         .request(MediaType.APPLICATION_JSON).get(Response.class);
     assertEquals(MediaType.APPLICATION_JSON_TYPE + ";" + JettyUtils.UTF_8,
         response.getMediaType().toString());
-    JSONObject json = response.readEntity(JSONObject.class);
+    JSONObject json = responseToJson(response);
     assertEquals(1, json.length(), "incorrect number of elements");
     JSONObject apps = json.getJSONObject("apps");
     assertEquals(1, apps.length(), "incorrect number of elements");
@@ -1014,7 +1015,7 @@ public void testAppsQueryAppTypes() throws JSONException, Exception {
         .request(MediaType.APPLICATION_JSON).get(Response.class);
     assertEquals(MediaType.APPLICATION_JSON_TYPE + ";" + JettyUtils.UTF_8,
         response.getMediaType().toString());
-    JSONObject json = response.readEntity(JSONObject.class);
+    JSONObject json = responseToJson(response);
     assertEquals(1, json.length(), "incorrect number of elements");
     JSONObject apps = json.getJSONObject("apps");
     assertEquals(1, apps.length(), "incorrect number of elements");
@@ -1030,7 +1031,7 @@ public void testAppsQueryAppTypes() throws JSONException, Exception {
         .request(MediaType.APPLICATION_JSON).get(Response.class);
     assertEquals(MediaType.APPLICATION_JSON_TYPE + ";" + JettyUtils.UTF_8,
         response.getMediaType().toString());
-    json = response.readEntity(JSONObject.class);
+    json = responseToJson(response);
     assertEquals(1, json.length(), "incorrect number of elements");
     apps = json.getJSONObject("apps");
     assertEquals(1, apps.length(), "incorrect number of elements");
@@ -1050,7 +1051,7 @@ public void testAppsQueryAppTypes() throws JSONException, Exception {
             .request(MediaType.APPLICATION_JSON).get(Response.class);
     assertEquals(MediaType.APPLICATION_JSON_TYPE + ";" + JettyUtils.UTF_8,
         response.getMediaType().toString());
-    json = response.readEntity(JSONObject.class);
+    json = responseToJson(response);
     assertEquals(1, json.length(), "incorrect number of elements");
     apps = json.getJSONObject("apps");
     assertEquals(1, apps.length(), "incorrect number of elements");
@@ -1069,7 +1070,7 @@ public void testAppsQueryAppTypes() throws JSONException, Exception {
         .request(MediaType.APPLICATION_JSON).get(Response.class);
     assertEquals(MediaType.APPLICATION_JSON_TYPE + ";" + JettyUtils.UTF_8,
         response.getMediaType().toString());
-    json = response.readEntity(JSONObject.class);
+    json = responseToJson(response);
     assertEquals(1, json.length(), "incorrect number of elements");
     apps = json.getJSONObject("apps");
     assertEquals(1, apps.length(), "incorrect number of elements");
@@ -1084,7 +1085,7 @@ public void testAppsQueryAppTypes() throws JSONException, Exception {
             .request(MediaType.APPLICATION_JSON).get(Response.class);
     assertEquals(MediaType.APPLICATION_JSON_TYPE + ";" + JettyUtils.UTF_8,
         response.getMediaType().toString());
-    json = response.readEntity(JSONObject.class);
+    json = responseToJson(response);
     assertEquals(1, json.length(), "incorrect number of elements");
     apps = json.getJSONObject("apps");
     assertEquals(1, apps.length(), "incorrect number of elements");
@@ -1099,7 +1100,7 @@ public void testAppsQueryAppTypes() throws JSONException, Exception {
             .request(MediaType.APPLICATION_JSON).get(Response.class);
     assertEquals(MediaType.APPLICATION_JSON_TYPE + ";" + JettyUtils.UTF_8,
         response.getMediaType().toString());
-    json = response.readEntity(JSONObject.class);
+    json = responseToJson(response);
     assertEquals(1, json.length(), "incorrect number of elements");
     apps = json.getJSONObject("apps");
     assertEquals(1, apps.length(), "incorrect number of elements");
@@ -1115,7 +1116,7 @@ public void testAppsQueryAppTypes() throws JSONException, Exception {
             .request(MediaType.APPLICATION_JSON).get(Response.class);
     assertEquals(MediaType.APPLICATION_JSON_TYPE + ";" + JettyUtils.UTF_8,
         response.getMediaType().toString());
-    json = response.readEntity(JSONObject.class);
+    json = responseToJson(response);
     assertEquals(1, json.length(), "incorrect number of elements");
     apps = json.getJSONObject("apps");
     assertEquals(1, apps.length(), "incorrect number of elements");
@@ -1130,7 +1131,7 @@ public void testAppsQueryAppTypes() throws JSONException, Exception {
         .request(MediaType.APPLICATION_JSON).get(Response.class);
     assertEquals(MediaType.APPLICATION_JSON_TYPE + ";" + JettyUtils.UTF_8,
         response.getMediaType().toString());
-    json = response.readEntity(JSONObject.class);
+    json = responseToJson(response);
     assertEquals(1, json.length(), "incorrect number of elements");
     apps = json.getJSONObject("apps");
     assertEquals(1, apps.length(), "incorrect number of elements");
@@ -1143,7 +1144,7 @@ public void testAppsQueryAppTypes() throws JSONException, Exception {
         .request(MediaType.APPLICATION_JSON).get(Response.class);
     assertEquals(MediaType.APPLICATION_JSON_TYPE + ";" + JettyUtils.UTF_8,
         response.getMediaType().toString());
-    json = response.readEntity(JSONObject.class);
+    json = responseToJson(response);
     assertEquals(1, json.length(), "incorrect number of elements");
     apps = json.getJSONObject("apps");
     assertEquals(1, apps.length(), "incorrect number of elements");
@@ -1164,7 +1165,7 @@ public void testAppsQueryAppTypes() throws JSONException, Exception {
             .request(MediaType.APPLICATION_JSON).get(Response.class);
     assertEquals(MediaType.APPLICATION_JSON_TYPE + ";" + JettyUtils.UTF_8,
         response.getMediaType().toString());
-    json = response.readEntity(JSONObject.class);
+    json = responseToJson(response);
     assertEquals(1, json.length(), "incorrect number of elements");
     apps = json.getJSONObject("apps");
     assertEquals(1, apps.length(), "incorrect number of elements");
@@ -1195,7 +1196,7 @@ public void testAppsQueryWithInvalidDeselects()
       assertResponseStatusCode(Response.Status.BAD_REQUEST, response.getStatusInfo());
       assertEquals(MediaType.APPLICATION_JSON_TYPE + ";" + JettyUtils.UTF_8,
           response.getMediaType().toString());
-      JSONObject msg = response.readEntity(JSONObject.class);
+      JSONObject msg = responseToJson(response);
       JSONObject exception = msg.getJSONObject("RemoteException");
       assertEquals(3, exception.length(), "incorrect number of elements");
       String message = exception.getString("message");
@@ -1230,7 +1231,7 @@ public void testAppsQueryWithDeselects()
     assertEquals(MediaType.APPLICATION_JSON_TYPE + ";" + JettyUtils.UTF_8,
         response.getMediaType().toString());
 
-    JSONObject json = response.readEntity(JSONObject.class);
+    JSONObject json = responseToJson(response);
     assertEquals(1, json.length(), "incorrect number of elements");
     JSONObject apps = json.getJSONObject("apps");
     assertEquals(1, apps.length(), "incorrect number of elements");
@@ -1245,7 +1246,7 @@ public void testAppsQueryWithDeselects()
     assertEquals(MediaType.APPLICATION_JSON_TYPE + ";" + JettyUtils.UTF_8,
         response.getMediaType().toString());
 
-    json = response.readEntity(JSONObject.class);
+    json = responseToJson(response);
     assertEquals(1, json.length(), "incorrect number of elements");
     apps = json.getJSONObject("apps");
     assertEquals(1, apps.length(), "incorrect number of elements");
@@ -1261,7 +1262,7 @@ public void testAppsQueryWithDeselects()
     assertEquals(MediaType.APPLICATION_JSON_TYPE + ";" + JettyUtils.UTF_8,
         response.getMediaType().toString());
 
-    json = response.readEntity(JSONObject.class);
+    json = responseToJson(response);
     assertEquals(1, json.length(), "incorrect number of elements");
     apps = json.getJSONObject("apps");
     assertEquals(1, apps.length(), "incorrect number of elements");
@@ -1278,7 +1279,7 @@ public void testAppsQueryWithDeselects()
     assertEquals(MediaType.APPLICATION_JSON_TYPE + ";" + JettyUtils.UTF_8,
         response.getMediaType().toString());
 
-    json = response.readEntity(JSONObject.class);
+    json = responseToJson(response);
     assertEquals(1, json.length(), "incorrect number of elements");
     apps = json.getJSONObject("apps");
     assertEquals(1, apps.length(), "incorrect number of elements");
@@ -1295,7 +1296,7 @@ public void testAppsQueryWithDeselects()
     assertEquals(MediaType.APPLICATION_JSON_TYPE + ";" + JettyUtils.UTF_8,
         response.getMediaType().toString());
 
-    json = response.readEntity(JSONObject.class);
+    json = responseToJson(response);
     assertEquals(1, json.length(), "incorrect number of elements");
     apps = json.getJSONObject("apps");
     assertEquals(1, apps.length(), "incorrect number of elements");
@@ -1359,7 +1360,7 @@ public void testAppStatistics() throws JSONException, Exception {
           .request(MediaType.APPLICATION_JSON).get(Response.class);
       assertEquals(MediaType.APPLICATION_JSON_TYPE + ";" + JettyUtils.UTF_8,
           response.getMediaType().toString());
-      JSONObject json = response.readEntity(JSONObject.class);
+      JSONObject json = responseToJson(response);
       assertEquals(1, json.length(), "incorrect number of elements");
       JSONObject appsStatInfo = json.getJSONObject("appStatInfo");
       assertEquals(1, appsStatInfo.length(), "incorrect number of elements");
@@ -1386,7 +1387,7 @@ public void testAppStatistics() throws JSONException, Exception {
           .request(MediaType.APPLICATION_JSON).get(Response.class);
       assertEquals(MediaType.APPLICATION_JSON_TYPE + ";" + JettyUtils.UTF_8,
           response.getMediaType().toString());
-      json = response.readEntity(JSONObject.class);
+      json = responseToJson(response);
       assertEquals(1, json.length(), "incorrect number of elements");
       appsStatInfo = json.getJSONObject("appStatInfo");
       assertEquals(1, appsStatInfo.length(), "incorrect number of elements");
@@ -1404,7 +1405,7 @@ public void testAppStatistics() throws JSONException, Exception {
           .request(MediaType.APPLICATION_JSON).get(Response.class);
       assertEquals(MediaType.APPLICATION_JSON_TYPE + ";" + JettyUtils.UTF_8,
           response.getMediaType().toString());
-      json = response.readEntity(JSONObject.class);
+      json = responseToJson(response);
       assertEquals(1, json.length(), "incorrect number of elements");
       appsStatInfo = json.getJSONObject("appStatInfo");
       assertEquals(1, appsStatInfo.length(), "incorrect number of elements");
@@ -1432,7 +1433,7 @@ public void testAppStatistics() throws JSONException, Exception {
       assertResponseStatusCode(Response.Status.BAD_REQUEST, response.getStatusInfo());
       assertEquals(MediaType.APPLICATION_JSON_TYPE + ";" + JettyUtils.UTF_8,
           response.getMediaType().toString());
-      json = response.readEntity(JSONObject.class);
+      json = responseToJson(response);
       assertEquals(1, json.length(), "incorrect number of elements");
       JSONObject exception = json.getJSONObject("RemoteException");
       assertEquals(3, exception.length(), "incorrect number of elements");
@@ -1456,7 +1457,7 @@ public void testAppStatistics() throws JSONException, Exception {
           .request(MediaType.APPLICATION_JSON).get(Response.class);
       assertEquals(MediaType.APPLICATION_JSON_TYPE + ";" + JettyUtils.UTF_8,
           response.getMediaType().toString());
-      json = response.readEntity(JSONObject.class);
+      json = responseToJson(response);
       assertEquals(1, json.length(), "incorrect number of elements");
       appsStatInfo = json.getJSONObject("appStatInfo");
       assertEquals(1, appsStatInfo.length(), "incorrect number of elements");
@@ -1481,7 +1482,7 @@ public void testAppStatistics() throws JSONException, Exception {
       assertResponseStatusCode(Response.Status.BAD_REQUEST, response.getStatusInfo());
       assertEquals(MediaType.APPLICATION_JSON_TYPE + ";" + JettyUtils.UTF_8,
           response.getMediaType().toString());
-      json = response.readEntity(JSONObject.class);
+      json = responseToJson(response);
       assertEquals(1, json.length(), "incorrect number of elements");
       exception = json.getJSONObject("RemoteException");
       assertEquals(3, exception.length(), "incorrect number of elements");
@@ -1583,7 +1584,7 @@ public void testInvalidApp() throws JSONException, Exception {
       assertResponseStatusCode(Response.Status.BAD_REQUEST, response.getStatusInfo());
       assertEquals(MediaType.APPLICATION_JSON_TYPE + ";" + JettyUtils.UTF_8,
           response.getMediaType().toString());
-      JSONObject msg = response.readEntity(JSONObject.class);
+      JSONObject msg = responseToJson(response);
       JSONObject exception = msg.getJSONObject("RemoteException");
       assertEquals(3, exception.length(), "incorrect number of elements");
       String message = exception.getString("message");
@@ -1625,7 +1626,7 @@ public void testNonexistApp() throws JSONException, Exception {
       assertEquals(MediaType.APPLICATION_JSON_TYPE + ";" + JettyUtils.UTF_8,
           response.getMediaType().toString());
 
-      JSONObject msg = response.readEntity(JSONObject.class);
+      JSONObject msg = responseToJson(response);
       JSONObject exception = msg.getJSONObject("RemoteException");
       assertEquals(3, exception.length(), "incorrect number of elements");
       String message = exception.getString("message");
@@ -1649,7 +1650,7 @@ public void testSingleAppsHelper(String path, RMApp app, String media)
         .path("apps").path(path).request(media).get(Response.class);
     assertEquals(MediaType.APPLICATION_JSON_TYPE + ";" + JettyUtils.UTF_8,
         response.getMediaType().toString());
-    JSONObject json = response.readEntity(JSONObject.class);
+    JSONObject json = responseToJson(response);
 
     assertEquals(1, json.length(), "incorrect number of elements");
     verifyAppInfo(json.getJSONObject("app"), app, false);
@@ -1967,7 +1968,7 @@ public void testAppsQueryByQueueShortname() throws Exception {
         .request(MediaType.APPLICATION_JSON).get(Response.class);
     assertEquals(MediaType.APPLICATION_JSON_TYPE + ";" + JettyUtils.UTF_8,
         response.getMediaType().toString());
-    JSONObject json = response.readEntity(JSONObject.class);
+    JSONObject json = responseToJson(response);
     assertEquals(1, json.length(), "incorrect number of elements");
     JSONObject apps = json.getJSONObject("apps");
     assertEquals(1, apps.length(), "incorrect number of elements");
@@ -2032,7 +2033,7 @@ public void testAppsQueryByQueueFullname() throws Exception {
         .request(MediaType.APPLICATION_JSON).get(Response.class);
     assertEquals(MediaType.APPLICATION_JSON_TYPE + ";" + JettyUtils.UTF_8,
         response.getMediaType().toString());
-    JSONObject json = response.readEntity(JSONObject.class);
+    JSONObject json = responseToJson(response);
     assertEquals(1, json.length(), "incorrect number of elements");
     JSONObject apps = json.getJSONObject("apps");
     assertEquals(1, apps.length(), "incorrect number of elements");
diff --git a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/webapp/TestRMWebServicesAppsModification.java b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/webapp/TestRMWebServicesAppsModification.java
index 81783da272df9..1063f364eee43 100644
--- a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/webapp/TestRMWebServicesAppsModification.java
+++ b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/webapp/TestRMWebServicesAppsModification.java
@@ -18,6 +18,7 @@
 
 package org.apache.hadoop.yarn.server.resourcemanager.webapp;
 
+import static org.apache.hadoop.yarn.server.resourcemanager.webapp.TestWebServiceUtil.responseToJson;
 import static org.apache.hadoop.yarn.webapp.WebServicesTestUtils.assertResponseStatusCode;
 import static org.junit.jupiter.api.Assertions.assertEquals;
 import static org.junit.jupiter.api.Assertions.assertTrue;
@@ -527,7 +528,7 @@ protected static void verifyAppStateJson(Response response,
 
     assertEquals(MediaType.APPLICATION_JSON_TYPE + ";" + JettyUtils.UTF_8,
         response.getMediaType().toString());
-    JSONObject json = response.readEntity(JSONObject.class);
+    JSONObject json = responseToJson(response);
     assertEquals(1, json.length(), "incorrect number of elements");
     String responseState = json.getString("state");
     boolean valid = false;
@@ -1299,7 +1300,7 @@ protected static void verifyAppPriorityJson(Response response,
       int expectedPriority) throws JSONException {
     assertEquals(MediaType.APPLICATION_JSON_TYPE + ";" + JettyUtils.UTF_8,
         response.getMediaType().toString());
-    JSONObject json = response.readEntity(JSONObject.class);
+    JSONObject json = responseToJson(response);
     assertEquals(1, json.length(), "incorrect number of elements");
     int responsePriority = json.getInt("priority");
     assertEquals(expectedPriority, responsePriority);
@@ -1327,7 +1328,7 @@ protected static void verifyAppQueueJson(Response response, String queue)
       throws JSONException {
     assertEquals(MediaType.APPLICATION_JSON_TYPE + ";" + JettyUtils.UTF_8,
         response.getMediaType().toString());
-    JSONObject json = response.readEntity(JSONObject.class);
+    JSONObject json = responseToJson(response);
     assertEquals(1, json.length(), "incorrect number of elements");
     String responseQueue = json.getString("queue");
     assertEquals(queue, responseQueue);
@@ -1379,7 +1380,7 @@ public void testUpdateAppTimeout(int run) throws Exception {
               MediaType.APPLICATION_JSON_TYPE + ";" + JettyUtils.UTF_8,
               response.getMediaType().toString());
           JSONObject js =
-              response.readEntity(JSONObject.class).getJSONObject("timeouts");
+              responseToJson(response).getJSONObject("timeouts");
           JSONArray entity = js.getJSONArray("timeout");
           verifyAppTimeoutJson(entity.getJSONObject(0),
               ApplicationTimeoutType.LIFETIME, "UNLIMITED", -1);
@@ -1456,7 +1457,7 @@ protected static void verifyAppTimeoutJson(Response response,
       throws JSONException {
     assertEquals(MediaType.APPLICATION_JSON_TYPE + ";" + JettyUtils.UTF_8,
         response.getMediaType().toString());
-    JSONObject jsonTimeout = response.readEntity(JSONObject.class);
+    JSONObject jsonTimeout = responseToJson(response);
     assertEquals(1, jsonTimeout.length(), "incorrect number of elements");
     JSONObject json = jsonTimeout.getJSONObject("timeout");
     verifyAppTimeoutJson(json, type, expireTime, timeOutFromNow);
diff --git a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/webapp/TestRMWebServicesCapacitySched.java b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/webapp/TestRMWebServicesCapacitySched.java
index 6fd3721209573..ce3408c6d1dc7 100644
--- a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/webapp/TestRMWebServicesCapacitySched.java
+++ b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/webapp/TestRMWebServicesCapacitySched.java
@@ -32,12 +32,9 @@
 import org.apache.hadoop.yarn.server.resourcemanager.scheduler.ResourceScheduler;
 import org.apache.hadoop.yarn.server.resourcemanager.scheduler.fifo.FifoScheduler;
 import org.apache.hadoop.yarn.server.resourcemanager.webapp.jsonprovider.JsonProviderFeature;
-import org.apache.hadoop.yarn.server.resourcemanager.webapp.reader.ApplicationSubmissionContextInfoReader;
-import org.apache.hadoop.yarn.server.resourcemanager.webapp.writer.ApplicationSubmissionContextInfoWriter;
 import org.apache.hadoop.yarn.webapp.GenericExceptionHandler;
 import org.codehaus.jettison.json.JSONObject;
 import org.glassfish.jersey.internal.inject.AbstractBinder;
-import org.glassfish.jersey.jettison.JettisonFeature;
 import org.glassfish.jersey.server.ResourceConfig;
 import org.junit.jupiter.api.AfterAll;
 import org.junit.jupiter.api.BeforeEach;
@@ -58,6 +55,7 @@
 import static org.apache.hadoop.yarn.server.resourcemanager.webapp.TestWebServiceUtil.assertXmlResponse;
 import static org.apache.hadoop.yarn.server.resourcemanager.webapp.TestWebServiceUtil.backupSchedulerConfigFileInTarget;
 import static org.apache.hadoop.yarn.server.resourcemanager.webapp.TestWebServiceUtil.createRM;
+import static org.apache.hadoop.yarn.server.resourcemanager.webapp.TestWebServiceUtil.responseToJson;
 import static org.apache.hadoop.yarn.server.resourcemanager.webapp.TestWebServiceUtil.restoreSchedulerConfigFileInTarget;
 import static org.junit.jupiter.api.Assertions.assertEquals;
 import static org.mockito.Mockito.mock;
@@ -79,8 +77,6 @@ protected Application configure() {
     config.register(RMWebServices.class);
     config.register(new JerseyBinder());
     config.register(GenericExceptionHandler.class);
-    config.register(ApplicationSubmissionContextInfoWriter.class);
-    config.register(ApplicationSubmissionContextInfoReader.class);
     config.register(TestRMWebServicesAppsModification.TestRMCustomAuthFilter.class);
     config.register(JsonProviderFeature.class);
     return config;
@@ -184,7 +180,7 @@ public void testClusterSchedulerOverviewCapacity(boolean pLegacyQueueMode) throw
     Response response = targetWithJsonObject().path("ws/v1/cluster/scheduler-overview")
         .request(MediaType.APPLICATION_JSON).get(Response.class);
     assertJsonType(response);
-    JSONObject json = response.readEntity(JSONObject.class);
+    JSONObject json = responseToJson(response);
     JSONObject scheduler = json.getJSONObject("scheduler");
     TestRMWebServices.verifyClusterSchedulerOverView(scheduler, "Capacity Scheduler");
   }
diff --git a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/webapp/TestRMWebServicesCapacitySchedDefaultLabel.java b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/webapp/TestRMWebServicesCapacitySchedDefaultLabel.java
index 1a881540f7acd..9e1d3d3f32f6f 100644
--- a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/webapp/TestRMWebServicesCapacitySchedDefaultLabel.java
+++ b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/webapp/TestRMWebServicesCapacitySchedDefaultLabel.java
@@ -25,12 +25,9 @@
 import org.apache.hadoop.yarn.server.resourcemanager.scheduler.capacity.CapacitySchedulerConfiguration;
 import org.apache.hadoop.yarn.server.resourcemanager.scheduler.capacity.QueuePath;
 import org.apache.hadoop.yarn.server.resourcemanager.webapp.jsonprovider.JsonProviderFeature;
-import org.apache.hadoop.yarn.server.resourcemanager.webapp.reader.ApplicationSubmissionContextInfoReader;
-import org.apache.hadoop.yarn.server.resourcemanager.webapp.writer.ApplicationSubmissionContextInfoWriter;
 import org.apache.hadoop.yarn.webapp.GenericExceptionHandler;
 import org.apache.hadoop.yarn.webapp.JerseyTestBase;
 import org.glassfish.jersey.internal.inject.AbstractBinder;
-import org.glassfish.jersey.jettison.JettisonFeature;
 import org.glassfish.jersey.server.ResourceConfig;
 import org.junit.jupiter.api.AfterAll;
 import org.junit.jupiter.params.ParameterizedTest;
@@ -70,8 +67,6 @@ protected Application configure() {
     config.register(RMWebServices.class);
     config.register(new JerseyBinder());
     config.register(GenericExceptionHandler.class);
-    config.register(ApplicationSubmissionContextInfoWriter.class);
-    config.register(ApplicationSubmissionContextInfoReader.class);
     config.register(TestRMWebServicesAppsModification.TestRMCustomAuthFilter.class);
     config.register(JsonProviderFeature.class);
     return config;
diff --git a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/webapp/TestRMWebServicesCapacitySchedDynamicConfig.java b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/webapp/TestRMWebServicesCapacitySchedDynamicConfig.java
index 8e0d417e6433d..bf95db64a899f 100644
--- a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/webapp/TestRMWebServicesCapacitySchedDynamicConfig.java
+++ b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/webapp/TestRMWebServicesCapacitySchedDynamicConfig.java
@@ -26,11 +26,8 @@
 import org.apache.hadoop.yarn.conf.YarnConfiguration;
 import org.apache.hadoop.yarn.server.resourcemanager.ResourceManager;
 import org.apache.hadoop.yarn.server.resourcemanager.webapp.jsonprovider.JsonProviderFeature;
-import org.apache.hadoop.yarn.server.resourcemanager.webapp.reader.ApplicationSubmissionContextInfoReader;
-import org.apache.hadoop.yarn.server.resourcemanager.webapp.writer.ApplicationSubmissionContextInfoWriter;
 import org.apache.hadoop.yarn.webapp.GenericExceptionHandler;
 import org.glassfish.jersey.internal.inject.AbstractBinder;
-import org.glassfish.jersey.jettison.JettisonFeature;
 import org.glassfish.jersey.server.ResourceConfig;
 import org.junit.jupiter.api.AfterAll;
 
@@ -92,8 +89,6 @@ protected Application configure() {
     config.register(RMWebServices.class);
     config.register(new JerseyBinder());
     config.register(GenericExceptionHandler.class);
-    config.register(ApplicationSubmissionContextInfoWriter.class);
-    config.register(ApplicationSubmissionContextInfoReader.class);
     config.register(TestRMWebServicesAppsModification.TestRMCustomAuthFilter.class);
     config.register(JsonProviderFeature.class);
     config.register(JAXBContextResolver.class);
diff --git a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/webapp/TestRMWebServicesCapacitySchedDynamicConfigAbsoluteMode.java b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/webapp/TestRMWebServicesCapacitySchedDynamicConfigAbsoluteMode.java
index 84b170cdf6184..3268be75fb385 100644
--- a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/webapp/TestRMWebServicesCapacitySchedDynamicConfigAbsoluteMode.java
+++ b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/webapp/TestRMWebServicesCapacitySchedDynamicConfigAbsoluteMode.java
@@ -25,12 +25,9 @@
 import org.apache.hadoop.yarn.server.resourcemanager.scheduler.ResourceScheduler;
 import org.apache.hadoop.yarn.server.resourcemanager.scheduler.fifo.FifoScheduler;
 import org.apache.hadoop.yarn.server.resourcemanager.webapp.jsonprovider.JsonProviderFeature;
-import org.apache.hadoop.yarn.server.resourcemanager.webapp.reader.ApplicationSubmissionContextInfoReader;
-import org.apache.hadoop.yarn.server.resourcemanager.webapp.writer.ApplicationSubmissionContextInfoWriter;
 import org.apache.hadoop.yarn.webapp.GenericExceptionHandler;
 import org.apache.hadoop.yarn.webapp.JerseyTestBase;
 import org.glassfish.jersey.internal.inject.AbstractBinder;
-import org.glassfish.jersey.jettison.JettisonFeature;
 import org.glassfish.jersey.server.ResourceConfig;
 import org.junit.jupiter.api.AfterAll;
 import org.junit.jupiter.params.ParameterizedTest;
diff --git a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/webapp/TestRMWebServicesCapacitySchedDynamicConfigWeightMode.java b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/webapp/TestRMWebServicesCapacitySchedDynamicConfigWeightMode.java
index d6072e4b5beff..4324b24c7c16f 100644
--- a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/webapp/TestRMWebServicesCapacitySchedDynamicConfigWeightMode.java
+++ b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/webapp/TestRMWebServicesCapacitySchedDynamicConfigWeightMode.java
@@ -25,12 +25,9 @@
 import org.apache.hadoop.yarn.server.resourcemanager.scheduler.ResourceScheduler;
 import org.apache.hadoop.yarn.server.resourcemanager.scheduler.fifo.FifoScheduler;
 import org.apache.hadoop.yarn.server.resourcemanager.webapp.jsonprovider.JsonProviderFeature;
-import org.apache.hadoop.yarn.server.resourcemanager.webapp.reader.ApplicationSubmissionContextInfoReader;
-import org.apache.hadoop.yarn.server.resourcemanager.webapp.writer.ApplicationSubmissionContextInfoWriter;
 import org.apache.hadoop.yarn.webapp.GenericExceptionHandler;
 import org.apache.hadoop.yarn.webapp.JerseyTestBase;
 import org.glassfish.jersey.internal.inject.AbstractBinder;
-import org.glassfish.jersey.jettison.JettisonFeature;
 import org.glassfish.jersey.server.ResourceConfig;
 import org.junit.jupiter.api.AfterAll;
 import org.junit.jupiter.params.ParameterizedTest;
@@ -91,8 +88,6 @@ protected Application configure() {
     config.register(RMWebServices.class);
     config.register(new JerseyBinder());
     config.register(GenericExceptionHandler.class);
-    config.register(ApplicationSubmissionContextInfoWriter.class);
-    config.register(ApplicationSubmissionContextInfoReader.class);
     config.register(TestRMWebServicesAppsModification.TestRMCustomAuthFilter.class);
     config.register(JsonProviderFeature.class);
     config.register(JAXBContextResolver.class);
diff --git a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/webapp/TestRMWebServicesCapacitySchedDynamicConfigWeightModeDQC.java b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/webapp/TestRMWebServicesCapacitySchedDynamicConfigWeightModeDQC.java
index 333a6e95cdcbd..99d0dc3b6179e 100644
--- a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/webapp/TestRMWebServicesCapacitySchedDynamicConfigWeightModeDQC.java
+++ b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/webapp/TestRMWebServicesCapacitySchedDynamicConfigWeightModeDQC.java
@@ -27,12 +27,9 @@
 import org.apache.hadoop.yarn.server.resourcemanager.scheduler.capacity.CapacitySchedulerQueueManager;
 import org.apache.hadoop.yarn.server.resourcemanager.scheduler.capacity.QueuePath;
 import org.apache.hadoop.yarn.server.resourcemanager.webapp.jsonprovider.JsonProviderFeature;
-import org.apache.hadoop.yarn.server.resourcemanager.webapp.reader.ApplicationSubmissionContextInfoReader;
-import org.apache.hadoop.yarn.server.resourcemanager.webapp.writer.ApplicationSubmissionContextInfoWriter;
 import org.apache.hadoop.yarn.webapp.GenericExceptionHandler;
 import org.apache.hadoop.yarn.webapp.JerseyTestBase;
 import org.glassfish.jersey.internal.inject.AbstractBinder;
-import org.glassfish.jersey.jettison.JettisonFeature;
 import org.glassfish.jersey.server.ResourceConfig;
 import org.junit.jupiter.api.AfterAll;
 import org.junit.jupiter.params.ParameterizedTest;
@@ -102,8 +99,6 @@ protected Application configure() {
     config.register(RMWebServices.class);
     config.register(new JerseyBinder());
     config.register(GenericExceptionHandler.class);
-    config.register(ApplicationSubmissionContextInfoWriter.class);
-    config.register(ApplicationSubmissionContextInfoReader.class);
     config.register(TestRMWebServicesAppsModification.TestRMCustomAuthFilter.class);
     config.register(JsonProviderFeature.class);
     config.register(JAXBContextResolver.class);
diff --git a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/webapp/TestRMWebServicesCapacitySchedLegacyQueueCreation.java b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/webapp/TestRMWebServicesCapacitySchedLegacyQueueCreation.java
index 561ce51d2bc38..870b897babaa9 100644
--- a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/webapp/TestRMWebServicesCapacitySchedLegacyQueueCreation.java
+++ b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/webapp/TestRMWebServicesCapacitySchedLegacyQueueCreation.java
@@ -32,11 +32,8 @@
 import org.apache.hadoop.yarn.conf.YarnConfiguration;
 import org.apache.hadoop.yarn.server.resourcemanager.ResourceManager;
 import org.apache.hadoop.yarn.server.resourcemanager.webapp.jsonprovider.JsonProviderFeature;
-import org.apache.hadoop.yarn.server.resourcemanager.webapp.reader.ApplicationSubmissionContextInfoReader;
-import org.apache.hadoop.yarn.server.resourcemanager.webapp.writer.ApplicationSubmissionContextInfoWriter;
 import org.apache.hadoop.yarn.webapp.GenericExceptionHandler;
 import org.glassfish.jersey.internal.inject.AbstractBinder;
-import org.glassfish.jersey.jettison.JettisonFeature;
 import org.glassfish.jersey.server.ResourceConfig;
 import org.junit.jupiter.api.AfterAll;
 
@@ -71,8 +68,6 @@ protected Application configure() {
     config.register(RMWebServices.class);
     config.register(new JerseyBinder());
     config.register(GenericExceptionHandler.class);
-    config.register(ApplicationSubmissionContextInfoWriter.class);
-    config.register(ApplicationSubmissionContextInfoReader.class);
     config.register(TestRMWebServicesAppsModification.TestRMCustomAuthFilter.class);
     config.register(JsonProviderFeature.class);
     config.register(JAXBContextResolver.class);
diff --git a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/webapp/TestRMWebServicesCapacitySchedulerConfigMutation.java b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/webapp/TestRMWebServicesCapacitySchedulerConfigMutation.java
index 773e81dfaeee5..4f252bfd3ec33 100644
--- a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/webapp/TestRMWebServicesCapacitySchedulerConfigMutation.java
+++ b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/webapp/TestRMWebServicesCapacitySchedulerConfigMutation.java
@@ -37,14 +37,10 @@
 import org.apache.hadoop.yarn.server.resourcemanager.ResourceManager;
 import org.apache.hadoop.yarn.server.resourcemanager.scheduler.capacity.CapacitySchedulerConfiguration;
 import org.apache.hadoop.yarn.server.resourcemanager.webapp.jsonprovider.JsonProviderFeature;
-import org.apache.hadoop.yarn.server.resourcemanager.webapp.reader.ApplicationSubmissionContextInfoReader;
-import org.apache.hadoop.yarn.server.resourcemanager.webapp.writer.ApplicationSubmissionContextInfoWriter;
-import org.apache.hadoop.yarn.server.resourcemanager.webapp.writer.SchedConfUpdateInfoWriter;
 import org.apache.hadoop.yarn.webapp.GenericExceptionHandler;
 import org.apache.hadoop.yarn.webapp.dao.QueueConfigInfo;
 import org.apache.hadoop.yarn.webapp.dao.SchedConfUpdateInfo;
 import org.glassfish.jersey.internal.inject.AbstractBinder;
-import org.glassfish.jersey.jettison.JettisonFeature;
 import org.glassfish.jersey.server.ResourceConfig;
 import org.junit.jupiter.api.AfterAll;
 import org.junit.jupiter.api.BeforeAll;
diff --git a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/webapp/TestRMWebServicesConfigurationMutation.java b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/webapp/TestRMWebServicesConfigurationMutation.java
index 8ffd187d7a494..e788f48689110 100644
--- a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/webapp/TestRMWebServicesConfigurationMutation.java
+++ b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/webapp/TestRMWebServicesConfigurationMutation.java
@@ -72,6 +72,7 @@
 import static org.apache.hadoop.yarn.server.resourcemanager.scheduler.capacity.CapacitySchedulerConfiguration.MAXIMUM_CAPACITY;
 import static org.apache.hadoop.yarn.server.resourcemanager.webapp.TestWebServiceUtil.getCapacitySchedulerConfigFileInTarget;
 import static org.apache.hadoop.yarn.server.resourcemanager.webapp.TestWebServiceUtil.backupSchedulerConfigFileInTarget;
+import static org.apache.hadoop.yarn.server.resourcemanager.webapp.TestWebServiceUtil.responseToJson;
 import static org.apache.hadoop.yarn.server.resourcemanager.webapp.TestWebServiceUtil.restoreSchedulerConfigFileInTarget;
 import static org.apache.hadoop.yarn.server.resourcemanager.webapp.TestWebServiceUtil.toJson;
 import static org.junit.jupiter.api.Assertions.assertEquals;
@@ -205,7 +206,7 @@ private CapacitySchedulerConfiguration getSchedulerConf()
             .request(MediaType.APPLICATION_JSON)
             .get(Response.class);
     assertEquals(Status.OK.getStatusCode(), response.getStatus());
-    JSONObject json = response.readEntity(JSONObject.class);
+    JSONObject json = responseToJson(response);
     JSONArray items = (JSONArray) json.get("property");
     CapacitySchedulerConfiguration parsedConf =
         new CapacitySchedulerConfiguration();
@@ -272,7 +273,7 @@ private long getConfigVersion() throws Exception {
         .request(MediaType.APPLICATION_JSON).get(Response.class);
     assertEquals(Status.OK.getStatusCode(), response.getStatus());
 
-    JSONObject json = response.readEntity(JSONObject.class).
+    JSONObject json = responseToJson(response).
         getJSONObject("configversion");
     return Long.parseLong(json.get("versionID").toString());
   }
diff --git a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/webapp/TestRMWebServicesContainers.java b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/webapp/TestRMWebServicesContainers.java
index d9158f00a1c33..a77d0add7ef5b 100644
--- a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/webapp/TestRMWebServicesContainers.java
+++ b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/webapp/TestRMWebServicesContainers.java
@@ -47,15 +47,12 @@
 import org.apache.hadoop.yarn.server.resourcemanager.scheduler.ResourceScheduler;
 import org.apache.hadoop.yarn.server.resourcemanager.scheduler.fifo.FifoScheduler;
 import org.apache.hadoop.yarn.server.resourcemanager.webapp.jsonprovider.JsonProviderFeature;
-import org.apache.hadoop.yarn.server.resourcemanager.webapp.reader.ApplicationSubmissionContextInfoReader;
-import org.apache.hadoop.yarn.server.resourcemanager.webapp.writer.ApplicationSubmissionContextInfoWriter;
 import org.apache.hadoop.yarn.webapp.GenericExceptionHandler;
 import org.apache.hadoop.yarn.webapp.JerseyTestBase;
 import org.junit.jupiter.api.BeforeEach;
 import org.junit.jupiter.api.Test;
 
 import org.glassfish.jersey.internal.inject.AbstractBinder;
-import org.glassfish.jersey.jettison.JettisonFeature;
 import org.glassfish.jersey.server.ResourceConfig;
 import org.glassfish.jersey.test.TestProperties;
 
@@ -73,8 +70,6 @@ protected Application configure() {
     config.register(RMWebServices.class);
     config.register(new JerseyBinder());
     config.register(GenericExceptionHandler.class);
-    config.register(ApplicationSubmissionContextInfoWriter.class);
-    config.register(ApplicationSubmissionContextInfoReader.class);
     config.register(TestRMWebServicesAppsModification.TestRMCustomAuthFilter.class);
     config.register(JsonProviderFeature.class);
     config.register(JAXBContextResolver.class);
diff --git a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/webapp/TestRMWebServicesDelegationTokens.java b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/webapp/TestRMWebServicesDelegationTokens.java
index 51aac290b465d..dd02e7eab61e7 100644
--- a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/webapp/TestRMWebServicesDelegationTokens.java
+++ b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/webapp/TestRMWebServicesDelegationTokens.java
@@ -19,6 +19,7 @@
 package org.apache.hadoop.yarn.server.resourcemanager.webapp;
 
 import static org.apache.hadoop.yarn.server.resourcemanager.webapp.TestWebServiceUtil.createRM;
+import static org.apache.hadoop.yarn.server.resourcemanager.webapp.TestWebServiceUtil.responseToJson;
 import static org.apache.hadoop.yarn.webapp.WebServicesTestUtils.assertResponseStatusCode;
 
 import java.io.File;
@@ -748,8 +749,7 @@ private void verifySimpleAuthCancel() {
           throws IOException, ParserConfigurationException, SAXException,
           JSONException {
     if (response.getMediaType().toString().contains(MediaType.APPLICATION_JSON)) {
-      return getDelegationTokenFromJson(
-          response.readEntity(JSONObject.class));
+      return getDelegationTokenFromJson(responseToJson(response));
     }
     return getDelegationTokenFromXML(response.readEntity(String.class));
   }
diff --git a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/webapp/TestRMWebServicesForCSWithPartitions.java b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/webapp/TestRMWebServicesForCSWithPartitions.java
index dcfd79fdc900e..ee691bc61f248 100644
--- a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/webapp/TestRMWebServicesForCSWithPartitions.java
+++ b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/webapp/TestRMWebServicesForCSWithPartitions.java
@@ -26,6 +26,7 @@
 import static org.apache.hadoop.yarn.server.resourcemanager.webapp.ActivitiesTestUtils.getFirstSubNodeFromJson;
 import static org.apache.hadoop.yarn.server.resourcemanager.webapp.ActivitiesTestUtils.verifyNumberOfAllocations;
 import static org.apache.hadoop.yarn.server.resourcemanager.webapp.TestWebServiceUtil.createRM;
+import static org.apache.hadoop.yarn.server.resourcemanager.webapp.TestWebServiceUtil.responseToJson;
 import static org.junit.jupiter.api.Assertions.assertEquals;
 import static org.junit.jupiter.api.Assertions.assertTrue;
 import static org.junit.jupiter.api.Assertions.fail;
@@ -285,7 +286,7 @@ public void testSchedulerPartitions(boolean pLegacyQueueMode) throws JSONExcepti
         .request(MediaType.APPLICATION_JSON).get(Response.class);
     assertEquals(MediaType.APPLICATION_JSON_TYPE + ";" + JettyUtils.UTF_8,
         response.getMediaType().toString());
-    JSONObject json = response.readEntity(JSONObject.class);
+    JSONObject json = responseToJson(response);
     verifySchedulerInfoJson(json);
   }
 
@@ -300,7 +301,7 @@ public void testSchedulerPartitionsSlash(boolean pLegacyQueueMode)
         .request(MediaType.APPLICATION_JSON).get(Response.class);
     assertEquals(MediaType.APPLICATION_JSON_TYPE + ";" + JettyUtils.UTF_8,
         response.getMediaType().toString());
-    JSONObject json = response.readEntity(JSONObject.class);
+    JSONObject json = responseToJson(response);
     verifySchedulerInfoJson(json);
 
   }
@@ -315,7 +316,7 @@ public void testSchedulerPartitionsDefault(boolean pLegacyQueueMode)
         .path("scheduler").request().get(Response.class);
     assertEquals(MediaType.APPLICATION_JSON_TYPE + ";" + JettyUtils.UTF_8,
         response.getMediaType().toString());
-    JSONObject json = response.readEntity(JSONObject.class);
+    JSONObject json = responseToJson(response);
     verifySchedulerInfoJson(json);
   }
 
diff --git a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/webapp/TestRMWebServicesNodeLabels.java b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/webapp/TestRMWebServicesNodeLabels.java
index 76b00d109d9a7..117762527e179 100644
--- a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/webapp/TestRMWebServicesNodeLabels.java
+++ b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/webapp/TestRMWebServicesNodeLabels.java
@@ -18,6 +18,7 @@
 
 package org.apache.hadoop.yarn.server.resourcemanager.webapp;
 
+import static org.apache.hadoop.yarn.server.resourcemanager.webapp.TestWebServiceUtil.responseToJson;
 import static org.junit.jupiter.api.Assertions.assertEquals;
 import static org.junit.jupiter.api.Assertions.assertFalse;
 import static org.junit.jupiter.api.Assertions.assertNotNull;
@@ -26,7 +27,6 @@
 import static org.mockito.Mockito.when;
 
 import java.io.IOException;
-import java.io.StringWriter;
 import java.security.Principal;
 import java.util.ArrayList;
 import java.util.List;
@@ -61,12 +61,7 @@
 import org.apache.hadoop.yarn.server.resourcemanager.webapp.dao.NodeToLabelsEntry;
 import org.apache.hadoop.yarn.server.resourcemanager.webapp.dao.NodeToLabelsInfo;
 import org.apache.hadoop.yarn.server.resourcemanager.webapp.dao.NodeToLabelsEntryList;
-import org.apache.hadoop.yarn.server.resourcemanager.webapp.jsonprovider.ExcludeRootJSONProvider;
-import org.apache.hadoop.yarn.server.resourcemanager.webapp.jsonprovider.IncludeRootJSONProvider;
 import org.apache.hadoop.yarn.server.resourcemanager.webapp.jsonprovider.JsonProviderFeature;
-import org.apache.hadoop.yarn.server.resourcemanager.webapp.reader.NodeLabelsInfoReader;
-import org.apache.hadoop.yarn.server.resourcemanager.webapp.reader.LabelsToNodesInfoReader;
-import org.apache.hadoop.yarn.server.resourcemanager.webapp.reader.NodeToLabelsInfoReader;
 import org.apache.hadoop.yarn.webapp.GenericExceptionHandler;
 import org.apache.hadoop.yarn.webapp.JerseyTestBase;
 import org.apache.hadoop.yarn.webapp.WebServicesTestUtils;
@@ -76,9 +71,6 @@
 import org.junit.jupiter.api.Test;
 
 import org.glassfish.jersey.internal.inject.AbstractBinder;
-import org.glassfish.jersey.jettison.JettisonFeature;
-import org.glassfish.jersey.jettison.JettisonJaxbContext;
-import org.glassfish.jersey.jettison.JettisonMarshaller;
 import org.glassfish.jersey.server.ResourceConfig;
 import org.glassfish.jersey.test.TestProperties;
 public class TestRMWebServicesNodeLabels extends JerseyTestBase {
@@ -625,7 +617,7 @@ private void validateJsonExceptionContent(Response response,
       String expectedMessage)
       throws JSONException {
     assertEquals(BAD_REQUEST_CODE, response.getStatus());
-    JSONObject msg = response.readEntity(JSONObject.class);
+    JSONObject msg = responseToJson(response);
     JSONObject exception = msg.getJSONObject("RemoteException");
     String message = exception.getString("message");
     assertEquals(3, exception.length(), "incorrect number of elements");
diff --git a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/webapp/TestRMWebServicesNodes.java b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/webapp/TestRMWebServicesNodes.java
index fa64a2bf47eaf..3e1aaa10d35fa 100644
--- a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/webapp/TestRMWebServicesNodes.java
+++ b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/webapp/TestRMWebServicesNodes.java
@@ -19,6 +19,7 @@
 package org.apache.hadoop.yarn.server.resourcemanager.webapp;
 
 import static org.apache.hadoop.yarn.server.resourcemanager.MockNM.createMockNodeStatus;
+import static org.apache.hadoop.yarn.server.resourcemanager.webapp.TestWebServiceUtil.responseToJson;
 import static org.assertj.core.api.Assertions.assertThat;
 import static org.apache.hadoop.yarn.webapp.WebServicesTestUtils.assertResponseStatusCode;
 import static org.junit.jupiter.api.Assertions.assertEquals;
@@ -89,8 +90,6 @@
 import org.apache.hadoop.yarn.server.resourcemanager.webapp.dao.ResourceInfo;
 import org.apache.hadoop.yarn.server.resourcemanager.webapp.dao.ResourceOptionInfo;
 import org.apache.hadoop.yarn.server.resourcemanager.webapp.jsonprovider.JsonProviderFeature;
-import org.apache.hadoop.yarn.server.resourcemanager.webapp.reader.ResourceOptionInfoReader;
-import org.apache.hadoop.yarn.server.resourcemanager.webapp.writer.ResourceOptionInfoWriter;
 import org.apache.hadoop.yarn.util.Records;
 import org.apache.hadoop.yarn.util.RackResolver;
 import org.apache.hadoop.yarn.util.resource.Resources;
@@ -110,7 +109,6 @@
 
 import org.apache.hadoop.thirdparty.com.google.common.base.Joiner;
 import org.glassfish.jersey.internal.inject.AbstractBinder;
-import org.glassfish.jersey.jettison.JettisonFeature;
 import org.glassfish.jersey.server.ResourceConfig;
 import org.glassfish.jersey.test.TestProperties;
 
@@ -240,7 +238,7 @@ public void testNodesDefaultWithUnHealthyNode() throws JSONException,
 
     assertEquals(MediaType.APPLICATION_JSON_TYPE + ";" + JettyUtils.UTF_8,
         response.getMediaType().toString());
-    JSONObject json = response.readEntity(JSONObject.class);
+    JSONObject json = responseToJson(response);
     assertEquals(1, json.length(), "incorrect number of elements");
     JSONObject nodes = json.getJSONObject("nodes");
     assertEquals(1, nodes.length(), "incorrect number of elements");
@@ -290,7 +288,7 @@ public void testNodesQueryNew() throws Exception {
 
     assertEquals(MediaType.APPLICATION_JSON_TYPE + ";" + JettyUtils.UTF_8,
         response.getMediaType().toString());
-    JSONObject json = response.readEntity(JSONObject.class);
+    JSONObject json = responseToJson(response);
     assertEquals(1, json.length(), "incorrect number of elements");
     JSONObject nodes = json.getJSONObject("nodes");
     assertEquals(1, nodes.length(), "incorrect number of elements");
@@ -313,7 +311,7 @@ public void testNodesQueryStateNone() throws JSONException, Exception {
         .request(MediaType.APPLICATION_JSON).get(Response.class);
     assertEquals(MediaType.APPLICATION_JSON_TYPE + ";" + JettyUtils.UTF_8,
         response.getMediaType().toString());
-    JSONObject json = response.readEntity(JSONObject.class);
+    JSONObject json = responseToJson(response);
     assertEquals(1, json.length(), "incorrect number of elements");
     assertEquals(new JSONObject().toString(), json.get("nodes").toString(), "nodes is not empty");
   }
@@ -364,7 +362,7 @@ public void testNodesQueryStateLost() throws JSONException, Exception {
 
     assertEquals(MediaType.APPLICATION_JSON_TYPE + ";" + JettyUtils.UTF_8,
         response.getMediaType().toString());
-    JSONObject json = response.readEntity(JSONObject.class);
+    JSONObject json = responseToJson(response);
     JSONObject nodes = json.getJSONObject("nodes");
     assertEquals(1, nodes.length(), "incorrect number of elements");
     JSONArray nodeArray = nodes.getJSONArray("node");
@@ -396,7 +394,7 @@ public void testSingleNodeQueryStateLost() throws JSONException, Exception {
 
     assertEquals(MediaType.APPLICATION_JSON_TYPE + ";" + JettyUtils.UTF_8,
         response.getMediaType().toString());
-    JSONObject json = response.readEntity(JSONObject.class);
+    JSONObject json = responseToJson(response);
     JSONObject info = json.getJSONObject("node");
     String id = info.get("id").toString();
 
@@ -423,7 +421,7 @@ public void testNodesQueryRunning() throws JSONException, Exception {
         .request(MediaType.APPLICATION_JSON).get(Response.class);
     assertEquals(MediaType.APPLICATION_JSON_TYPE + ";" + JettyUtils.UTF_8,
         response.getMediaType().toString());
-    JSONObject json = response.readEntity(JSONObject.class);
+    JSONObject json = responseToJson(response);
     assertEquals(1, json.length(), "incorrect number of elements");
     JSONObject nodes = json.getJSONObject("nodes");
     assertEquals(1, nodes.length(), "incorrect number of elements");
@@ -442,7 +440,7 @@ public void testNodesQueryHealthyFalse() throws JSONException, Exception {
         .request(MediaType.APPLICATION_JSON).get(Response.class);
     assertEquals(MediaType.APPLICATION_JSON_TYPE + ";" + JettyUtils.UTF_8,
         response.getMediaType().toString());
-    JSONObject json = response.readEntity(JSONObject.class);
+    JSONObject json = responseToJson(response);
     assertEquals(1, json.length(), "incorrect number of elements");
     assertEquals(new JSONObject().toString(), json.get("nodes").toString(), "nodes is not empty");
   }
@@ -457,7 +455,7 @@ public void testNodesHelper(String path, String media) throws JSONException,
         .path(path).request(media).get(Response.class);
     assertEquals(MediaType.APPLICATION_JSON_TYPE + ";" + JettyUtils.UTF_8,
         response.getMediaType().toString());
-    JSONObject json = response.readEntity(JSONObject.class);
+    JSONObject json = responseToJson(response);
     assertEquals(1, json.length(), "incorrect number of elements");
     JSONObject nodes = json.getJSONObject("nodes");
     assertEquals(1, nodes.length(), "incorrect number of elements");
@@ -504,7 +502,7 @@ public void testSingleNodeHelper(String nodeid, RMNode nm, String media)
 
     assertEquals(MediaType.APPLICATION_JSON_TYPE + ";" + JettyUtils.UTF_8,
         response.getMediaType().toString());
-    JSONObject json = response.readEntity(JSONObject.class);
+    JSONObject json = responseToJson(response);
     assertEquals(1, json.length(), "incorrect number of elements");
     JSONObject info = json.getJSONObject("node");
     verifyNodeInfo(info, nm);
@@ -524,7 +522,7 @@ public void testNonexistNode() throws Exception {
     assertResponseStatusCode(Response.Status.NOT_FOUND, response.getStatusInfo());
     assertEquals(MediaType.APPLICATION_JSON_TYPE + ";" + JettyUtils.UTF_8,
         response.getMediaType().toString());
-    JSONObject msg = response.readEntity(JSONObject.class);
+    JSONObject msg = responseToJson(response);
     JSONObject exception = msg.getJSONObject("RemoteException");
     assertEquals(3, exception.length(), "incorrect number of elements");
     String message = exception.getString("message");
@@ -546,7 +544,7 @@ public void testNonexistNodeDefault() throws Exception {
     assertResponseStatusCode(Response.Status.NOT_FOUND, response.getStatusInfo());
     assertEquals(MediaType.APPLICATION_JSON_TYPE + ";" + JettyUtils.UTF_8,
         response.getMediaType().toString());
-    JSONObject msg = response.readEntity(JSONObject.class);
+    JSONObject msg = responseToJson(response);
     JSONObject exception = msg.getJSONObject("RemoteException");
     assertEquals(3, exception.length(), "incorrect number of elements");
     String message = exception.getString("message");
@@ -599,7 +597,7 @@ public void testInvalidNode() throws Exception {
     assertResponseStatusCode(Response.Status.BAD_REQUEST, response.getStatusInfo());
     assertEquals(MediaType.APPLICATION_JSON_TYPE + ";" + JettyUtils.UTF_8,
         response.getMediaType().toString());
-    JSONObject msg = response.readEntity(JSONObject.class);
+    JSONObject msg = responseToJson(response);
     JSONObject exception = msg.getJSONObject("RemoteException");
     assertEquals(3, exception.length(), "incorrect number of elements");
     String message = exception.getString("message");
@@ -699,7 +697,7 @@ public void testQueryAll() throws Exception {
 
     assertEquals(MediaType.APPLICATION_JSON_TYPE + ";" + JettyUtils.UTF_8,
         response.getMediaType().toString());
-    JSONObject json = response.readEntity(JSONObject.class);
+    JSONObject json = responseToJson(response);
     JSONObject nodes = json.getJSONObject("nodes");
     assertEquals(1, nodes.length(), "incorrect number of elements");
     JSONArray nodeArray = nodes.getJSONArray("node");
@@ -732,7 +730,7 @@ public void testNodesResourceUtilization() throws JSONException, Exception {
 
     assertEquals(MediaType.APPLICATION_JSON_TYPE + ";" + JettyUtils.UTF_8,
         response.getMediaType().toString());
-    JSONObject json = response.readEntity(JSONObject.class);
+    JSONObject json = responseToJson(response);
     assertEquals(1, json.length(), "incorrect number of elements");
     JSONObject nodes = json.getJSONObject("nodes");
     assertEquals(1, nodes.length(), "incorrect number of elements");
@@ -792,7 +790,7 @@ public void testUpdateNodeResource() throws Exception {
         .request(MediaType.APPLICATION_JSON)
         .post(Entity.json(resourceOption), Response.class);
     assertResponseStatusCode(Response.Status.BAD_REQUEST, response.getStatusInfo());
-    JSONObject json = response.readEntity(JSONObject.class);
+    JSONObject json = responseToJson(response);
     JSONObject exception = json.getJSONObject("RemoteException");
     assertEquals("IllegalArgumentException", exception.getString("exception"));
     String msg = exception.getString("message");
@@ -968,7 +966,7 @@ public void testNodesAllocationTags() throws Exception {
         .path("nodes").request("application/json").get(Response.class);
     assertEquals(MediaType.APPLICATION_JSON + ";" + JettyUtils.UTF_8,
         response.getMediaType().toString());
-    JSONObject nodesInfoJson = response.readEntity(JSONObject.class);
+    JSONObject nodesInfoJson = responseToJson(response);
     verifyNodeAllocationTag(nodesInfoJson, expectedAllocationTags);
 
     rm.stop();
diff --git a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/webapp/TestRMWebServicesReservation.java b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/webapp/TestRMWebServicesReservation.java
index 9339ad490796f..ad1f8737ec7f3 100644
--- a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/webapp/TestRMWebServicesReservation.java
+++ b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/webapp/TestRMWebServicesReservation.java
@@ -18,6 +18,7 @@
 
 package org.apache.hadoop.yarn.server.resourcemanager.webapp;
 
+import static org.apache.hadoop.yarn.server.resourcemanager.webapp.TestWebServiceUtil.responseToJson;
 import static org.apache.hadoop.yarn.server.resourcemanager.webapp.TestWebServiceUtil.toJson;
 import static org.assertj.core.api.Assertions.assertThat;
 import static org.apache.hadoop.yarn.webapp.WebServicesTestUtils.assertResponseStatusCode;
@@ -1240,7 +1241,7 @@ private JSONObject testListReservationHelper(WebTarget target, Response.Status
         response.getMediaType().toString());
     assertResponseStatusCode(status, response.getStatusInfo());
 
-    return response.readEntity(JSONObject.class);
+    return responseToJson(response);
   }
 
   private void verifyReservationCount(int count) throws Exception {
diff --git a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/webapp/TestRMWebServicesSchedulerActivities.java b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/webapp/TestRMWebServicesSchedulerActivities.java
index 4dd7110da4fe6..fc0a764fddeb3 100644
--- a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/webapp/TestRMWebServicesSchedulerActivities.java
+++ b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/webapp/TestRMWebServicesSchedulerActivities.java
@@ -32,7 +32,6 @@
 import org.apache.hadoop.yarn.server.resourcemanager.scheduler.activities.ActivityState;
 import org.apache.hadoop.yarn.server.resourcemanager.scheduler.capacity.CapacitySchedulerConfiguration;
 import org.apache.hadoop.yarn.server.resourcemanager.webapp.jsonprovider.JsonProviderFeature;
-import org.apache.hadoop.yarn.server.resourcemanager.webapp.reader.NodeLabelsInfoReader;
 import org.apache.hadoop.yarn.webapp.GenericExceptionHandler;
 import org.apache.hadoop.yarn.webapp.JerseyTestBase;
 import org.junit.jupiter.api.BeforeEach;
@@ -101,6 +100,7 @@
 import static org.apache.hadoop.yarn.server.resourcemanager.webapp.ActivitiesTestUtils.verifyNumberOfNodes;
 import static org.apache.hadoop.yarn.server.resourcemanager.webapp.ActivitiesTestUtils.verifyQueueOrder;
 import static org.apache.hadoop.yarn.server.resourcemanager.webapp.ActivitiesTestUtils.verifyStateOfAllocations;
+import static org.apache.hadoop.yarn.server.resourcemanager.webapp.TestWebServiceUtil.responseToJson;
 import static org.junit.jupiter.api.Assertions.assertEquals;
 import static org.junit.jupiter.api.Assertions.assertFalse;
 import static org.junit.jupiter.api.Assertions.assertNotNull;
@@ -120,7 +120,6 @@ protected Application configure() {
     config.register(RMWebServices.class);
     config.register(new JerseyBinder());
     config.register(GenericExceptionHandler.class);
-    config.register(NodeLabelsInfoReader.class);
     config.register(JsonProviderFeature.class);
     config.register(JAXBContextResolver.class);
     forceSet(TestProperties.CONTAINER_PORT, JERSEY_RANDOM_PORT);
@@ -232,7 +231,7 @@ public void testAssignMultipleContainersPerNodeHeartbeat()
           MediaType.APPLICATION_JSON).get(Response.class);
       assertEquals(MediaType.APPLICATION_JSON_TYPE + ";" + JettyUtils.UTF_8,
           response.getMediaType().toString());
-      JSONObject json = response.readEntity(JSONObject.class);
+      JSONObject json = responseToJson(response);
 
       nm.nodeHeartbeat(true);
       Thread.sleep(1000);
@@ -243,7 +242,7 @@ public void testAssignMultipleContainersPerNodeHeartbeat()
           MediaType.APPLICATION_JSON).get(Response.class);
       assertEquals(MediaType.APPLICATION_JSON_TYPE + ";" + JettyUtils.UTF_8,
           response.getMediaType().toString());
-      json = response.readEntity(JSONObject.class);
+      json = responseToJson(response);
 
       // Collection logic of scheduler activities changed after YARN-9313,
       // only one allocation should be recorded for all scenarios.
@@ -296,7 +295,7 @@ public void testAssignWithoutAvailableResource() throws Exception {
           request(MediaType.APPLICATION_JSON).get(Response.class);
       assertEquals(MediaType.APPLICATION_JSON_TYPE + ";" + JettyUtils.UTF_8,
           response.getMediaType().toString());
-      JSONObject json = response.readEntity(JSONObject.class);
+      JSONObject json = responseToJson(response);
 
       nm.nodeHeartbeat(true);
       Thread.sleep(1000);
@@ -307,7 +306,7 @@ public void testAssignWithoutAvailableResource() throws Exception {
           MediaType.APPLICATION_JSON).get(Response.class);
       assertEquals(MediaType.APPLICATION_JSON_TYPE + ";" + JettyUtils.UTF_8,
           response.getMediaType().toString());
-      json = response.readEntity(JSONObject.class);
+      json = responseToJson(response);
 
       // verify scheduler activities
       verifyNumberOfAllocations(json, 1);
@@ -335,7 +334,7 @@ public void testNoNM() throws Exception {
           MediaType.APPLICATION_JSON).get(Response.class);
       assertEquals(MediaType.APPLICATION_JSON_TYPE + ";" + JettyUtils.UTF_8,
           response.getMediaType().toString());
-      JSONObject json = response.readEntity(JSONObject.class);
+      JSONObject json = responseToJson(response);
 
       Thread.sleep(1000);
 
@@ -345,7 +344,7 @@ public void testNoNM() throws Exception {
           MediaType.APPLICATION_JSON).get(Response.class);
       assertEquals(MediaType.APPLICATION_JSON_TYPE + ";" + JettyUtils.UTF_8,
           response.getMediaType().toString());
-      json = response.readEntity(JSONObject.class);
+      json = responseToJson(response);
 
       verifyNumberOfAllocations(json, 0);
     } finally {
@@ -388,7 +387,7 @@ public void testWrongNodeId() throws Exception {
           MediaType.APPLICATION_JSON).get(Response.class);
       assertEquals(MediaType.APPLICATION_JSON_TYPE + ";" + JettyUtils.UTF_8,
           response.getMediaType().toString());
-      JSONObject json = response.readEntity(JSONObject.class);
+      JSONObject json = responseToJson(response);
 
       nm.nodeHeartbeat(true);
       Thread.sleep(1000);
@@ -399,7 +398,7 @@ public void testWrongNodeId() throws Exception {
           MediaType.APPLICATION_JSON).get(Response.class);
       assertEquals(MediaType.APPLICATION_JSON_TYPE + ";" + JettyUtils.UTF_8,
           response.getMediaType().toString());
-      json = response.readEntity(JSONObject.class);
+      json = responseToJson(response);
 
       verifyNumberOfAllocations(json, 0);
     } finally {
@@ -454,7 +453,7 @@ public void testReserveNewContainer() throws Exception {
           MediaType.APPLICATION_JSON).get(Response.class);
       assertEquals(MediaType.APPLICATION_JSON_TYPE + ";" + JettyUtils.UTF_8,
           response.getMediaType().toString());
-      JSONObject json = response.readEntity(JSONObject.class);
+      JSONObject json = responseToJson(response);
 
       nm2.nodeHeartbeat(true);
       Thread.sleep(1000);
@@ -464,7 +463,7 @@ public void testReserveNewContainer() throws Exception {
           MediaType.APPLICATION_JSON).get(Response.class);
       assertEquals(MediaType.APPLICATION_JSON_TYPE + ";" + JettyUtils.UTF_8,
           response.getMediaType().toString());
-      json = response.readEntity(JSONObject.class);
+      json = responseToJson(response);
 
       verifyNumberOfAllocations(json, 1);
 
@@ -482,7 +481,7 @@ public void testReserveNewContainer() throws Exception {
           MediaType.APPLICATION_JSON).get(Response.class);
       assertEquals(MediaType.APPLICATION_JSON_TYPE + ";" + JettyUtils.UTF_8,
           response.getMediaType().toString());
-      json = response.readEntity(JSONObject.class);
+      json = responseToJson(response);
 
       nm2.nodeHeartbeat(true);
       Thread.sleep(1000);
@@ -492,7 +491,7 @@ public void testReserveNewContainer() throws Exception {
           MediaType.APPLICATION_JSON).get(Response.class);
       assertEquals(MediaType.APPLICATION_JSON_TYPE + ";" + JettyUtils.UTF_8,
           response.getMediaType().toString());
-      json = response.readEntity(JSONObject.class);
+      json = responseToJson(response);
 
       verifyNumberOfAllocations(json, 1);
 
@@ -517,7 +516,7 @@ public void testReserveNewContainer() throws Exception {
           MediaType.APPLICATION_JSON).get(Response.class);
       assertEquals(MediaType.APPLICATION_JSON_TYPE + ";" + JettyUtils.UTF_8,
           response.getMediaType().toString());
-      json = response.readEntity(JSONObject.class);
+      json = responseToJson(response);
 
       nm2.nodeHeartbeat(true);
       Thread.sleep(1000);
@@ -527,7 +526,7 @@ public void testReserveNewContainer() throws Exception {
           MediaType.APPLICATION_JSON).get(Response.class);
       assertEquals(MediaType.APPLICATION_JSON_TYPE + ";" + JettyUtils.UTF_8,
           response.getMediaType().toString());
-      json = response.readEntity(JSONObject.class);
+      json = responseToJson(response);
 
       verifyNumberOfAllocations(json, 1);
 
@@ -568,7 +567,7 @@ public void testActivityJSON() throws Exception {
           MediaType.APPLICATION_JSON).get(Response.class);
       assertEquals(MediaType.APPLICATION_JSON_TYPE + ";" + JettyUtils.UTF_8,
           response.getMediaType().toString());
-      JSONObject json = response.readEntity(JSONObject.class);
+      JSONObject json = responseToJson(response);
 
       nm.nodeHeartbeat(true);
       Thread.sleep(1000);
@@ -579,7 +578,7 @@ public void testActivityJSON() throws Exception {
           MediaType.APPLICATION_JSON).get(Response.class);
       assertEquals(MediaType.APPLICATION_JSON_TYPE + ";" + JettyUtils.UTF_8,
           response.getMediaType().toString());
-      json = response.readEntity(JSONObject.class);
+      json = responseToJson(response);
 
       verifyNumberOfAllocations(json, 1);
 
@@ -895,7 +894,7 @@ public void testInsufficientResourceDiagnostic() throws Exception {
               .request(MediaType.APPLICATION_JSON).get(Response.class);
       assertEquals(MediaType.APPLICATION_JSON_TYPE + ";" + JettyUtils.UTF_8,
           response.getMediaType().toString());
-      JSONObject json = response.readEntity(JSONObject.class);
+      JSONObject json = responseToJson(response);
       assertEquals("waiting for next allocation",
           getFirstSubNodeFromJson(json, FN_SCHEDULER_ACT_ROOT)
               .optString(FN_ACT_DIAGNOSTIC));
@@ -913,7 +912,7 @@ public void testInsufficientResourceDiagnostic() throws Exception {
               .request(MediaType.APPLICATION_JSON).get(Response.class);
       assertEquals(MediaType.APPLICATION_JSON_TYPE + ";" + JettyUtils.UTF_8,
           response.getMediaType().toString());
-      json = response.readEntity(JSONObject.class);
+      json = responseToJson(response);
 
       verifyNumberOfAllocations(json, 1);
       JSONObject allocationObj = getFirstSubNodeFromJson(json,
@@ -969,7 +968,7 @@ public void testPlacementConstraintDiagnostic() throws Exception {
               .request(MediaType.APPLICATION_JSON).get(Response.class);
       assertEquals(MediaType.APPLICATION_JSON_TYPE + ";" + JettyUtils.UTF_8,
           response.getMediaType().toString());
-      JSONObject json = response.readEntity(JSONObject.class);
+      JSONObject json = responseToJson(response);
       assertEquals("waiting for next allocation",
           getFirstSubNodeFromJson(json, FN_SCHEDULER_ACT_ROOT)
               .optString(FN_ACT_DIAGNOSTIC));
@@ -983,7 +982,7 @@ public void testPlacementConstraintDiagnostic() throws Exception {
               .request(MediaType.APPLICATION_JSON).get(Response.class);
       assertEquals(MediaType.APPLICATION_JSON_TYPE + ";" + JettyUtils.UTF_8,
           response.getMediaType().toString());
-      json = response.readEntity(JSONObject.class);
+      json = responseToJson(response);
 
       verifyNumberOfAllocations(json, 1);
       JSONObject allocationObj = getFirstSubNodeFromJson(json,
@@ -1766,7 +1765,7 @@ public void run() {
 
       assertEquals(MediaType.APPLICATION_JSON_TYPE + ";"
           + JettyUtils.UTF_8, response.getMediaType().toString());
-      json = response.readEntity(JSONObject.class);
+      json = responseToJson(response);
       done = true;
     }
   }
diff --git a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/webapp/TestRMWebServicesSchedulerActivitiesWithMultiNodesEnabled.java b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/webapp/TestRMWebServicesSchedulerActivitiesWithMultiNodesEnabled.java
index ef3c1cbaf1c66..6bd84cfe88cf7 100644
--- a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/webapp/TestRMWebServicesSchedulerActivitiesWithMultiNodesEnabled.java
+++ b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/webapp/TestRMWebServicesSchedulerActivitiesWithMultiNodesEnabled.java
@@ -83,6 +83,7 @@
 import static org.apache.hadoop.yarn.server.resourcemanager.webapp.ActivitiesTestUtils.verifyNumberOfAllocationAttempts;
 import static org.apache.hadoop.yarn.server.resourcemanager.webapp.ActivitiesTestUtils.verifyNumberOfAllocations;
 import static org.apache.hadoop.yarn.server.resourcemanager.webapp.ActivitiesTestUtils.verifyStateOfAllocations;
+import static org.apache.hadoop.yarn.server.resourcemanager.webapp.TestWebServiceUtil.responseToJson;
 import static org.junit.jupiter.api.Assertions.assertEquals;
 import static org.junit.jupiter.api.Assertions.assertNotNull;
 import static org.junit.jupiter.api.Assertions.assertTrue;
@@ -218,7 +219,7 @@ public void testAssignContainer() throws Exception {
           MediaType.APPLICATION_JSON).get(Response.class);
       assertEquals(MediaType.APPLICATION_JSON_TYPE + ";" + JettyUtils.UTF_8,
           response.getMediaType().toString());
-      JSONObject json = response.readEntity(JSONObject.class);
+      JSONObject json = responseToJson(response);
 
       verifyNumberOfAllocations(json, 1);
 
@@ -262,7 +263,7 @@ public void testSchedulingWithoutPendingRequests()
           MediaType.APPLICATION_JSON).get(Response.class);
       assertEquals(MediaType.APPLICATION_JSON_TYPE + ";" + JettyUtils.UTF_8,
           response.getMediaType().toString());
-      JSONObject json = response.readEntity(JSONObject.class);
+      JSONObject json = responseToJson(response);
 
       verifyNumberOfAllocations(json, 1);
       JSONObject allocation = getFirstSubNodeFromJson(json,
@@ -376,7 +377,7 @@ public void testInsufficientResourceDiagnostic() throws Exception {
               .request(MediaType.APPLICATION_JSON).get(Response.class);
       assertEquals(MediaType.APPLICATION_JSON_TYPE + ";" + JettyUtils.UTF_8,
           response.getMediaType().toString());
-      JSONObject json = response.readEntity(JSONObject.class);
+      JSONObject json = responseToJson(response);
       assertEquals("waiting for next allocation",
           json.getJSONObject(FN_SCHEDULER_ACT_ROOT).getString("diagnostic"));
 
@@ -390,7 +391,7 @@ public void testInsufficientResourceDiagnostic() throws Exception {
               .request(MediaType.APPLICATION_JSON).get(Response.class);
       assertEquals(MediaType.APPLICATION_JSON_TYPE + ";" + JettyUtils.UTF_8,
           response.getMediaType().toString());
-      json = response.readEntity(JSONObject.class);
+      json = responseToJson(response);
 
       //Check app activities
       verifyNumberOfAllocations(json, 1);
diff --git a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/webapp/TestWebServiceUtil.java b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/webapp/TestWebServiceUtil.java
index 820aa7a587112..3f358d8f7d18a 100644
--- a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/webapp/TestWebServiceUtil.java
+++ b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/webapp/TestWebServiceUtil.java
@@ -54,6 +54,8 @@
 import com.fasterxml.jackson.databind.ObjectMapper;
 import com.fasterxml.jackson.databind.ObjectWriter;
 import com.fasterxml.jackson.databind.SerializationFeature;
+import org.codehaus.jettison.json.JSONException;
+import org.codehaus.jettison.json.JSONObject;
 import org.eclipse.persistence.jaxb.MarshallerProperties;
 import org.glassfish.jersey.jettison.JettisonJaxbContext;
 import org.glassfish.jersey.jettison.JettisonMarshaller;
@@ -344,6 +346,15 @@ public static void restoreSchedulerConfigFileInTarget() {
     }
   }
 
+  public static JSONObject responseToJson(Response response) {
+    String res = response.readEntity(String.class);
+    try {
+      return new JSONObject(res);
+    } catch (JSONException e) {
+      throw new RuntimeException("Failed to parse JSON: " + res, e);
+    }
+  }
+
   public static String toEntity(Object obj, Class> klass, String mediaType)
       throws Exception {
     if (MediaType.APPLICATION_JSON.equals(mediaType)) {
diff --git a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/webapp/fairscheduler/TestRMWebServicesFairScheduler.java b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/webapp/fairscheduler/TestRMWebServicesFairScheduler.java
index 9366275d2569e..eb8c2faaacfd0 100644
--- a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/webapp/fairscheduler/TestRMWebServicesFairScheduler.java
+++ b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/webapp/fairscheduler/TestRMWebServicesFairScheduler.java
@@ -49,6 +49,7 @@
 import javax.ws.rs.core.MediaType;
 import javax.ws.rs.core.Response;
 
+import static org.apache.hadoop.yarn.server.resourcemanager.webapp.TestWebServiceUtil.responseToJson;
 import static org.junit.jupiter.api.Assertions.assertEquals;
 import static org.junit.jupiter.api.Assertions.fail;
 import static org.mockito.Mockito.mock;
@@ -105,7 +106,7 @@ public void testClusterScheduler() throws JSONException {
         .request(MediaType.APPLICATION_JSON).get(Response.class);
     assertEquals(MediaType.APPLICATION_JSON_TYPE + ";" + JettyUtils.UTF_8,
         response.getMediaType().toString());
-    JSONObject json = response.readEntity(JSONObject.class);
+    JSONObject json = responseToJson(response);
     verifyClusterScheduler(json);
   }
 
@@ -116,7 +117,7 @@ public void testClusterSchedulerSlash() throws JSONException {
         .request(MediaType.APPLICATION_JSON).get(Response.class);
     assertEquals(MediaType.APPLICATION_JSON_TYPE + ";" + JettyUtils.UTF_8,
         response.getMediaType().toString());
-    JSONObject json = response.readEntity(JSONObject.class);
+    JSONObject json = responseToJson(response);
     verifyClusterScheduler(json);
   }
 
@@ -134,7 +135,7 @@ public void testClusterSchedulerWithSubQueues()
         .request(MediaType.APPLICATION_JSON).get(Response.class);
     assertEquals(MediaType.APPLICATION_JSON_TYPE + ";" + JettyUtils.UTF_8,
         response.getMediaType().toString());
-    JSONObject json = response.readEntity(JSONObject.class);
+    JSONObject json = responseToJson(response);
     JSONArray subQueueInfo = json.getJSONObject("scheduler")
         .getJSONObject("schedulerInfo").getJSONObject("rootQueue")
         .getJSONObject("childQueues").getJSONArray("queue").getJSONObject(0)
@@ -170,7 +171,7 @@ public void testClusterSchedulerOverviewFair() throws Exception {
         .get(Response.class);
     assertEquals(MediaType.APPLICATION_JSON + ";" + JettyUtils.UTF_8,
         response.getMediaType().toString());
-    JSONObject json = response.readEntity(JSONObject.class);
+    JSONObject json = responseToJson(response);
     JSONObject scheduler = json.getJSONObject("scheduler");
     TestRMWebServices.verifyClusterSchedulerOverView(scheduler, "Fair Scheduler");
   }
diff --git a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/webapp/reader/ApplicationSubmissionContextInfoReader.java b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/webapp/reader/ApplicationSubmissionContextInfoReader.java
deleted file mode 100644
index cf94940fe2e7a..0000000000000
--- a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/webapp/reader/ApplicationSubmissionContextInfoReader.java
+++ /dev/null
@@ -1,75 +0,0 @@
-/**
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.hadoop.yarn.server.resourcemanager.webapp.reader;
-
-import org.apache.hadoop.yarn.server.resourcemanager.webapp.dao.ApplicationSubmissionContextInfo;
-import org.glassfish.jersey.jettison.JettisonJaxbContext;
-import org.glassfish.jersey.jettison.JettisonUnmarshaller;
-
-import javax.ws.rs.Consumes;
-import javax.ws.rs.WebApplicationException;
-import javax.ws.rs.core.MediaType;
-import javax.ws.rs.core.MultivaluedMap;
-import javax.ws.rs.ext.MessageBodyReader;
-import javax.ws.rs.ext.Provider;
-import javax.xml.bind.JAXBException;
-import java.io.IOException;
-import java.io.InputStream;
-import java.lang.annotation.Annotation;
-import java.lang.reflect.Type;
-
-/**
- * We have defined a dedicated Reader for ApplicationSubmissionContextInfo,
- * aimed at adapting to the Jersey2 framework
- * to ensure that JSON can be converted into ApplicationSubmissionContextInfo.
- */
-@Provider
-@Consumes(MediaType.APPLICATION_JSON)
-public class ApplicationSubmissionContextInfoReader
-    implements MessageBodyReader {
-
-  private JettisonUnmarshaller jsonUnmarshaller;
-
-  public ApplicationSubmissionContextInfoReader() {
-    try {
-      JettisonJaxbContext jettisonJaxbContext = new JettisonJaxbContext(
-          ApplicationSubmissionContextInfo.class);
-      jsonUnmarshaller = jettisonJaxbContext.createJsonUnmarshaller();
-    } catch (JAXBException e) {
-    }
-  }
-
-  @Override
-  public boolean isReadable(Class> type, Type genericType,
-      Annotation[] annotations, MediaType mediaType) {
-    return type == ApplicationSubmissionContextInfo.class;
-  }
-
-  @Override
-  public ApplicationSubmissionContextInfo readFrom(Class type,
-      Type genericType, Annotation[] annotations, MediaType mediaType,
-      MultivaluedMap httpHeaders, InputStream entityStream)
-      throws IOException, WebApplicationException {
-    try {
-      return jsonUnmarshaller.unmarshalFromJSON(entityStream,
-          ApplicationSubmissionContextInfo.class);
-    } catch (JAXBException e) {
-      throw new IOException(e);
-    }
-  }
-}
diff --git a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/webapp/reader/LabelsToNodesInfoReader.java b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/webapp/reader/LabelsToNodesInfoReader.java
deleted file mode 100644
index 7f8373205f82c..0000000000000
--- a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/webapp/reader/LabelsToNodesInfoReader.java
+++ /dev/null
@@ -1,74 +0,0 @@
-/**
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.hadoop.yarn.server.resourcemanager.webapp.reader;
-
-import org.apache.hadoop.yarn.server.resourcemanager.webapp.dao.LabelsToNodesInfo;
-import org.glassfish.jersey.jettison.JettisonJaxbContext;
-import org.glassfish.jersey.jettison.JettisonUnmarshaller;
-
-import javax.ws.rs.Consumes;
-import javax.ws.rs.WebApplicationException;
-import javax.ws.rs.core.MediaType;
-import javax.ws.rs.core.MultivaluedMap;
-import javax.ws.rs.ext.MessageBodyReader;
-import javax.ws.rs.ext.Provider;
-import javax.xml.bind.JAXBException;
-import java.io.IOException;
-import java.io.InputStream;
-import java.lang.annotation.Annotation;
-import java.lang.reflect.Type;
-
-/**
- * We have defined a dedicated Reader for LabelsToNodesInfo,
- * aimed at adapting to the Jersey2 framework
- * to ensure that JSON can be converted into LabelsToNodesInfo.
- */
-@Provider
-@Consumes(MediaType.APPLICATION_JSON)
-public class LabelsToNodesInfoReader implements MessageBodyReader {
-
-  private JettisonUnmarshaller jsonUnmarshaller;
-
-  public LabelsToNodesInfoReader() {
-    try {
-      JettisonJaxbContext jettisonJaxbContext = new JettisonJaxbContext(LabelsToNodesInfo.class);
-      jsonUnmarshaller = jettisonJaxbContext.createJsonUnmarshaller();
-    } catch (JAXBException e) {
-    }
-  }
-
-  @Override
-  public boolean isReadable(Class> type, Type genericType,
-      Annotation[] annotations, MediaType mediaType) {
-    return type == LabelsToNodesInfo.class;
-  }
-
-  @Override
-  public LabelsToNodesInfo readFrom(Class type, Type genericType,
-      Annotation[] annotations, MediaType mediaType,
-      MultivaluedMap httpHeaders, InputStream entityStream)
-      throws IOException, WebApplicationException {
-    try {
-      LabelsToNodesInfo labelsToNodesInfo =
-          jsonUnmarshaller.unmarshalFromJSON(entityStream, LabelsToNodesInfo.class);
-      return labelsToNodesInfo;
-    } catch (JAXBException e) {
-      throw new IOException(e);
-    }
-  }
-}
diff --git a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/webapp/reader/NodeLabelsInfoReader.java b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/webapp/reader/NodeLabelsInfoReader.java
deleted file mode 100644
index 71afb95280b45..0000000000000
--- a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/webapp/reader/NodeLabelsInfoReader.java
+++ /dev/null
@@ -1,74 +0,0 @@
-/**
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.hadoop.yarn.server.resourcemanager.webapp.reader;
-
-import org.apache.hadoop.yarn.server.resourcemanager.webapp.dao.NodeLabelsInfo;
-import org.glassfish.jersey.jettison.JettisonJaxbContext;
-import org.glassfish.jersey.jettison.JettisonUnmarshaller;
-
-import javax.ws.rs.Consumes;
-import javax.ws.rs.WebApplicationException;
-import javax.ws.rs.core.MediaType;
-import javax.ws.rs.core.MultivaluedMap;
-import javax.ws.rs.ext.MessageBodyReader;
-import javax.ws.rs.ext.Provider;
-import javax.xml.bind.JAXBException;
-import java.io.IOException;
-import java.io.InputStream;
-import java.lang.annotation.Annotation;
-import java.lang.reflect.Type;
-
-/**
- * We have defined a dedicated Reader for NodeLabelsInfo,
- * aimed at adapting to the Jersey2 framework
- * to ensure that JSON can be converted into NodeLabelsInfo.
- */
-@Provider
-@Consumes(MediaType.APPLICATION_JSON)
-public class NodeLabelsInfoReader implements MessageBodyReader {
-
-  private JettisonUnmarshaller jsonUnmarshaller;
-
-  public NodeLabelsInfoReader() {
-    try {
-      JettisonJaxbContext jettisonJaxbContext = new JettisonJaxbContext(NodeLabelsInfo.class);
-      jsonUnmarshaller = jettisonJaxbContext.createJsonUnmarshaller();
-    } catch (JAXBException e) {
-    }
-  }
-
-  @Override
-  public boolean isReadable(Class> type, Type genericType,
-      Annotation[] annotations, MediaType mediaType) {
-    return type == NodeLabelsInfo.class;
-  }
-
-  @Override
-  public NodeLabelsInfo readFrom(Class type, Type genericType,
-      Annotation[] annotations, MediaType mediaType,
-      MultivaluedMap httpHeaders, InputStream entityStream)
-      throws IOException, WebApplicationException {
-    try {
-      NodeLabelsInfo nodeLabelsInfo =
-          jsonUnmarshaller.unmarshalFromJSON(entityStream, NodeLabelsInfo.class);
-      return nodeLabelsInfo;
-    } catch (JAXBException e) {
-      throw new IOException(e);
-    }
-  }
-}
diff --git a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/webapp/reader/NodeToLabelsInfoReader.java b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/webapp/reader/NodeToLabelsInfoReader.java
deleted file mode 100644
index d78460f81eeb4..0000000000000
--- a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/webapp/reader/NodeToLabelsInfoReader.java
+++ /dev/null
@@ -1,74 +0,0 @@
-/**
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.hadoop.yarn.server.resourcemanager.webapp.reader;
-
-import org.apache.hadoop.yarn.server.resourcemanager.webapp.dao.NodeToLabelsInfo;
-import org.glassfish.jersey.jettison.JettisonJaxbContext;
-import org.glassfish.jersey.jettison.JettisonUnmarshaller;
-
-import javax.ws.rs.Consumes;
-import javax.ws.rs.WebApplicationException;
-import javax.ws.rs.core.MediaType;
-import javax.ws.rs.core.MultivaluedMap;
-import javax.ws.rs.ext.MessageBodyReader;
-import javax.ws.rs.ext.Provider;
-import javax.xml.bind.JAXBException;
-import java.io.IOException;
-import java.io.InputStream;
-import java.lang.annotation.Annotation;
-import java.lang.reflect.Type;
-
-/**
- * We have defined a dedicated Reader for NodeToLabelsInfo,
- * aimed at adapting to the Jersey2 framework
- * to ensure that JSON can be converted into NodeToLabelsInfo.
- */
-@Provider
-@Consumes(MediaType.APPLICATION_JSON)
-public class NodeToLabelsInfoReader implements MessageBodyReader {
-
-  private JettisonUnmarshaller jsonUnmarshaller;
-
-  public NodeToLabelsInfoReader() {
-    try {
-      JettisonJaxbContext jettisonJaxbContext = new JettisonJaxbContext(NodeToLabelsInfo.class);
-      jsonUnmarshaller = jettisonJaxbContext.createJsonUnmarshaller();
-    } catch (JAXBException e) {
-    }
-  }
-
-  @Override
-  public boolean isReadable(Class> type,
-      Type genericType, Annotation[] annotations, MediaType mediaType) {
-    return type == NodeToLabelsInfo.class;
-  }
-
-  @Override
-  public NodeToLabelsInfo readFrom(Class type, Type genericType,
-      Annotation[] annotations, MediaType mediaType,
-      MultivaluedMap httpHeaders,
-      InputStream entityStream) throws IOException, WebApplicationException {
-    try {
-      NodeToLabelsInfo nodeLabelsInfo =
-          jsonUnmarshaller.unmarshalFromJSON(entityStream, NodeToLabelsInfo.class);
-      return nodeLabelsInfo;
-    } catch (JAXBException e) {
-      throw new IOException(e);
-    }
-  }
-}
diff --git a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/webapp/reader/ResourceOptionInfoReader.java b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/webapp/reader/ResourceOptionInfoReader.java
deleted file mode 100644
index 352e266fbf2de..0000000000000
--- a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/webapp/reader/ResourceOptionInfoReader.java
+++ /dev/null
@@ -1,74 +0,0 @@
-/**
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.hadoop.yarn.server.resourcemanager.webapp.reader;
-
-import org.apache.hadoop.yarn.server.resourcemanager.webapp.dao.ResourceOptionInfo;
-import org.glassfish.jersey.jettison.JettisonJaxbContext;
-import org.glassfish.jersey.jettison.JettisonUnmarshaller;
-
-import javax.ws.rs.Consumes;
-import javax.ws.rs.WebApplicationException;
-import javax.ws.rs.core.MediaType;
-import javax.ws.rs.core.MultivaluedMap;
-import javax.ws.rs.ext.MessageBodyReader;
-import javax.ws.rs.ext.Provider;
-import javax.xml.bind.JAXBException;
-import java.io.IOException;
-import java.io.InputStream;
-import java.lang.annotation.Annotation;
-import java.lang.reflect.Type;
-
-/**
- * We have defined a dedicated Reader for ResourceOptionInfo,
- * aimed at adapting to the Jersey2 framework
- * to ensure that JSON can be converted into ResourceOptionInfo.
- */
-@Provider
-@Consumes(MediaType.APPLICATION_JSON)
-public class ResourceOptionInfoReader implements MessageBodyReader {
-
-  private JettisonUnmarshaller jsonUnmarshaller;
-
-  public ResourceOptionInfoReader() {
-    try {
-      JettisonJaxbContext jettisonJaxbContext = new JettisonJaxbContext(ResourceOptionInfo.class);
-      jsonUnmarshaller = jettisonJaxbContext.createJsonUnmarshaller();
-    } catch (JAXBException e) {
-    }
-  }
-
-  @Override
-  public boolean isReadable(Class> type, Type genericType,
-      Annotation[] annotations, MediaType mediaType) {
-    return type == ResourceOptionInfo.class;
-  }
-
-  @Override
-  public ResourceOptionInfo readFrom(Class type, Type genericType,
-      Annotation[] annotations, MediaType mediaType,
-      MultivaluedMap httpHeaders, InputStream entityStream)
-      throws IOException, WebApplicationException {
-    try {
-      ResourceOptionInfo resourceOptionInfo =
-          jsonUnmarshaller.unmarshalFromJSON(entityStream, ResourceOptionInfo.class);
-      return resourceOptionInfo;
-    } catch (JAXBException e) {
-      throw new IOException(e);
-    }
-  }
-}
diff --git a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/webapp/writer/ApplicationSubmissionContextInfoWriter.java b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/webapp/writer/ApplicationSubmissionContextInfoWriter.java
deleted file mode 100644
index ace28592b286c..0000000000000
--- a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/webapp/writer/ApplicationSubmissionContextInfoWriter.java
+++ /dev/null
@@ -1,89 +0,0 @@
-/**
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.hadoop.yarn.server.resourcemanager.webapp.writer;
-
-import org.apache.hadoop.yarn.server.resourcemanager.webapp.dao.ApplicationSubmissionContextInfo;
-import org.glassfish.jersey.jettison.JettisonJaxbContext;
-import org.glassfish.jersey.jettison.JettisonMarshaller;
-
-import javax.ws.rs.Consumes;
-import javax.ws.rs.WebApplicationException;
-import javax.ws.rs.core.MediaType;
-import javax.ws.rs.core.MultivaluedMap;
-import javax.ws.rs.ext.MessageBodyWriter;
-import javax.ws.rs.ext.Provider;
-import javax.xml.bind.JAXBException;
-import javax.xml.bind.Marshaller;
-import java.io.IOException;
-import java.io.OutputStream;
-import java.io.StringWriter;
-import java.lang.annotation.Annotation;
-import java.lang.reflect.Type;
-import java.nio.charset.StandardCharsets;
-
-/**
- * We have defined a dedicated Writer for ApplicationSubmissionContextInfo,
- * aimed at adapting to the Jersey2 framework to ensure
- * that ApplicationSubmissionContextInfo can be converted into JSON format.
- */
-@Provider
-@Consumes(MediaType.APPLICATION_JSON)
-public class ApplicationSubmissionContextInfoWriter
-    implements MessageBodyWriter {
-
-  private JettisonMarshaller jettisonMarshaller;
-  private Marshaller marshaller;
-
-  public ApplicationSubmissionContextInfoWriter() {
-    try {
-      JettisonJaxbContext jettisonJaxbContext = new JettisonJaxbContext(
-          ApplicationSubmissionContextInfo.class);
-      jettisonMarshaller = jettisonJaxbContext.createJsonMarshaller();
-      marshaller = jettisonJaxbContext.createMarshaller();
-    } catch (JAXBException e) {
-    }
-  }
-
-  @Override
-  public boolean isWriteable(Class> type, Type genericType,
-      Annotation[] annotations, MediaType mediaType) {
-    return type == ApplicationSubmissionContextInfo.class;
-  }
-
-  @Override
-  public void writeTo(ApplicationSubmissionContextInfo applicationSubmissionContextInfo,
-      Class> type, Type genericType, Annotation[] annotations, MediaType mediaType,
-      MultivaluedMap httpHeaders, OutputStream entityStream)
-      throws IOException, WebApplicationException {
-    StringWriter stringWriter = new StringWriter();
-    try {
-      if (mediaType.toString().equals(MediaType.APPLICATION_JSON)) {
-        jettisonMarshaller.marshallToJSON(applicationSubmissionContextInfo, stringWriter);
-        entityStream.write(stringWriter.toString().getBytes(StandardCharsets.UTF_8));
-      }
-
-      if (mediaType.toString().equals(MediaType.APPLICATION_XML)) {
-        marshaller.marshal(applicationSubmissionContextInfo, stringWriter);
-        entityStream.write(stringWriter.toString().getBytes(StandardCharsets.UTF_8));
-      }
-
-    } catch (JAXBException e) {
-      throw new IOException(e);
-    }
-  }
-}
diff --git a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/webapp/writer/ResourceOptionInfoWriter.java b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/webapp/writer/ResourceOptionInfoWriter.java
deleted file mode 100644
index 4cfe6a5777e69..0000000000000
--- a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/webapp/writer/ResourceOptionInfoWriter.java
+++ /dev/null
@@ -1,87 +0,0 @@
-/**
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.hadoop.yarn.server.resourcemanager.webapp.writer;
-
-import org.apache.hadoop.yarn.server.resourcemanager.webapp.dao.ResourceOptionInfo;
-import org.glassfish.jersey.jettison.JettisonJaxbContext;
-import org.glassfish.jersey.jettison.JettisonMarshaller;
-
-import javax.ws.rs.Consumes;
-import javax.ws.rs.WebApplicationException;
-import javax.ws.rs.core.MediaType;
-import javax.ws.rs.core.MultivaluedMap;
-import javax.ws.rs.ext.MessageBodyWriter;
-import javax.ws.rs.ext.Provider;
-import javax.xml.bind.JAXBException;
-import javax.xml.bind.Marshaller;
-import java.io.IOException;
-import java.io.OutputStream;
-import java.io.StringWriter;
-import java.lang.annotation.Annotation;
-import java.lang.reflect.Type;
-import java.nio.charset.StandardCharsets;
-
-/**
- * We have defined a dedicated Writer for ResourceOptionInfo,
- * aimed at adapting to the Jersey2 framework to ensure
- * that ResourceOptionInfo can be converted into JSON format.
- */
-@Provider
-@Consumes(MediaType.APPLICATION_JSON)
-public class ResourceOptionInfoWriter implements MessageBodyWriter {
-
-  private JettisonMarshaller jettisonMarshaller;
-  private Marshaller marshaller;
-
-  public ResourceOptionInfoWriter() {
-    try {
-      JettisonJaxbContext jettisonJaxbContext = new JettisonJaxbContext(
-          ResourceOptionInfo.class);
-      jettisonMarshaller = jettisonJaxbContext.createJsonMarshaller();
-      marshaller = jettisonJaxbContext.createMarshaller();
-    } catch (JAXBException e) {
-    }
-  }
-
-  @Override
-  public boolean isWriteable(Class> type, Type genericType,
-      Annotation[] annotations, MediaType mediaType) {
-    return type == ResourceOptionInfo.class;
-  }
-
-  @Override
-  public void writeTo(ResourceOptionInfo resourceOptionInfo, Class> type,
-      Type genericType, Annotation[] annotations, MediaType mediaType,
-      MultivaluedMap httpHeaders,
-      OutputStream entityStream) throws IOException, WebApplicationException {
-    StringWriter stringWriter = new StringWriter();
-    try {
-      if (mediaType.toString().equals(MediaType.APPLICATION_JSON)) {
-        jettisonMarshaller.marshallToJSON(resourceOptionInfo, stringWriter);
-        entityStream.write(stringWriter.toString().getBytes(StandardCharsets.UTF_8));
-      }
-
-      if (mediaType.toString().equals(MediaType.APPLICATION_XML)) {
-        marshaller.marshal(resourceOptionInfo, stringWriter);
-        entityStream.write(stringWriter.toString().getBytes(StandardCharsets.UTF_8));
-      }
-    } catch (JAXBException e) {
-      throw new IOException(e);
-    }
-  }
-}
diff --git a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/webapp/writer/SchedConfUpdateInfoWriter.java b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/webapp/writer/SchedConfUpdateInfoWriter.java
deleted file mode 100644
index 4863c37a34acc..0000000000000
--- a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/webapp/writer/SchedConfUpdateInfoWriter.java
+++ /dev/null
@@ -1,87 +0,0 @@
-/**
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.hadoop.yarn.server.resourcemanager.webapp.writer;
-
-import org.apache.hadoop.yarn.webapp.dao.SchedConfUpdateInfo;
-import org.glassfish.jersey.jettison.JettisonJaxbContext;
-import org.glassfish.jersey.jettison.JettisonMarshaller;
-
-import javax.ws.rs.Consumes;
-import javax.ws.rs.WebApplicationException;
-import javax.ws.rs.core.MediaType;
-import javax.ws.rs.core.MultivaluedMap;
-import javax.ws.rs.ext.MessageBodyWriter;
-import javax.ws.rs.ext.Provider;
-import javax.xml.bind.JAXBException;
-import javax.xml.bind.Marshaller;
-import java.io.IOException;
-import java.io.OutputStream;
-import java.io.StringWriter;
-import java.lang.annotation.Annotation;
-import java.lang.reflect.Type;
-import java.nio.charset.StandardCharsets;
-
-/**
- * We have defined a dedicated Writer for SchedConfUpdateInfo,
- * aimed at adapting to the Jersey2 framework to ensure
- * that SchedConfUpdateInfo can be converted into JSON format.
- */
-@Provider
-@Consumes(MediaType.APPLICATION_JSON)
-public class SchedConfUpdateInfoWriter implements MessageBodyWriter {
-
-  private JettisonMarshaller jettisonMarshaller;
-  private Marshaller marshaller;
-
-  public SchedConfUpdateInfoWriter(){
-    try {
-      JettisonJaxbContext jettisonJaxbContext = new JettisonJaxbContext(
-          SchedConfUpdateInfo.class);
-      jettisonMarshaller = jettisonJaxbContext.createJsonMarshaller();
-      marshaller = jettisonJaxbContext.createMarshaller();
-    } catch (JAXBException e) {
-    }
-  }
-
-  @Override
-  public boolean isWriteable(Class> type, Type genericType,
-      Annotation[] annotations, MediaType mediaType) {
-    return type == SchedConfUpdateInfo.class;
-  }
-
-  @Override
-  public void writeTo(SchedConfUpdateInfo schedConfUpdateInfo, Class> type,
-      Type genericType, Annotation[] annotations, MediaType mediaType,
-      MultivaluedMap httpHeaders, OutputStream entityStream)
-      throws IOException, WebApplicationException {
-    StringWriter stringWriter = new StringWriter();
-    try {
-      if (mediaType.toString().equals(MediaType.APPLICATION_JSON)) {
-        jettisonMarshaller.marshallToJSON(schedConfUpdateInfo, stringWriter);
-        entityStream.write(stringWriter.toString().getBytes(StandardCharsets.UTF_8));
-      }
-
-      if (mediaType.toString().equals(MediaType.APPLICATION_XML)) {
-        marshaller.marshal(schedConfUpdateInfo, stringWriter);
-        entityStream.write(stringWriter.toString().getBytes(StandardCharsets.UTF_8));
-      }
-    } catch (JAXBException e) {
-      throw new IOException(e);
-    }
-  }
-}
From dee0eb16db950ca5b5366e8fc29893054044ed9e Mon Sep 17 00:00:00 2001
From: K0K0V0K 
Date: Thu, 16 Oct 2025 14:43:35 +0200
Subject: [PATCH 05/17] fromJson method
---
 .../TestFederationRMStateStoreService.java       | 10 ++--------
 .../webapp/TestWebServiceUtil.java               | 16 ++++++++++++++++
 2 files changed, 18 insertions(+), 8 deletions(-)
diff --git a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/federation/TestFederationRMStateStoreService.java b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/federation/TestFederationRMStateStoreService.java
index 92c337b0773cd..01d8ada4247e7 100644
--- a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/federation/TestFederationRMStateStoreService.java
+++ b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/federation/TestFederationRMStateStoreService.java
@@ -17,6 +17,7 @@
 
 package org.apache.hadoop.yarn.server.resourcemanager.federation;
 
+import static org.apache.hadoop.yarn.server.resourcemanager.webapp.TestWebServiceUtil.fromJson;
 import static org.junit.jupiter.api.Assertions.assertEquals;
 import static org.junit.jupiter.api.Assertions.assertNotNull;
 import static org.junit.jupiter.api.Assertions.assertNull;
@@ -103,15 +104,11 @@ public class TestFederationRMStateStoreService {
   private Configuration conf;
   private FederationStateStore stateStore;
   private long lastHearbeatTS = 0;
-  private JettisonJaxbContext jettisonJaxbContext;
-  private JettisonUnmarshaller jsonUnmarshaller;
   private MockRM mockRM;
 
   @BeforeEach
   public void setUp() throws IOException, YarnException, JAXBException {
     conf = new YarnConfiguration();
-    this.jettisonJaxbContext = new JettisonJaxbContext(ClusterMetricsInfo.class);
-    this.jsonUnmarshaller = jettisonJaxbContext.createJsonUnmarshaller();
     conf.setBoolean(YarnConfiguration.FEDERATION_ENABLED, true);
     conf.setInt(YarnConfiguration.FEDERATION_STATESTORE_HEARTBEAT_INITIAL_DELAY, 10);
     conf.set(YarnConfiguration.RM_CLUSTER_ID, subClusterId.getId());
@@ -124,8 +121,6 @@ public void setUp() throws IOException, YarnException, JAXBException {
 
   @AfterEach
   public void tearDown() throws Exception {
-    jettisonJaxbContext = null;
-    jsonUnmarshaller = null;
     mockRM.stop();
     mockRM = null;
   }
@@ -201,8 +196,7 @@ private void explicitFailover(MockRM rm) throws IOException {
 
   private void checkClusterMetricsInfo(String capability, int numNodes)
       throws JAXBException {
-    ClusterMetricsInfo clusterMetricsInfo = jsonUnmarshaller.unmarshalFromJSON(
-        new StringReader(capability), ClusterMetricsInfo.class);
+    ClusterMetricsInfo clusterMetricsInfo = fromJson(capability, ClusterMetricsInfo.class);
     assertEquals(numNodes, clusterMetricsInfo.getTotalNodes());
   }
 
diff --git a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/webapp/TestWebServiceUtil.java b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/webapp/TestWebServiceUtil.java
index 3f358d8f7d18a..2ef9c416ddf7b 100644
--- a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/webapp/TestWebServiceUtil.java
+++ b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/webapp/TestWebServiceUtil.java
@@ -39,6 +39,7 @@
 import javax.xml.bind.JAXBContext;
 import javax.xml.bind.JAXBException;
 import javax.xml.bind.Marshaller;
+import javax.xml.bind.Unmarshaller;
 import javax.xml.parsers.DocumentBuilder;
 import javax.xml.parsers.DocumentBuilderFactory;
 import javax.xml.transform.OutputKeys;
@@ -47,6 +48,7 @@
 import javax.xml.transform.TransformerFactory;
 import javax.xml.transform.dom.DOMSource;
 import javax.xml.transform.stream.StreamResult;
+import javax.xml.transform.stream.StreamSource;
 
 import com.fasterxml.jackson.databind.JsonNode;
 import com.fasterxml.jackson.databind.node.ObjectNode;
@@ -385,4 +387,18 @@ public static String toXml(Object obj, Class> klass) throws Exception {
     marshaller.marshal(obj, stringWriter);
     return stringWriter.toString();
   }
+
+  public static  T fromJson(String json, Class klass) {
+    try {
+      JAXBContext jc = new JAXBContextResolver().getContext(klass);
+      if (jc == null) {
+        jc = JAXBContext.newInstance(klass);
+      }
+      Unmarshaller unmarshaller = jc.createUnmarshaller();
+      unmarshaller.setProperty(MarshallerProperties.MEDIA_TYPE, MediaType.APPLICATION_JSON);
+      return unmarshaller.unmarshal(new StreamSource(new StringReader(json)),klass).getValue();
+    } catch (Exception e) {
+      throw new RuntimeException("Failed to read from json: " + json, e);
+    }
+  }
 }
From e0156b8e0013da0fe43060d953c07afb123f5345 Mon Sep 17 00:00:00 2001
From: K0K0V0K 
Date: Thu, 16 Oct 2025 16:07:00 +0200
Subject: [PATCH 06/17] remove Jettison from federation
---
 .../FederationStateStoreHeartbeat.java        | 29 ++++++++++++-------
 .../FederationStateStoreService.java          |  6 +++-
 .../TestFederationRMStateStoreService.java    |  5 ++--
 ...stRMWebServicesAppCustomResourceTypes.java |  1 -
 .../webapp/TestWebServiceUtil.java            |  3 --
 5 files changed, 27 insertions(+), 17 deletions(-)
diff --git a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/federation/FederationStateStoreHeartbeat.java b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/federation/FederationStateStoreHeartbeat.java
index d43b2091c70dd..ffd3889d315f6 100644
--- a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/federation/FederationStateStoreHeartbeat.java
+++ b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/federation/FederationStateStoreHeartbeat.java
@@ -20,19 +20,23 @@
 
 import java.io.StringWriter;
 
+import javax.ws.rs.core.MediaType;
+import javax.xml.bind.JAXBContext;
+import javax.xml.bind.Marshaller;
+
 import org.apache.hadoop.yarn.server.federation.store.FederationStateStore;
 import org.apache.hadoop.yarn.server.federation.store.records.SubClusterHeartbeatRequest;
 import org.apache.hadoop.yarn.server.federation.store.records.SubClusterId;
 import org.apache.hadoop.yarn.server.federation.store.records.SubClusterState;
 import org.apache.hadoop.yarn.server.resourcemanager.ResourceManager;
 import org.apache.hadoop.yarn.server.resourcemanager.scheduler.ResourceScheduler;
+import org.apache.hadoop.yarn.server.resourcemanager.webapp.JAXBContextResolver;
 import org.apache.hadoop.yarn.server.resourcemanager.webapp.dao.ClusterMetricsInfo;
+
+import org.eclipse.persistence.jaxb.MarshallerProperties;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
-import org.glassfish.jersey.jettison.JettisonJaxbContext;
-import org.glassfish.jersey.jettison.JettisonMarshaller;
-
 /**
  * Periodic heart beat from a ResourceManager participating in
  * federation to indicate liveliness. The heart beat publishes the current
@@ -48,12 +52,18 @@ public class FederationStateStoreHeartbeat implements Runnable {
   private final FederationStateStore stateStoreService;
   private final ResourceScheduler rs;
   private String capability;
+  private JAXBContextResolver resolver;
 
-  public FederationStateStoreHeartbeat(SubClusterId subClusterId,
-      FederationStateStore stateStoreClient, ResourceScheduler scheduler) {
+  public FederationStateStoreHeartbeat(
+      SubClusterId subClusterId,
+      FederationStateStore stateStoreClient,
+      ResourceScheduler scheduler,
+      JAXBContextResolver resolver
+  ) {
     this.stateStoreService = stateStoreClient;
     this.subClusterId = subClusterId;
     this.rs = scheduler;
+    this.resolver = resolver;
     LOG.info("Initialized Federation membership for cluster with timestamp: {}. ",
         ResourceManager.getClusterTimeStamp());
   }
@@ -66,12 +76,11 @@ private void updateClusterState() {
     try {
       // get the current state
       ClusterMetricsInfo clusterMetricsInfo = new ClusterMetricsInfo(rs);
-
-      JettisonJaxbContext jettisonJaxbContext = new JettisonJaxbContext(ClusterMetricsInfo.class);
-      JettisonMarshaller jsonMarshaller = jettisonJaxbContext.createJsonMarshaller();
+      JAXBContext context = resolver.getContext(ClusterMetricsInfo.class);
+      Marshaller marshaller = context.createMarshaller();
+      marshaller.setProperty(MarshallerProperties.MEDIA_TYPE, MediaType.APPLICATION_JSON);
       StringWriter stringWriter = new StringWriter();
-      jsonMarshaller.marshallToJSON(clusterMetricsInfo, stringWriter);
-
+      marshaller.marshal(clusterMetricsInfo, stringWriter);
       capability = stringWriter.toString();
     } catch (Exception e) {
       LOG.warn("Exception while trying to generate cluster state,"
diff --git a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/federation/FederationStateStoreService.java b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/federation/FederationStateStoreService.java
index 6384736d62e11..0c50618adb399 100644
--- a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/federation/FederationStateStoreService.java
+++ b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/federation/FederationStateStoreService.java
@@ -89,6 +89,7 @@
 import org.apache.hadoop.yarn.server.records.Version;
 import org.apache.hadoop.yarn.server.resourcemanager.RMContext;
 import org.apache.hadoop.yarn.server.resourcemanager.ResourceManager;
+import org.apache.hadoop.yarn.server.resourcemanager.webapp.JAXBContextResolver;
 import org.apache.hadoop.yarn.util.Clock;
 import org.apache.hadoop.yarn.util.MonotonicClock;
 import org.apache.hadoop.yarn.server.resourcemanager.rmapp.RMApp;
@@ -121,6 +122,7 @@ public class FederationStateStoreService extends AbstractService
   private String cleanUpThreadNamePrefix = "FederationStateStoreService-Clean-Thread";
   private int cleanUpRetryCountNum;
   private long cleanUpRetrySleepTime;
+  private JAXBContextResolver resolver;
 
   public FederationStateStoreService(RMContext rmContext) {
     super(FederationStateStoreService.class.getName());
@@ -182,6 +184,8 @@ protected void serviceInit(Configuration conf) throws Exception {
     this.metrics = FederationStateStoreServiceMetrics.getMetrics();
     LOG.info("Initialized federation statestore service metrics.");
 
+    this.resolver = new JAXBContextResolver(conf);
+
     super.serviceInit(conf);
   }
 
@@ -252,7 +256,7 @@ private void registerAndInitializeHeartbeat() {
           "Failed to register Federation membership with the StateStore", e);
     }
     stateStoreHeartbeat = new FederationStateStoreHeartbeat(subClusterId,
-        stateStoreClient, rmContext.getScheduler());
+        stateStoreClient, rmContext.getScheduler(), resolver);
     scheduledExecutorService =
         HadoopExecutors.newSingleThreadScheduledExecutor();
     scheduledExecutorService.scheduleWithFixedDelay(stateStoreHeartbeat,
diff --git a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/federation/TestFederationRMStateStoreService.java b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/federation/TestFederationRMStateStoreService.java
index 01d8ada4247e7..2a0ffa01b4fe6 100644
--- a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/federation/TestFederationRMStateStoreService.java
+++ b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/federation/TestFederationRMStateStoreService.java
@@ -194,9 +194,10 @@ private void explicitFailover(MockRM rm) throws IOException {
     stateStore = rm.getFederationStateStoreService().getStateStoreClient();
   }
 
-  private void checkClusterMetricsInfo(String capability, int numNodes)
-      throws JAXBException {
+  private void checkClusterMetricsInfo(String capability, int numNodes) {
     ClusterMetricsInfo clusterMetricsInfo = fromJson(capability, ClusterMetricsInfo.class);
+    System.err.println(capability);
+    System.err.println(clusterMetricsInfo.getTotalNodes());
     assertEquals(numNodes, clusterMetricsInfo.getTotalNodes());
   }
 
diff --git a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/webapp/TestRMWebServicesAppCustomResourceTypes.java b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/webapp/TestRMWebServicesAppCustomResourceTypes.java
index 23ad29795bd49..70566a5ee7815 100644
--- a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/webapp/TestRMWebServicesAppCustomResourceTypes.java
+++ b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/webapp/TestRMWebServicesAppCustomResourceTypes.java
@@ -17,7 +17,6 @@
 package org.apache.hadoop.yarn.server.resourcemanager.webapp;
 
 import org.glassfish.jersey.internal.inject.AbstractBinder;
-import org.glassfish.jersey.jettison.JettisonFeature;
 import org.glassfish.jersey.server.ResourceConfig;
 import org.glassfish.jersey.test.TestProperties;
 import org.apache.hadoop.conf.Configuration;
diff --git a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/webapp/TestWebServiceUtil.java b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/webapp/TestWebServiceUtil.java
index 2ef9c416ddf7b..efbf629e930e0 100644
--- a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/webapp/TestWebServiceUtil.java
+++ b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/webapp/TestWebServiceUtil.java
@@ -37,7 +37,6 @@
 import javax.ws.rs.core.MediaType;
 import javax.ws.rs.core.Response;
 import javax.xml.bind.JAXBContext;
-import javax.xml.bind.JAXBException;
 import javax.xml.bind.Marshaller;
 import javax.xml.bind.Unmarshaller;
 import javax.xml.parsers.DocumentBuilder;
@@ -59,8 +58,6 @@
 import org.codehaus.jettison.json.JSONException;
 import org.codehaus.jettison.json.JSONObject;
 import org.eclipse.persistence.jaxb.MarshallerProperties;
-import org.glassfish.jersey.jettison.JettisonJaxbContext;
-import org.glassfish.jersey.jettison.JettisonMarshaller;
 import org.w3c.dom.Document;
 import org.xml.sax.InputSource;
 
From 9a7fedfd455cf703e376bb2f9a42aea977de61dd Mon Sep 17 00:00:00 2001
From: K0K0V0K 
Date: Thu, 16 Oct 2025 16:47:02 +0200
Subject: [PATCH 07/17] remove global app jettison provider
---
 .../java/org/apache/hadoop/yarn/webapp/JerseyTestBase.java     | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)
diff --git a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-common/src/test/java/org/apache/hadoop/yarn/webapp/JerseyTestBase.java b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-common/src/test/java/org/apache/hadoop/yarn/webapp/JerseyTestBase.java
index a6ba24b6a712c..f455fc57f31dc 100644
--- a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-common/src/test/java/org/apache/hadoop/yarn/webapp/JerseyTestBase.java
+++ b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-common/src/test/java/org/apache/hadoop/yarn/webapp/JerseyTestBase.java
@@ -40,6 +40,7 @@ public void setUp() throws Exception {
   }
 
   public final WebTarget targetWithJsonObject() {
-    return target().register(new JettisonObjectProvider.App());
+//    return target().register(new JettisonObjectProvider.App());
+    return target();
   }
 }
From 7c21a9f00b0df6fc1d099643cdbeeab6bf31a3d2 Mon Sep 17 00:00:00 2001
From: K0K0V0K 
Date: Thu, 16 Oct 2025 17:09:02 +0200
Subject: [PATCH 08/17] remove jettison marshallers
---
 .../webapp/TestRMWebServiceAppsNodelabel.java |  1 -
 .../webapp/TestRMWebServices.java             |  1 -
 .../webapp/TestRMWebServicesAppAttempts.java  |  1 -
 .../webapp/TestRMWebServicesApps.java         |  1 -
 ...tRMWebServicesAppsCustomResourceTypes.java |  1 -
 .../TestRMWebServicesAppsModification.java    | 42 +++------------
 ...ySchedLegacyQueueCreationAbsoluteMode.java |  1 -
 ...WebServicesCapacitySchedulerMixedMode.java |  1 -
 ...hedulerMixedModeAbsoluteAndPercentage.java |  1 -
 ...xedModeAbsoluteAndPercentageAndWeight.java |  1 -
 ...eAbsoluteAndPercentageAndWeightVector.java |  1 -
 ...rMixedModeAbsoluteAndPercentageVector.java |  1 -
 ...tySchedulerMixedModeAbsoluteAndWeight.java |  1 -
 ...dulerMixedModeAbsoluteAndWeightVector.java |  1 -
 ...SchedulerMixedModePercentageAndWeight.java |  1 -
 ...lerMixedModePercentageAndWeightVector.java |  1 -
 .../TestRMWebServicesForCSWithPartitions.java |  1 -
 .../webapp/TestRMWebServicesReservation.java  | 53 ++++---------------
 .../TestRMWebServicesSchedulerActivities.java |  1 -
 ...edulerActivitiesWithMultiNodesEnabled.java |  1 -
 .../TestRMWebServicesFairScheduler.java       |  1 -
 ...vicesFairSchedulerCustomResourceTypes.java |  1 -
 22 files changed, 17 insertions(+), 98 deletions(-)
diff --git a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/webapp/TestRMWebServiceAppsNodelabel.java b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/webapp/TestRMWebServiceAppsNodelabel.java
index 6fc73ea019f73..c0dd04ff93d30 100644
--- a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/webapp/TestRMWebServiceAppsNodelabel.java
+++ b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/webapp/TestRMWebServiceAppsNodelabel.java
@@ -62,7 +62,6 @@
 
 import org.apache.hadoop.thirdparty.com.google.common.collect.ImmutableMap;
 import org.glassfish.jersey.internal.inject.AbstractBinder;
-import org.glassfish.jersey.jettison.JettisonFeature;
 import org.glassfish.jersey.server.ResourceConfig;
 import org.glassfish.jersey.test.TestProperties;
 
diff --git a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/webapp/TestRMWebServices.java b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/webapp/TestRMWebServices.java
index e4b4e7b7ba533..eee6a416d2c7d 100644
--- a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/webapp/TestRMWebServices.java
+++ b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/webapp/TestRMWebServices.java
@@ -123,7 +123,6 @@
 import org.xml.sax.InputSource;
 
 import org.glassfish.jersey.internal.inject.AbstractBinder;
-import org.glassfish.jersey.jettison.JettisonFeature;
 import org.glassfish.jersey.server.ResourceConfig;
 import org.glassfish.jersey.test.TestProperties;
 
diff --git a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/webapp/TestRMWebServicesAppAttempts.java b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/webapp/TestRMWebServicesAppAttempts.java
index 04f23952bee82..74467beda7d5f 100644
--- a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/webapp/TestRMWebServicesAppAttempts.java
+++ b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/webapp/TestRMWebServicesAppAttempts.java
@@ -17,7 +17,6 @@
 package org.apache.hadoop.yarn.server.resourcemanager.webapp;
 
 import org.glassfish.jersey.internal.inject.AbstractBinder;
-import org.glassfish.jersey.jettison.JettisonFeature;
 import org.glassfish.jersey.server.ResourceConfig;
 import org.glassfish.jersey.test.TestProperties;
 import org.apache.hadoop.conf.Configuration;
diff --git a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/webapp/TestRMWebServicesApps.java b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/webapp/TestRMWebServicesApps.java
index 6e95e668cac6f..4de46e9b058b3 100644
--- a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/webapp/TestRMWebServicesApps.java
+++ b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/webapp/TestRMWebServicesApps.java
@@ -19,7 +19,6 @@
 package org.apache.hadoop.yarn.server.resourcemanager.webapp;
 
 import org.glassfish.jersey.internal.inject.AbstractBinder;
-import org.glassfish.jersey.jettison.JettisonFeature;
 import org.glassfish.jersey.server.ResourceConfig;
 import org.glassfish.jersey.test.TestProperties;
 import org.apache.hadoop.conf.Configuration;
diff --git a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/webapp/TestRMWebServicesAppsCustomResourceTypes.java b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/webapp/TestRMWebServicesAppsCustomResourceTypes.java
index ccdcd29bc01a0..b92d9fa2ddbfa 100644
--- a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/webapp/TestRMWebServicesAppsCustomResourceTypes.java
+++ b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/webapp/TestRMWebServicesAppsCustomResourceTypes.java
@@ -19,7 +19,6 @@
 package org.apache.hadoop.yarn.server.resourcemanager.webapp;
 
 import org.glassfish.jersey.internal.inject.AbstractBinder;
-import org.glassfish.jersey.jettison.JettisonFeature;
 import org.glassfish.jersey.server.ResourceConfig;
 import org.glassfish.jersey.test.TestProperties;
 import org.apache.hadoop.conf.Configuration;
diff --git a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/webapp/TestRMWebServicesAppsModification.java b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/webapp/TestRMWebServicesAppsModification.java
index 1063f364eee43..fc14fb4f10795 100644
--- a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/webapp/TestRMWebServicesAppsModification.java
+++ b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/webapp/TestRMWebServicesAppsModification.java
@@ -19,6 +19,7 @@
 package org.apache.hadoop.yarn.server.resourcemanager.webapp;
 
 import static org.apache.hadoop.yarn.server.resourcemanager.webapp.TestWebServiceUtil.responseToJson;
+import static org.apache.hadoop.yarn.server.resourcemanager.webapp.TestWebServiceUtil.toJson;
 import static org.apache.hadoop.yarn.webapp.WebServicesTestUtils.assertResponseStatusCode;
 import static org.junit.jupiter.api.Assertions.assertEquals;
 import static org.junit.jupiter.api.Assertions.assertTrue;
@@ -30,7 +31,6 @@
 import java.io.File;
 import java.io.IOException;
 import java.io.StringReader;
-import java.io.StringWriter;
 import java.net.URI;
 import java.nio.charset.StandardCharsets;
 import java.security.Principal;
@@ -111,7 +111,6 @@
 import org.apache.hadoop.yarn.webapp.JerseyTestBase;
 import org.apache.hadoop.yarn.webapp.WebServicesTestUtils;
 
-import com.google.gson.Gson;
 import org.codehaus.jettison.json.JSONArray;
 import org.codehaus.jettison.json.JSONException;
 import org.codehaus.jettison.json.JSONObject;
@@ -126,9 +125,6 @@
 import org.xml.sax.SAXException;
 
 import com.google.inject.Singleton;
-import org.glassfish.jersey.jettison.JettisonJaxbContext;
-import org.glassfish.jersey.jettison.JettisonMarshaller;
-import org.glassfish.jersey.jettison.internal.entity.JettisonObjectProvider.App;
 import org.glassfish.jersey.internal.inject.AbstractBinder;
 import org.glassfish.jersey.server.ResourceConfig;
 import org.glassfish.jersey.test.TestProperties;
@@ -337,7 +333,7 @@ private WebTarget constructWebResource(WebTarget r, String... paths) {
   }
 
   private WebTarget constructWebResource(String... paths) {
-    WebTarget r = target().register(App.class);
+    WebTarget r = target();
     WebTarget ws = r.path("ws").path("v1").path("cluster");
     return this.constructWebResource(ws, paths);
   }
@@ -399,7 +395,7 @@ public void testSingleAppKill(int run) throws Exception {
 
         Object entity;
         if (contentType.equals(MediaType.APPLICATION_JSON_TYPE)) {
-          entity = appStateToJSON(targetState);
+          entity = toJson(targetState, AppState.class);
         } else {
           entity = targetState;
         }
@@ -495,7 +491,7 @@ public void testSingleAppKillInvalidState(int run) throws Exception {
           AppState targetState = new AppState(targetStateString);
           Object entity;
           if (contentType.equals(MediaType.APPLICATION_JSON_TYPE)) {
-            entity = appStateToJSON(targetState);
+            entity = toJson(targetState, AppState.class);
           } else {
             entity = targetState;
           }
@@ -519,10 +515,6 @@ public void testSingleAppKillInvalidState(int run) throws Exception {
     rm.stop();
   }
 
-  private static String appStateToJSON(AppState state) throws Exception {
-    return new Gson().toJson(state);
-  }
-
   protected static void verifyAppStateJson(Response response,
       RMAppState... states) throws JSONException {
 
@@ -726,7 +718,7 @@ protected String validateGetNewApplicationResponse(Response resp)
       SAXException {
     String ret = "";
     if (resp.getMediaType().toString().contains(MediaType.APPLICATION_JSON)) {
-      JSONObject json = resp.readEntity(JSONObject.class);
+      JSONObject json = responseToJson(resp);
       ret = validateGetNewApplicationJsonResponse(json);
     } else if (resp.getMediaType().toString().contains(MediaType.APPLICATION_XML)) {
       String xml = resp.readEntity(String.class);
@@ -1151,7 +1143,7 @@ public void testUpdateAppPriority(int run) throws Exception {
         AppPriority priority = new AppPriority(modifiedPriority);
         Object entity;
         if (contentType.equals(MediaType.APPLICATION_JSON_TYPE)) {
-          entity = appPriorityToJSON(priority);
+          entity = toJson(priority, AppPriority.class);
         } else {
           entity = priority;
         }
@@ -1240,7 +1232,7 @@ public void testAppMove(int run) throws Exception {
         AppQueue targetQueue = new AppQueue("test");
         Object entity;
         if (contentType.equals(MediaType.APPLICATION_JSON_TYPE)) {
-          entity = appQueueToJSON(targetQueue);
+          entity = toJson(targetQueue, AppQueue.class);
         } else {
           entity = targetQueue;
         }
@@ -1287,15 +1279,6 @@ public void testAppMove(int run) throws Exception {
     rm.stop();
   }
 
-  protected static String appPriorityToJSON(AppPriority targetPriority)
-      throws Exception {
-    return new Gson().toJson(targetPriority);
-  }
-
-  protected static String appQueueToJSON(AppQueue targetQueue) throws Exception {
-    return new Gson().toJson(targetQueue);
-  }
-
   protected static void verifyAppPriorityJson(Response response,
       int expectedPriority) throws JSONException {
     assertEquals(MediaType.APPLICATION_JSON_TYPE + ";" + JettyUtils.UTF_8,
@@ -1445,7 +1428,7 @@ private Object getAppTimeoutInfoEntity(ApplicationTimeoutType type,
 
     Object entity;
     if (contentType.equals(MediaType.APPLICATION_JSON_TYPE)) {
-      entity = appTimeoutToJSON(timeoutUpdate);
+      entity = toJson(timeoutUpdate, AppTimeoutInfo.class);
     } else {
       entity = timeoutUpdate;
     }
@@ -1493,13 +1476,4 @@ protected static void verifyAppTimeoutXML(Response response,
     assertTrue(WebServicesTestUtils.getXmlLong(element,
         "remainingTimeInSeconds") < timeOutFromNow);
   }
-
-  protected static String appTimeoutToJSON(AppTimeoutInfo timeout)
-      throws Exception {
-    StringWriter stringWriter = new StringWriter();
-    JettisonJaxbContext jettisonJaxbContext = new JettisonJaxbContext(AppTimeoutInfo.class);
-    JettisonMarshaller jettisonMarshaller = jettisonJaxbContext.createJsonMarshaller();
-    jettisonMarshaller.marshallToJSON(timeout, stringWriter);
-    return stringWriter.toString();
-  }
 }
diff --git a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/webapp/TestRMWebServicesCapacitySchedLegacyQueueCreationAbsoluteMode.java b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/webapp/TestRMWebServicesCapacitySchedLegacyQueueCreationAbsoluteMode.java
index 87b4171fc5ec4..553438046df39 100644
--- a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/webapp/TestRMWebServicesCapacitySchedLegacyQueueCreationAbsoluteMode.java
+++ b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/webapp/TestRMWebServicesCapacitySchedLegacyQueueCreationAbsoluteMode.java
@@ -29,7 +29,6 @@
 import org.apache.hadoop.yarn.webapp.GenericExceptionHandler;
 import org.apache.hadoop.yarn.webapp.JerseyTestBase;
 import org.glassfish.jersey.internal.inject.AbstractBinder;
-import org.glassfish.jersey.jettison.JettisonFeature;
 import org.glassfish.jersey.server.ResourceConfig;
 import org.glassfish.jersey.test.TestProperties;
 import org.junit.jupiter.api.AfterAll;
diff --git a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/webapp/TestRMWebServicesCapacitySchedulerMixedMode.java b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/webapp/TestRMWebServicesCapacitySchedulerMixedMode.java
index 4034d3ded9610..19f564b70e8a8 100644
--- a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/webapp/TestRMWebServicesCapacitySchedulerMixedMode.java
+++ b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/webapp/TestRMWebServicesCapacitySchedulerMixedMode.java
@@ -28,7 +28,6 @@
 import org.apache.hadoop.yarn.webapp.GenericExceptionHandler;
 import org.apache.hadoop.yarn.webapp.JerseyTestBase;
 import org.glassfish.jersey.internal.inject.AbstractBinder;
-import org.glassfish.jersey.jettison.JettisonFeature;
 import org.glassfish.jersey.server.ResourceConfig;
 import org.junit.jupiter.api.AfterAll;
 import org.junit.jupiter.api.Test;
diff --git a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/webapp/TestRMWebServicesCapacitySchedulerMixedModeAbsoluteAndPercentage.java b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/webapp/TestRMWebServicesCapacitySchedulerMixedModeAbsoluteAndPercentage.java
index dea9d31ee7779..88bb76c02f47d 100644
--- a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/webapp/TestRMWebServicesCapacitySchedulerMixedModeAbsoluteAndPercentage.java
+++ b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/webapp/TestRMWebServicesCapacitySchedulerMixedModeAbsoluteAndPercentage.java
@@ -24,7 +24,6 @@
 import org.apache.hadoop.yarn.webapp.GenericExceptionHandler;
 import org.apache.hadoop.yarn.webapp.JerseyTestBase;
 import org.glassfish.jersey.internal.inject.AbstractBinder;
-import org.glassfish.jersey.jettison.JettisonFeature;
 import org.glassfish.jersey.server.ResourceConfig;
 import org.junit.jupiter.api.AfterAll;
 import org.junit.jupiter.api.Test;
diff --git a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/webapp/TestRMWebServicesCapacitySchedulerMixedModeAbsoluteAndPercentageAndWeight.java b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/webapp/TestRMWebServicesCapacitySchedulerMixedModeAbsoluteAndPercentageAndWeight.java
index 2d4325fd4344c..08c4176aac5de 100644
--- a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/webapp/TestRMWebServicesCapacitySchedulerMixedModeAbsoluteAndPercentageAndWeight.java
+++ b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/webapp/TestRMWebServicesCapacitySchedulerMixedModeAbsoluteAndPercentageAndWeight.java
@@ -24,7 +24,6 @@
 import org.apache.hadoop.yarn.webapp.GenericExceptionHandler;
 import org.apache.hadoop.yarn.webapp.JerseyTestBase;
 import org.glassfish.jersey.internal.inject.AbstractBinder;
-import org.glassfish.jersey.jettison.JettisonFeature;
 import org.glassfish.jersey.server.ResourceConfig;
 import org.junit.jupiter.api.AfterAll;
 import org.junit.jupiter.api.Test;
diff --git a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/webapp/TestRMWebServicesCapacitySchedulerMixedModeAbsoluteAndPercentageAndWeightVector.java b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/webapp/TestRMWebServicesCapacitySchedulerMixedModeAbsoluteAndPercentageAndWeightVector.java
index 22ab95418f33c..4875c65dbd67b 100644
--- a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/webapp/TestRMWebServicesCapacitySchedulerMixedModeAbsoluteAndPercentageAndWeightVector.java
+++ b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/webapp/TestRMWebServicesCapacitySchedulerMixedModeAbsoluteAndPercentageAndWeightVector.java
@@ -24,7 +24,6 @@
 import org.apache.hadoop.yarn.webapp.GenericExceptionHandler;
 import org.apache.hadoop.yarn.webapp.JerseyTestBase;
 import org.glassfish.jersey.internal.inject.AbstractBinder;
-import org.glassfish.jersey.jettison.JettisonFeature;
 import org.glassfish.jersey.server.ResourceConfig;
 import org.junit.jupiter.api.AfterAll;
 import org.junit.jupiter.api.Test;
diff --git a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/webapp/TestRMWebServicesCapacitySchedulerMixedModeAbsoluteAndPercentageVector.java b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/webapp/TestRMWebServicesCapacitySchedulerMixedModeAbsoluteAndPercentageVector.java
index 89aee88f92d4c..643d83321a04b 100644
--- a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/webapp/TestRMWebServicesCapacitySchedulerMixedModeAbsoluteAndPercentageVector.java
+++ b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/webapp/TestRMWebServicesCapacitySchedulerMixedModeAbsoluteAndPercentageVector.java
@@ -24,7 +24,6 @@
 import org.apache.hadoop.yarn.webapp.GenericExceptionHandler;
 import org.apache.hadoop.yarn.webapp.JerseyTestBase;
 import org.glassfish.jersey.internal.inject.AbstractBinder;
-import org.glassfish.jersey.jettison.JettisonFeature;
 import org.glassfish.jersey.server.ResourceConfig;
 import org.junit.jupiter.api.AfterAll;
 import org.junit.jupiter.api.Test;
diff --git a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/webapp/TestRMWebServicesCapacitySchedulerMixedModeAbsoluteAndWeight.java b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/webapp/TestRMWebServicesCapacitySchedulerMixedModeAbsoluteAndWeight.java
index aba0732574c79..c977f457e39b8 100644
--- a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/webapp/TestRMWebServicesCapacitySchedulerMixedModeAbsoluteAndWeight.java
+++ b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/webapp/TestRMWebServicesCapacitySchedulerMixedModeAbsoluteAndWeight.java
@@ -24,7 +24,6 @@
 import org.apache.hadoop.yarn.webapp.GenericExceptionHandler;
 import org.apache.hadoop.yarn.webapp.JerseyTestBase;
 import org.glassfish.jersey.internal.inject.AbstractBinder;
-import org.glassfish.jersey.jettison.JettisonFeature;
 import org.glassfish.jersey.server.ResourceConfig;
 import org.junit.jupiter.api.AfterAll;
 import org.junit.jupiter.api.Test;
diff --git a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/webapp/TestRMWebServicesCapacitySchedulerMixedModeAbsoluteAndWeightVector.java b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/webapp/TestRMWebServicesCapacitySchedulerMixedModeAbsoluteAndWeightVector.java
index 968c48ed3abcc..801e70b2fa9d8 100644
--- a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/webapp/TestRMWebServicesCapacitySchedulerMixedModeAbsoluteAndWeightVector.java
+++ b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/webapp/TestRMWebServicesCapacitySchedulerMixedModeAbsoluteAndWeightVector.java
@@ -24,7 +24,6 @@
 import org.apache.hadoop.yarn.webapp.GenericExceptionHandler;
 import org.apache.hadoop.yarn.webapp.JerseyTestBase;
 import org.glassfish.jersey.internal.inject.AbstractBinder;
-import org.glassfish.jersey.jettison.JettisonFeature;
 import org.glassfish.jersey.server.ResourceConfig;
 import org.junit.jupiter.api.AfterAll;
 import org.junit.jupiter.api.Test;
diff --git a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/webapp/TestRMWebServicesCapacitySchedulerMixedModePercentageAndWeight.java b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/webapp/TestRMWebServicesCapacitySchedulerMixedModePercentageAndWeight.java
index 6c202dbea6c7d..74485dbc5f4ff 100644
--- a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/webapp/TestRMWebServicesCapacitySchedulerMixedModePercentageAndWeight.java
+++ b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/webapp/TestRMWebServicesCapacitySchedulerMixedModePercentageAndWeight.java
@@ -24,7 +24,6 @@
 import org.apache.hadoop.yarn.webapp.GenericExceptionHandler;
 import org.apache.hadoop.yarn.webapp.JerseyTestBase;
 import org.glassfish.jersey.internal.inject.AbstractBinder;
-import org.glassfish.jersey.jettison.JettisonFeature;
 import org.glassfish.jersey.server.ResourceConfig;
 import org.junit.jupiter.api.AfterAll;
 import org.junit.jupiter.api.Test;
diff --git a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/webapp/TestRMWebServicesCapacitySchedulerMixedModePercentageAndWeightVector.java b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/webapp/TestRMWebServicesCapacitySchedulerMixedModePercentageAndWeightVector.java
index 96a419a339130..3cecbdeede4bd 100644
--- a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/webapp/TestRMWebServicesCapacitySchedulerMixedModePercentageAndWeightVector.java
+++ b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/webapp/TestRMWebServicesCapacitySchedulerMixedModePercentageAndWeightVector.java
@@ -24,7 +24,6 @@
 import org.apache.hadoop.yarn.webapp.GenericExceptionHandler;
 import org.apache.hadoop.yarn.webapp.JerseyTestBase;
 import org.glassfish.jersey.internal.inject.AbstractBinder;
-import org.glassfish.jersey.jettison.JettisonFeature;
 import org.glassfish.jersey.server.ResourceConfig;
 import org.junit.jupiter.api.AfterAll;
 import org.junit.jupiter.api.Test;
diff --git a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/webapp/TestRMWebServicesForCSWithPartitions.java b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/webapp/TestRMWebServicesForCSWithPartitions.java
index ee691bc61f248..0fa91a1dec4fa 100644
--- a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/webapp/TestRMWebServicesForCSWithPartitions.java
+++ b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/webapp/TestRMWebServicesForCSWithPartitions.java
@@ -90,7 +90,6 @@
 
 import org.apache.hadoop.thirdparty.com.google.common.collect.ImmutableSet;
 import org.glassfish.jersey.internal.inject.AbstractBinder;
-import org.glassfish.jersey.jettison.JettisonFeature;
 import org.glassfish.jersey.server.ResourceConfig;
 import org.glassfish.jersey.test.TestProperties;
 
diff --git a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/webapp/TestRMWebServicesReservation.java b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/webapp/TestRMWebServicesReservation.java
index ad1f8737ec7f3..278e93e08f8f4 100644
--- a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/webapp/TestRMWebServicesReservation.java
+++ b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/webapp/TestRMWebServicesReservation.java
@@ -18,6 +18,7 @@
 
 package org.apache.hadoop.yarn.server.resourcemanager.webapp;
 
+import static org.apache.hadoop.yarn.server.resourcemanager.webapp.TestWebServiceUtil.fromJson;
 import static org.apache.hadoop.yarn.server.resourcemanager.webapp.TestWebServiceUtil.responseToJson;
 import static org.apache.hadoop.yarn.server.resourcemanager.webapp.TestWebServiceUtil.toJson;
 import static org.assertj.core.api.Assertions.assertThat;
@@ -84,8 +85,6 @@
 import org.junit.jupiter.api.AfterEach;
 
 import org.glassfish.jersey.internal.inject.AbstractBinder;
-import org.glassfish.jersey.jettison.JettisonJaxbContext;
-import org.glassfish.jersey.jettison.JettisonUnmarshaller;
 import org.glassfish.jersey.server.ResourceConfig;
 import org.glassfish.jersey.test.TestProperties;
 import org.junit.jupiter.params.ParameterizedTest;
@@ -113,17 +112,6 @@ public class TestRMWebServicesReservation extends JerseyTestBase {
   private static final String GET_NEW_RESERVATION_PATH =
       "reservation/new-reservation";
 
-  private static JettisonUnmarshaller reservationSubmissionRequestInfoReader;
-  static {
-    try {
-      JettisonJaxbContext jettisonJaxbContext = new JettisonJaxbContext(
-          ReservationSubmissionRequestInfo.class);
-      reservationSubmissionRequestInfoReader = jettisonJaxbContext.createJsonUnmarshaller();
-    } catch (JAXBException e) {
-      throw new RuntimeException(e);
-    }
-  }
-
   private ResourceConfig config;
   private HttpServletRequest hsRequest = mock(HttpServletRequest.class);
   private HttpServletResponse hsResponse = mock(HttpServletResponse.class);
@@ -1051,10 +1039,7 @@ private ReservationId getReservationIdTestHelper(int fallbackReservationId)
 
     assertEquals(MediaType.APPLICATION_JSON_TYPE + ";" + JettyUtils.UTF_8,
         response.getMediaType().toString());
-    JSONObject json =
-        response.
-        readEntity(JSONObject.class).
-        getJSONObject("new-reservation");
+      JSONObject json = responseToJson(response).getJSONObject("new-reservation");
 
     assertEquals(1, json.length(), "incorrect number of elements");
     ReservationId rid = null;
@@ -1094,9 +1079,9 @@ private Response reservationSubmissionTestHelper(String path,
 
   private Response submitAndVerifyReservation(String path, String media,
       String reservationJson) throws Exception {
-    ReservationSubmissionRequestInfo rsci = reservationSubmissionRequestInfoReader.
-        unmarshalFromJSON(new StringReader(reservationJson),
-        ReservationSubmissionRequestInfo.class);
+    ReservationSubmissionRequestInfo rsci =
+        fromJson(reservationJson, ReservationSubmissionRequestInfo.class);
+
     Thread.sleep(1000);
     Response response = constructWebResource(path)
         .request(MediaType.APPLICATION_JSON)
@@ -1116,18 +1101,8 @@ private void updateReservationTestHelper(String path,
 
     String reservationJson = loadJsonFile("update-reservation.json");
 
-    JettisonUnmarshaller reservationUpdateRequestInfoReader;
-    try {
-      JettisonJaxbContext jettisonJaxbContext = new JettisonJaxbContext(
-          ReservationUpdateRequestInfo.class);
-      reservationUpdateRequestInfoReader = jettisonJaxbContext.createJsonUnmarshaller();
-    } catch (JAXBException e) {
-      throw new RuntimeException(e);
-    }
-
-    ReservationUpdateRequestInfo rsci = reservationUpdateRequestInfoReader.
-        unmarshalFromJSON(new StringReader(reservationJson),
-        ReservationUpdateRequestInfo.class);
+    ReservationUpdateRequestInfo rsci =
+        fromJson(reservationJson, ReservationUpdateRequestInfo.class);
 
     if (this.isAuthenticationEnabled()) {
       // only works when previous submit worked
@@ -1174,18 +1149,8 @@ private void testDeleteReservationHelper(String path,
 
     String reservationJson = loadJsonFile("delete-reservation.json");
 
-    JettisonUnmarshaller reader;
-    try {
-      JettisonJaxbContext jettisonJaxbContext = new JettisonJaxbContext(
-          ReservationDeleteRequestInfo.class);
-      reader = jettisonJaxbContext.createJsonUnmarshaller();
-    } catch (JAXBException e) {
-      throw new RuntimeException(e);
-    }
-
-    ReservationDeleteRequestInfo rsci = reader.
-        unmarshalFromJSON(new StringReader(reservationJson),
-        ReservationDeleteRequestInfo.class);
+    ReservationDeleteRequestInfo rsci =
+        fromJson(reservationJson, ReservationDeleteRequestInfo.class);
 
     if (this.isAuthenticationEnabled()) {
       // only works when previous submit worked
diff --git a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/webapp/TestRMWebServicesSchedulerActivities.java b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/webapp/TestRMWebServicesSchedulerActivities.java
index fc0a764fddeb3..a807cdf22ddb5 100644
--- a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/webapp/TestRMWebServicesSchedulerActivities.java
+++ b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/webapp/TestRMWebServicesSchedulerActivities.java
@@ -19,7 +19,6 @@
 package org.apache.hadoop.yarn.server.resourcemanager.webapp;
 
 import org.glassfish.jersey.internal.inject.AbstractBinder;
-import org.glassfish.jersey.jettison.JettisonFeature;
 import org.glassfish.jersey.server.ResourceConfig;
 import org.glassfish.jersey.test.TestProperties;
 
diff --git a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/webapp/TestRMWebServicesSchedulerActivitiesWithMultiNodesEnabled.java b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/webapp/TestRMWebServicesSchedulerActivitiesWithMultiNodesEnabled.java
index 6bd84cfe88cf7..e112f53eca936 100644
--- a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/webapp/TestRMWebServicesSchedulerActivitiesWithMultiNodesEnabled.java
+++ b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/webapp/TestRMWebServicesSchedulerActivitiesWithMultiNodesEnabled.java
@@ -18,7 +18,6 @@
 package org.apache.hadoop.yarn.server.resourcemanager.webapp;
 
 import org.glassfish.jersey.internal.inject.AbstractBinder;
-import org.glassfish.jersey.jettison.JettisonFeature;
 import org.glassfish.jersey.server.ResourceConfig;
 import org.glassfish.jersey.test.TestProperties;
 import org.apache.hadoop.conf.Configuration;
diff --git a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/webapp/fairscheduler/TestRMWebServicesFairScheduler.java b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/webapp/fairscheduler/TestRMWebServicesFairScheduler.java
index eb8c2faaacfd0..f5ca6e92d21dd 100644
--- a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/webapp/fairscheduler/TestRMWebServicesFairScheduler.java
+++ b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/webapp/fairscheduler/TestRMWebServicesFairScheduler.java
@@ -19,7 +19,6 @@
 package org.apache.hadoop.yarn.server.resourcemanager.webapp.fairscheduler;
 
 import org.glassfish.jersey.internal.inject.AbstractBinder;
-import org.glassfish.jersey.jettison.JettisonFeature;
 import org.glassfish.jersey.server.ResourceConfig;
 import org.glassfish.jersey.test.TestProperties;
 import org.apache.hadoop.conf.Configuration;
diff --git a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/webapp/fairscheduler/TestRMWebServicesFairSchedulerCustomResourceTypes.java b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/webapp/fairscheduler/TestRMWebServicesFairSchedulerCustomResourceTypes.java
index 0d4f18ea925ba..723dc334c6481 100644
--- a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/webapp/fairscheduler/TestRMWebServicesFairSchedulerCustomResourceTypes.java
+++ b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/webapp/fairscheduler/TestRMWebServicesFairSchedulerCustomResourceTypes.java
@@ -19,7 +19,6 @@
 package org.apache.hadoop.yarn.server.resourcemanager.webapp.fairscheduler;
 
 import org.glassfish.jersey.internal.inject.AbstractBinder;
-import org.glassfish.jersey.jettison.JettisonFeature;
 import org.glassfish.jersey.server.ResourceConfig;
 import org.glassfish.jersey.test.TestProperties;
 import org.apache.hadoop.conf.Configuration;
From b7260bb0287dc6873a7e7d5aacaeefc88dfb986d Mon Sep 17 00:00:00 2001
From: K0K0V0K 
Date: Thu, 16 Oct 2025 17:36:11 +0200
Subject: [PATCH 09/17] remove last jettison marshallers
---
 .../server/resourcemanager/webapp/JAXBContextResolver.java  | 3 ---
 .../hadoop/yarn/server/resourcemanager/webapp/RMWebApp.java | 2 --
 .../apache/hadoop/yarn/server/resourcemanager/TestRMHA.java | 5 +----
 .../federation/TestFederationRMStateStoreService.java       | 4 ----
 .../org/apache/hadoop/yarn/webapp/TestRMWithCSRFFilter.java | 6 ++++--
 5 files changed, 5 insertions(+), 15 deletions(-)
diff --git a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/webapp/JAXBContextResolver.java b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/webapp/JAXBContextResolver.java
index 4fb58449a4a53..ecc658b86a334 100644
--- a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/webapp/JAXBContextResolver.java
+++ b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/webapp/JAXBContextResolver.java
@@ -20,13 +20,10 @@
 
 import org.eclipse.persistence.jaxb.JAXBContextFactory;
 import org.eclipse.persistence.jaxb.MarshallerProperties;
-import org.glassfish.jersey.jettison.JettisonConfig;
-import org.glassfish.jersey.jettison.JettisonJaxbContext;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
 import java.util.Collections;
-import java.util.List;
 import java.util.Map;
 import java.util.HashMap;
 import java.util.Set;
diff --git a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/webapp/RMWebApp.java b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/webapp/RMWebApp.java
index 8619320b1d63b..b673e6e37895e 100644
--- a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/webapp/RMWebApp.java
+++ b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/webapp/RMWebApp.java
@@ -24,7 +24,6 @@
 
 import org.apache.hadoop.conf.Configuration;
 
-import org.glassfish.jersey.moxy.json.MoxyJsonConfig;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.apache.hadoop.ha.HAServiceProtocol.HAServiceState;
@@ -39,7 +38,6 @@
 
 import javax.servlet.Filter;
 import org.glassfish.jersey.internal.inject.AbstractBinder;
-import org.glassfish.jersey.jettison.JettisonFeature;
 import org.glassfish.jersey.server.ResourceConfig;
 
 /**
diff --git a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/TestRMHA.java b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/TestRMHA.java
index d15a02c778a86..79544c4c93fe6 100644
--- a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/TestRMHA.java
+++ b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/TestRMHA.java
@@ -76,7 +76,6 @@
 import org.junit.jupiter.api.Test;
 import org.junit.jupiter.api.Timeout;
 
-import org.glassfish.jersey.jettison.internal.entity.JettisonObjectProvider;
 
 public class TestRMHA {
   private static final Logger LOG = LoggerFactory.getLogger(TestRMHA.class);
@@ -162,9 +161,7 @@ private void checkActiveRMFunctionality() throws Exception {
   private void checkActiveRMWebServices() throws JSONException {
 
     // Validate web-service
-    Client webServiceClient = ClientBuilder.
-        newClient().
-        register(new JettisonObjectProvider.App());
+    Client webServiceClient = ClientBuilder.newClient();
     InetSocketAddress rmWebappAddr =
         NetUtils.getConnectAddress(rm.getWebapp().getListenerAddress());
     String webappURL =
diff --git a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/federation/TestFederationRMStateStoreService.java b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/federation/TestFederationRMStateStoreService.java
index 2a0ffa01b4fe6..06a93e7cd60aa 100644
--- a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/federation/TestFederationRMStateStoreService.java
+++ b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/federation/TestFederationRMStateStoreService.java
@@ -24,7 +24,6 @@
 import static org.junit.jupiter.api.Assertions.assertTrue;
 
 import java.io.IOException;
-import java.io.StringReader;
 import java.net.UnknownHostException;
 import java.util.ArrayList;
 import java.util.List;
@@ -84,9 +83,6 @@
 import org.junit.jupiter.api.BeforeEach;
 import org.junit.jupiter.api.Test;
 
-import org.glassfish.jersey.jettison.JettisonJaxbContext;
-import org.glassfish.jersey.jettison.JettisonUnmarshaller;
-
 import static org.mockito.Mockito.mock;
 
 /**
diff --git a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/webapp/TestRMWithCSRFFilter.java b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/webapp/TestRMWithCSRFFilter.java
index ef17057e89ea4..a9be28c4c20f0 100644
--- a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/webapp/TestRMWithCSRFFilter.java
+++ b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/webapp/TestRMWithCSRFFilter.java
@@ -31,9 +31,9 @@
 import org.apache.hadoop.yarn.server.resourcemanager.scheduler.fifo.FifoScheduler;
 import org.apache.hadoop.yarn.server.resourcemanager.webapp.JAXBContextResolver;
 import org.apache.hadoop.yarn.server.resourcemanager.webapp.RMWebServices;
+import org.apache.hadoop.yarn.server.resourcemanager.webapp.jsonprovider.JsonProviderFeature;
 import org.apache.hadoop.yarn.util.YarnVersionInfo;
 import org.glassfish.jersey.internal.inject.AbstractBinder;
-import org.glassfish.jersey.jettison.JettisonFeature;
 import org.glassfish.jersey.server.ResourceConfig;
 import org.glassfish.jersey.test.TestProperties;
 import org.junit.jupiter.api.BeforeEach;
@@ -74,7 +74,8 @@ protected Application configure() {
     config.register(new JerseyBinder());
     config.register(RMWebServices.class);
     config.register(GenericExceptionHandler.class);
-    config.register(new JettisonFeature()).register(JAXBContextResolver.class);
+    config.register(JsonProviderFeature.class);
+    config.register(JAXBContextResolver.class);
     forceSet(TestProperties.CONTAINER_PORT, JERSEY_RANDOM_PORT);
     return config;
   }
@@ -167,6 +168,7 @@ public void testAllowNonBrowserInteractionWithoutHeader() throws Exception {
     assertEquals(MediaType.APPLICATION_XML_TYPE + ";" + JettyUtils.UTF_8,
         response.getMediaType().toString());
     String xml = response.readEntity(String.class);
+    System.err.println(xml);
     verifyClusterInfoXML(xml);
   }
 
From ba4ab13eb2a710900933646670a184f122b14d06 Mon Sep 17 00:00:00 2001
From: K0K0V0K 
Date: Thu, 16 Oct 2025 17:42:30 +0200
Subject: [PATCH 10/17] fix pom.xml
---
 .../hadoop-yarn-server-resourcemanager/pom.xml                | 4 ----
 .../apache/hadoop/yarn/server/resourcemanager/TestRMHA.java   | 3 ++-
 2 files changed, 2 insertions(+), 5 deletions(-)
diff --git a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/pom.xml b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/pom.xml
index 5bd1a9221d4fd..5f70fbd9bd2e2 100644
--- a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/pom.xml
+++ b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/pom.xml
@@ -261,10 +261,6 @@
       jersey-media-jaxb 
       test 
                                                                                
-    
-      org.glassfish.jersey.media 
-      jersey-media-json-jettison 
-     
     
       org.glassfish.jersey.media 
       jersey-media-moxy 
diff --git a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/TestRMHA.java b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/TestRMHA.java
index 79544c4c93fe6..cb2ee2dbfb308 100644
--- a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/TestRMHA.java
+++ b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/TestRMHA.java
@@ -175,7 +175,8 @@ private void checkActiveRMWebServices() throws JSONException {
         .get(Response.class);
     assertEquals(MediaType.APPLICATION_JSON_TYPE + ";" + JettyUtils.UTF_8,
         response.getMediaType().toString());
-    JSONObject json = response.readEntity(JSONObject.class);
+    String raw = response.readEntity(String.class);
+    JSONObject json = new JSONObject(raw);
 
     assertEquals(1, json.length(), "incorrect number of elements");
     JSONObject appJson = json.getJSONObject("app");
From d8e744569f5315f180fc5c74941b050b1c81302c Mon Sep 17 00:00:00 2001
From: K0K0V0K 
Date: Fri, 17 Oct 2025 11:36:26 +0200
Subject: [PATCH 11/17] add javadoc, fix style
---
 .../hadoop/yarn/webapp/JerseyTestBase.java    |   1 -
 .../webapp/dao/NodeLabelsInfo.java            |  28 ++--
 .../ClassSerialisationConfig.java             | 135 ++++++++--------
 .../jsonprovider/ExcludeRootJSONProvider.java | 144 ++++++++++++------
 .../jsonprovider/IncludeRootJSONProvider.java | 140 ++++++++++++-----
 .../jsonprovider/JsonProviderFeature.java     |  37 ++++-
 .../webapp/TestRMWebServicesApps.java         |   2 -
 .../webapp/TestRMWebServicesReservation.java  |   4 +-
 .../webapp/TestWebServiceUtil.java            |   2 +-
 .../helper/AppInfoJsonVerifications.java      |   3 -
 10 files changed, 309 insertions(+), 187 deletions(-)
diff --git a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-common/src/test/java/org/apache/hadoop/yarn/webapp/JerseyTestBase.java b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-common/src/test/java/org/apache/hadoop/yarn/webapp/JerseyTestBase.java
index f455fc57f31dc..03996e39f7038 100644
--- a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-common/src/test/java/org/apache/hadoop/yarn/webapp/JerseyTestBase.java
+++ b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-common/src/test/java/org/apache/hadoop/yarn/webapp/JerseyTestBase.java
@@ -40,7 +40,6 @@ public void setUp() throws Exception {
   }
 
   public final WebTarget targetWithJsonObject() {
-//    return target().register(new JettisonObjectProvider.App());
     return target();
   }
 }
diff --git a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/webapp/dao/NodeLabelsInfo.java b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/webapp/dao/NodeLabelsInfo.java
index 1ba082438ed52..e2e99ee4b15bd 100644
--- a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/webapp/dao/NodeLabelsInfo.java
+++ b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/webapp/dao/NodeLabelsInfo.java
@@ -32,44 +32,44 @@
 public class NodeLabelsInfo {
 
   @XmlElement(name = "nodeLabelInfo")
-  private ArrayList nodeLabelInfo = new ArrayList<>();
+  private ArrayList nodeLabelsInfo = new ArrayList<>();
 
   public NodeLabelsInfo() {
     // JAXB needs this
   }
 
   public NodeLabelsInfo(ArrayList nodeLabels) {
-    this.nodeLabelInfo = nodeLabels;
+    this.nodeLabelsInfo = nodeLabels;
   }
 
   public NodeLabelsInfo(List nodeLabels) {
-    this.nodeLabelInfo = new ArrayList<>();
+    this.nodeLabelsInfo = new ArrayList<>();
     for (NodeLabel label : nodeLabels) {
-      this.nodeLabelInfo.add(new NodeLabelInfo(label));
+      this.nodeLabelsInfo.add(new NodeLabelInfo(label));
     }
   }
 
   public NodeLabelsInfo(Set nodeLabelsName) {
-    this.nodeLabelInfo = new ArrayList<>();
+    this.nodeLabelsInfo = new ArrayList<>();
     for (String labelName : nodeLabelsName) {
-      this.nodeLabelInfo.add(new NodeLabelInfo(labelName));
+      this.nodeLabelsInfo.add(new NodeLabelInfo(labelName));
     }
   }
 
   public NodeLabelsInfo(Collection nodeLabels) {
-    this.nodeLabelInfo = new ArrayList<>();
+    this.nodeLabelsInfo = new ArrayList<>();
     nodeLabels.stream().forEach(nodeLabel -> {
-      this.nodeLabelInfo.add(new NodeLabelInfo(nodeLabel));
+      this.nodeLabelsInfo.add(new NodeLabelInfo(nodeLabel));
     });
   }
 
   public ArrayList getNodeLabelsInfo() {
-    return nodeLabelInfo;
+    return nodeLabelsInfo;
   }
 
   public Set getNodeLabels() {
     Set nodeLabels = new HashSet<>();
-    for (NodeLabelInfo label : nodeLabelInfo) {
+    for (NodeLabelInfo label : nodeLabelsInfo) {
       nodeLabels.add(NodeLabel.newInstance(label.getName(),
           label.getExclusivity()));
     }
@@ -78,17 +78,13 @@ public Set getNodeLabels() {
 
   public List getNodeLabelsName() {
     ArrayList nodeLabelsName = new ArrayList<>();
-    for (NodeLabelInfo label : nodeLabelInfo) {
+    for (NodeLabelInfo label : nodeLabelsInfo) {
       nodeLabelsName.add(label.getName());
     }
     return nodeLabelsName;
   }
 
   public void setNodeLabelsInfo(ArrayList nodeLabelInfo) {
-    this.nodeLabelInfo = nodeLabelInfo;
-  }
-
-  public void setNodeLabelInfo(ArrayList nodeLabelsInfo) {
-    this.nodeLabelInfo = nodeLabelsInfo;
+    this.nodeLabelsInfo = nodeLabelInfo;
   }
 }
diff --git a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/webapp/jsonprovider/ClassSerialisationConfig.java b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/webapp/jsonprovider/ClassSerialisationConfig.java
index 28f9c290ae406..d70ae2e2578b9 100644
--- a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/webapp/jsonprovider/ClassSerialisationConfig.java
+++ b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/webapp/jsonprovider/ClassSerialisationConfig.java
@@ -6,9 +6,9 @@
  * to you under the Apache License, Version 2.0 (the
  * "License"); you may not use this file except in compliance
  * with the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
+ * 
+ * http://www.apache.org/licenses/LICENSE-2.0
+ * 
  * Unless required by applicable law or agreed to in writing, software
  * distributed under the License is distributed on an "AS IS" BASIS,
  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
@@ -87,12 +87,15 @@
 import org.apache.hadoop.yarn.webapp.dao.SchedConfUpdateInfo;
 
 /**
- * Configuration holder for class serialization setup used by the ResourceManager web services layer.
+ * Configuration holder for class serialization setup
+ * used by the ResourceManager web services layer.
  *
  * 
This class manages two categories of data transfer objects (DTOs):
  * 
- *   Wrapped classes  – classes whose JSON representation includes a root wrapper element.Unwrapped classes  – classes whose JSON representation omits a root wrapper element.Wrapped classes 
+ *     – classes whose JSON representation includes a root wrapper element.Unwrapped classes 
+ *     – classes whose JSON representation omits a root wrapper element. 
  *
  * The configuration is initialized with a default list of constant classes and may optionally
@@ -139,87 +142,60 @@
 public class ClassSerialisationConfig {
   private static final Logger LOG = LoggerFactory.getLogger(ClassSerialisationConfig.class);
 
-  private static final Set> CONST_WRAPPED_CLASSES = Sets.newHashSet(
-      ActivitiesInfo.class,
-      AppActivitiesInfo.class,
-      AppAttemptInfo.class,
-      AppAttemptsInfo.class,
-      AppInfo.class,
-      ApplicationStatisticsInfo.class,
-      AppsInfo.class,
-      AppTimeoutInfo.class,
-      AppTimeoutsInfo.class,
-      BulkActivitiesInfo.class,
-      CapacitySchedulerHealthInfo.class,
-      CapacitySchedulerInfo.class,
-      CapacitySchedulerQueueInfo.class,
-      CapacitySchedulerQueueInfoList.class,
-      ClusterInfo.class,
-      ClusterMetricsInfo.class,
-      ConfigVersionInfo.class,
-      FairSchedulerQueueInfoList.class,
-      FifoSchedulerInfo.class,
-      NewReservation.class,
-      NodeInfo.class,
-      NodesInfo.class,
-      QueueAclInfo.class,
-      QueueAclsInfo.class,
-      RemoteExceptionData.class,
-      ReservationDeleteRequestInfo.class,
-      ReservationDeleteResponseInfo.class,
-      ReservationSubmissionRequestInfo.class,
-      ReservationUpdateRequestInfo.class,
-      ReservationUpdateResponseInfo.class,
-      ResourceInfo.class,
-      ResourceInformationsInfo.class,
-      SchedulerInfo.class,
-      SchedulerOverviewInfo.class,
-      SchedulerTypeInfo.class,
-      StatisticsItemInfo.class,
-      UserInfo.class,
-      UserMetricsInfo.class,
-      UsersInfo.class
-  );
-
-  private static final Set> CONST_UNWRAPPED_CLASSES = Sets.newHashSet(
-      ApplicationSubmissionContextInfo.class,
-      AppPriority.class,
-      AppQueue.class,
-      AppState.class,
-      ClusterUserInfo.class,
-      ConfInfo.class,
-      ContainerLaunchContextInfo.class,
-      DelegationToken.class,
-      LabelsToNodesInfo.class,
-      LocalResourceInfo.class,
-      NewApplication.class,
-      NodeLabelsInfo.class,
-      NodeToLabelsEntryList.class,
-      NodeToLabelsInfo.class,
-      ReservationListInfo.class,
-      ResourceOptionInfo.class,
-      SchedConfUpdateInfo.class
-  );
+  private static final Set> CONST_WRAPPED_CLASSES =
+      Sets.newHashSet(ActivitiesInfo.class, AppActivitiesInfo.class, AppAttemptInfo.class,
+          AppAttemptsInfo.class, AppInfo.class, ApplicationStatisticsInfo.class, AppsInfo.class,
+          AppTimeoutInfo.class, AppTimeoutsInfo.class, BulkActivitiesInfo.class,
+          CapacitySchedulerHealthInfo.class, CapacitySchedulerInfo.class,
+          CapacitySchedulerQueueInfo.class, CapacitySchedulerQueueInfoList.class, ClusterInfo.class,
+          ClusterMetricsInfo.class, ConfigVersionInfo.class, FairSchedulerQueueInfoList.class,
+          FifoSchedulerInfo.class, NewReservation.class, NodeInfo.class, NodesInfo.class,
+          QueueAclInfo.class, QueueAclsInfo.class, RemoteExceptionData.class,
+          ReservationDeleteRequestInfo.class, ReservationDeleteResponseInfo.class,
+          ReservationSubmissionRequestInfo.class, ReservationUpdateRequestInfo.class,
+          ReservationUpdateResponseInfo.class, ResourceInfo.class, ResourceInformationsInfo.class,
+          SchedulerInfo.class, SchedulerOverviewInfo.class, SchedulerTypeInfo.class,
+          StatisticsItemInfo.class, UserInfo.class, UserMetricsInfo.class, UsersInfo.class);
+
+  private static final Set> CONST_UNWRAPPED_CLASSES =
+      Sets.newHashSet(ApplicationSubmissionContextInfo.class, AppPriority.class, AppQueue.class,
+          AppState.class, ClusterUserInfo.class, ConfInfo.class, ContainerLaunchContextInfo.class,
+          DelegationToken.class, LabelsToNodesInfo.class, LocalResourceInfo.class,
+          NewApplication.class, NodeLabelsInfo.class, NodeToLabelsEntryList.class,
+          NodeToLabelsInfo.class, ReservationListInfo.class, ResourceOptionInfo.class,
+          SchedConfUpdateInfo.class);
 
   private final Set> wrappedClasses;
   private final Set> unWrappedClasses;
 
+  /**
+   * Default constructor
+   */
   public ClassSerialisationConfig() {
     this(new Configuration());
   }
 
+  /**
+   * Constructs a new {@code ClassSerialisationConfig} instance and initializes
+   * the sets of wrapped and unwrapped classes used for JSON serialization.
+   *
+   * @param conf the Hadoop {@link Configuration} instance (typically injected via
+   *             dependency injection) used to load optional custom class definitions
+   */
   @Inject
   public ClassSerialisationConfig(@javax.inject.Named("conf") Configuration conf) {
     wrappedClasses = new HashSet<>(CONST_WRAPPED_CLASSES);
     try {
-      wrappedClasses.addAll(Arrays.asList(conf.getClasses(YarnConfiguration.YARN_HTTP_WEBAPP_CUSTOM_DAO_CLASSES)));
+      wrappedClasses.addAll(
+          Arrays.asList(conf.getClasses(YarnConfiguration.YARN_HTTP_WEBAPP_CUSTOM_DAO_CLASSES)));
     } catch (RuntimeException e) {
       LOG.warn("Failed to load YARN_HTTP_WEBAPP_CUSTOM_DAO_CLASSES", e);
     }
 
     unWrappedClasses = new HashSet<>(CONST_UNWRAPPED_CLASSES);
     try {
-      wrappedClasses.addAll(Arrays.asList(conf.getClasses(YarnConfiguration.YARN_HTTP_WEBAPP_CUSTOM_UNWRAPPED_DAO_CLASSES)));
+      wrappedClasses.addAll(Arrays.asList(
+          conf.getClasses(YarnConfiguration.YARN_HTTP_WEBAPP_CUSTOM_UNWRAPPED_DAO_CLASSES)));
     } catch (RuntimeException e) {
       LOG.warn("Failed to load YARN_HTTP_WEBAPP_CUSTOM_DAO_CLASSES", e);
     }
@@ -229,19 +205,34 @@ public ClassSerialisationConfig(@javax.inject.Named("conf") Configuration conf)
 
     Set> duplicates = new HashSet<>(wrappedClasses);
     duplicates.retainAll(unWrappedClasses);
-
     if (!duplicates.isEmpty()) {
       throw new Error(String.format("Duplicate classes found: %s", duplicates));
     }
   }
 
+  /**
+   * Returns the set of classes whose JSON representation should include a root element.
+   * 
+   * These classes are used by MOXy JSON providers to determine which data transfer
+   * objects (DTOs) should be wrapped with a root element when serialized.
+   * 
+   *
+   * @return an unmodifiable {@link Set} of wrapped classes
+   */
   public Set> getWrappedClasses() {
     return wrappedClasses;
   }
 
+  /**
+   * Returns the set of classes whose JSON representation should omit the root element.
+   * 
+   * These classes are used by MOXy JSON providers to determine which data transfer
+   * objects (DTOs) should be serialized without a root element in the JSON output.
+   * 
+   *
+   * @return an unmodifiable {@link Set} of unwrapped classes
+   */
   public Set> getUnWrappedClasses() {
     return unWrappedClasses;
   }
-
-
 }
diff --git a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/webapp/jsonprovider/ExcludeRootJSONProvider.java b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/webapp/jsonprovider/ExcludeRootJSONProvider.java
index 7b4c79fc4f577..845654a35c54f 100644
--- a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/webapp/jsonprovider/ExcludeRootJSONProvider.java
+++ b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/webapp/jsonprovider/ExcludeRootJSONProvider.java
@@ -6,9 +6,9 @@
  * to you under the Apache License, Version 2.0 (the
  * "License"); you may not use this file except in compliance
  * with the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
+ * 
+ * http://www.apache.org/licenses/LICENSE-2.0
+ * 
  * Unless required by applicable law or agreed to in writing, software
  * distributed under the License is distributed on an "AS IS" BASIS,
  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
@@ -30,7 +30,6 @@
 import javax.xml.bind.Marshaller;
 import javax.xml.bind.Unmarshaller;
 
-import com.google.gson.Gson;
 import org.eclipse.persistence.jaxb.MarshallerProperties;
 import org.eclipse.persistence.jaxb.rs.MOXyJsonProvider;
 import org.slf4j.Logger;
@@ -38,53 +37,112 @@
 
 import org.apache.hadoop.conf.Configuration;
 
+/**
+ * A custom JSON provider that extends {@link org.eclipse.persistence.jaxb.rs.MOXyJsonProvider}
+ * to handle JSON marshalling and unmarshalling without including the root element
+ * for configured classes.
+ * 
+ * This provider integrates with EclipseLink MOXy and the JAX-RS runtime (annotated with
+ * {@link javax.ws.rs.ext.Provider}), and it is configured to both produce and consume
+ * {@code application/json} content types. It uses a {@link ClassSerialisationConfig}
+ * to determine which classes should be serialized
+ * and deserialized without a root element in the resulting JSON.
+ * 
+ *
+ * 
+ * During marshalling and unmarshalling, this provider sets the MOXy-specific properties:
+ * 
+ *   {@code MarshallerProperties.JSON_INCLUDE_ROOT = false} 
+ *   {@code MarshallerProperties.JSON_MARSHAL_EMPTY_COLLECTIONS = false} 
+ *  
+ * ensuring that the JSON representation excludes the root element and does not include
+ * empty collections. This is useful when interoperating with APIs that expect flat
+ * JSON structures or when simplifying payloads for lightweight clients.
+ *          
+ *
+ * 
+ * This class also provides detailed trace-level logging to help developers verify
+ * which entity types are being handled by this provider and how JSON binding is applied.
+ * 
+ *
+ * @see org.eclipse.persistence.jaxb.rs.MOXyJsonProvider
+ * @see org.eclipse.persistence.jaxb.MarshallerProperties
+ * @see ClassSerialisationConfig
+ * @see Configuration
+ */
 @Provider
 @Produces(MediaType.APPLICATION_JSON)
 @Consumes(MediaType.APPLICATION_JSON)
 public class ExcludeRootJSONProvider extends MOXyJsonProvider {
 
-    private final static Logger LOG = LoggerFactory.getLogger(ExcludeRootJSONProvider.class);
-    private final ClassSerialisationConfig classSerialisationConfig;
+  private final static Logger LOG = LoggerFactory.getLogger(ExcludeRootJSONProvider.class);
+  private final ClassSerialisationConfig classSerialisationConfig;
 
-    public ExcludeRootJSONProvider() {
-        this(new Configuration());
-    }
+  /**
+   * Default constructor
+   */
+  public ExcludeRootJSONProvider() {
+    this(new Configuration());
+  }
 
-    @Inject
-    public ExcludeRootJSONProvider(@javax.inject.Named("conf") Configuration conf) {
-        classSerialisationConfig = new ClassSerialisationConfig(conf);
-    }
+  /**
+   * Constructs a new {@code ExcludeRootJSONProvider} instance and initializes
+   * its {@link ClassSerialisationConfig} based on the provided application configuration.
+   * 
+   * This constructor is designed for dependency injection. The {@code Configuration}
+   * object is injected (qualified with {@code @Named("conf")}) and used to
+   * create a {@link ClassSerialisationConfig} instance, which controls how
+   * classes are serialized to JSON (e.g., whether to include root elements).
+   * 
+   *
+   * @param conf the application {@link Configuration} instance injected by the framework;
+   *             used to initialize serialization settings
+   */
+  @Inject
+  public ExcludeRootJSONProvider(@javax.inject.Named("conf") Configuration conf) {
+    classSerialisationConfig = new ClassSerialisationConfig(conf);
+  }
 
-    @Override
-    public boolean isReadable(Class> type, Type genericType,
-            Annotation[] annotations, MediaType mediaType) {
-        boolean match = classSerialisationConfig.getUnWrappedClasses().contains(type);
-        LOG.trace("ExcludeRootJSONProvider compatibility with {} is {}", type, match);
-        return match;
-    }
+  /**
+   * {@inheritDoc}
+   */
+  @Override
+  public boolean isReadable(Class> type, Type genericType, Annotation[] annotations,
+      MediaType mediaType) {
+    boolean match = classSerialisationConfig.getUnWrappedClasses().contains(type);
+    LOG.trace("ExcludeRootJSONProvider compatibility with {} is {}", type, match);
+    return match;
+  }
 
-    @Override
-    public boolean isWriteable(Class> type, Type genericType,
-            Annotation[] annotations, MediaType mediaType) {
-        return isReadable(type, genericType, annotations, mediaType);
-    }
+  /**
+   * {@inheritDoc}
+   */
+  @Override
+  public boolean isWriteable(Class> type, Type genericType, Annotation[] annotations,
+      MediaType mediaType) {
+    return isReadable(type, genericType, annotations, mediaType);
+  }
 
-    @Override
-    protected void preReadFrom(Class type, Type genericType,
-            Annotation[] annotations, MediaType mediaType,
-            MultivaluedMap httpHeaders,
-            Unmarshaller unmarshaller) throws JAXBException {
-        LOG.trace("ExcludeRootJSONProvider preReadFrom with {}", type);
-        unmarshaller.setProperty(MarshallerProperties.JSON_INCLUDE_ROOT, false);
-    }
+  /**
+   * {@inheritDoc}
+   */
+  @Override
+  protected void preReadFrom(Class type, Type genericType, Annotation[] annotations,
+      MediaType mediaType, MultivaluedMap httpHeaders, Unmarshaller unmarshaller)
+      throws JAXBException {
+    LOG.trace("ExcludeRootJSONProvider preReadFrom with {}", type);
+    unmarshaller.setProperty(MarshallerProperties.JSON_INCLUDE_ROOT, false);
+  }
 
-    @Override
-    protected void preWriteTo(Object object, Class> type, Type genericType,
-            Annotation[] annotations, MediaType mediaType,
-            MultivaluedMap httpHeaders, Marshaller marshaller)
-            throws JAXBException {
-        LOG.trace("ExcludeRootJSONProvider preWriteTo with {}", type);
-        marshaller.setProperty(MarshallerProperties.JSON_MARSHAL_EMPTY_COLLECTIONS, false);
-        marshaller.setProperty(MarshallerProperties.JSON_INCLUDE_ROOT, false);
-    }
-}
\ No newline at end of file
+  /**
+   * {@inheritDoc}
+   */
+  @Override
+  protected void preWriteTo(Object object, Class> type, Type genericType,
+      Annotation[] annotations, MediaType mediaType, MultivaluedMap httpHeaders,
+      Marshaller marshaller) throws JAXBException {
+    LOG.trace("ExcludeRootJSONProvider preWriteTo with {}", type);
+    marshaller.setProperty(MarshallerProperties.JSON_MARSHAL_EMPTY_COLLECTIONS, false);
+    marshaller.setProperty(MarshallerProperties.JSON_INCLUDE_ROOT, false);
+  }
+}
diff --git a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/webapp/jsonprovider/IncludeRootJSONProvider.java b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/webapp/jsonprovider/IncludeRootJSONProvider.java
index f8ce4ab8c2e28..0955508001ec2 100644
--- a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/webapp/jsonprovider/IncludeRootJSONProvider.java
+++ b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/webapp/jsonprovider/IncludeRootJSONProvider.java
@@ -6,9 +6,9 @@
  * to you under the Apache License, Version 2.0 (the
  * "License"); you may not use this file except in compliance
  * with the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
+ * 
+ * http://www.apache.org/licenses/LICENSE-2.0
+ * 
  * Unless required by applicable law or agreed to in writing, software
  * distributed under the License is distributed on an "AS IS" BASIS,
  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
@@ -36,55 +36,111 @@
 import org.slf4j.LoggerFactory;
 
 import org.apache.hadoop.conf.Configuration;
-import org.apache.hadoop.yarn.api.records.ResourceInformation;
 
+/**
+ * A custom JSON provider that extends {@link org.eclipse.persistence.jaxb.rs.MOXyJsonProvider}
+ * to ensure that JSON marshalling and unmarshalling
+ * include the root element for configured classes.
+ * 
+ * This provider integrates with EclipseLink MOXy and the JAX-RS runtime (annotated with
+ * {@link javax.ws.rs.ext.Provider}), and it is configured to both produce and consume
+ * {@code application/json} content types. It uses a {@link ClassSerialisationConfig}
+ * to determine which classes should include
+ * their root elements when serialized or deserialized.
+ * 
+ *
+ * 
+ * During marshalling and unmarshalling, this provider sets the MOXy-specific properties:
+ * 
+ *   {@code MarshallerProperties.JSON_INCLUDE_ROOT = true} 
+ *   {@code MarshallerProperties.JSON_MARSHAL_EMPTY_COLLECTIONS = false} 
+ *  
+ * ensuring consistent JSON structure that includes the root element and omits empty collections.
+ *                         
+ *
+ * 
+ * This class also provides detailed trace logging to help debug compatibility and data binding
+ * behavior for registered entity types.
+ * 
+ *
+ * @see org.eclipse.persistence.jaxb.rs.MOXyJsonProvider
+ * @see org.eclipse.persistence.jaxb.MarshallerProperties
+ * @see ClassSerialisationConfig
+ * @see Configuration
+ */
 @Provider
 @Produces(MediaType.APPLICATION_JSON)
 @Consumes(MediaType.APPLICATION_JSON)
 public class IncludeRootJSONProvider extends MOXyJsonProvider {
-    private final static Logger LOG = LoggerFactory.getLogger(IncludeRootJSONProvider.class);
-    private final ClassSerialisationConfig classSerialisationConfig;
 
-    public IncludeRootJSONProvider() {
-        this(new Configuration());
-    }
+  private final static Logger LOG = LoggerFactory.getLogger(IncludeRootJSONProvider.class);
+  private final ClassSerialisationConfig classSerialisationConfig;
 
-    @Inject
-    public IncludeRootJSONProvider(@javax.inject.Named("conf") Configuration conf) {
-        classSerialisationConfig = new ClassSerialisationConfig(conf);
-    }
+  /**
+   * Default constructor
+   */
+  public IncludeRootJSONProvider() {
+    this(new Configuration());
+  }
 
-    @Override
-    public boolean isReadable(Class> type, Type genericType,
-            Annotation[] annotations, MediaType mediaType) {
-        boolean match = classSerialisationConfig.getWrappedClasses().contains(type);
-        LOG.trace("IncludeRootJSONProvider compatibility with {} is {}", type, match);
-        return match;
-    }
+  /**
+   * Constructs a new {@code IncludeRootJSONProvider} instance and initializes
+   * its {@link ClassSerialisationConfig} based on the provided application configuration.
+   * 
+   * This constructor is designed for dependency injection. The {@code Configuration}
+   * object is injected (qualified with {@code @Named("conf")}) and used to
+   * create a {@link ClassSerialisationConfig} instance, which controls how
+   * classes are serialized to JSON (e.g., whether to include root elements).
+   * 
+   *
+   * @param conf the application {@link Configuration} instance injected by the framework;
+   *             used to initialize serialization settings
+   */
+  @Inject
+  public IncludeRootJSONProvider(@javax.inject.Named("conf") Configuration conf) {
+    classSerialisationConfig = new ClassSerialisationConfig(conf);
+  }
 
-    @Override
-    public boolean isWriteable(Class> type, Type genericType,
-            Annotation[] annotations, MediaType mediaType) {
-        return isReadable(type, genericType, annotations, mediaType);
-    }
+  /**
+   * {@inheritDoc}
+   */
+  @Override
+  public boolean isReadable(Class> type, Type genericType, Annotation[] annotations,
+      MediaType mediaType) {
+    boolean match = classSerialisationConfig.getWrappedClasses().contains(type);
+    LOG.trace("IncludeRootJSONProvider compatibility with {} is {}", type, match);
+    return match;
+  }
 
-    @Override
-    protected void preReadFrom(Class type, Type genericType,
-            Annotation[] annotations, MediaType mediaType,
-            MultivaluedMap httpHeaders,
-            Unmarshaller unmarshaller) throws JAXBException {
-        LOG.trace("IncludeRootJSONProvider preReadFrom with {}", type);
-        unmarshaller.setProperty(MarshallerProperties.JSON_INCLUDE_ROOT, true);
-    }
+  /**
+   * {@inheritDoc}
+   */
+  @Override
+  public boolean isWriteable(Class> type, Type genericType, Annotation[] annotations,
+      MediaType mediaType) {
+    return isReadable(type, genericType, annotations, mediaType);
+  }
 
-    @Override
-    protected void preWriteTo(Object object, Class> type, Type genericType,
-            Annotation[] annotations, MediaType mediaType,
-            MultivaluedMap httpHeaders, Marshaller marshaller)
-            throws JAXBException {
-        LOG.trace("IncludeRootJSONProvider preWriteTo with {}", type);
-        marshaller.setProperty(MarshallerProperties.JSON_MARSHAL_EMPTY_COLLECTIONS, false);
-        marshaller.setProperty(MarshallerProperties.JSON_INCLUDE_ROOT, true);
-    }
+  /**
+   * {@inheritDoc}
+   */
+  @Override
+  protected void preReadFrom(Class type, Type genericType, Annotation[] annotations,
+      MediaType mediaType, MultivaluedMap httpHeaders, Unmarshaller unmarshaller)
+      throws JAXBException {
+    LOG.trace("IncludeRootJSONProvider preReadFrom with {}", type);
+    unmarshaller.setProperty(MarshallerProperties.JSON_INCLUDE_ROOT, true);
+  }
 
+  /**
+   * {@inheritDoc}
+   */
+  @Override
+  protected void preWriteTo(Object object, Class> type, Type genericType,
+      Annotation[] annotations, MediaType mediaType, MultivaluedMap httpHeaders,
+      Marshaller marshaller) throws JAXBException {
+    LOG.trace("IncludeRootJSONProvider preWriteTo with {}", type);
+    marshaller.setProperty(MarshallerProperties.JSON_MARSHAL_EMPTY_COLLECTIONS, false);
+    marshaller.setProperty(MarshallerProperties.JSON_INCLUDE_ROOT, true);
+  }
 }
diff --git a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/webapp/jsonprovider/JsonProviderFeature.java b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/webapp/jsonprovider/JsonProviderFeature.java
index 8dc8b796855cb..3e26f6dec0fe3 100644
--- a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/webapp/jsonprovider/JsonProviderFeature.java
+++ b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/webapp/jsonprovider/JsonProviderFeature.java
@@ -6,9 +6,9 @@
  * to you under the Apache License, Version 2.0 (the
  * "License"); you may not use this file except in compliance
  * with the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
+ * 
+ * http://www.apache.org/licenses/LICENSE-2.0
+ * 
  * Unless required by applicable law or agreed to in writing, software
  * distributed under the License is distributed on an "AS IS" BASIS,
  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
@@ -21,10 +21,39 @@
 import javax.ws.rs.core.Feature;
 import javax.ws.rs.core.FeatureContext;
 
-import org.eclipse.persistence.jaxb.MarshallerProperties;
 import org.glassfish.jersey.CommonProperties;
 
+/**
+ * A JAX-RS {@link Feature} that registers custom MOXy JSON providers
+ * for handling serialization and deserialization of JSON with or without
+ * root elements.
+ * 
+ * This feature disables MOXy's automatic provider discovery to ensure
+ * that the custom providers {@link IncludeRootJSONProvider} and
+ * {@link ExcludeRootJSONProvider} are used explicitly with defined priorities.
+ * 
+ *
+ * Configuration details:
+ * 
+ *   Disables automatic MOXy JSON feature discovery by setting
+ *       {@link org.glassfish.jersey.CommonProperties#MOXY_JSON_FEATURE_DISABLE} to {@code true}. 
+ *   Registers {@link IncludeRootJSONProvider} with priority {@code 2001}. 
+ *   Registers {@link ExcludeRootJSONProvider} with priority {@code 2002}. 
+ *  
+ *
+ * @see IncludeRootJSONProvider
+ * @see ExcludeRootJSONProvider
+ * @see org.glassfish.jersey.CommonProperties#MOXY_JSON_FEATURE_DISABLE
+ */
 public class JsonProviderFeature implements Feature {
+
+  /**
+   * Configures the feature by registering the custom JSON providers
+   * and disabling MOXy auto-discovery.
+   *
+   * @param context the {@link FeatureContext} provided by the JAX-RS runtime
+   * @return {@code true} to indicate that the feature was successfully configured
+   */
   @Override
   public boolean configure(FeatureContext context) {
     //Auto discovery should be disabled to ensure the custom providers will be used
diff --git a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/webapp/TestRMWebServicesApps.java b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/webapp/TestRMWebServicesApps.java
index 4de46e9b058b3..a0a57c399826a 100644
--- a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/webapp/TestRMWebServicesApps.java
+++ b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/webapp/TestRMWebServicesApps.java
@@ -24,7 +24,6 @@
 import org.apache.hadoop.conf.Configuration;
 import org.apache.hadoop.http.JettyUtils;
 import org.apache.hadoop.security.UserGroupInformation;
-import org.apache.hadoop.test.tags.FlakyTest;
 import org.apache.hadoop.util.Sets;
 import org.apache.hadoop.util.XMLUtils;
 import org.apache.hadoop.yarn.api.records.ContainerState;
@@ -69,7 +68,6 @@
 import javax.xml.parsers.DocumentBuilderFactory;
 import java.io.StringReader;
 import java.util.ArrayList;
-import java.util.Arrays;
 import java.util.Set;
 
 import static org.apache.hadoop.yarn.server.resourcemanager.webapp.TestWebServiceUtil.responseToJson;
diff --git a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/webapp/TestRMWebServicesReservation.java b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/webapp/TestRMWebServicesReservation.java
index 278e93e08f8f4..f783c349bb93b 100644
--- a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/webapp/TestRMWebServicesReservation.java
+++ b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/webapp/TestRMWebServicesReservation.java
@@ -30,7 +30,6 @@
 
 import java.io.File;
 import java.io.IOException;
-import java.io.StringReader;
 import java.net.URL;
 import java.security.Principal;
 import java.util.Arrays;
@@ -47,7 +46,6 @@
 import javax.ws.rs.core.Application;
 import javax.ws.rs.core.MediaType;
 import javax.ws.rs.core.Response;
-import javax.xml.bind.JAXBException;
 
 import org.apache.commons.io.FileUtils;
 import org.apache.hadoop.conf.Configuration;
@@ -1039,7 +1037,7 @@ private ReservationId getReservationIdTestHelper(int fallbackReservationId)
 
     assertEquals(MediaType.APPLICATION_JSON_TYPE + ";" + JettyUtils.UTF_8,
         response.getMediaType().toString());
-      JSONObject json = responseToJson(response).getJSONObject("new-reservation");
+    JSONObject json = responseToJson(response).getJSONObject("new-reservation");
 
     assertEquals(1, json.length(), "incorrect number of elements");
     ReservationId rid = null;
diff --git a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/webapp/TestWebServiceUtil.java b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/webapp/TestWebServiceUtil.java
index efbf629e930e0..0bd28d8a792aa 100644
--- a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/webapp/TestWebServiceUtil.java
+++ b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/webapp/TestWebServiceUtil.java
@@ -393,7 +393,7 @@ public static  T fromJson(String json, Class klass) {
       }
       Unmarshaller unmarshaller = jc.createUnmarshaller();
       unmarshaller.setProperty(MarshallerProperties.MEDIA_TYPE, MediaType.APPLICATION_JSON);
-      return unmarshaller.unmarshal(new StreamSource(new StringReader(json)),klass).getValue();
+      return unmarshaller.unmarshal(new StreamSource(new StringReader(json)), klass).getValue();
     } catch (Exception e) {
       throw new RuntimeException("Failed to read from json: " + json, e);
     }
diff --git a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/webapp/helper/AppInfoJsonVerifications.java b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/webapp/helper/AppInfoJsonVerifications.java
index fdaf90d345ec6..951336da2d14a 100644
--- a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/webapp/helper/AppInfoJsonVerifications.java
+++ b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/webapp/helper/AppInfoJsonVerifications.java
@@ -26,9 +26,6 @@
 import static org.apache.hadoop.yarn.webapp.WebServicesTestUtils.checkStringEqual;
 import static org.apache.hadoop.yarn.webapp.WebServicesTestUtils.checkStringMatch;
 import static org.junit.jupiter.api.Assertions.assertEquals;
-import static org.junit.jupiter.api.Assertions.assertFalse;
-import static org.junit.jupiter.api.Assertions.assertNotNull;
-import static org.junit.jupiter.api.Assertions.assertNull;
 import static org.junit.jupiter.api.Assertions.assertTrue;
 
 /**
From 6bebef6c1cb84fd255c716e2b7a9d16656a874d3 Mon Sep 17 00:00:00 2001
From: K0K0V0K 
Date: Sat, 18 Oct 2025 11:58:16 +0200
Subject: [PATCH 12/17] - fix TestRMWebServicesNodeLabels - replace expected
 string to const - remove dead code
---
 .../TestFederationRMStateStoreService.java     |  2 --
 .../webapp/TestRMWebServicesApps.java          |  8 ++++----
 .../webapp/TestRMWebServicesNodeLabels.java    | 18 ++++++------------
 .../webapp/TestRMWebServicesNodes.java         |  4 ++--
 4 files changed, 12 insertions(+), 20 deletions(-)
diff --git a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/federation/TestFederationRMStateStoreService.java b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/federation/TestFederationRMStateStoreService.java
index 06a93e7cd60aa..c5633c6201678 100644
--- a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/federation/TestFederationRMStateStoreService.java
+++ b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/federation/TestFederationRMStateStoreService.java
@@ -192,8 +192,6 @@ private void explicitFailover(MockRM rm) throws IOException {
 
   private void checkClusterMetricsInfo(String capability, int numNodes) {
     ClusterMetricsInfo clusterMetricsInfo = fromJson(capability, ClusterMetricsInfo.class);
-    System.err.println(capability);
-    System.err.println(clusterMetricsInfo.getTotalNodes());
     assertEquals(numNodes, clusterMetricsInfo.getTotalNodes());
   }
 
diff --git a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/webapp/TestRMWebServicesApps.java b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/webapp/TestRMWebServicesApps.java
index a0a57c399826a..a2e1af1d03eff 100644
--- a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/webapp/TestRMWebServicesApps.java
+++ b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/webapp/TestRMWebServicesApps.java
@@ -423,7 +423,7 @@ public void testAppsQueryStatesNone() throws JSONException, Exception {
         response.getMediaType().toString());
     JSONObject json = responseToJson(response);
     assertEquals(1, json.length(), "incorrect number of elements");
-    assertEquals(new JSONObject().toString(), json.get("apps").toString(), "apps is not empty");
+    assertEquals("{}", json.get("apps").toString(), "apps is not empty");
     rm.stop();
   }
 
@@ -443,7 +443,7 @@ public void testAppsQueryStateNone() throws JSONException, Exception {
         response.getMediaType().toString());
     JSONObject json = responseToJson(response);
     assertEquals(1, json.length(), "incorrect number of elements");
-    assertEquals(new JSONObject().toString(), json.get("apps").toString(), "apps is not empty");
+    assertEquals("{}", json.get("apps").toString(), "apps is not empty");
     rm.stop();
   }
 
@@ -557,7 +557,7 @@ public void testAppsQueryFinalStatusNone() throws JSONException, Exception {
         response.getMediaType().toString());
     JSONObject json = responseToJson(response);
     assertEquals(1, json.length(), "incorrect number of elements");
-    assertEquals(new JSONObject().toString(), json.get("apps").toString(), "apps is not null");
+    assertEquals("{}", json.get("apps").toString(), "apps is not null");
     rm.stop();
   }
 
@@ -844,7 +844,7 @@ public void testAppsQueryStartEnd() throws JSONException, Exception {
         response.getMediaType().toString());
     JSONObject json = responseToJson(response);
     assertEquals(1, json.length(), "incorrect number of elements");
-    assertEquals(new JSONObject().toString(), json.get("apps").toString(), "apps is not empty");
+    assertEquals("{}", json.get("apps").toString(), "apps is not empty");
     rm.stop();
   }
 
diff --git a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/webapp/TestRMWebServicesNodeLabels.java b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/webapp/TestRMWebServicesNodeLabels.java
index 117762527e179..304014068dadf 100644
--- a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/webapp/TestRMWebServicesNodeLabels.java
+++ b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/webapp/TestRMWebServicesNodeLabels.java
@@ -19,6 +19,7 @@
 package org.apache.hadoop.yarn.server.resourcemanager.webapp;
 
 import static org.apache.hadoop.yarn.server.resourcemanager.webapp.TestWebServiceUtil.responseToJson;
+import static org.apache.hadoop.yarn.server.resourcemanager.webapp.TestWebServiceUtil.toJson;
 import static org.junit.jupiter.api.Assertions.assertEquals;
 import static org.junit.jupiter.api.Assertions.assertFalse;
 import static org.junit.jupiter.api.Assertions.assertNotNull;
@@ -47,7 +48,6 @@
 import org.apache.hadoop.conf.Configuration;
 import org.apache.hadoop.util.Lists;
 
-import com.google.gson.Gson;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.apache.hadoop.http.JettyUtils;
@@ -209,9 +209,11 @@ private Response post(String path, String queryUserName, Object payload,
         webTarget = webTarget.queryParam(param.getKey(), value);
       }
     }
-    return webTarget.request(MediaType.APPLICATION_JSON)
-        .post(Entity.entity(toJson(payload, payloadClass),
-        MediaType.APPLICATION_JSON), Response.class);
+    Entity entity = payload == null
+        ? null
+        : Entity.entity(toJson(payload, payloadClass) ,MediaType.APPLICATION_JSON);
+
+    return webTarget.request(MediaType.APPLICATION_JSON).post(entity, Response.class);
   }
 
   @Test
@@ -691,12 +693,4 @@ public void testNodeLabelPartitionInfo() throws Exception {
     assertNotNull(nodes.getPartitionInfo());
     assertNotNull(nodes.getPartitionInfo().getResourceAvailable());
   }
-
-  @SuppressWarnings("rawtypes")
-  private String toJson(Object obj, Class klass) throws Exception {
-    if (obj == null) {
-      return null;
-    }
-    return new Gson().toJson(obj, klass);
-  }
 }
diff --git a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/webapp/TestRMWebServicesNodes.java b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/webapp/TestRMWebServicesNodes.java
index 3e1aaa10d35fa..2d8d1d2e9d0b0 100644
--- a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/webapp/TestRMWebServicesNodes.java
+++ b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/webapp/TestRMWebServicesNodes.java
@@ -313,7 +313,7 @@ public void testNodesQueryStateNone() throws JSONException, Exception {
         response.getMediaType().toString());
     JSONObject json = responseToJson(response);
     assertEquals(1, json.length(), "incorrect number of elements");
-    assertEquals(new JSONObject().toString(), json.get("nodes").toString(), "nodes is not empty");
+    assertEquals("{}", json.get("nodes").toString(), "nodes is not empty");
   }
 
   @Test
@@ -442,7 +442,7 @@ public void testNodesQueryHealthyFalse() throws JSONException, Exception {
         response.getMediaType().toString());
     JSONObject json = responseToJson(response);
     assertEquals(1, json.length(), "incorrect number of elements");
-    assertEquals(new JSONObject().toString(), json.get("nodes").toString(), "nodes is not empty");
+    assertEquals("{}", json.get("nodes").toString(), "nodes is not empty");
   }
 
   public void testNodesHelper(String path, String media) throws JSONException,
From 2dea8098d430d60e0c4ce5add25cd15dad424b05 Mon Sep 17 00:00:00 2001
From: K0K0V0K 
Date: Mon, 27 Oct 2025 15:19:22 +0100
Subject: [PATCH 13/17] fix by review
---
 hadoop-project/pom.xml                        |   9 +-
 .../hadoop/yarn/webapp/JerseyTestBase.java    |   2 +-
 .../pom.xml                                   |   4 +-
 .../resourcemanager/webapp/RMWebApp.java      |   1 -
 .../jsonprovider/JsonProviderFeature.java     |  11 +-
 .../yarn/server/resourcemanager/TestRMHA.java |   3 +-
 .../webapp/TestRMWebServiceAppsNodelabel.java |   5 +-
 .../webapp/TestRMWebServices.java             |  27 +++--
 .../webapp/TestRMWebServicesAppAttempts.java  |  11 +-
 .../webapp/TestRMWebServicesApps.java         | 107 +++++++++---------
 .../TestRMWebServicesAppsModification.java    |  13 +--
 .../TestRMWebServicesCapacitySched.java       |   3 +-
 ...estRMWebServicesConfigurationMutation.java |   5 +-
 .../TestRMWebServicesDelegationTokens.java    |   3 +-
 .../TestRMWebServicesForCSWithPartitions.java |   7 +-
 .../webapp/TestRMWebServicesNodeLabels.java   |   3 +-
 .../webapp/TestRMWebServicesNodes.java        |  33 +++---
 .../webapp/TestRMWebServicesReservation.java  |   5 +-
 .../TestRMWebServicesSchedulerActivities.java |  43 ++++---
 ...edulerActivitiesWithMultiNodesEnabled.java |   9 +-
 .../webapp/TestWebServiceUtil.java            |   9 --
 .../TestRMWebServicesFairScheduler.java       |   9 +-
 .../yarn/webapp/TestRMWithCSRFFilter.java     |   1 -
 23 files changed, 147 insertions(+), 176 deletions(-)
diff --git a/hadoop-project/pom.xml b/hadoop-project/pom.xml
index 5cbfe598eef4a..febcfdf374af8 100644
--- a/hadoop-project/pom.xml
+++ b/hadoop-project/pom.xml
@@ -67,6 +67,9 @@
     
     2.46 
 
+    
+    2.7.14 
+
     
     2.3.9 
 
@@ -2147,9 +2150,9 @@
         ${jersey2.version} 
       
       
-        org.glassfish.jersey.media 
-        jersey-media-moxy 
-        ${jersey2.version} 
+        org.eclipse.persistence 
+        org.eclipse.persistence.moxy 
+        ${eclipse-persistence.version} 
        
       
         org.glassfish.jaxb 
diff --git a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-common/src/test/java/org/apache/hadoop/yarn/webapp/JerseyTestBase.java b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-common/src/test/java/org/apache/hadoop/yarn/webapp/JerseyTestBase.java
index 03996e39f7038..a6ba24b6a712c 100644
--- a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-common/src/test/java/org/apache/hadoop/yarn/webapp/JerseyTestBase.java
+++ b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-common/src/test/java/org/apache/hadoop/yarn/webapp/JerseyTestBase.java
@@ -40,6 +40,6 @@ public void setUp() throws Exception {
   }
 
   public final WebTarget targetWithJsonObject() {
-    return target();
+    return target().register(new JettisonObjectProvider.App());
   }
 }
diff --git a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/pom.xml b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/pom.xml
index 5f70fbd9bd2e2..54e9258500a33 100644
--- a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/pom.xml
+++ b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/pom.xml
@@ -262,8 +262,8 @@
       test 
      
     
-      org.glassfish.jersey.media 
-      jersey-media-moxy 
+      org.eclipse.persistence 
+      org.eclipse.persistence.moxy 
      
     
       org.mockito 
diff --git a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/webapp/RMWebApp.java b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/webapp/RMWebApp.java
index b673e6e37895e..4b795bb580b29 100644
--- a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/webapp/RMWebApp.java
+++ b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/webapp/RMWebApp.java
@@ -23,7 +23,6 @@
 import java.net.InetSocketAddress;
 
 import org.apache.hadoop.conf.Configuration;
-
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.apache.hadoop.ha.HAServiceProtocol.HAServiceState;
diff --git a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/webapp/jsonprovider/JsonProviderFeature.java b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/webapp/jsonprovider/JsonProviderFeature.java
index 3e26f6dec0fe3..9f8cfa389484c 100644
--- a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/webapp/jsonprovider/JsonProviderFeature.java
+++ b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/webapp/jsonprovider/JsonProviderFeature.java
@@ -21,8 +21,6 @@
 import javax.ws.rs.core.Feature;
 import javax.ws.rs.core.FeatureContext;
 
-import org.glassfish.jersey.CommonProperties;
-
 /**
  * A JAX-RS {@link Feature} that registers custom MOXy JSON providers
  * for handling serialization and deserialization of JSON with or without
@@ -35,8 +33,6 @@
  *
  * Configuration details:
  * 
- *   Disables automatic MOXy JSON feature discovery by setting
- *       {@link org.glassfish.jersey.CommonProperties#MOXY_JSON_FEATURE_DISABLE} to {@code true}. 
  *   Registers {@link IncludeRootJSONProvider} with priority {@code 2001}. 
  *   Registers {@link ExcludeRootJSONProvider} with priority {@code 2002}. 
  *  
@@ -48,16 +44,15 @@
 public class JsonProviderFeature implements Feature {
 
   /**
-   * Configures the feature by registering the custom JSON providers
-   * and disabling MOXy auto-discovery.
+   * Configures the feature by registering the custom JSON providers.
    *
    * @param context the {@link FeatureContext} provided by the JAX-RS runtime
    * @return {@code true} to indicate that the feature was successfully configured
    */
   @Override
   public boolean configure(FeatureContext context) {
-    //Auto discovery should be disabled to ensure the custom providers will be used
-    context.property(CommonProperties.MOXY_JSON_FEATURE_DISABLE, true);
+    // Priorities are used to maintain order between the JSONProviders.
+    // This way, we can improve the determinism of the app.
     context.register(IncludeRootJSONProvider.class, 2001);
     context.register(ExcludeRootJSONProvider.class, 2002);
     return true;
diff --git a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/TestRMHA.java b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/TestRMHA.java
index cb2ee2dbfb308..79544c4c93fe6 100644
--- a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/TestRMHA.java
+++ b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/TestRMHA.java
@@ -175,8 +175,7 @@ private void checkActiveRMWebServices() throws JSONException {
         .get(Response.class);
     assertEquals(MediaType.APPLICATION_JSON_TYPE + ";" + JettyUtils.UTF_8,
         response.getMediaType().toString());
-    String raw = response.readEntity(String.class);
-    JSONObject json = new JSONObject(raw);
+    JSONObject json = response.readEntity(JSONObject.class);
 
     assertEquals(1, json.length(), "incorrect number of elements");
     JSONObject appJson = json.getJSONObject("app");
diff --git a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/webapp/TestRMWebServiceAppsNodelabel.java b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/webapp/TestRMWebServiceAppsNodelabel.java
index c0dd04ff93d30..1e84f08579233 100644
--- a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/webapp/TestRMWebServiceAppsNodelabel.java
+++ b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/webapp/TestRMWebServiceAppsNodelabel.java
@@ -18,7 +18,6 @@
 
 package org.apache.hadoop.yarn.server.resourcemanager.webapp;
 
-import static org.apache.hadoop.yarn.server.resourcemanager.webapp.TestWebServiceUtil.responseToJson;
 import static org.junit.jupiter.api.Assertions.assertEquals;
 import static org.junit.jupiter.api.Assertions.assertTrue;
 import static org.junit.jupiter.api.Assertions.fail;
@@ -154,7 +153,7 @@ public void testAppsFinished() throws JSONException, Exception {
     Response response =
         r.path("ws").path("v1").path("cluster").path("apps")
         .request(MediaType.APPLICATION_JSON).get(Response.class);
-    JSONObject json = responseToJson(response);
+    JSONObject json = response.readEntity(JSONObject.class);
     JSONObject apps = json.getJSONObject("apps");
     assertEquals(1, apps.length(), "incorrect number of elements");
     try {
@@ -195,7 +194,7 @@ public void testAppsRunning() throws JSONException, Exception {
 
     Response response = r.path("ws").path("v1").path("cluster").path("apps")
         .request(MediaType.APPLICATION_JSON).get(Response.class);
-    JSONObject json = responseToJson(response);
+    JSONObject json = response.readEntity(JSONObject.class);
 
     // Verify apps resource
     JSONObject apps = json.getJSONObject("apps");
diff --git a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/webapp/TestRMWebServices.java b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/webapp/TestRMWebServices.java
index eee6a416d2c7d..ebfc4e341c9fb 100644
--- a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/webapp/TestRMWebServices.java
+++ b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/webapp/TestRMWebServices.java
@@ -18,7 +18,6 @@
 
 package org.apache.hadoop.yarn.server.resourcemanager.webapp;
 
-import static org.apache.hadoop.yarn.server.resourcemanager.webapp.TestWebServiceUtil.responseToJson;
 import static org.apache.hadoop.yarn.webapp.WebServicesTestUtils.assertResponseStatusCode;
 import static org.junit.jupiter.api.Assertions.assertEquals;
 import static org.junit.jupiter.api.Assertions.assertFalse;
@@ -244,7 +243,7 @@ public void testCluster() throws JSONException, Exception {
 
     assertEquals(MediaType.APPLICATION_JSON + ";" + JettyUtils.UTF_8,
         response.getMediaType().toString());
-    JSONObject json = responseToJson(response);
+    JSONObject json = response.readEntity(JSONObject.class);
     verifyClusterInfo(json);
   }
 
@@ -257,7 +256,7 @@ public void testClusterSlash() throws JSONException, Exception {
 
     assertEquals(MediaType.APPLICATION_JSON + ";" + JettyUtils.UTF_8,
         response.getMediaType().toString());
-    JSONObject json = responseToJson(response);
+    JSONObject json = response.readEntity(JSONObject.class);
     verifyClusterInfo(json);
   }
 
@@ -270,7 +269,7 @@ public void testClusterDefault() throws JSONException, Exception {
 
     assertEquals(MediaType.APPLICATION_JSON + ";" + JettyUtils.UTF_8,
         response.getMediaType().toString());
-    JSONObject json = responseToJson(response);
+    JSONObject json = response.readEntity(JSONObject.class);
     verifyClusterInfo(json);
   }
 
@@ -283,7 +282,7 @@ public void testInfo() throws JSONException, Exception {
 
     assertEquals(MediaType.APPLICATION_JSON + ";" + JettyUtils.UTF_8,
         response.getMediaType().toString());
-    JSONObject json = responseToJson(response);
+    JSONObject json = response.readEntity(JSONObject.class);
     verifyClusterInfo(json);
   }
 
@@ -297,7 +296,7 @@ public void testInfoSlash() throws JSONException, Exception {
 
     assertEquals(MediaType.APPLICATION_JSON + ";" + JettyUtils.UTF_8,
         response.getMediaType().toString());
-    JSONObject json = responseToJson(response);
+    JSONObject json = response.readEntity(JSONObject.class);
     verifyClusterInfo(json);
   }
 
@@ -309,7 +308,7 @@ public void testInfoDefault() throws JSONException, Exception {
 
     assertEquals(MediaType.APPLICATION_JSON + ";" + JettyUtils.UTF_8,
         response.getMediaType().toString());
-    JSONObject json = responseToJson(response);
+    JSONObject json = response.readEntity(JSONObject.class);
     verifyClusterInfo(json);
   }
 
@@ -397,7 +396,7 @@ public void testClusterMetrics() throws JSONException, Exception {
 
     assertEquals(MediaType.APPLICATION_JSON + ";" + JettyUtils.UTF_8,
         response.getMediaType().toString());
-    JSONObject json = responseToJson(response);
+    JSONObject json = response.readEntity(JSONObject.class);
     verifyClusterMetricsJSON(json);
   }
 
@@ -410,7 +409,7 @@ public void testClusterMetricsSlash() throws JSONException, Exception {
 
     assertEquals(MediaType.APPLICATION_JSON + ";" + JettyUtils.UTF_8,
         response.getMediaType().toString());
-    JSONObject json = responseToJson(response);
+    JSONObject json = response.readEntity(JSONObject.class);
     verifyClusterMetricsJSON(json);
   }
 
@@ -422,7 +421,7 @@ public void testClusterMetricsDefault() throws JSONException, Exception {
 
     assertEquals(MediaType.APPLICATION_JSON + ";" + JettyUtils.UTF_8,
         response.getMediaType().toString());
-    JSONObject json =responseToJson(response);
+    JSONObject json = response.readEntity(JSONObject.class);
     verifyClusterMetricsJSON(json);
   }
 
@@ -554,7 +553,7 @@ public void testClusterSchedulerFifo() throws JSONException, Exception {
 
     assertEquals(MediaType.APPLICATION_JSON + ";" + JettyUtils.UTF_8,
         response.getMediaType().toString());
-    JSONObject json = responseToJson(response);
+    JSONObject json = response.readEntity(JSONObject.class);
     verifyClusterSchedulerFifo(json);
   }
 
@@ -567,7 +566,7 @@ public void testClusterSchedulerFifoSlash() throws JSONException, Exception {
 
     assertEquals(MediaType.APPLICATION_JSON + ";" + JettyUtils.UTF_8,
         response.getMediaType().toString());
-    JSONObject json = responseToJson(response);
+    JSONObject json = response.readEntity(JSONObject.class);
     verifyClusterSchedulerFifo(json);
   }
 
@@ -579,7 +578,7 @@ public void testClusterSchedulerFifoDefault() throws JSONException, Exception {
 
     assertEquals(MediaType.APPLICATION_JSON + ";" + JettyUtils.UTF_8,
         response.getMediaType().toString());
-    JSONObject json = responseToJson(response);
+    JSONObject json = response.readEntity(JSONObject.class);
     verifyClusterSchedulerFifo(json);
   }
 
@@ -1091,7 +1090,7 @@ public void testClusterSchedulerOverviewFifo() throws JSONException, Exception {
 
     assertEquals(MediaType.APPLICATION_JSON + ";" + JettyUtils.UTF_8,
         response.getMediaType().toString());
-    JSONObject json = responseToJson(response);
+    JSONObject json = response.readEntity(JSONObject.class);
     JSONObject schedulerJson = json.getJSONObject("scheduler");
     verifyClusterSchedulerOverView(schedulerJson, "Fifo Scheduler");
   }
diff --git a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/webapp/TestRMWebServicesAppAttempts.java b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/webapp/TestRMWebServicesAppAttempts.java
index 74467beda7d5f..47a6a66b3d036 100644
--- a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/webapp/TestRMWebServicesAppAttempts.java
+++ b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/webapp/TestRMWebServicesAppAttempts.java
@@ -63,7 +63,6 @@
 import java.io.StringReader;
 import java.util.Collection;
 
-import static org.apache.hadoop.yarn.server.resourcemanager.webapp.TestWebServiceUtil.responseToJson;
 import static org.apache.hadoop.yarn.webapp.WebServicesTestUtils.assertResponseStatusCode;
 import static org.apache.hadoop.yarn.webapp.WebServicesTestUtils.checkStringMatch;
 import static org.assertj.core.api.Assertions.assertThat;
@@ -155,7 +154,7 @@ public void testCompletedAppAttempt() throws Exception {
         .path("apps").path(app1.getApplicationId().toString())
         .path("appattempts").request(MediaType.APPLICATION_JSON)
         .get(Response.class);
-    JSONObject json = responseToJson(response);
+    JSONObject json = response.readEntity(JSONObject.class);
     JSONObject jsonAppAttempts = json.getJSONObject("appAttempts");
     JSONArray jsonArray = jsonAppAttempts.getJSONArray("appAttempt");
     JSONObject info = jsonArray.getJSONObject(0);
@@ -247,7 +246,7 @@ public void testInvalidAppIdGetAttempts() throws Exception {
       assertResponseStatusCode(Response.Status.BAD_REQUEST, response.getStatusInfo());
       assertEquals(MediaType.APPLICATION_JSON_TYPE + ";" + JettyUtils.UTF_8,
           response.getMediaType().toString());
-      JSONObject msg = responseToJson(response);
+      JSONObject msg = response.readEntity(JSONObject.class);
       JSONObject exception = msg.getJSONObject("RemoteException");
       assertEquals(3, exception.length(), "incorrect number of elements");
       String message = exception.getString("message");
@@ -284,7 +283,7 @@ public void testInvalidAppAttemptId() throws Exception {
           response.getStatusInfo());
       assertEquals(MediaType.APPLICATION_JSON_TYPE + ";" + JettyUtils.UTF_8,
           response.getMediaType().toString());
-      JSONObject msg = responseToJson(response);
+      JSONObject msg = response.readEntity(JSONObject.class);
       JSONObject exception = msg.getJSONObject("RemoteException");
       assertEquals(3, exception.length(), "incorrect number of elements");
       String message = exception.getString("message");
@@ -325,7 +324,7 @@ public void testNonexistAppAttempts() throws Exception {
       assertEquals(MediaType.APPLICATION_JSON_TYPE + ";" + JettyUtils.UTF_8,
           response.getMediaType().toString());
 
-      JSONObject msg = responseToJson(response);
+      JSONObject msg = response.readEntity(JSONObject.class);
       JSONObject exception = msg.getJSONObject("RemoteException");
       assertEquals(3, exception.length(), "incorrect number of elements");
       String message = exception.getString("message");
@@ -349,7 +348,7 @@ private void testAppAttemptsHelper(String path, RMApp app, String media)
         .get(Response.class);
     assertEquals(MediaType.APPLICATION_JSON_TYPE + ";" + JettyUtils.UTF_8,
         response.getMediaType().toString());
-    JSONObject json = responseToJson(response);
+    JSONObject json = response.readEntity(JSONObject.class);
     assertEquals(1, json.length(), "incorrect number of elements");
     JSONObject jsonAppAttempts = json.getJSONObject("appAttempts");
     assertEquals(1, jsonAppAttempts.length(), "incorrect number of elements");
diff --git a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/webapp/TestRMWebServicesApps.java b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/webapp/TestRMWebServicesApps.java
index a2e1af1d03eff..819d20fef3a32 100644
--- a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/webapp/TestRMWebServicesApps.java
+++ b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/webapp/TestRMWebServicesApps.java
@@ -70,7 +70,6 @@
 import java.util.ArrayList;
 import java.util.Set;
 
-import static org.apache.hadoop.yarn.server.resourcemanager.webapp.TestWebServiceUtil.responseToJson;
 import static org.apache.hadoop.yarn.webapp.WebServicesTestUtils.assertResponseStatusCode;
 import static org.junit.jupiter.api.Assertions.assertEquals;
 import static org.junit.jupiter.api.Assertions.assertFalse;
@@ -277,7 +276,7 @@ public void testAppsHelper(String path, RMApp app, String media,
         .path(path).request(media).get(Response.class);
     assertEquals(MediaType.APPLICATION_JSON_TYPE + ";" + JettyUtils.UTF_8,
         response.getMediaType().toString());
-    JSONObject json = responseToJson(response);
+    JSONObject json = response.readEntity(JSONObject.class);
     assertEquals(1, json.length(), "incorrect number of elements");
     JSONObject apps = json.getJSONObject("apps");
     assertEquals(1, apps.length(), "incorrect number of elements");
@@ -301,7 +300,7 @@ public void testAppsQueryState() throws JSONException, Exception {
         .request(MediaType.APPLICATION_JSON).get(Response.class);
     assertEquals(MediaType.APPLICATION_JSON_TYPE + ";" + JettyUtils.UTF_8,
         response.getMediaType().toString());
-    JSONObject json = responseToJson(response);
+    JSONObject json = response.readEntity(JSONObject.class);
     assertEquals(1, json.length(), "incorrect number of elements");
     JSONObject apps = json.getJSONObject("apps");
     assertEquals(1, apps.length(), "incorrect number of elements");
@@ -327,7 +326,7 @@ public void testAppsQueryStates() throws JSONException, Exception {
         .request(MediaType.APPLICATION_JSON).get(Response.class);
     assertEquals(MediaType.APPLICATION_JSON_TYPE + ";" + JettyUtils.UTF_8,
         response.getMediaType().toString());
-    JSONObject json = responseToJson(response);
+    JSONObject json = response.readEntity(JSONObject.class);
     assertEquals(1, json.length(), "incorrect number of elements");
     JSONObject apps = json.getJSONObject("apps");
     assertEquals(1, apps.length(), "incorrect number of elements");
@@ -343,7 +342,7 @@ public void testAppsQueryStates() throws JSONException, Exception {
         .request(MediaType.APPLICATION_JSON).get(Response.class);
     assertEquals(MediaType.APPLICATION_JSON_TYPE + ";" + JettyUtils.UTF_8,
         response.getMediaType().toString());
-    json = responseToJson(response);
+    json = response.readEntity(JSONObject.class);
     assertEquals(1, json.length(), "incorrect number of elements");
     apps = json.getJSONObject("apps");
     assertEquals(1, apps.length(), "incorrect number of elements");
@@ -375,7 +374,7 @@ public void testAppsQueryStatesComma() throws JSONException, Exception {
         .request(MediaType.APPLICATION_JSON).get(Response.class);
     assertEquals(MediaType.APPLICATION_JSON_TYPE + ";" + JettyUtils.UTF_8,
         response.getMediaType().toString());
-    JSONObject json = responseToJson(response);
+    JSONObject json = response.readEntity(JSONObject.class);
     assertEquals(1, json.length(), "incorrect number of elements");
     JSONObject apps = json.getJSONObject("apps");
     assertEquals(1, apps.length(), "incorrect number of elements");
@@ -391,7 +390,7 @@ public void testAppsQueryStatesComma() throws JSONException, Exception {
         .request(MediaType.APPLICATION_JSON).get(Response.class);
     assertEquals(MediaType.APPLICATION_JSON_TYPE + ";" + JettyUtils.UTF_8,
         response.getMediaType().toString());
-    json = responseToJson(response);
+    json = response.readEntity(JSONObject.class);
     assertEquals(1, json.length(), "incorrect number of elements");
     apps = json.getJSONObject("apps");
     assertEquals(1, apps.length(), "incorrect number of elements");
@@ -421,7 +420,7 @@ public void testAppsQueryStatesNone() throws JSONException, Exception {
         .request(MediaType.APPLICATION_JSON).get(Response.class);
     assertEquals(MediaType.APPLICATION_JSON_TYPE + ";" + JettyUtils.UTF_8,
         response.getMediaType().toString());
-    JSONObject json = responseToJson(response);
+    JSONObject json = response.readEntity(JSONObject.class);
     assertEquals(1, json.length(), "incorrect number of elements");
     assertEquals("{}", json.get("apps").toString(), "apps is not empty");
     rm.stop();
@@ -441,7 +440,7 @@ public void testAppsQueryStateNone() throws JSONException, Exception {
         .request(MediaType.APPLICATION_JSON).get(Response.class);
     assertEquals(MediaType.APPLICATION_JSON_TYPE + ";" + JettyUtils.UTF_8,
         response.getMediaType().toString());
-    JSONObject json = responseToJson(response);
+    JSONObject json = response.readEntity(JSONObject.class);
     assertEquals(1, json.length(), "incorrect number of elements");
     assertEquals("{}", json.get("apps").toString(), "apps is not empty");
     rm.stop();
@@ -465,7 +464,7 @@ public void testAppsQueryStatesInvalid() throws JSONException, Exception {
       assertResponseStatusCode(Response.Status.BAD_REQUEST, response.getStatusInfo());
       assertEquals(MediaType.APPLICATION_JSON_TYPE + ";" + JettyUtils.UTF_8,
           response.getMediaType().toString());
-      JSONObject msg = responseToJson(response);
+      JSONObject msg = response.readEntity(JSONObject.class);
       JSONObject exception = msg.getJSONObject("RemoteException");
       assertEquals(3, exception.length(), "incorrect number of elements");
       String message = exception.getString("message");
@@ -501,7 +500,7 @@ public void testAppsQueryStateInvalid() throws JSONException, Exception {
       assertResponseStatusCode(Response.Status.BAD_REQUEST, response.getStatusInfo());
       assertEquals(MediaType.APPLICATION_JSON_TYPE + ";" + JettyUtils.UTF_8,
           response.getMediaType().toString());
-      JSONObject msg = responseToJson(response);
+      JSONObject msg = response.readEntity(JSONObject.class);
       JSONObject exception = msg.getJSONObject("RemoteException");
       assertEquals(3, exception.length(), "incorrect number of elements");
       String message = exception.getString("message");
@@ -532,7 +531,7 @@ public void testAppsQueryFinalStatus() throws JSONException, Exception {
         .request(MediaType.APPLICATION_JSON).get();
     assertEquals(MediaType.APPLICATION_JSON_TYPE + ";" + JettyUtils.UTF_8,
         response.getMediaType().toString());
-    JSONObject json = responseToJson(response);
+    JSONObject json = response.readEntity(JSONObject.class);
     assertEquals(1, json.length(), "incorrect number of elements");
     JSONObject apps = json.getJSONObject("apps");
     assertEquals(1, apps.length(), "incorrect number of elements");
@@ -555,7 +554,7 @@ public void testAppsQueryFinalStatusNone() throws JSONException, Exception {
         .request(MediaType.APPLICATION_JSON).get(Response.class);
     assertEquals(MediaType.APPLICATION_JSON_TYPE + ";" + JettyUtils.UTF_8,
         response.getMediaType().toString());
-    JSONObject json = responseToJson(response);
+    JSONObject json = response.readEntity(JSONObject.class);
     assertEquals(1, json.length(), "incorrect number of elements");
     assertEquals("{}", json.get("apps").toString(), "apps is not null");
     rm.stop();
@@ -579,7 +578,7 @@ public void testAppsQueryFinalStatusInvalid() throws Exception {
       assertResponseStatusCode(Response.Status.BAD_REQUEST, response.getStatusInfo());
       assertEquals(MediaType.APPLICATION_JSON_TYPE + ";" + JettyUtils.UTF_8,
           response.getMediaType().toString());
-      JSONObject msg = responseToJson(response);
+      JSONObject msg = response.readEntity(JSONObject.class);
       JSONObject exception = msg.getJSONObject("RemoteException");
       assertEquals(3, exception.length(), "incorrect number of elements");
       String message = exception.getString("message");
@@ -616,7 +615,7 @@ public void testAppsQueryUser() throws JSONException, Exception {
         .request(MediaType.APPLICATION_JSON).get(Response.class);
     assertEquals(MediaType.APPLICATION_JSON_TYPE + ";" + JettyUtils.UTF_8,
         response.getMediaType().toString());
-    JSONObject json = responseToJson(response);
+    JSONObject json = response.readEntity(JSONObject.class);
 
     assertEquals(1, json.length(), "incorrect number of elements");
     JSONObject apps = json.getJSONObject("apps");
@@ -641,7 +640,7 @@ public void testAppsQueryQueue() throws JSONException, Exception {
         .request(MediaType.APPLICATION_JSON).get(Response.class);
     assertEquals(MediaType.APPLICATION_JSON_TYPE + ";" + JettyUtils.UTF_8,
         response.getMediaType().toString());
-    JSONObject json = responseToJson(response);
+    JSONObject json = response.readEntity(JSONObject.class);
     assertEquals(1, json.length(), "incorrect number of elements");
     JSONObject apps = json.getJSONObject("apps");
     assertEquals(1, apps.length(), "incorrect number of elements");
@@ -670,7 +669,7 @@ public void testAppsQueryQueueAndStateTwoFinishedApps() throws Exception {
         .request(MediaType.APPLICATION_JSON).get(Response.class);
     assertEquals(MediaType.APPLICATION_JSON_TYPE + ";" + JettyUtils.UTF_8,
         response.getMediaType().toString());
-    JSONObject json = responseToJson(response);
+    JSONObject json = response.readEntity(JSONObject.class);
     assertEquals(1, json.length(), "incorrect number of elements");
     JSONObject apps = json.getJSONObject("apps");
     assertEquals(1, apps.length(), "incorrect number of elements");
@@ -705,7 +704,7 @@ public void testAppsQueryQueueAndStateOneFinishedApp() throws Exception {
         .request(MediaType.APPLICATION_JSON).get(Response.class);
     assertEquals(MediaType.APPLICATION_JSON_TYPE + ";" + JettyUtils.UTF_8,
         response.getMediaType().toString());
-    JSONObject json = responseToJson(response);
+    JSONObject json = response.readEntity(JSONObject.class);
     assertEquals(1, json.length(), "incorrect number of elements");
     JSONObject apps = json.getJSONObject("apps");
     assertEquals(1, apps.length(), "incorrect number of elements");
@@ -740,7 +739,7 @@ public void testAppsQueryQueueOneFinishedApp() throws Exception {
         .request(MediaType.APPLICATION_JSON).get(Response.class);
     assertEquals(MediaType.APPLICATION_JSON_TYPE + ";" + JettyUtils.UTF_8,
         response.getMediaType().toString());
-    JSONObject json = responseToJson(response);
+    JSONObject json = response.readEntity(JSONObject.class);
     assertEquals(1, json.length(), "incorrect number of elements");
     JSONObject apps = json.getJSONObject("apps");
     assertEquals(1, apps.length(), "incorrect number of elements");
@@ -770,7 +769,7 @@ public void testAppsQueryLimit() throws JSONException, Exception {
         .request(MediaType.APPLICATION_JSON).get(Response.class);
     assertEquals(MediaType.APPLICATION_JSON_TYPE + ";" + JettyUtils.UTF_8,
         response.getMediaType().toString());
-    JSONObject json = responseToJson(response);
+    JSONObject json = response.readEntity(JSONObject.class);
     assertEquals(1, json.length(), "incorrect number of elements");
     JSONObject apps = json.getJSONObject("apps");
     assertEquals(1, apps.length(), "incorrect number of elements");
@@ -794,7 +793,7 @@ public void testAppsQueryStartBegin() throws JSONException, Exception {
         .request(MediaType.APPLICATION_JSON).get(Response.class);
     assertEquals(MediaType.APPLICATION_JSON_TYPE + ";" + JettyUtils.UTF_8,
         response.getMediaType().toString());
-    JSONObject json = responseToJson(response);
+    JSONObject json = response.readEntity(JSONObject.class);
     assertEquals(1, json.length(), "incorrect number of elements");
     JSONObject apps = json.getJSONObject("apps");
     assertEquals(1, apps.length(), "incorrect number of elements");
@@ -818,7 +817,7 @@ public void testAppsQueryStartBeginSome() throws JSONException, Exception {
         .request(MediaType.APPLICATION_JSON).get(Response.class);
     assertEquals(MediaType.APPLICATION_JSON_TYPE + ";" + JettyUtils.UTF_8,
         response.getMediaType().toString());
-    JSONObject json = responseToJson(response);
+    JSONObject json = response.readEntity(JSONObject.class);
     assertEquals(1, json.length(), "incorrect number of elements");
     JSONObject apps = json.getJSONObject("apps");
     assertEquals(1, apps.length(), "incorrect number of elements");
@@ -842,7 +841,7 @@ public void testAppsQueryStartEnd() throws JSONException, Exception {
         .request(MediaType.APPLICATION_JSON).get(Response.class);
     assertEquals(MediaType.APPLICATION_JSON_TYPE + ";" + JettyUtils.UTF_8,
         response.getMediaType().toString());
-    JSONObject json = responseToJson(response);
+    JSONObject json = response.readEntity(JSONObject.class);
     assertEquals(1, json.length(), "incorrect number of elements");
     assertEquals("{}", json.get("apps").toString(), "apps is not empty");
     rm.stop();
@@ -866,7 +865,7 @@ public void testAppsQueryStartBeginEnd() throws JSONException, Exception {
         .request(MediaType.APPLICATION_JSON).get(Response.class);
     assertEquals(MediaType.APPLICATION_JSON_TYPE + ";" + JettyUtils.UTF_8,
         response.getMediaType().toString());
-    JSONObject json = responseToJson(response);
+    JSONObject json = response.readEntity(JSONObject.class);
     assertEquals(1, json.length(), "incorrect number of elements");
     JSONObject apps = json.getJSONObject("apps");
     assertEquals(1, apps.length(), "incorrect number of elements");
@@ -893,7 +892,7 @@ public void testAppsQueryFinishBegin() throws JSONException, Exception {
         .request(MediaType.APPLICATION_JSON).get(Response.class);
     assertEquals(MediaType.APPLICATION_JSON_TYPE + ";" + JettyUtils.UTF_8,
         response.getMediaType().toString());
-    JSONObject json = responseToJson(response);
+    JSONObject json = response.readEntity(JSONObject.class);
     assertEquals(1, json.length(), "incorrect number of elements");
     JSONObject apps = json.getJSONObject("apps");
     assertEquals(1, apps.length(), "incorrect number of elements");
@@ -931,7 +930,7 @@ public void testAppsQueryFinishEnd() throws JSONException, Exception {
         .request(MediaType.APPLICATION_JSON).get(Response.class);
     assertEquals(MediaType.APPLICATION_JSON_TYPE + ";" + JettyUtils.UTF_8,
         response.getMediaType().toString());
-    JSONObject json = responseToJson(response);
+    JSONObject json = response.readEntity(JSONObject.class);
     assertEquals(1, json.length(), "incorrect number of elements");
     JSONObject apps = json.getJSONObject("apps");
     assertEquals(1, apps.length(), "incorrect number of elements");
@@ -962,7 +961,7 @@ public void testAppsQueryFinishBeginEnd() throws JSONException, Exception {
         .request(MediaType.APPLICATION_JSON).get(Response.class);
     assertEquals(MediaType.APPLICATION_JSON_TYPE + ";" + JettyUtils.UTF_8,
         response.getMediaType().toString());
-    JSONObject json = responseToJson(response);
+    JSONObject json = response.readEntity(JSONObject.class);
     assertEquals(1, json.length(), "incorrect number of elements");
     JSONObject apps = json.getJSONObject("apps");
     assertEquals(1, apps.length(), "incorrect number of elements");
@@ -1012,7 +1011,7 @@ public void testAppsQueryAppTypes() throws JSONException, Exception {
         .request(MediaType.APPLICATION_JSON).get(Response.class);
     assertEquals(MediaType.APPLICATION_JSON_TYPE + ";" + JettyUtils.UTF_8,
         response.getMediaType().toString());
-    JSONObject json = responseToJson(response);
+    JSONObject json = response.readEntity(JSONObject.class);
     assertEquals(1, json.length(), "incorrect number of elements");
     JSONObject apps = json.getJSONObject("apps");
     assertEquals(1, apps.length(), "incorrect number of elements");
@@ -1028,7 +1027,7 @@ public void testAppsQueryAppTypes() throws JSONException, Exception {
         .request(MediaType.APPLICATION_JSON).get(Response.class);
     assertEquals(MediaType.APPLICATION_JSON_TYPE + ";" + JettyUtils.UTF_8,
         response.getMediaType().toString());
-    json = responseToJson(response);
+    json = response.readEntity(JSONObject.class);
     assertEquals(1, json.length(), "incorrect number of elements");
     apps = json.getJSONObject("apps");
     assertEquals(1, apps.length(), "incorrect number of elements");
@@ -1048,7 +1047,7 @@ public void testAppsQueryAppTypes() throws JSONException, Exception {
             .request(MediaType.APPLICATION_JSON).get(Response.class);
     assertEquals(MediaType.APPLICATION_JSON_TYPE + ";" + JettyUtils.UTF_8,
         response.getMediaType().toString());
-    json = responseToJson(response);
+    json = response.readEntity(JSONObject.class);
     assertEquals(1, json.length(), "incorrect number of elements");
     apps = json.getJSONObject("apps");
     assertEquals(1, apps.length(), "incorrect number of elements");
@@ -1067,7 +1066,7 @@ public void testAppsQueryAppTypes() throws JSONException, Exception {
         .request(MediaType.APPLICATION_JSON).get(Response.class);
     assertEquals(MediaType.APPLICATION_JSON_TYPE + ";" + JettyUtils.UTF_8,
         response.getMediaType().toString());
-    json = responseToJson(response);
+    json = response.readEntity(JSONObject.class);
     assertEquals(1, json.length(), "incorrect number of elements");
     apps = json.getJSONObject("apps");
     assertEquals(1, apps.length(), "incorrect number of elements");
@@ -1082,7 +1081,7 @@ public void testAppsQueryAppTypes() throws JSONException, Exception {
             .request(MediaType.APPLICATION_JSON).get(Response.class);
     assertEquals(MediaType.APPLICATION_JSON_TYPE + ";" + JettyUtils.UTF_8,
         response.getMediaType().toString());
-    json = responseToJson(response);
+    json = response.readEntity(JSONObject.class);
     assertEquals(1, json.length(), "incorrect number of elements");
     apps = json.getJSONObject("apps");
     assertEquals(1, apps.length(), "incorrect number of elements");
@@ -1097,7 +1096,7 @@ public void testAppsQueryAppTypes() throws JSONException, Exception {
             .request(MediaType.APPLICATION_JSON).get(Response.class);
     assertEquals(MediaType.APPLICATION_JSON_TYPE + ";" + JettyUtils.UTF_8,
         response.getMediaType().toString());
-    json = responseToJson(response);
+    json = response.readEntity(JSONObject.class);
     assertEquals(1, json.length(), "incorrect number of elements");
     apps = json.getJSONObject("apps");
     assertEquals(1, apps.length(), "incorrect number of elements");
@@ -1113,7 +1112,7 @@ public void testAppsQueryAppTypes() throws JSONException, Exception {
             .request(MediaType.APPLICATION_JSON).get(Response.class);
     assertEquals(MediaType.APPLICATION_JSON_TYPE + ";" + JettyUtils.UTF_8,
         response.getMediaType().toString());
-    json = responseToJson(response);
+    json = response.readEntity(JSONObject.class);
     assertEquals(1, json.length(), "incorrect number of elements");
     apps = json.getJSONObject("apps");
     assertEquals(1, apps.length(), "incorrect number of elements");
@@ -1128,7 +1127,7 @@ public void testAppsQueryAppTypes() throws JSONException, Exception {
         .request(MediaType.APPLICATION_JSON).get(Response.class);
     assertEquals(MediaType.APPLICATION_JSON_TYPE + ";" + JettyUtils.UTF_8,
         response.getMediaType().toString());
-    json = responseToJson(response);
+    json = response.readEntity(JSONObject.class);
     assertEquals(1, json.length(), "incorrect number of elements");
     apps = json.getJSONObject("apps");
     assertEquals(1, apps.length(), "incorrect number of elements");
@@ -1141,7 +1140,7 @@ public void testAppsQueryAppTypes() throws JSONException, Exception {
         .request(MediaType.APPLICATION_JSON).get(Response.class);
     assertEquals(MediaType.APPLICATION_JSON_TYPE + ";" + JettyUtils.UTF_8,
         response.getMediaType().toString());
-    json = responseToJson(response);
+    json = response.readEntity(JSONObject.class);
     assertEquals(1, json.length(), "incorrect number of elements");
     apps = json.getJSONObject("apps");
     assertEquals(1, apps.length(), "incorrect number of elements");
@@ -1162,7 +1161,7 @@ public void testAppsQueryAppTypes() throws JSONException, Exception {
             .request(MediaType.APPLICATION_JSON).get(Response.class);
     assertEquals(MediaType.APPLICATION_JSON_TYPE + ";" + JettyUtils.UTF_8,
         response.getMediaType().toString());
-    json = responseToJson(response);
+    json = response.readEntity(JSONObject.class);
     assertEquals(1, json.length(), "incorrect number of elements");
     apps = json.getJSONObject("apps");
     assertEquals(1, apps.length(), "incorrect number of elements");
@@ -1193,7 +1192,7 @@ public void testAppsQueryWithInvalidDeselects()
       assertResponseStatusCode(Response.Status.BAD_REQUEST, response.getStatusInfo());
       assertEquals(MediaType.APPLICATION_JSON_TYPE + ";" + JettyUtils.UTF_8,
           response.getMediaType().toString());
-      JSONObject msg = responseToJson(response);
+      JSONObject msg = response.readEntity(JSONObject.class);
       JSONObject exception = msg.getJSONObject("RemoteException");
       assertEquals(3, exception.length(), "incorrect number of elements");
       String message = exception.getString("message");
@@ -1228,7 +1227,7 @@ public void testAppsQueryWithDeselects()
     assertEquals(MediaType.APPLICATION_JSON_TYPE + ";" + JettyUtils.UTF_8,
         response.getMediaType().toString());
 
-    JSONObject json = responseToJson(response);
+    JSONObject json = response.readEntity(JSONObject.class);
     assertEquals(1, json.length(), "incorrect number of elements");
     JSONObject apps = json.getJSONObject("apps");
     assertEquals(1, apps.length(), "incorrect number of elements");
@@ -1243,7 +1242,7 @@ public void testAppsQueryWithDeselects()
     assertEquals(MediaType.APPLICATION_JSON_TYPE + ";" + JettyUtils.UTF_8,
         response.getMediaType().toString());
 
-    json = responseToJson(response);
+    json = response.readEntity(JSONObject.class);
     assertEquals(1, json.length(), "incorrect number of elements");
     apps = json.getJSONObject("apps");
     assertEquals(1, apps.length(), "incorrect number of elements");
@@ -1259,7 +1258,7 @@ public void testAppsQueryWithDeselects()
     assertEquals(MediaType.APPLICATION_JSON_TYPE + ";" + JettyUtils.UTF_8,
         response.getMediaType().toString());
 
-    json = responseToJson(response);
+    json = response.readEntity(JSONObject.class);
     assertEquals(1, json.length(), "incorrect number of elements");
     apps = json.getJSONObject("apps");
     assertEquals(1, apps.length(), "incorrect number of elements");
@@ -1276,7 +1275,7 @@ public void testAppsQueryWithDeselects()
     assertEquals(MediaType.APPLICATION_JSON_TYPE + ";" + JettyUtils.UTF_8,
         response.getMediaType().toString());
 
-    json = responseToJson(response);
+    json = response.readEntity(JSONObject.class);
     assertEquals(1, json.length(), "incorrect number of elements");
     apps = json.getJSONObject("apps");
     assertEquals(1, apps.length(), "incorrect number of elements");
@@ -1293,7 +1292,7 @@ public void testAppsQueryWithDeselects()
     assertEquals(MediaType.APPLICATION_JSON_TYPE + ";" + JettyUtils.UTF_8,
         response.getMediaType().toString());
 
-    json = responseToJson(response);
+    json = response.readEntity(JSONObject.class);
     assertEquals(1, json.length(), "incorrect number of elements");
     apps = json.getJSONObject("apps");
     assertEquals(1, apps.length(), "incorrect number of elements");
@@ -1357,7 +1356,7 @@ public void testAppStatistics() throws JSONException, Exception {
           .request(MediaType.APPLICATION_JSON).get(Response.class);
       assertEquals(MediaType.APPLICATION_JSON_TYPE + ";" + JettyUtils.UTF_8,
           response.getMediaType().toString());
-      JSONObject json = responseToJson(response);
+      JSONObject json = response.readEntity(JSONObject.class);
       assertEquals(1, json.length(), "incorrect number of elements");
       JSONObject appsStatInfo = json.getJSONObject("appStatInfo");
       assertEquals(1, appsStatInfo.length(), "incorrect number of elements");
@@ -1384,7 +1383,7 @@ public void testAppStatistics() throws JSONException, Exception {
           .request(MediaType.APPLICATION_JSON).get(Response.class);
       assertEquals(MediaType.APPLICATION_JSON_TYPE + ";" + JettyUtils.UTF_8,
           response.getMediaType().toString());
-      json = responseToJson(response);
+      json = response.readEntity(JSONObject.class);
       assertEquals(1, json.length(), "incorrect number of elements");
       appsStatInfo = json.getJSONObject("appStatInfo");
       assertEquals(1, appsStatInfo.length(), "incorrect number of elements");
@@ -1402,7 +1401,7 @@ public void testAppStatistics() throws JSONException, Exception {
           .request(MediaType.APPLICATION_JSON).get(Response.class);
       assertEquals(MediaType.APPLICATION_JSON_TYPE + ";" + JettyUtils.UTF_8,
           response.getMediaType().toString());
-      json = responseToJson(response);
+      json = response.readEntity(JSONObject.class);
       assertEquals(1, json.length(), "incorrect number of elements");
       appsStatInfo = json.getJSONObject("appStatInfo");
       assertEquals(1, appsStatInfo.length(), "incorrect number of elements");
@@ -1430,7 +1429,7 @@ public void testAppStatistics() throws JSONException, Exception {
       assertResponseStatusCode(Response.Status.BAD_REQUEST, response.getStatusInfo());
       assertEquals(MediaType.APPLICATION_JSON_TYPE + ";" + JettyUtils.UTF_8,
           response.getMediaType().toString());
-      json = responseToJson(response);
+      json = response.readEntity(JSONObject.class);
       assertEquals(1, json.length(), "incorrect number of elements");
       JSONObject exception = json.getJSONObject("RemoteException");
       assertEquals(3, exception.length(), "incorrect number of elements");
@@ -1454,7 +1453,7 @@ public void testAppStatistics() throws JSONException, Exception {
           .request(MediaType.APPLICATION_JSON).get(Response.class);
       assertEquals(MediaType.APPLICATION_JSON_TYPE + ";" + JettyUtils.UTF_8,
           response.getMediaType().toString());
-      json = responseToJson(response);
+      json = response.readEntity(JSONObject.class);
       assertEquals(1, json.length(), "incorrect number of elements");
       appsStatInfo = json.getJSONObject("appStatInfo");
       assertEquals(1, appsStatInfo.length(), "incorrect number of elements");
@@ -1479,7 +1478,7 @@ public void testAppStatistics() throws JSONException, Exception {
       assertResponseStatusCode(Response.Status.BAD_REQUEST, response.getStatusInfo());
       assertEquals(MediaType.APPLICATION_JSON_TYPE + ";" + JettyUtils.UTF_8,
           response.getMediaType().toString());
-      json = responseToJson(response);
+      json = response.readEntity(JSONObject.class);
       assertEquals(1, json.length(), "incorrect number of elements");
       exception = json.getJSONObject("RemoteException");
       assertEquals(3, exception.length(), "incorrect number of elements");
@@ -1581,7 +1580,7 @@ public void testInvalidApp() throws JSONException, Exception {
       assertResponseStatusCode(Response.Status.BAD_REQUEST, response.getStatusInfo());
       assertEquals(MediaType.APPLICATION_JSON_TYPE + ";" + JettyUtils.UTF_8,
           response.getMediaType().toString());
-      JSONObject msg = responseToJson(response);
+      JSONObject msg = response.readEntity(JSONObject.class);
       JSONObject exception = msg.getJSONObject("RemoteException");
       assertEquals(3, exception.length(), "incorrect number of elements");
       String message = exception.getString("message");
@@ -1623,7 +1622,7 @@ public void testNonexistApp() throws JSONException, Exception {
       assertEquals(MediaType.APPLICATION_JSON_TYPE + ";" + JettyUtils.UTF_8,
           response.getMediaType().toString());
 
-      JSONObject msg = responseToJson(response);
+      JSONObject msg = response.readEntity(JSONObject.class);
       JSONObject exception = msg.getJSONObject("RemoteException");
       assertEquals(3, exception.length(), "incorrect number of elements");
       String message = exception.getString("message");
@@ -1647,7 +1646,7 @@ public void testSingleAppsHelper(String path, RMApp app, String media)
         .path("apps").path(path).request(media).get(Response.class);
     assertEquals(MediaType.APPLICATION_JSON_TYPE + ";" + JettyUtils.UTF_8,
         response.getMediaType().toString());
-    JSONObject json = responseToJson(response);
+    JSONObject json = response.readEntity(JSONObject.class);
 
     assertEquals(1, json.length(), "incorrect number of elements");
     verifyAppInfo(json.getJSONObject("app"), app, false);
@@ -1965,7 +1964,7 @@ public void testAppsQueryByQueueShortname() throws Exception {
         .request(MediaType.APPLICATION_JSON).get(Response.class);
     assertEquals(MediaType.APPLICATION_JSON_TYPE + ";" + JettyUtils.UTF_8,
         response.getMediaType().toString());
-    JSONObject json = responseToJson(response);
+    JSONObject json = response.readEntity(JSONObject.class);
     assertEquals(1, json.length(), "incorrect number of elements");
     JSONObject apps = json.getJSONObject("apps");
     assertEquals(1, apps.length(), "incorrect number of elements");
@@ -2030,7 +2029,7 @@ public void testAppsQueryByQueueFullname() throws Exception {
         .request(MediaType.APPLICATION_JSON).get(Response.class);
     assertEquals(MediaType.APPLICATION_JSON_TYPE + ";" + JettyUtils.UTF_8,
         response.getMediaType().toString());
-    JSONObject json = responseToJson(response);
+    JSONObject json = response.readEntity(JSONObject.class);
     assertEquals(1, json.length(), "incorrect number of elements");
     JSONObject apps = json.getJSONObject("apps");
     assertEquals(1, apps.length(), "incorrect number of elements");
diff --git a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/webapp/TestRMWebServicesAppsModification.java b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/webapp/TestRMWebServicesAppsModification.java
index fc14fb4f10795..5a23a76bbfa89 100644
--- a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/webapp/TestRMWebServicesAppsModification.java
+++ b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/webapp/TestRMWebServicesAppsModification.java
@@ -18,7 +18,6 @@
 
 package org.apache.hadoop.yarn.server.resourcemanager.webapp;
 
-import static org.apache.hadoop.yarn.server.resourcemanager.webapp.TestWebServiceUtil.responseToJson;
 import static org.apache.hadoop.yarn.server.resourcemanager.webapp.TestWebServiceUtil.toJson;
 import static org.apache.hadoop.yarn.webapp.WebServicesTestUtils.assertResponseStatusCode;
 import static org.junit.jupiter.api.Assertions.assertEquals;
@@ -520,7 +519,7 @@ protected static void verifyAppStateJson(Response response,
 
     assertEquals(MediaType.APPLICATION_JSON_TYPE + ";" + JettyUtils.UTF_8,
         response.getMediaType().toString());
-    JSONObject json = responseToJson(response);
+    JSONObject json = response.readEntity(JSONObject.class);
     assertEquals(1, json.length(), "incorrect number of elements");
     String responseState = json.getString("state");
     boolean valid = false;
@@ -718,7 +717,7 @@ protected String validateGetNewApplicationResponse(Response resp)
       SAXException {
     String ret = "";
     if (resp.getMediaType().toString().contains(MediaType.APPLICATION_JSON)) {
-      JSONObject json = responseToJson(resp);
+      JSONObject json = resp.readEntity(JSONObject.class);
       ret = validateGetNewApplicationJsonResponse(json);
     } else if (resp.getMediaType().toString().contains(MediaType.APPLICATION_XML)) {
       String xml = resp.readEntity(String.class);
@@ -1283,7 +1282,7 @@ protected static void verifyAppPriorityJson(Response response,
       int expectedPriority) throws JSONException {
     assertEquals(MediaType.APPLICATION_JSON_TYPE + ";" + JettyUtils.UTF_8,
         response.getMediaType().toString());
-    JSONObject json = responseToJson(response);
+    JSONObject json = response.readEntity(JSONObject.class);
     assertEquals(1, json.length(), "incorrect number of elements");
     int responsePriority = json.getInt("priority");
     assertEquals(expectedPriority, responsePriority);
@@ -1311,7 +1310,7 @@ protected static void verifyAppQueueJson(Response response, String queue)
       throws JSONException {
     assertEquals(MediaType.APPLICATION_JSON_TYPE + ";" + JettyUtils.UTF_8,
         response.getMediaType().toString());
-    JSONObject json = responseToJson(response);
+    JSONObject json = response.readEntity(JSONObject.class);
     assertEquals(1, json.length(), "incorrect number of elements");
     String responseQueue = json.getString("queue");
     assertEquals(queue, responseQueue);
@@ -1363,7 +1362,7 @@ public void testUpdateAppTimeout(int run) throws Exception {
               MediaType.APPLICATION_JSON_TYPE + ";" + JettyUtils.UTF_8,
               response.getMediaType().toString());
           JSONObject js =
-              responseToJson(response).getJSONObject("timeouts");
+              response.readEntity(JSONObject.class).getJSONObject("timeouts");
           JSONArray entity = js.getJSONArray("timeout");
           verifyAppTimeoutJson(entity.getJSONObject(0),
               ApplicationTimeoutType.LIFETIME, "UNLIMITED", -1);
@@ -1440,7 +1439,7 @@ protected static void verifyAppTimeoutJson(Response response,
       throws JSONException {
     assertEquals(MediaType.APPLICATION_JSON_TYPE + ";" + JettyUtils.UTF_8,
         response.getMediaType().toString());
-    JSONObject jsonTimeout = responseToJson(response);
+    JSONObject jsonTimeout = response.readEntity(JSONObject.class);
     assertEquals(1, jsonTimeout.length(), "incorrect number of elements");
     JSONObject json = jsonTimeout.getJSONObject("timeout");
     verifyAppTimeoutJson(json, type, expireTime, timeOutFromNow);
diff --git a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/webapp/TestRMWebServicesCapacitySched.java b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/webapp/TestRMWebServicesCapacitySched.java
index ce3408c6d1dc7..df23270da5f3a 100644
--- a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/webapp/TestRMWebServicesCapacitySched.java
+++ b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/webapp/TestRMWebServicesCapacitySched.java
@@ -55,7 +55,6 @@
 import static org.apache.hadoop.yarn.server.resourcemanager.webapp.TestWebServiceUtil.assertXmlResponse;
 import static org.apache.hadoop.yarn.server.resourcemanager.webapp.TestWebServiceUtil.backupSchedulerConfigFileInTarget;
 import static org.apache.hadoop.yarn.server.resourcemanager.webapp.TestWebServiceUtil.createRM;
-import static org.apache.hadoop.yarn.server.resourcemanager.webapp.TestWebServiceUtil.responseToJson;
 import static org.apache.hadoop.yarn.server.resourcemanager.webapp.TestWebServiceUtil.restoreSchedulerConfigFileInTarget;
 import static org.junit.jupiter.api.Assertions.assertEquals;
 import static org.mockito.Mockito.mock;
@@ -180,7 +179,7 @@ public void testClusterSchedulerOverviewCapacity(boolean pLegacyQueueMode) throw
     Response response = targetWithJsonObject().path("ws/v1/cluster/scheduler-overview")
         .request(MediaType.APPLICATION_JSON).get(Response.class);
     assertJsonType(response);
-    JSONObject json = responseToJson(response);
+    JSONObject json = response.readEntity(JSONObject.class);
     JSONObject scheduler = json.getJSONObject("scheduler");
     TestRMWebServices.verifyClusterSchedulerOverView(scheduler, "Capacity Scheduler");
   }
diff --git a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/webapp/TestRMWebServicesConfigurationMutation.java b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/webapp/TestRMWebServicesConfigurationMutation.java
index e788f48689110..8ffd187d7a494 100644
--- a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/webapp/TestRMWebServicesConfigurationMutation.java
+++ b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/webapp/TestRMWebServicesConfigurationMutation.java
@@ -72,7 +72,6 @@
 import static org.apache.hadoop.yarn.server.resourcemanager.scheduler.capacity.CapacitySchedulerConfiguration.MAXIMUM_CAPACITY;
 import static org.apache.hadoop.yarn.server.resourcemanager.webapp.TestWebServiceUtil.getCapacitySchedulerConfigFileInTarget;
 import static org.apache.hadoop.yarn.server.resourcemanager.webapp.TestWebServiceUtil.backupSchedulerConfigFileInTarget;
-import static org.apache.hadoop.yarn.server.resourcemanager.webapp.TestWebServiceUtil.responseToJson;
 import static org.apache.hadoop.yarn.server.resourcemanager.webapp.TestWebServiceUtil.restoreSchedulerConfigFileInTarget;
 import static org.apache.hadoop.yarn.server.resourcemanager.webapp.TestWebServiceUtil.toJson;
 import static org.junit.jupiter.api.Assertions.assertEquals;
@@ -206,7 +205,7 @@ private CapacitySchedulerConfiguration getSchedulerConf()
             .request(MediaType.APPLICATION_JSON)
             .get(Response.class);
     assertEquals(Status.OK.getStatusCode(), response.getStatus());
-    JSONObject json = responseToJson(response);
+    JSONObject json = response.readEntity(JSONObject.class);
     JSONArray items = (JSONArray) json.get("property");
     CapacitySchedulerConfiguration parsedConf =
         new CapacitySchedulerConfiguration();
@@ -273,7 +272,7 @@ private long getConfigVersion() throws Exception {
         .request(MediaType.APPLICATION_JSON).get(Response.class);
     assertEquals(Status.OK.getStatusCode(), response.getStatus());
 
-    JSONObject json = responseToJson(response).
+    JSONObject json = response.readEntity(JSONObject.class).
         getJSONObject("configversion");
     return Long.parseLong(json.get("versionID").toString());
   }
diff --git a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/webapp/TestRMWebServicesDelegationTokens.java b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/webapp/TestRMWebServicesDelegationTokens.java
index dd02e7eab61e7..bb60d45abd068 100644
--- a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/webapp/TestRMWebServicesDelegationTokens.java
+++ b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/webapp/TestRMWebServicesDelegationTokens.java
@@ -19,7 +19,6 @@
 package org.apache.hadoop.yarn.server.resourcemanager.webapp;
 
 import static org.apache.hadoop.yarn.server.resourcemanager.webapp.TestWebServiceUtil.createRM;
-import static org.apache.hadoop.yarn.server.resourcemanager.webapp.TestWebServiceUtil.responseToJson;
 import static org.apache.hadoop.yarn.webapp.WebServicesTestUtils.assertResponseStatusCode;
 
 import java.io.File;
@@ -749,7 +748,7 @@ private void verifySimpleAuthCancel() {
           throws IOException, ParserConfigurationException, SAXException,
           JSONException {
     if (response.getMediaType().toString().contains(MediaType.APPLICATION_JSON)) {
-      return getDelegationTokenFromJson(responseToJson(response));
+      return getDelegationTokenFromJson(response.readEntity(JSONObject.class));
     }
     return getDelegationTokenFromXML(response.readEntity(String.class));
   }
diff --git a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/webapp/TestRMWebServicesForCSWithPartitions.java b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/webapp/TestRMWebServicesForCSWithPartitions.java
index 0fa91a1dec4fa..8b4b2fa3f7481 100644
--- a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/webapp/TestRMWebServicesForCSWithPartitions.java
+++ b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/webapp/TestRMWebServicesForCSWithPartitions.java
@@ -26,7 +26,6 @@
 import static org.apache.hadoop.yarn.server.resourcemanager.webapp.ActivitiesTestUtils.getFirstSubNodeFromJson;
 import static org.apache.hadoop.yarn.server.resourcemanager.webapp.ActivitiesTestUtils.verifyNumberOfAllocations;
 import static org.apache.hadoop.yarn.server.resourcemanager.webapp.TestWebServiceUtil.createRM;
-import static org.apache.hadoop.yarn.server.resourcemanager.webapp.TestWebServiceUtil.responseToJson;
 import static org.junit.jupiter.api.Assertions.assertEquals;
 import static org.junit.jupiter.api.Assertions.assertTrue;
 import static org.junit.jupiter.api.Assertions.fail;
@@ -285,7 +284,7 @@ public void testSchedulerPartitions(boolean pLegacyQueueMode) throws JSONExcepti
         .request(MediaType.APPLICATION_JSON).get(Response.class);
     assertEquals(MediaType.APPLICATION_JSON_TYPE + ";" + JettyUtils.UTF_8,
         response.getMediaType().toString());
-    JSONObject json = responseToJson(response);
+    JSONObject json = response.readEntity(JSONObject.class);
     verifySchedulerInfoJson(json);
   }
 
@@ -300,7 +299,7 @@ public void testSchedulerPartitionsSlash(boolean pLegacyQueueMode)
         .request(MediaType.APPLICATION_JSON).get(Response.class);
     assertEquals(MediaType.APPLICATION_JSON_TYPE + ";" + JettyUtils.UTF_8,
         response.getMediaType().toString());
-    JSONObject json = responseToJson(response);
+    JSONObject json = response.readEntity(JSONObject.class);
     verifySchedulerInfoJson(json);
 
   }
@@ -315,7 +314,7 @@ public void testSchedulerPartitionsDefault(boolean pLegacyQueueMode)
         .path("scheduler").request().get(Response.class);
     assertEquals(MediaType.APPLICATION_JSON_TYPE + ";" + JettyUtils.UTF_8,
         response.getMediaType().toString());
-    JSONObject json = responseToJson(response);
+    JSONObject json = response.readEntity(JSONObject.class);
     verifySchedulerInfoJson(json);
   }
 
diff --git a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/webapp/TestRMWebServicesNodeLabels.java b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/webapp/TestRMWebServicesNodeLabels.java
index 304014068dadf..521ca9aceb416 100644
--- a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/webapp/TestRMWebServicesNodeLabels.java
+++ b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/webapp/TestRMWebServicesNodeLabels.java
@@ -18,7 +18,6 @@
 
 package org.apache.hadoop.yarn.server.resourcemanager.webapp;
 
-import static org.apache.hadoop.yarn.server.resourcemanager.webapp.TestWebServiceUtil.responseToJson;
 import static org.apache.hadoop.yarn.server.resourcemanager.webapp.TestWebServiceUtil.toJson;
 import static org.junit.jupiter.api.Assertions.assertEquals;
 import static org.junit.jupiter.api.Assertions.assertFalse;
@@ -619,7 +618,7 @@ private void validateJsonExceptionContent(Response response,
       String expectedMessage)
       throws JSONException {
     assertEquals(BAD_REQUEST_CODE, response.getStatus());
-    JSONObject msg = responseToJson(response);
+    JSONObject msg = response.readEntity(JSONObject.class);
     JSONObject exception = msg.getJSONObject("RemoteException");
     String message = exception.getString("message");
     assertEquals(3, exception.length(), "incorrect number of elements");
diff --git a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/webapp/TestRMWebServicesNodes.java b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/webapp/TestRMWebServicesNodes.java
index 2d8d1d2e9d0b0..40566527690c1 100644
--- a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/webapp/TestRMWebServicesNodes.java
+++ b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/webapp/TestRMWebServicesNodes.java
@@ -19,7 +19,6 @@
 package org.apache.hadoop.yarn.server.resourcemanager.webapp;
 
 import static org.apache.hadoop.yarn.server.resourcemanager.MockNM.createMockNodeStatus;
-import static org.apache.hadoop.yarn.server.resourcemanager.webapp.TestWebServiceUtil.responseToJson;
 import static org.assertj.core.api.Assertions.assertThat;
 import static org.apache.hadoop.yarn.webapp.WebServicesTestUtils.assertResponseStatusCode;
 import static org.junit.jupiter.api.Assertions.assertEquals;
@@ -238,7 +237,7 @@ public void testNodesDefaultWithUnHealthyNode() throws JSONException,
 
     assertEquals(MediaType.APPLICATION_JSON_TYPE + ";" + JettyUtils.UTF_8,
         response.getMediaType().toString());
-    JSONObject json = responseToJson(response);
+    JSONObject json = response.readEntity(JSONObject.class);
     assertEquals(1, json.length(), "incorrect number of elements");
     JSONObject nodes = json.getJSONObject("nodes");
     assertEquals(1, nodes.length(), "incorrect number of elements");
@@ -288,7 +287,7 @@ public void testNodesQueryNew() throws Exception {
 
     assertEquals(MediaType.APPLICATION_JSON_TYPE + ";" + JettyUtils.UTF_8,
         response.getMediaType().toString());
-    JSONObject json = responseToJson(response);
+    JSONObject json = response.readEntity(JSONObject.class);
     assertEquals(1, json.length(), "incorrect number of elements");
     JSONObject nodes = json.getJSONObject("nodes");
     assertEquals(1, nodes.length(), "incorrect number of elements");
@@ -311,7 +310,7 @@ public void testNodesQueryStateNone() throws JSONException, Exception {
         .request(MediaType.APPLICATION_JSON).get(Response.class);
     assertEquals(MediaType.APPLICATION_JSON_TYPE + ";" + JettyUtils.UTF_8,
         response.getMediaType().toString());
-    JSONObject json = responseToJson(response);
+    JSONObject json = response.readEntity(JSONObject.class);
     assertEquals(1, json.length(), "incorrect number of elements");
     assertEquals("{}", json.get("nodes").toString(), "nodes is not empty");
   }
@@ -362,7 +361,7 @@ public void testNodesQueryStateLost() throws JSONException, Exception {
 
     assertEquals(MediaType.APPLICATION_JSON_TYPE + ";" + JettyUtils.UTF_8,
         response.getMediaType().toString());
-    JSONObject json = responseToJson(response);
+    JSONObject json = response.readEntity(JSONObject.class);
     JSONObject nodes = json.getJSONObject("nodes");
     assertEquals(1, nodes.length(), "incorrect number of elements");
     JSONArray nodeArray = nodes.getJSONArray("node");
@@ -394,7 +393,7 @@ public void testSingleNodeQueryStateLost() throws JSONException, Exception {
 
     assertEquals(MediaType.APPLICATION_JSON_TYPE + ";" + JettyUtils.UTF_8,
         response.getMediaType().toString());
-    JSONObject json = responseToJson(response);
+    JSONObject json = response.readEntity(JSONObject.class);
     JSONObject info = json.getJSONObject("node");
     String id = info.get("id").toString();
 
@@ -421,7 +420,7 @@ public void testNodesQueryRunning() throws JSONException, Exception {
         .request(MediaType.APPLICATION_JSON).get(Response.class);
     assertEquals(MediaType.APPLICATION_JSON_TYPE + ";" + JettyUtils.UTF_8,
         response.getMediaType().toString());
-    JSONObject json = responseToJson(response);
+    JSONObject json = response.readEntity(JSONObject.class);
     assertEquals(1, json.length(), "incorrect number of elements");
     JSONObject nodes = json.getJSONObject("nodes");
     assertEquals(1, nodes.length(), "incorrect number of elements");
@@ -440,7 +439,7 @@ public void testNodesQueryHealthyFalse() throws JSONException, Exception {
         .request(MediaType.APPLICATION_JSON).get(Response.class);
     assertEquals(MediaType.APPLICATION_JSON_TYPE + ";" + JettyUtils.UTF_8,
         response.getMediaType().toString());
-    JSONObject json = responseToJson(response);
+    JSONObject json = response.readEntity(JSONObject.class);
     assertEquals(1, json.length(), "incorrect number of elements");
     assertEquals("{}", json.get("nodes").toString(), "nodes is not empty");
   }
@@ -455,7 +454,7 @@ public void testNodesHelper(String path, String media) throws JSONException,
         .path(path).request(media).get(Response.class);
     assertEquals(MediaType.APPLICATION_JSON_TYPE + ";" + JettyUtils.UTF_8,
         response.getMediaType().toString());
-    JSONObject json = responseToJson(response);
+    JSONObject json = response.readEntity(JSONObject.class);
     assertEquals(1, json.length(), "incorrect number of elements");
     JSONObject nodes = json.getJSONObject("nodes");
     assertEquals(1, nodes.length(), "incorrect number of elements");
@@ -502,7 +501,7 @@ public void testSingleNodeHelper(String nodeid, RMNode nm, String media)
 
     assertEquals(MediaType.APPLICATION_JSON_TYPE + ";" + JettyUtils.UTF_8,
         response.getMediaType().toString());
-    JSONObject json = responseToJson(response);
+    JSONObject json = response.readEntity(JSONObject.class);
     assertEquals(1, json.length(), "incorrect number of elements");
     JSONObject info = json.getJSONObject("node");
     verifyNodeInfo(info, nm);
@@ -522,7 +521,7 @@ public void testNonexistNode() throws Exception {
     assertResponseStatusCode(Response.Status.NOT_FOUND, response.getStatusInfo());
     assertEquals(MediaType.APPLICATION_JSON_TYPE + ";" + JettyUtils.UTF_8,
         response.getMediaType().toString());
-    JSONObject msg = responseToJson(response);
+    JSONObject msg = response.readEntity(JSONObject.class);
     JSONObject exception = msg.getJSONObject("RemoteException");
     assertEquals(3, exception.length(), "incorrect number of elements");
     String message = exception.getString("message");
@@ -544,7 +543,7 @@ public void testNonexistNodeDefault() throws Exception {
     assertResponseStatusCode(Response.Status.NOT_FOUND, response.getStatusInfo());
     assertEquals(MediaType.APPLICATION_JSON_TYPE + ";" + JettyUtils.UTF_8,
         response.getMediaType().toString());
-    JSONObject msg = responseToJson(response);
+    JSONObject msg = response.readEntity(JSONObject.class);
     JSONObject exception = msg.getJSONObject("RemoteException");
     assertEquals(3, exception.length(), "incorrect number of elements");
     String message = exception.getString("message");
@@ -597,7 +596,7 @@ public void testInvalidNode() throws Exception {
     assertResponseStatusCode(Response.Status.BAD_REQUEST, response.getStatusInfo());
     assertEquals(MediaType.APPLICATION_JSON_TYPE + ";" + JettyUtils.UTF_8,
         response.getMediaType().toString());
-    JSONObject msg = responseToJson(response);
+    JSONObject msg = response.readEntity(JSONObject.class);
     JSONObject exception = msg.getJSONObject("RemoteException");
     assertEquals(3, exception.length(), "incorrect number of elements");
     String message = exception.getString("message");
@@ -697,7 +696,7 @@ public void testQueryAll() throws Exception {
 
     assertEquals(MediaType.APPLICATION_JSON_TYPE + ";" + JettyUtils.UTF_8,
         response.getMediaType().toString());
-    JSONObject json = responseToJson(response);
+    JSONObject json = response.readEntity(JSONObject.class);
     JSONObject nodes = json.getJSONObject("nodes");
     assertEquals(1, nodes.length(), "incorrect number of elements");
     JSONArray nodeArray = nodes.getJSONArray("node");
@@ -730,7 +729,7 @@ public void testNodesResourceUtilization() throws JSONException, Exception {
 
     assertEquals(MediaType.APPLICATION_JSON_TYPE + ";" + JettyUtils.UTF_8,
         response.getMediaType().toString());
-    JSONObject json = responseToJson(response);
+    JSONObject json = response.readEntity(JSONObject.class);
     assertEquals(1, json.length(), "incorrect number of elements");
     JSONObject nodes = json.getJSONObject("nodes");
     assertEquals(1, nodes.length(), "incorrect number of elements");
@@ -790,7 +789,7 @@ public void testUpdateNodeResource() throws Exception {
         .request(MediaType.APPLICATION_JSON)
         .post(Entity.json(resourceOption), Response.class);
     assertResponseStatusCode(Response.Status.BAD_REQUEST, response.getStatusInfo());
-    JSONObject json = responseToJson(response);
+    JSONObject json = response.readEntity(JSONObject.class);
     JSONObject exception = json.getJSONObject("RemoteException");
     assertEquals("IllegalArgumentException", exception.getString("exception"));
     String msg = exception.getString("message");
@@ -966,7 +965,7 @@ public void testNodesAllocationTags() throws Exception {
         .path("nodes").request("application/json").get(Response.class);
     assertEquals(MediaType.APPLICATION_JSON + ";" + JettyUtils.UTF_8,
         response.getMediaType().toString());
-    JSONObject nodesInfoJson = responseToJson(response);
+    JSONObject nodesInfojson = response.readEntity(JSONObject.class);
     verifyNodeAllocationTag(nodesInfoJson, expectedAllocationTags);
 
     rm.stop();
diff --git a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/webapp/TestRMWebServicesReservation.java b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/webapp/TestRMWebServicesReservation.java
index f783c349bb93b..40f78b44b98d9 100644
--- a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/webapp/TestRMWebServicesReservation.java
+++ b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/webapp/TestRMWebServicesReservation.java
@@ -19,7 +19,6 @@
 package org.apache.hadoop.yarn.server.resourcemanager.webapp;
 
 import static org.apache.hadoop.yarn.server.resourcemanager.webapp.TestWebServiceUtil.fromJson;
-import static org.apache.hadoop.yarn.server.resourcemanager.webapp.TestWebServiceUtil.responseToJson;
 import static org.apache.hadoop.yarn.server.resourcemanager.webapp.TestWebServiceUtil.toJson;
 import static org.assertj.core.api.Assertions.assertThat;
 import static org.apache.hadoop.yarn.webapp.WebServicesTestUtils.assertResponseStatusCode;
@@ -1037,7 +1036,7 @@ private ReservationId getReservationIdTestHelper(int fallbackReservationId)
 
     assertEquals(MediaType.APPLICATION_JSON_TYPE + ";" + JettyUtils.UTF_8,
         response.getMediaType().toString());
-    JSONObject json = responseToJson(response).getJSONObject("new-reservation");
+    JSONObject json = response.readEntity(JSONObject.class).getJSONObject("new-reservation");
 
     assertEquals(1, json.length(), "incorrect number of elements");
     ReservationId rid = null;
@@ -1204,7 +1203,7 @@ private JSONObject testListReservationHelper(WebTarget target, Response.Status
         response.getMediaType().toString());
     assertResponseStatusCode(status, response.getStatusInfo());
 
-    return responseToJson(response);
+    return response.readEntity(JSONObject.class);
   }
 
   private void verifyReservationCount(int count) throws Exception {
diff --git a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/webapp/TestRMWebServicesSchedulerActivities.java b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/webapp/TestRMWebServicesSchedulerActivities.java
index a807cdf22ddb5..78d8b0405fdec 100644
--- a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/webapp/TestRMWebServicesSchedulerActivities.java
+++ b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/webapp/TestRMWebServicesSchedulerActivities.java
@@ -99,7 +99,6 @@
 import static org.apache.hadoop.yarn.server.resourcemanager.webapp.ActivitiesTestUtils.verifyNumberOfNodes;
 import static org.apache.hadoop.yarn.server.resourcemanager.webapp.ActivitiesTestUtils.verifyQueueOrder;
 import static org.apache.hadoop.yarn.server.resourcemanager.webapp.ActivitiesTestUtils.verifyStateOfAllocations;
-import static org.apache.hadoop.yarn.server.resourcemanager.webapp.TestWebServiceUtil.responseToJson;
 import static org.junit.jupiter.api.Assertions.assertEquals;
 import static org.junit.jupiter.api.Assertions.assertFalse;
 import static org.junit.jupiter.api.Assertions.assertNotNull;
@@ -230,7 +229,7 @@ public void testAssignMultipleContainersPerNodeHeartbeat()
           MediaType.APPLICATION_JSON).get(Response.class);
       assertEquals(MediaType.APPLICATION_JSON_TYPE + ";" + JettyUtils.UTF_8,
           response.getMediaType().toString());
-      JSONObject json = responseToJson(response);
+      JSONObject json = response.readEntity(JSONObject.class);
 
       nm.nodeHeartbeat(true);
       Thread.sleep(1000);
@@ -241,7 +240,7 @@ public void testAssignMultipleContainersPerNodeHeartbeat()
           MediaType.APPLICATION_JSON).get(Response.class);
       assertEquals(MediaType.APPLICATION_JSON_TYPE + ";" + JettyUtils.UTF_8,
           response.getMediaType().toString());
-      json = responseToJson(response);
+      json = response.readEntity(JSONObject.class);
 
       // Collection logic of scheduler activities changed after YARN-9313,
       // only one allocation should be recorded for all scenarios.
@@ -294,7 +293,7 @@ public void testAssignWithoutAvailableResource() throws Exception {
           request(MediaType.APPLICATION_JSON).get(Response.class);
       assertEquals(MediaType.APPLICATION_JSON_TYPE + ";" + JettyUtils.UTF_8,
           response.getMediaType().toString());
-      JSONObject json = responseToJson(response);
+      JSONObject json = response.readEntity(JSONObject.class);
 
       nm.nodeHeartbeat(true);
       Thread.sleep(1000);
@@ -305,7 +304,7 @@ public void testAssignWithoutAvailableResource() throws Exception {
           MediaType.APPLICATION_JSON).get(Response.class);
       assertEquals(MediaType.APPLICATION_JSON_TYPE + ";" + JettyUtils.UTF_8,
           response.getMediaType().toString());
-      json = responseToJson(response);
+      json = response.readEntity(JSONObject.class);
 
       // verify scheduler activities
       verifyNumberOfAllocations(json, 1);
@@ -333,7 +332,7 @@ public void testNoNM() throws Exception {
           MediaType.APPLICATION_JSON).get(Response.class);
       assertEquals(MediaType.APPLICATION_JSON_TYPE + ";" + JettyUtils.UTF_8,
           response.getMediaType().toString());
-      JSONObject json = responseToJson(response);
+      JSONObject json = response.readEntity(JSONObject.class);
 
       Thread.sleep(1000);
 
@@ -343,7 +342,7 @@ public void testNoNM() throws Exception {
           MediaType.APPLICATION_JSON).get(Response.class);
       assertEquals(MediaType.APPLICATION_JSON_TYPE + ";" + JettyUtils.UTF_8,
           response.getMediaType().toString());
-      json = responseToJson(response);
+      json = response.readEntity(JSONObject.class);
 
       verifyNumberOfAllocations(json, 0);
     } finally {
@@ -386,7 +385,7 @@ public void testWrongNodeId() throws Exception {
           MediaType.APPLICATION_JSON).get(Response.class);
       assertEquals(MediaType.APPLICATION_JSON_TYPE + ";" + JettyUtils.UTF_8,
           response.getMediaType().toString());
-      JSONObject json = responseToJson(response);
+      JSONObject json = response.readEntity(JSONObject.class);
 
       nm.nodeHeartbeat(true);
       Thread.sleep(1000);
@@ -397,7 +396,7 @@ public void testWrongNodeId() throws Exception {
           MediaType.APPLICATION_JSON).get(Response.class);
       assertEquals(MediaType.APPLICATION_JSON_TYPE + ";" + JettyUtils.UTF_8,
           response.getMediaType().toString());
-      json = responseToJson(response);
+      json = response.readEntity(JSONObject.class);
 
       verifyNumberOfAllocations(json, 0);
     } finally {
@@ -452,7 +451,7 @@ public void testReserveNewContainer() throws Exception {
           MediaType.APPLICATION_JSON).get(Response.class);
       assertEquals(MediaType.APPLICATION_JSON_TYPE + ";" + JettyUtils.UTF_8,
           response.getMediaType().toString());
-      JSONObject json = responseToJson(response);
+      JSONObject json = response.readEntity(JSONObject.class);
 
       nm2.nodeHeartbeat(true);
       Thread.sleep(1000);
@@ -462,7 +461,7 @@ public void testReserveNewContainer() throws Exception {
           MediaType.APPLICATION_JSON).get(Response.class);
       assertEquals(MediaType.APPLICATION_JSON_TYPE + ";" + JettyUtils.UTF_8,
           response.getMediaType().toString());
-      json = responseToJson(response);
+      json = response.readEntity(JSONObject.class);
 
       verifyNumberOfAllocations(json, 1);
 
@@ -480,7 +479,7 @@ public void testReserveNewContainer() throws Exception {
           MediaType.APPLICATION_JSON).get(Response.class);
       assertEquals(MediaType.APPLICATION_JSON_TYPE + ";" + JettyUtils.UTF_8,
           response.getMediaType().toString());
-      json = responseToJson(response);
+      json = response.readEntity(JSONObject.class);
 
       nm2.nodeHeartbeat(true);
       Thread.sleep(1000);
@@ -490,7 +489,7 @@ public void testReserveNewContainer() throws Exception {
           MediaType.APPLICATION_JSON).get(Response.class);
       assertEquals(MediaType.APPLICATION_JSON_TYPE + ";" + JettyUtils.UTF_8,
           response.getMediaType().toString());
-      json = responseToJson(response);
+      json = response.readEntity(JSONObject.class);
 
       verifyNumberOfAllocations(json, 1);
 
@@ -515,7 +514,7 @@ public void testReserveNewContainer() throws Exception {
           MediaType.APPLICATION_JSON).get(Response.class);
       assertEquals(MediaType.APPLICATION_JSON_TYPE + ";" + JettyUtils.UTF_8,
           response.getMediaType().toString());
-      json = responseToJson(response);
+      json = response.readEntity(JSONObject.class);
 
       nm2.nodeHeartbeat(true);
       Thread.sleep(1000);
@@ -525,7 +524,7 @@ public void testReserveNewContainer() throws Exception {
           MediaType.APPLICATION_JSON).get(Response.class);
       assertEquals(MediaType.APPLICATION_JSON_TYPE + ";" + JettyUtils.UTF_8,
           response.getMediaType().toString());
-      json = responseToJson(response);
+      json = response.readEntity(JSONObject.class);
 
       verifyNumberOfAllocations(json, 1);
 
@@ -566,7 +565,7 @@ public void testActivityJSON() throws Exception {
           MediaType.APPLICATION_JSON).get(Response.class);
       assertEquals(MediaType.APPLICATION_JSON_TYPE + ";" + JettyUtils.UTF_8,
           response.getMediaType().toString());
-      JSONObject json = responseToJson(response);
+      JSONObject json = response.readEntity(JSONObject.class);
 
       nm.nodeHeartbeat(true);
       Thread.sleep(1000);
@@ -577,7 +576,7 @@ public void testActivityJSON() throws Exception {
           MediaType.APPLICATION_JSON).get(Response.class);
       assertEquals(MediaType.APPLICATION_JSON_TYPE + ";" + JettyUtils.UTF_8,
           response.getMediaType().toString());
-      json = responseToJson(response);
+      json = response.readEntity(JSONObject.class);
 
       verifyNumberOfAllocations(json, 1);
 
@@ -893,7 +892,7 @@ public void testInsufficientResourceDiagnostic() throws Exception {
               .request(MediaType.APPLICATION_JSON).get(Response.class);
       assertEquals(MediaType.APPLICATION_JSON_TYPE + ";" + JettyUtils.UTF_8,
           response.getMediaType().toString());
-      JSONObject json = responseToJson(response);
+      JSONObject json = response.readEntity(JSONObject.class);
       assertEquals("waiting for next allocation",
           getFirstSubNodeFromJson(json, FN_SCHEDULER_ACT_ROOT)
               .optString(FN_ACT_DIAGNOSTIC));
@@ -911,7 +910,7 @@ public void testInsufficientResourceDiagnostic() throws Exception {
               .request(MediaType.APPLICATION_JSON).get(Response.class);
       assertEquals(MediaType.APPLICATION_JSON_TYPE + ";" + JettyUtils.UTF_8,
           response.getMediaType().toString());
-      json = responseToJson(response);
+      json = response.readEntity(JSONObject.class);
 
       verifyNumberOfAllocations(json, 1);
       JSONObject allocationObj = getFirstSubNodeFromJson(json,
@@ -967,7 +966,7 @@ public void testPlacementConstraintDiagnostic() throws Exception {
               .request(MediaType.APPLICATION_JSON).get(Response.class);
       assertEquals(MediaType.APPLICATION_JSON_TYPE + ";" + JettyUtils.UTF_8,
           response.getMediaType().toString());
-      JSONObject json = responseToJson(response);
+      JSONObject json = response.readEntity(JSONObject.class);
       assertEquals("waiting for next allocation",
           getFirstSubNodeFromJson(json, FN_SCHEDULER_ACT_ROOT)
               .optString(FN_ACT_DIAGNOSTIC));
@@ -981,7 +980,7 @@ public void testPlacementConstraintDiagnostic() throws Exception {
               .request(MediaType.APPLICATION_JSON).get(Response.class);
       assertEquals(MediaType.APPLICATION_JSON_TYPE + ";" + JettyUtils.UTF_8,
           response.getMediaType().toString());
-      json = responseToJson(response);
+      json = response.readEntity(JSONObject.class);
 
       verifyNumberOfAllocations(json, 1);
       JSONObject allocationObj = getFirstSubNodeFromJson(json,
@@ -1764,7 +1763,7 @@ public void run() {
 
       assertEquals(MediaType.APPLICATION_JSON_TYPE + ";"
           + JettyUtils.UTF_8, response.getMediaType().toString());
-      json = responseToJson(response);
+      json = response.readEntity(JSONObject.class);
       done = true;
     }
   }
diff --git a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/webapp/TestRMWebServicesSchedulerActivitiesWithMultiNodesEnabled.java b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/webapp/TestRMWebServicesSchedulerActivitiesWithMultiNodesEnabled.java
index e112f53eca936..ac9a31fef8833 100644
--- a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/webapp/TestRMWebServicesSchedulerActivitiesWithMultiNodesEnabled.java
+++ b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/webapp/TestRMWebServicesSchedulerActivitiesWithMultiNodesEnabled.java
@@ -82,7 +82,6 @@
 import static org.apache.hadoop.yarn.server.resourcemanager.webapp.ActivitiesTestUtils.verifyNumberOfAllocationAttempts;
 import static org.apache.hadoop.yarn.server.resourcemanager.webapp.ActivitiesTestUtils.verifyNumberOfAllocations;
 import static org.apache.hadoop.yarn.server.resourcemanager.webapp.ActivitiesTestUtils.verifyStateOfAllocations;
-import static org.apache.hadoop.yarn.server.resourcemanager.webapp.TestWebServiceUtil.responseToJson;
 import static org.junit.jupiter.api.Assertions.assertEquals;
 import static org.junit.jupiter.api.Assertions.assertNotNull;
 import static org.junit.jupiter.api.Assertions.assertTrue;
@@ -218,7 +217,7 @@ public void testAssignContainer() throws Exception {
           MediaType.APPLICATION_JSON).get(Response.class);
       assertEquals(MediaType.APPLICATION_JSON_TYPE + ";" + JettyUtils.UTF_8,
           response.getMediaType().toString());
-      JSONObject json = responseToJson(response);
+      JSONObject json = response.readEntity(JSONObject.class);
 
       verifyNumberOfAllocations(json, 1);
 
@@ -262,7 +261,7 @@ public void testSchedulingWithoutPendingRequests()
           MediaType.APPLICATION_JSON).get(Response.class);
       assertEquals(MediaType.APPLICATION_JSON_TYPE + ";" + JettyUtils.UTF_8,
           response.getMediaType().toString());
-      JSONObject json = responseToJson(response);
+      JSONObject json = response.readEntity(JSONObject.class);
 
       verifyNumberOfAllocations(json, 1);
       JSONObject allocation = getFirstSubNodeFromJson(json,
@@ -376,7 +375,7 @@ public void testInsufficientResourceDiagnostic() throws Exception {
               .request(MediaType.APPLICATION_JSON).get(Response.class);
       assertEquals(MediaType.APPLICATION_JSON_TYPE + ";" + JettyUtils.UTF_8,
           response.getMediaType().toString());
-      JSONObject json = responseToJson(response);
+      JSONObject json = response.readEntity(JSONObject.class);
       assertEquals("waiting for next allocation",
           json.getJSONObject(FN_SCHEDULER_ACT_ROOT).getString("diagnostic"));
 
@@ -390,7 +389,7 @@ public void testInsufficientResourceDiagnostic() throws Exception {
               .request(MediaType.APPLICATION_JSON).get(Response.class);
       assertEquals(MediaType.APPLICATION_JSON_TYPE + ";" + JettyUtils.UTF_8,
           response.getMediaType().toString());
-      json = responseToJson(response);
+      json = response.readEntity(JSONObject.class);
 
       //Check app activities
       verifyNumberOfAllocations(json, 1);
diff --git a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/webapp/TestWebServiceUtil.java b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/webapp/TestWebServiceUtil.java
index 0bd28d8a792aa..443e2332c8cfa 100644
--- a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/webapp/TestWebServiceUtil.java
+++ b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/webapp/TestWebServiceUtil.java
@@ -345,15 +345,6 @@ public static void restoreSchedulerConfigFileInTarget() {
     }
   }
 
-  public static JSONObject responseToJson(Response response) {
-    String res = response.readEntity(String.class);
-    try {
-      return new JSONObject(res);
-    } catch (JSONException e) {
-      throw new RuntimeException("Failed to parse JSON: " + res, e);
-    }
-  }
-
   public static String toEntity(Object obj, Class> klass, String mediaType)
       throws Exception {
     if (MediaType.APPLICATION_JSON.equals(mediaType)) {
diff --git a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/webapp/fairscheduler/TestRMWebServicesFairScheduler.java b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/webapp/fairscheduler/TestRMWebServicesFairScheduler.java
index f5ca6e92d21dd..bc7b02caf6133 100644
--- a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/webapp/fairscheduler/TestRMWebServicesFairScheduler.java
+++ b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/webapp/fairscheduler/TestRMWebServicesFairScheduler.java
@@ -48,7 +48,6 @@
 import javax.ws.rs.core.MediaType;
 import javax.ws.rs.core.Response;
 
-import static org.apache.hadoop.yarn.server.resourcemanager.webapp.TestWebServiceUtil.responseToJson;
 import static org.junit.jupiter.api.Assertions.assertEquals;
 import static org.junit.jupiter.api.Assertions.fail;
 import static org.mockito.Mockito.mock;
@@ -105,7 +104,7 @@ public void testClusterScheduler() throws JSONException {
         .request(MediaType.APPLICATION_JSON).get(Response.class);
     assertEquals(MediaType.APPLICATION_JSON_TYPE + ";" + JettyUtils.UTF_8,
         response.getMediaType().toString());
-    JSONObject json = responseToJson(response);
+    JSONObject json = response.readEntity(JSONObject.class);
     verifyClusterScheduler(json);
   }
 
@@ -116,7 +115,7 @@ public void testClusterSchedulerSlash() throws JSONException {
         .request(MediaType.APPLICATION_JSON).get(Response.class);
     assertEquals(MediaType.APPLICATION_JSON_TYPE + ";" + JettyUtils.UTF_8,
         response.getMediaType().toString());
-    JSONObject json = responseToJson(response);
+    JSONObject json = response.readEntity(JSONObject.class);
     verifyClusterScheduler(json);
   }
 
@@ -134,7 +133,7 @@ public void testClusterSchedulerWithSubQueues()
         .request(MediaType.APPLICATION_JSON).get(Response.class);
     assertEquals(MediaType.APPLICATION_JSON_TYPE + ";" + JettyUtils.UTF_8,
         response.getMediaType().toString());
-    JSONObject json = responseToJson(response);
+    JSONObject json = response.readEntity(JSONObject.class);
     JSONArray subQueueInfo = json.getJSONObject("scheduler")
         .getJSONObject("schedulerInfo").getJSONObject("rootQueue")
         .getJSONObject("childQueues").getJSONArray("queue").getJSONObject(0)
@@ -170,7 +169,7 @@ public void testClusterSchedulerOverviewFair() throws Exception {
         .get(Response.class);
     assertEquals(MediaType.APPLICATION_JSON + ";" + JettyUtils.UTF_8,
         response.getMediaType().toString());
-    JSONObject json = responseToJson(response);
+    JSONObject json = response.readEntity(JSONObject.class);
     JSONObject scheduler = json.getJSONObject("scheduler");
     TestRMWebServices.verifyClusterSchedulerOverView(scheduler, "Fair Scheduler");
   }
diff --git a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/webapp/TestRMWithCSRFFilter.java b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/webapp/TestRMWithCSRFFilter.java
index a9be28c4c20f0..142cd12eea05d 100644
--- a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/webapp/TestRMWithCSRFFilter.java
+++ b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/webapp/TestRMWithCSRFFilter.java
@@ -168,7 +168,6 @@ public void testAllowNonBrowserInteractionWithoutHeader() throws Exception {
     assertEquals(MediaType.APPLICATION_XML_TYPE + ";" + JettyUtils.UTF_8,
         response.getMediaType().toString());
     String xml = response.readEntity(String.class);
-    System.err.println(xml);
     verifyClusterInfoXML(xml);
   }
 
From bf4606f53aa856b04bd35b62c37734a34bfe8178 Mon Sep 17 00:00:00 2001
From: K0K0V0K 
Date: Mon, 27 Oct 2025 19:11:32 +0100
Subject: [PATCH 14/17] fix compile error
---
 .../server/resourcemanager/webapp/TestRMWebServicesNodes.java   | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/webapp/TestRMWebServicesNodes.java b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/webapp/TestRMWebServicesNodes.java
index 40566527690c1..83257f9b04214 100644
--- a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/webapp/TestRMWebServicesNodes.java
+++ b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/webapp/TestRMWebServicesNodes.java
@@ -965,7 +965,7 @@ public void testNodesAllocationTags() throws Exception {
         .path("nodes").request("application/json").get(Response.class);
     assertEquals(MediaType.APPLICATION_JSON + ";" + JettyUtils.UTF_8,
         response.getMediaType().toString());
-    JSONObject nodesInfojson = response.readEntity(JSONObject.class);
+    JSONObject nodesInfoJson = response.readEntity(JSONObject.class);
     verifyNodeAllocationTag(nodesInfoJson, expectedAllocationTags);
 
     rm.stop();
From 3fa4405af7f24f0cc691c4bf92929d4ccec68e62 Mon Sep 17 00:00:00 2001
From: K0K0V0K 
Date: Tue, 28 Oct 2025 13:23:12 +0100
Subject: [PATCH 15/17] fix missing dependency stabilize tests
---
 hadoop-project/pom.xml                        | 14 +++-
 .../pom.xml                                   |  8 ++
 .../TestRMWebServicesAppsModification.java    |  8 +-
 ...rvicesCapacitySchedulerConfigMutation.java |  4 +
 ...estRMWebServicesConfigurationMutation.java | 74 ++++++++++++++-----
 .../webapp/TestRMWebServicesNodeLabels.java   |  8 +-
 .../webapp/TestRMWebServicesNodes.java        |  6 ++
 .../TestRMWebServicesSchedulerActivities.java |  2 +
 8 files changed, 102 insertions(+), 22 deletions(-)
diff --git a/hadoop-project/pom.xml b/hadoop-project/pom.xml
index febcfdf374af8..06c74f71315ba 100644
--- a/hadoop-project/pom.xml
+++ b/hadoop-project/pom.xml
@@ -67,8 +67,10 @@
     
     2.46 
 
-    
+    
     2.7.14 
+    1.1.6 
+    1.1.4 
 
     
     2.3.9 
@@ -2154,6 +2156,16 @@
         org.eclipse.persistence.moxy 
         ${eclipse-persistence.version} 
          
+      
+        jakarta.json 
+        jakarta.json-api 
+        ${jsonapi.version} 
+       
+      
+        org.glassfish 
+        javax.json 
+        ${json.version} 
+       
       
         org.glassfish.jaxb 
         jaxb-runtime 
diff --git a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/pom.xml b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/pom.xml
index 54e9258500a33..98f33dd0501e1 100644
--- a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/pom.xml
+++ b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/pom.xml
@@ -265,6 +265,14 @@
       org.eclipse.persistence 
       org.eclipse.persistence.moxy 
      
+    
+      jakarta.json 
+      jakarta.json-api 
+     
+    
+      org.glassfish 
+      javax.json 
+     
     
       org.mockito 
       mockito-junit-jupiter 
diff --git a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/webapp/TestRMWebServicesAppsModification.java b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/webapp/TestRMWebServicesAppsModification.java
index 5a23a76bbfa89..a88f8a1acae0e 100644
--- a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/webapp/TestRMWebServicesAppsModification.java
+++ b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/webapp/TestRMWebServicesAppsModification.java
@@ -104,6 +104,8 @@
 import org.apache.hadoop.yarn.server.resourcemanager.webapp.dao.CredentialsInfo;
 import org.apache.hadoop.yarn.server.resourcemanager.webapp.dao.LocalResourceInfo;
 import org.apache.hadoop.yarn.server.resourcemanager.webapp.dao.LogAggregationContextInfo;
+import org.apache.hadoop.yarn.server.resourcemanager.webapp.jsonprovider.ExcludeRootJSONProvider;
+import org.apache.hadoop.yarn.server.resourcemanager.webapp.jsonprovider.IncludeRootJSONProvider;
 import org.apache.hadoop.yarn.server.resourcemanager.webapp.jsonprovider.JsonProviderFeature;
 import org.apache.hadoop.yarn.util.Times;
 import org.apache.hadoop.yarn.webapp.GenericExceptionHandler;
@@ -113,6 +115,7 @@
 import org.codehaus.jettison.json.JSONArray;
 import org.codehaus.jettison.json.JSONException;
 import org.codehaus.jettison.json.JSONObject;
+import org.glassfish.jersey.jettison.internal.entity.JettisonObjectProvider;
 import org.junit.jupiter.api.AfterEach;
 import org.junit.jupiter.api.Timeout;
 import org.junit.jupiter.params.ParameterizedTest;
@@ -332,7 +335,10 @@ private WebTarget constructWebResource(WebTarget r, String... paths) {
   }
 
   private WebTarget constructWebResource(String... paths) {
-    WebTarget r = target();
+    WebTarget r = target()
+        .register(JettisonObjectProvider.App.class)
+        .register(new IncludeRootJSONProvider())
+        .register(new ExcludeRootJSONProvider());
     WebTarget ws = r.path("ws").path("v1").path("cluster");
     return this.constructWebResource(ws, paths);
   }
diff --git a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/webapp/TestRMWebServicesCapacitySchedulerConfigMutation.java b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/webapp/TestRMWebServicesCapacitySchedulerConfigMutation.java
index 4f252bfd3ec33..d76cd87ef222e 100644
--- a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/webapp/TestRMWebServicesCapacitySchedulerConfigMutation.java
+++ b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/webapp/TestRMWebServicesCapacitySchedulerConfigMutation.java
@@ -36,6 +36,8 @@
 import org.apache.hadoop.yarn.conf.YarnConfiguration;
 import org.apache.hadoop.yarn.server.resourcemanager.ResourceManager;
 import org.apache.hadoop.yarn.server.resourcemanager.scheduler.capacity.CapacitySchedulerConfiguration;
+import org.apache.hadoop.yarn.server.resourcemanager.webapp.jsonprovider.ExcludeRootJSONProvider;
+import org.apache.hadoop.yarn.server.resourcemanager.webapp.jsonprovider.IncludeRootJSONProvider;
 import org.apache.hadoop.yarn.server.resourcemanager.webapp.jsonprovider.JsonProviderFeature;
 import org.apache.hadoop.yarn.webapp.GenericExceptionHandler;
 import org.apache.hadoop.yarn.webapp.dao.QueueConfigInfo;
@@ -157,6 +159,8 @@ public void testUpdateAbsoluteHierarchyWithZeroCapacities(boolean pLegacyQueueMo
     updateInfo.getUpdateQueueInfo().add(b);
 
     Response response = target()
+        .register(new IncludeRootJSONProvider())
+        .register(new ExcludeRootJSONProvider())
         .path("ws/v1/cluster/scheduler-conf")
         .queryParam("user.name", userName)
         .request(MediaType.APPLICATION_JSON)
diff --git a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/webapp/TestRMWebServicesConfigurationMutation.java b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/webapp/TestRMWebServicesConfigurationMutation.java
index 8ffd187d7a494..33c26ae7ec3a4 100644
--- a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/webapp/TestRMWebServicesConfigurationMutation.java
+++ b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/webapp/TestRMWebServicesConfigurationMutation.java
@@ -35,6 +35,8 @@
 import org.apache.hadoop.yarn.server.resourcemanager.scheduler.capacity.QueuePrefixes;
 import org.apache.hadoop.yarn.server.resourcemanager.webapp.dao.NodeLabelInfo;
 import org.apache.hadoop.yarn.server.resourcemanager.webapp.dao.NodeLabelsInfo;
+import org.apache.hadoop.yarn.server.resourcemanager.webapp.jsonprovider.ExcludeRootJSONProvider;
+import org.apache.hadoop.yarn.server.resourcemanager.webapp.jsonprovider.IncludeRootJSONProvider;
 import org.apache.hadoop.yarn.server.resourcemanager.webapp.jsonprovider.JsonProviderFeature;
 import org.apache.hadoop.yarn.webapp.GenericExceptionHandler;
 import org.apache.hadoop.yarn.webapp.JerseyTestBase;
@@ -245,7 +247,9 @@ public void testFormatSchedulerConf() throws Exception {
     updateInfo.getUpdateQueueInfo().add(stoppedInfo);
 
     // Add a queue root.formattest to the existing three queues
-    WebTarget r = target();
+        WebTarget r = target()
+        .register(new IncludeRootJSONProvider())
+        .register(new ExcludeRootJSONProvider());
     Response response = r.path("ws").path("v1").path("cluster")
         .path("scheduler-conf").queryParam("user.name", userName)
         .request(MediaType.APPLICATION_JSON)
@@ -290,7 +294,9 @@ public void testAddNestedQueue() throws Exception {
     assertNotNull(orgConf);
     assertEquals(4, orgConf.getQueues(ROOT).size());
 
-    WebTarget r = target();
+        WebTarget r = target()
+        .register(new IncludeRootJSONProvider())
+        .register(new ExcludeRootJSONProvider());
 
     Response response;
 
@@ -335,7 +341,9 @@ public void testAddNestedQueue() throws Exception {
 
   @Test
   public void testAddWithUpdate() throws Exception {
-    WebTarget r = target();
+        WebTarget r = target()
+        .register(new IncludeRootJSONProvider())
+        .register(new ExcludeRootJSONProvider());
 
     Response response;
 
@@ -365,7 +373,9 @@ public void testAddWithUpdate() throws Exception {
 
   @Test
   public void testUnsetParentQueueOrderingPolicy() throws Exception {
-    WebTarget r = target();
+        WebTarget r = target()
+        .register(new IncludeRootJSONProvider())
+        .register(new ExcludeRootJSONProvider());
     Response response;
 
     // Update ordering policy of Leaf Queue root.b to fair
@@ -412,7 +422,9 @@ public void testUnsetParentQueueOrderingPolicy() throws Exception {
 
   @Test
   public void testUnsetLeafQueueOrderingPolicy() throws Exception {
-    WebTarget r = target();
+        WebTarget r = target()
+        .register(new IncludeRootJSONProvider())
+        .register(new ExcludeRootJSONProvider());
     Response response;
 
     // Update ordering policy of Parent Queue root.c to priority-utilization
@@ -456,7 +468,9 @@ public void testUnsetLeafQueueOrderingPolicy() throws Exception {
 
   @Test
   public void testRemoveQueue() throws Exception {
-    WebTarget r = target();
+    WebTarget r = target()
+        .register(new IncludeRootJSONProvider())
+        .register(new ExcludeRootJSONProvider());
 
     Response response;
 
@@ -482,7 +496,9 @@ public void testRemoveQueue() throws Exception {
 
   @Test
   public void testStopWithRemoveQueue() throws Exception {
-    WebTarget r = target();
+        WebTarget r = target()
+        .register(new IncludeRootJSONProvider())
+        .register(new ExcludeRootJSONProvider());
 
     Response response;
 
@@ -511,7 +527,9 @@ public void testStopWithRemoveQueue() throws Exception {
 
   @Test
   public void testRemoveQueueWhichHasQueueMapping() throws Exception {
-    WebTarget r = target();
+        WebTarget r = target()
+        .register(new IncludeRootJSONProvider())
+        .register(new ExcludeRootJSONProvider());
 
     Response response;
     CapacityScheduler cs = (CapacityScheduler) rm.getResourceScheduler();
@@ -550,7 +568,9 @@ public void testRemoveQueueWhichHasQueueMapping() throws Exception {
 
   @Test
   public void testStopWithConvertLeafToParentQueue() throws Exception {
-    WebTarget r = target();
+        WebTarget r = target()
+        .register(new IncludeRootJSONProvider())
+        .register(new ExcludeRootJSONProvider());
     Response response;
 
     // Set state of queues to STOPPED.
@@ -581,7 +601,9 @@ public void testStopWithConvertLeafToParentQueue() throws Exception {
 
   @Test
   public void testRemoveParentQueue() throws Exception {
-    WebTarget r = target();
+        WebTarget r = target()
+        .register(new IncludeRootJSONProvider())
+        .register(new ExcludeRootJSONProvider());
 
     Response response;
 
@@ -604,7 +626,9 @@ public void testRemoveParentQueue() throws Exception {
 
   @Test
   public void testRemoveParentQueueWithCapacity() throws Exception {
-    WebTarget r = target();
+        WebTarget r = target()
+        .register(new IncludeRootJSONProvider())
+        .register(new ExcludeRootJSONProvider());
 
     Response response;
 
@@ -634,7 +658,9 @@ public void testRemoveParentQueueWithCapacity() throws Exception {
 
   @Test
   public void testRemoveMultipleQueues() throws Exception {
-    WebTarget r = target();
+        WebTarget r = target()
+        .register(new IncludeRootJSONProvider())
+        .register(new ExcludeRootJSONProvider());
 
     Response response;
 
@@ -661,7 +687,9 @@ public void testRemoveMultipleQueues() throws Exception {
   }
 
   private void stopQueue(QueuePath... queuePaths) throws Exception {
-    WebTarget r = target();
+        WebTarget r = target()
+        .register(new IncludeRootJSONProvider())
+        .register(new ExcludeRootJSONProvider());
 
     Response response;
 
@@ -689,7 +717,9 @@ private void stopQueue(QueuePath... queuePaths) throws Exception {
 
   @Test
   public void testUpdateQueue() throws Exception {
-    WebTarget r = target();
+        WebTarget r = target()
+        .register(new IncludeRootJSONProvider())
+        .register(new ExcludeRootJSONProvider());
 
     Response response;
 
@@ -740,7 +770,9 @@ public void testUpdateQueue() throws Exception {
 
   @Test
   public void testUpdateQueueCapacity() throws Exception {
-    WebTarget r = target();
+        WebTarget r = target()
+        .register(new IncludeRootJSONProvider())
+        .register(new ExcludeRootJSONProvider());
 
     Response response;
 
@@ -767,7 +799,9 @@ public void testUpdateQueueCapacity() throws Exception {
 
   @Test
   public void testGlobalConfChange() throws Exception {
-    WebTarget r = target();
+        WebTarget r = target()
+        .register(new IncludeRootJSONProvider())
+        .register(new ExcludeRootJSONProvider());
 
     Response response;
 
@@ -804,7 +838,9 @@ public void testGlobalConfChange() throws Exception {
 
   @Test
   public void testNodeLabelRemovalResidualConfigsAreCleared() throws Exception {
-    WebTarget r = target();
+        WebTarget r = target()
+        .register(new IncludeRootJSONProvider())
+        .register(new ExcludeRootJSONProvider());
     Response response;
 
     // 1. Create Node Label: label1
@@ -1007,7 +1043,9 @@ private String getAccessibleNodeLabelsMaxCapacityPropertyName(String label) {
 
   @Test
   public void testValidateWithClusterMaxAllocation() throws Exception {
-    WebTarget r = target();
+        WebTarget r = target()
+        .register(new IncludeRootJSONProvider())
+        .register(new ExcludeRootJSONProvider());
     int clusterMax = YarnConfiguration.
         DEFAULT_RM_SCHEDULER_MAXIMUM_ALLOCATION_MB * 2;
     conf.setInt(YarnConfiguration.RM_SCHEDULER_MAXIMUM_ALLOCATION_MB,
diff --git a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/webapp/TestRMWebServicesNodeLabels.java b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/webapp/TestRMWebServicesNodeLabels.java
index 521ca9aceb416..0cfaf06609c91 100644
--- a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/webapp/TestRMWebServicesNodeLabels.java
+++ b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/webapp/TestRMWebServicesNodeLabels.java
@@ -60,6 +60,8 @@
 import org.apache.hadoop.yarn.server.resourcemanager.webapp.dao.NodeToLabelsEntry;
 import org.apache.hadoop.yarn.server.resourcemanager.webapp.dao.NodeToLabelsInfo;
 import org.apache.hadoop.yarn.server.resourcemanager.webapp.dao.NodeToLabelsEntryList;
+import org.apache.hadoop.yarn.server.resourcemanager.webapp.jsonprovider.ExcludeRootJSONProvider;
+import org.apache.hadoop.yarn.server.resourcemanager.webapp.jsonprovider.IncludeRootJSONProvider;
 import org.apache.hadoop.yarn.server.resourcemanager.webapp.jsonprovider.JsonProviderFeature;
 import org.apache.hadoop.yarn.webapp.GenericExceptionHandler;
 import org.apache.hadoop.yarn.webapp.JerseyTestBase;
@@ -162,8 +164,10 @@ public TestRMWebServicesNodeLabels() {
   }
 
   private WebTarget getClusterWebResource() {
-    return targetWithJsonObject().
-        path(PATH_WS).path(PATH_V1).path(PATH_CLUSTER);
+    return targetWithJsonObject()
+        .register(new IncludeRootJSONProvider())
+        .register(new ExcludeRootJSONProvider())
+        .path(PATH_WS).path(PATH_V1).path(PATH_CLUSTER);
   }
 
   private Response get(String path) {
diff --git a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/webapp/TestRMWebServicesNodes.java b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/webapp/TestRMWebServicesNodes.java
index 83257f9b04214..280b4a79cd177 100644
--- a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/webapp/TestRMWebServicesNodes.java
+++ b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/webapp/TestRMWebServicesNodes.java
@@ -88,6 +88,8 @@
 import org.apache.hadoop.yarn.server.resourcemanager.webapp.dao.NodeInfo;
 import org.apache.hadoop.yarn.server.resourcemanager.webapp.dao.ResourceInfo;
 import org.apache.hadoop.yarn.server.resourcemanager.webapp.dao.ResourceOptionInfo;
+import org.apache.hadoop.yarn.server.resourcemanager.webapp.jsonprovider.ExcludeRootJSONProvider;
+import org.apache.hadoop.yarn.server.resourcemanager.webapp.jsonprovider.IncludeRootJSONProvider;
 import org.apache.hadoop.yarn.server.resourcemanager.webapp.jsonprovider.JsonProviderFeature;
 import org.apache.hadoop.yarn.util.Records;
 import org.apache.hadoop.yarn.util.RackResolver;
@@ -96,6 +98,8 @@
 import org.apache.hadoop.yarn.webapp.GenericExceptionHandler;
 import org.apache.hadoop.yarn.webapp.JerseyTestBase;
 import org.apache.hadoop.yarn.webapp.WebServicesTestUtils;
+
+import com.fasterxml.jackson.jaxrs.json.JacksonJsonProvider;
 import org.codehaus.jettison.json.JSONArray;
 import org.codehaus.jettison.json.JSONException;
 import org.codehaus.jettison.json.JSONObject;
@@ -744,6 +748,8 @@ public void testNodesResourceUtilization() throws JSONException, Exception {
   @Test
   public void testUpdateNodeResource() throws Exception {
     WebTarget r = targetWithJsonObject()
+        .register(new IncludeRootJSONProvider())
+        .register(new ExcludeRootJSONProvider())
         .path(RMWSConsts.RM_WEB_SERVICE_PATH);
 
     r = r.queryParam("user.name", userName);
diff --git a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/webapp/TestRMWebServicesSchedulerActivities.java b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/webapp/TestRMWebServicesSchedulerActivities.java
index 78d8b0405fdec..43642cbb900fb 100644
--- a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/webapp/TestRMWebServicesSchedulerActivities.java
+++ b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/webapp/TestRMWebServicesSchedulerActivities.java
@@ -30,6 +30,8 @@
 import org.apache.hadoop.yarn.server.resourcemanager.scheduler.activities.ActivityDiagnosticConstant;
 import org.apache.hadoop.yarn.server.resourcemanager.scheduler.activities.ActivityState;
 import org.apache.hadoop.yarn.server.resourcemanager.scheduler.capacity.CapacitySchedulerConfiguration;
+import org.apache.hadoop.yarn.server.resourcemanager.webapp.jsonprovider.ExcludeRootJSONProvider;
+import org.apache.hadoop.yarn.server.resourcemanager.webapp.jsonprovider.IncludeRootJSONProvider;
 import org.apache.hadoop.yarn.server.resourcemanager.webapp.jsonprovider.JsonProviderFeature;
 import org.apache.hadoop.yarn.webapp.GenericExceptionHandler;
 import org.apache.hadoop.yarn.webapp.JerseyTestBase;
From 11d59a27e1b192e76e54ecfd6136bd917dcf1b0b Mon Sep 17 00:00:00 2001
From: K0K0V0K 
Date: Tue, 28 Oct 2025 16:04:31 +0100
Subject: [PATCH 16/17] remove unused imports
---
 .../server/resourcemanager/webapp/TestRMWebServicesNodes.java   | 1 -
 .../webapp/TestRMWebServicesSchedulerActivities.java            | 2 --
 2 files changed, 3 deletions(-)
diff --git a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/webapp/TestRMWebServicesNodes.java b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/webapp/TestRMWebServicesNodes.java
index 280b4a79cd177..f2295ab777d6c 100644
--- a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/webapp/TestRMWebServicesNodes.java
+++ b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/webapp/TestRMWebServicesNodes.java
@@ -99,7 +99,6 @@
 import org.apache.hadoop.yarn.webapp.JerseyTestBase;
 import org.apache.hadoop.yarn.webapp.WebServicesTestUtils;
 
-import com.fasterxml.jackson.jaxrs.json.JacksonJsonProvider;
 import org.codehaus.jettison.json.JSONArray;
 import org.codehaus.jettison.json.JSONException;
 import org.codehaus.jettison.json.JSONObject;
diff --git a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/webapp/TestRMWebServicesSchedulerActivities.java b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/webapp/TestRMWebServicesSchedulerActivities.java
index 43642cbb900fb..78d8b0405fdec 100644
--- a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/webapp/TestRMWebServicesSchedulerActivities.java
+++ b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/webapp/TestRMWebServicesSchedulerActivities.java
@@ -30,8 +30,6 @@
 import org.apache.hadoop.yarn.server.resourcemanager.scheduler.activities.ActivityDiagnosticConstant;
 import org.apache.hadoop.yarn.server.resourcemanager.scheduler.activities.ActivityState;
 import org.apache.hadoop.yarn.server.resourcemanager.scheduler.capacity.CapacitySchedulerConfiguration;
-import org.apache.hadoop.yarn.server.resourcemanager.webapp.jsonprovider.ExcludeRootJSONProvider;
-import org.apache.hadoop.yarn.server.resourcemanager.webapp.jsonprovider.IncludeRootJSONProvider;
 import org.apache.hadoop.yarn.server.resourcemanager.webapp.jsonprovider.JsonProviderFeature;
 import org.apache.hadoop.yarn.webapp.GenericExceptionHandler;
 import org.apache.hadoop.yarn.webapp.JerseyTestBase;
From 0fdf3a9380fe54474b3d3cc4cc7d2f2d82267d09 Mon Sep 17 00:00:00 2001
From: K0K0V0K 
Date: Wed, 29 Oct 2025 14:18:30 +0100
Subject: [PATCH 17/17] fix TestRMHA
---
 .../apache/hadoop/yarn/server/resourcemanager/TestRMHA.java  | 5 ++++-
 1 file changed, 4 insertions(+), 1 deletion(-)
diff --git a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/TestRMHA.java b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/TestRMHA.java
index 79544c4c93fe6..0c21ccbf38600 100644
--- a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/TestRMHA.java
+++ b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/TestRMHA.java
@@ -42,6 +42,7 @@
 import javax.ws.rs.core.MediaType;
 import javax.ws.rs.core.Response;
 
+import org.glassfish.jersey.jettison.internal.entity.JettisonObjectProvider;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.apache.hadoop.conf.Configuration;
@@ -161,7 +162,9 @@ private void checkActiveRMFunctionality() throws Exception {
   private void checkActiveRMWebServices() throws JSONException {
 
     // Validate web-service
-    Client webServiceClient = ClientBuilder.newClient();
+    Client webServiceClient = ClientBuilder
+        .newClient()
+        .register(new JettisonObjectProvider.App());
     InetSocketAddress rmWebappAddr =
         NetUtils.getConnectAddress(rm.getWebapp().getListenerAddress());
     String webappURL =