diff --git hadoop-yarn-project/hadoop-yarn/hadoop-yarn-common/src/main/java/org/apache/hadoop/yarn/webapp/WebApp.java hadoop-yarn-project/hadoop-yarn/hadoop-yarn-common/src/main/java/org/apache/hadoop/yarn/webapp/WebApp.java index fad6fe29462..60f08c433c1 100644 --- hadoop-yarn-project/hadoop-yarn/hadoop-yarn-common/src/main/java/org/apache/hadoop/yarn/webapp/WebApp.java +++ hadoop-yarn-project/hadoop-yarn/hadoop-yarn-common/src/main/java/org/apache/hadoop/yarn/webapp/WebApp.java @@ -51,6 +51,9 @@ @InterfaceAudience.LimitedPrivate({"YARN", "MapReduce"}) public abstract class WebApp extends ServletModule { private static final Logger LOG = LoggerFactory.getLogger(WebApp.class); + private static final String PACKAGES = + "com.sun.jersey.config.property.packages"; + private static final String JACKSON_JAXRS = "org.codehaus.jackson.jaxrs"; public enum HTTP { GET, POST, HEAD, PUT, DELETE }; @@ -182,12 +185,17 @@ protected void configureWebAppServlets() { String regex = "(?!/" + this.wsName + ")"; serveRegex(regex).with(DefaultWrapperServlet.class); - Map params = new HashMap(); + Map params = new HashMap<>(); params.put(ResourceConfig.FEATURE_IMPLICIT_VIEWABLES, "true"); params.put(ServletContainer.FEATURE_FILTER_FORWARD_ON_404, "true"); params.put(FeaturesAndProperties.FEATURE_XMLROOTELEMENT_PROCESSING, "true"); params.put(ResourceConfig.PROPERTY_CONTAINER_REQUEST_FILTERS, GZIPContentEncodingFilter.class.getName()); params.put(ResourceConfig.PROPERTY_CONTAINER_RESPONSE_FILTERS, GZIPContentEncodingFilter.class.getName()); + + // Put the Jackson package into the package properties list so that it + // gets pigked up as the JSON serializer. The default serializer + // generates malformed JSON. + params.put(PACKAGES, JACKSON_JAXRS); filter("/*").through(getWebAppFilterClass(), params); } } diff --git hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/webapp/RMWebServices.java hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/webapp/RMWebServices.java index c5d52854717..88de29322c6 100644 --- hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/webapp/RMWebServices.java +++ hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/webapp/RMWebServices.java @@ -1034,9 +1034,10 @@ public LabelsToNodesInfo getLabelsToNodes( init(); LabelsToNodesInfo lts = new LabelsToNodesInfo(); - Map ltsMap = lts.getLabelsToNodes(); - Map> labelsToNodeId = null; - if (labels == null || labels.size() == 0) { + Map ltsMap = lts.getLabelsToNodes(); + Map> labelsToNodeId; + + if (labels == null || labels.isEmpty()) { labelsToNodeId = rm.getRMContext().getNodeLabelManager().getLabelsInfoToNodes(); } else { @@ -1049,7 +1050,7 @@ public LabelsToNodesInfo getLabelsToNodes( for (NodeId nodeId : entry.getValue()) { nodeIdStrList.add(nodeId.toString()); } - ltsMap.put(new NodeLabelInfo(entry.getKey()), + ltsMap.put(new NodeLabelInfo(entry.getKey()).getName(), new NodeIDsInfo(nodeIdStrList)); } return lts; diff --git hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/webapp/dao/LabelsToNodesInfo.java hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/webapp/dao/LabelsToNodesInfo.java index e842d424508..b60f14d904b 100644 --- hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/webapp/dao/LabelsToNodesInfo.java +++ hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/webapp/dao/LabelsToNodesInfo.java @@ -31,17 +31,17 @@ @XmlAccessorType(XmlAccessType.FIELD) public class LabelsToNodesInfo { - protected Map labelsToNodes = - new HashMap(); + protected Map labelsToNodes; public LabelsToNodesInfo() { + labelsToNodes = new HashMap<>(); } // JAXB needs this - public LabelsToNodesInfo(Map labelsToNodes) { + public LabelsToNodesInfo(Map labelsToNodes) { this.labelsToNodes = labelsToNodes; } - public Map getLabelsToNodes() { + public Map getLabelsToNodes() { return labelsToNodes; } } \ No newline at end of file