You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@tomcat.apache.org by sc...@apache.org on 2020/01/08 14:02:57 UTC

[tomcat] branch 7.0.x updated: Do not throw NPE when MBean operation cannot be found.

This is an automated email from the ASF dual-hosted git repository.

schultz pushed a commit to branch 7.0.x
in repository https://gitbox.apache.org/repos/asf/tomcat.git


The following commit(s) were added to refs/heads/7.0.x by this push:
     new 76100f2  Do not throw NPE when MBean operation cannot be found.
76100f2 is described below

commit 76100f2422ebb82a6d61030b4a538ea204de5021
Author: Christopher Schultz <ch...@christopherschultz.net>
AuthorDate: Wed Jan 8 08:48:41 2020 -0500

    Do not throw NPE when MBean operation cannot be found.
---
 java/org/apache/catalina/manager/JMXProxyServlet.java    | 16 ++++++++++++++++
 java/org/apache/catalina/manager/LocalStrings.properties |  3 +++
 2 files changed, 19 insertions(+)

diff --git a/java/org/apache/catalina/manager/JMXProxyServlet.java b/java/org/apache/catalina/manager/JMXProxyServlet.java
index 3aa778b..24cc809 100644
--- a/java/org/apache/catalina/manager/JMXProxyServlet.java
+++ b/java/org/apache/catalina/manager/JMXProxyServlet.java
@@ -22,6 +22,7 @@ import java.util.Set;
 
 import javax.management.Attribute;
 import javax.management.MBeanException;
+import javax.management.MBeanInfo;
 import javax.management.MBeanOperationInfo;
 import javax.management.MBeanParameterInfo;
 import javax.management.MBeanServer;
@@ -35,6 +36,7 @@ import javax.servlet.http.HttpServletRequest;
 import javax.servlet.http.HttpServletResponse;
 
 import org.apache.catalina.mbeans.MBeanDumper;
+import org.apache.catalina.tribes.util.StringManager;
 import org.apache.tomcat.util.modeler.Registry;
 
 /**
@@ -51,6 +53,8 @@ public class JMXProxyServlet extends HttpServlet  {
     // without any parameters.
     private static final String[] NO_PARAMETERS = new String[0];
 
+    private static final StringManager sm = StringManager.getManager(JMXProxyServlet.class);
+
     // ----------------------------------------------------- Instance Variables
     /**
      * MBean server.
@@ -261,6 +265,18 @@ public class JMXProxyServlet extends HttpServlet  {
         throws OperationsException, MBeanException, ReflectionException {
         ObjectName oname=new ObjectName( onameStr );
         MBeanOperationInfo methodInfo = registry.getMethodInfo(oname,operation);
+        if(null == methodInfo) {
+            // getMethodInfo returns null for both "object not found" and "operation not found"
+            MBeanInfo info = null;
+            try {
+                info = registry.getMBeanServer().getMBeanInfo(oname);
+
+                throw new IllegalArgumentException(sm.getString("jmxProxyServlet.noOperationOnBean", operation, onameStr, info.getClassName()));
+            } catch (Exception e) {
+                throw new IllegalArgumentException(sm.getString("jmxProxyServlet.noBeanFound", onameStr));
+            }
+        }
+
         MBeanParameterInfo[] signature = methodInfo.getSignature();
         String[] signatureTypes = new String[signature.length];
         Object[] values = new Object[signature.length];
diff --git a/java/org/apache/catalina/manager/LocalStrings.properties b/java/org/apache/catalina/manager/LocalStrings.properties
index 08b485c..76c7116 100644
--- a/java/org/apache/catalina/manager/LocalStrings.properties
+++ b/java/org/apache/catalina/manager/LocalStrings.properties
@@ -167,3 +167,6 @@ managerServlet.vminfo=OK - VM info
 
 statusServlet.complete=Complete Server Status
 statusServlet.title=Server Status
+
+jmxProxyServlet.noOperationOnBean=Cannot find operation [{0}] on object name [{1}], which is a [{2}]
+jmxProxyServlet.noBeanFound=Cannot find MBean with object name [{0}]


---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@tomcat.apache.org
For additional commands, e-mail: dev-help@tomcat.apache.org