src/java.management.rest/share/classes/com/oracle/jmx/remote/rest/http/GetRequestHandler.java
branchjmx-rest-api
changeset 55994 9721e36abeb0
parent 55985 0c5a02edfdef
--- a/src/java.management.rest/share/classes/com/oracle/jmx/remote/rest/http/GetRequestHandler.java	Fri Sep 01 14:36:28 2017 +0530
+++ b/src/java.management.rest/share/classes/com/oracle/jmx/remote/rest/http/GetRequestHandler.java	Mon Dec 25 20:42:05 2017 +0530
@@ -5,17 +5,16 @@
  */
 package com.oracle.jmx.remote.rest.http;
 
-import javax.management.*;
 import com.oracle.jmx.remote.rest.json.JSONArray;
 import com.oracle.jmx.remote.rest.json.JSONObject;
 import com.oracle.jmx.remote.rest.json.JSONPrimitive;
 import com.oracle.jmx.remote.rest.mapper.JSONMappingException;
 import com.oracle.jmx.remote.rest.mapper.JSONMappingFactory;
+
+import javax.management.*;
 import java.net.HttpURLConnection;
 import java.util.*;
 
-import static javax.management.MBeanOperationInfo.*;
-
 /**
  * @author harsha
  */
@@ -23,6 +22,7 @@
 
     private final MBeanServer mbeanServer;
     private final List<String> allowedMBeans;
+
     public GetRequestHandler(MBeanServer mServer, List<String> allowedMBeans) {
         this.mbeanServer = mServer;
         this.allowedMBeans = allowedMBeans;
@@ -100,8 +100,7 @@
                             // We get MBeanInfo
                             ObjectName mbeanObj = ObjectName.getInstance(tokens[0]);
                             return HttpResponse.getJsonObject(HttpURLConnection.HTTP_OK,
-                                    new JSONPrimitive(resource + (query == null ? "" : query)),
-                                    getMBeanInfo(mbeanServer, mbeanObj));
+                                    new JSONPrimitive(5), new JSONPrimitive(5));
                         }
                         System.out.println("Unrecognized token : " + tokens[0]);
                 }
@@ -125,161 +124,20 @@
                 new JSONPrimitive("Nothing to see here.. move along"));
     }
 
