Author: schultz
Date: Thu Sep 6 14:27:42 2012
New Revision: 1381623
URL: http://svn.apache.org/viewvc?rev=1381623&view=rev
Log:
No functional change: a bit of clean-up before adding a new feature.
Modified:
tomcat/trunk/java/org/apache/catalina/manager/JMXProxyServlet.java
Modified: tomcat/trunk/java/org/apache/catalina/manager/JMXProxyServlet.java
URL:
http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/catalina/manager/JMXProxyServlet.java?rev=1381623&r1=1381622&r2=1381623&view=diff
==============================================================================
--- tomcat/trunk/java/org/apache/catalina/manager/JMXProxyServlet.java
(original)
+++ tomcat/trunk/java/org/apache/catalina/manager/JMXProxyServlet.java Thu Sep
6 14:27:42 2012
@@ -21,10 +21,13 @@ import java.io.PrintWriter;
import java.util.Set;
import javax.management.Attribute;
+import javax.management.MBeanException;
import javax.management.MBeanOperationInfo;
import javax.management.MBeanParameterInfo;
import javax.management.MBeanServer;
import javax.management.ObjectName;
+import javax.management.OperationsException;
+import javax.management.ReflectionException;
import javax.management.openmbean.CompositeData;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
@@ -44,6 +47,10 @@ public class JMXProxyServlet extends Htt
private static final long serialVersionUID = 1L;
+ // Constant for "no parameters" when invoking a JMX operation
+ // without any parameters.
+ private static final String[] NO_PARAMETERS = new String[0];
+
// ----------------------------------------------------- Instance Variables
/**
* MBean server.
@@ -77,7 +84,6 @@ public class JMXProxyServlet extends Htt
HttpServletResponse response)
throws IOException, ServletException
{
-
response.setContentType("text/plain");
PrintWriter writer = response.getWriter();
@@ -104,14 +110,8 @@ public class JMXProxyServlet extends Htt
qry = request.getParameter("invoke");
if(qry != null) {
String opName=request.getParameter("op");
- String ps = request.getParameter("ps");
- String[] valuesStr;
- if (ps == null) {
- valuesStr = new String[0];
- } else {
- valuesStr = ps.split(",");
- }
- invokeOperation( writer, qry, opName,valuesStr );
+ String[] params = getInvokeParameters(request.getParameter("ps"));
+ invokeOperation(writer, qry, opName, params);
return;
}
qry=request.getParameter("qry");
@@ -120,7 +120,6 @@ public class JMXProxyServlet extends Htt
}
listBeans( writer, qry );
-
}
public void getAttribute(PrintWriter writer, String onameStr, String att,
String key) {
@@ -162,10 +161,7 @@ public class JMXProxyServlet extends Htt
String onameStr, String att, String val )
{
try {
- ObjectName oname=new ObjectName( onameStr );
- String type=registry.getType(oname, att);
- Object valueObj=registry.convertValue(type, val );
- mBeanServer.setAttribute( oname, new Attribute(att, valueObj));
+ setAttributeInternal(onameStr, att, val);
writer.println("OK - Attribute set");
} catch( Exception ex ) {
writer.println("Error - " + ex.toString());
@@ -205,18 +201,7 @@ public class JMXProxyServlet extends Htt
private void invokeOperation(PrintWriter writer, String onameStr, String
op,
String[] valuesStr) {
try {
- ObjectName oname=new ObjectName( onameStr );
- MBeanOperationInfo methodInfo = registry.getMethodInfo(oname,op);
- MBeanParameterInfo[] signature = methodInfo.getSignature();
- String[] signatureTypes = new String[signature.length];
- Object[] values = new Object[signature.length];
- for (int i = 0; i < signature.length; i++) {
- MBeanParameterInfo pi = signature[i];
- signatureTypes[i] = pi.getType();
- values[i] = registry.convertValue(pi.getType(), valuesStr[i] );
- }
-
- Object retVal = mBeanServer.invoke(oname,op,values,signatureTypes);
+ Object retVal = invokeOperationInternal(onameStr, op, valuesStr);
if (retVal != null) {
writer.println("OK - Operation " + op + " returned:");
output("", writer, retVal);
@@ -229,6 +214,62 @@ public class JMXProxyServlet extends Htt
}
}
+
+ /**
+ * Parses parameter values from a parameter string.
+ * @param paramString The string containing comma-separated
+ * operation-invocation parameters, or
+ * <code>null</code> if there are no parameters.
+ * @return An array of String parameters (empty array if
+ * <code>paramString</code> was <code>null</code>).
+ */
+ private String[] getInvokeParameters(String paramString) {
+ if (paramString == null)
+ return NO_PARAMETERS;
+ else
+ return paramString.split(",");
+ }
+
+ /**
+ * Sets an MBean attribute's value.
+ */
+ private void setAttributeInternal(String onameStr,
+ String attributeName,
+ String value)
+ throws OperationsException, MBeanException, ReflectionException {
+ ObjectName oname=new ObjectName( onameStr );
+ String type=registry.getType(oname, attributeName);
+ Object valueObj=registry.convertValue(type, value );
+ mBeanServer.setAttribute( oname, new Attribute(attributeName,
valueObj));
+ }
+
+ /**
+ * Invokes an operation on an MBean.
+ * @param onameStr The name of the MBean.
+ * @param operation The name of the operation to invoke.
+ * @param parameters An array of Strings containing the parameters to the
+ * operation. They will be converted to the appropriate
+ * types to call the reuested operation.
+ * @return The value returned by the requested operation.
+ */
+ private Object invokeOperationInternal(String onameStr,
+ String operation,
+ String[] parameters)
+ throws OperationsException, MBeanException, ReflectionException {
+ ObjectName oname=new ObjectName( onameStr );
+ MBeanOperationInfo methodInfo =
registry.getMethodInfo(oname,operation);
+ MBeanParameterInfo[] signature = methodInfo.getSignature();
+ String[] signatureTypes = new String[signature.length];
+ Object[] values = new Object[signature.length];
+ for (int i = 0; i < signature.length; i++) {
+ MBeanParameterInfo pi = signature[i];
+ signatureTypes[i] = pi.getType();
+ values[i] = registry.convertValue(pi.getType(), parameters[i] );
+ }
+
+ return mBeanServer.invoke(oname,operation,values,signatureTypes);
+ }
+
private void output(String indent, PrintWriter writer, Object result) {
if (result instanceof Object[]) {
for (Object obj : (Object[]) result) {
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]