|
@@ -17,12 +17,12 @@
|
|
|
|
|
|
package org.apache.hadoop.jmx;
|
|
|
|
|
|
-import com.fasterxml.jackson.core.JsonFactory;
|
|
|
-import com.fasterxml.jackson.core.JsonGenerator;
|
|
|
-import org.apache.hadoop.http.HttpServer2;
|
|
|
-import org.slf4j.Logger;
|
|
|
-import org.slf4j.LoggerFactory;
|
|
|
-
|
|
|
+import java.io.IOException;
|
|
|
+import java.io.PrintWriter;
|
|
|
+import java.lang.management.ManagementFactory;
|
|
|
+import java.lang.reflect.Array;
|
|
|
+import java.util.Iterator;
|
|
|
+import java.util.Set;
|
|
|
import javax.management.AttributeNotFoundException;
|
|
|
import javax.management.InstanceNotFoundException;
|
|
|
import javax.management.IntrospectionException;
|
|
@@ -42,12 +42,14 @@ import javax.servlet.ServletException;
|
|
|
import javax.servlet.http.HttpServlet;
|
|
|
import javax.servlet.http.HttpServletRequest;
|
|
|
import javax.servlet.http.HttpServletResponse;
|
|
|
-import java.io.IOException;
|
|
|
-import java.io.PrintWriter;
|
|
|
-import java.lang.management.ManagementFactory;
|
|
|
-import java.lang.reflect.Array;
|
|
|
-import java.util.Iterator;
|
|
|
-import java.util.Set;
|
|
|
+
|
|
|
+import com.fasterxml.jackson.core.JsonFactory;
|
|
|
+import com.fasterxml.jackson.core.JsonGenerator;
|
|
|
+import org.slf4j.Logger;
|
|
|
+import org.slf4j.LoggerFactory;
|
|
|
+
|
|
|
+import org.apache.commons.lang3.NotImplementedException;
|
|
|
+import org.apache.hadoop.http.HttpServer2;
|
|
|
|
|
|
/*
|
|
|
* This servlet is based off of the JMXProxyServlet from Tomcat 7.0.14. It has
|
|
@@ -136,6 +138,7 @@ public class JMXJsonServlet extends HttpServlet {
|
|
|
* Json Factory to create Json generators for write objects in json format
|
|
|
*/
|
|
|
protected transient JsonFactory jsonFactory;
|
|
|
+
|
|
|
/**
|
|
|
* Initialize this servlet.
|
|
|
*/
|
|
@@ -386,10 +389,10 @@ public class JMXJsonServlet extends HttpServlet {
|
|
|
|
|
|
private void writeAttribute(JsonGenerator jg, String attName, Object value) throws IOException {
|
|
|
jg.writeFieldName(attName);
|
|
|
- writeObject(jg, value);
|
|
|
+ writeObject(jg, value, attName);
|
|
|
}
|
|
|
|
|
|
- private void writeObject(JsonGenerator jg, Object value) throws IOException {
|
|
|
+ private void writeObject(JsonGenerator jg, Object value, String attName) throws IOException {
|
|
|
if(value == null) {
|
|
|
jg.writeNull();
|
|
|
} else {
|
|
@@ -399,9 +402,11 @@ public class JMXJsonServlet extends HttpServlet {
|
|
|
int len = Array.getLength(value);
|
|
|
for (int j = 0; j < len; j++) {
|
|
|
Object item = Array.get(value, j);
|
|
|
- writeObject(jg, item);
|
|
|
+ writeObject(jg, item, attName);
|
|
|
}
|
|
|
jg.writeEndArray();
|
|
|
+ } else if (extraCheck(value)) {
|
|
|
+ extraWrite(value, attName, jg);
|
|
|
} else if(value instanceof Number) {
|
|
|
Number n = (Number)value;
|
|
|
jg.writeNumber(n.toString());
|
|
@@ -421,7 +426,7 @@ public class JMXJsonServlet extends HttpServlet {
|
|
|
TabularData tds = (TabularData)value;
|
|
|
jg.writeStartArray();
|
|
|
for(Object entry : tds.values()) {
|
|
|
- writeObject(jg, entry);
|
|
|
+ writeObject(jg, entry, attName);
|
|
|
}
|
|
|
jg.writeEndArray();
|
|
|
} else {
|
|
@@ -429,4 +434,18 @@ public class JMXJsonServlet extends HttpServlet {
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
+
|
|
|
+ /**
|
|
|
+ * In case you need to modify the logic, how java objects transforms to json,
|
|
|
+ * you can overwrite this method to return true in case special handling
|
|
|
+ * @param value the object what should be judged
|
|
|
+ * @return true, if it needs special transformation
|
|
|
+ */
|
|
|
+ protected boolean extraCheck(Object value) {
|
|
|
+ return false;
|
|
|
+ }
|
|
|
+
|
|
|
+ protected void extraWrite(Object value, String attName, JsonGenerator jg) throws IOException {
|
|
|
+ throw new NotImplementedException();
|
|
|
+ }
|
|
|
}
|