-    private JSONObject getMBeanInfo(MBeanServer mbeanServer, ObjectName mbean) throws InstanceNotFoundException, IntrospectionException, ReflectionException {
-        JSONObject jobj = new JSONObject();
-        MBeanInfo mBeanInfo = mbeanServer.getMBeanInfo(mbean);
-        if (mBeanInfo == null) {
-            return jobj;
-        }
-        jobj.put("description", mBeanInfo.getDescription());
-
-        // Populate Attribute Info
-        MBeanAttributeInfo[] attributes = mBeanInfo.getAttributes();
-        JSONArray jarr = new JSONArray();
-        for (MBeanAttributeInfo attr : attributes) {
-            String access;
-            if (attr.isReadable()) {
-                if (attr.isWritable()) {
-                    access = "read/write";
-                } else {
-                    access = "read-only";
-                }
-            } else if (attr.isWritable()) {
-                access = "write-only";
-            } else {
-                access = "no-access";
-            }
-            JSONObject jobj1 = new JSONObject();
-            jobj1.put("description", attr.getDescription());
-            jobj1.put("name", attr.getName());
-            jobj1.put("type", attr.getType());
-            jobj1.put("access", access);
-            jobj1.put("descriptor", getDescriptorJSON(attr.getDescriptor()));
-            jarr.add(jobj1);
-        }
-        jobj.put("attributeInfo", jarr);
-
-        // Add constructor Info
-        MBeanConstructorInfo[] constructorInfo = mBeanInfo.getConstructors();
-        jarr = new JSONArray();
-        for (MBeanConstructorInfo constructor : constructorInfo) {
-            JSONObject jobj1 = new JSONObject();
-            jobj1.put("description", constructor.getDescription());
-            jobj1.put("name", constructor.getName());
-            JSONArray jarr1 = new JSONArray();
-            for (MBeanParameterInfo paramInfo : constructor.getSignature()) {
-                jarr1.add(getParamJSON(paramInfo));
-            }
-            jobj1.put("signature", jarr1);
-            if (constructor.getDescriptor().getFieldNames().length > 1) {
-                jobj1.put("descriptor", getDescriptorJSON(constructor.getDescriptor()));
-            }
-            jarr.add(jobj1);
-        }
-        jobj.put("constructorInfo", jarr);
-
-        MBeanOperationInfo[] opInfo = mBeanInfo.getOperations();
-        jarr = new JSONArray();
-
-        for (MBeanOperationInfo op : opInfo) {
-            String impactString;
-            switch (op.getImpact()) {
-                case ACTION:
-                    impactString = "action";
-                    break;
-                case ACTION_INFO:
-                    impactString = "action/info";
-                    break;
-                case INFO:
-                    impactString = "info";
-                    break;
-                case UNKNOWN:
-                    impactString = "unknown";
-                    break;
-                default:
-                    impactString = "(" + op.getImpact() + ")";
-            }
-
-            JSONObject jobj1 = new JSONObject();
-            jobj1.put("description", op.getDescription());
-            jobj1.put("name", op.getName());
-            jobj1.put("returnType", op.getReturnType());
-            JSONArray jarr1 = new JSONArray();
-            for (MBeanParameterInfo paramInfo : op.getSignature()) {
-                jarr1.add(getParamJSON(paramInfo));
-            }
-            jobj1.put("signature", jarr1);
-            jobj1.put("impact", impactString);
-            if (op.getDescriptor().getFieldNames().length > 1) {
-                jobj1.put("descriptor", getDescriptorJSON(op.getDescriptor()));
-            }
-            jarr.add(jobj1);
-        }
-        jobj.put("operationInfo", jarr);
-
-        MBeanNotificationInfo[] notifications = mBeanInfo.getNotifications();
-        jarr = new JSONArray();
-
-        for (MBeanNotificationInfo notification : notifications) {
-
-            JSONObject jobj1 = new JSONObject();
-            jobj1.put("description", notification.getDescription());
-            jobj1.put("name", notification.getName());
-
-            JSONArray jarr1 = new JSONArray();
-            for (String notifType : notification.getNotifTypes()) {
-                jarr1.add(new JSONPrimitive(notifType));
-            }
-            jobj1.put("notifTypes", jarr1);
-            if (notification.getDescriptor().getFieldNames().length > 1) {
-                jobj1.put("descriptor", getDescriptorJSON(notification.getDescriptor()));
-            }
-            jarr.add(jobj1);
-        }
-        jobj.put("notificationInfo", jarr);
-
-        jobj.put("descriptor", getDescriptorJSON(mBeanInfo.getDescriptor()));
-        return jobj;
-    }
-
-    private JSONObject getParamJSON(MBeanParameterInfo mParamInfo) {
-        JSONObject jobj1 = new JSONObject();
-        if (mParamInfo.getDescription() != null && !mParamInfo.getDescription().isEmpty()) {
-            jobj1.put("description", mParamInfo.getDescription());
-        }
-        jobj1.put("name", mParamInfo.getName());
-        jobj1.put("type", mParamInfo.getType());
-        if (mParamInfo.getDescriptor() != null && mParamInfo.getDescriptor().getFieldNames().length > 1) {
-            jobj1.put("descriptor", getDescriptorJSON(mParamInfo.getDescriptor()));
-        }
-        return jobj1;
-    }
-
-    private JSONObject getDescriptorJSON(Descriptor descriptor) {
-        JSONObject jobj2 = new JSONObject();
-        try {
-            String[] descNames = descriptor.getFieldNames();
-            for (String descName : descNames) {
-                Object fieldValue = descriptor.getFieldValue(descName);
-                jobj2.put(descName, fieldValue != null ? fieldValue.toString() : null);
-            }
-        } catch (Throwable t) {
-            t.printStackTrace();
-        }
-        return jobj2;
-    }
-
     private Map<String, Object> readAttributes(MBeanServer mbeanServer,
                                                ObjectName objName, String requestStr)
             throws InstanceNotFoundException, IntrospectionException,
             ReflectionException, MBeanException, AttributeNotFoundException {
         requestStr = requestStr.trim();
         Map<String, Object> result = new HashMap<>();
-        if (requestStr.trim().equalsIgnoreCase("all")) {
-            MBeanInfo mInfo = mbeanServer.getMBeanInfo(objName);
-            String[] attrs = Arrays.stream(mInfo.getAttributes())
-                    .map(MBeanAttributeInfo::getName)
-                    .toArray(String[]::new);
+
+        String[] attrs = Arrays.stream(requestStr.split(Tokens.COMMA))
+                .map(String::trim)
+                .toArray(String[]::new);
+
+        if (attrs.length == 1) {
+            result.put(attrs[0], mbeanServer.getAttribute(objName, attrs[0]));
+        } else {
             AttributeList attrVals = mbeanServer.getAttributes(objName, attrs);
             if (attrVals.size() != attrs.length) {
                 List<String> missingAttrs = new ArrayList<>(Arrays.asList(attrs));
@@ -288,16 +146,6 @@
                     result.put(a.getName(), a.getValue());
                 }
                 for (String attr : missingAttrs) {
-                    try {
-                        Object attribute = mbeanServer.getAttribute(objName, attr);
-                    } catch (RuntimeException ex) {
-                        if (ex.getCause() instanceof UnsupportedOperationException) {
-                            result.put(attr, "< Attribute not supported >");
-                        } else if (ex.getCause() instanceof IllegalArgumentException) {
-                            result.put(attr, "< Invalid attributes >");
-                        }
-                        continue;
-                    }
                     result.put(attr, "< Error: No such attribute >");
                 }
             } else {
@@ -305,31 +153,8 @@
                     result.put(a.getName(), a.getValue());
                 });
             }
-        } else {
-            String[] attrs = Arrays.stream(requestStr.split(Tokens.COMMA))
-                    .map(String::trim)
-                    .toArray(String[]::new);
+        }
 
-            if (attrs.length == 1) {
-                result.put(attrs[0], mbeanServer.getAttribute(objName, attrs[0]));
-            } else {
-                AttributeList attrVals = mbeanServer.getAttributes(objName, attrs);
-                if (attrVals.size() != attrs.length) {
-                    List<String> missingAttrs = new ArrayList<>(Arrays.asList(attrs));
-                    for (Attribute a : attrVals.asList()) {
-                        missingAttrs.remove(a.getName());
-                        result.put(a.getName(), a.getValue());
-                    }
-                    for (String attr : missingAttrs) {
-                        result.put(attr, "< Error: No such attribute >");
-                    }
-                } else {
-                    attrVals.asList().forEach((a) -> {
-                        result.put(a.getName(), a.getValue());
-                    });
-                }
-            }
-        }
         return result;
     }