Author: schultz Date: Thu Sep 6 15:05:54 2012 New Revision: 1381634 URL: http://svn.apache.org/viewvc?rev=1381634&view=rev Log: No functional change: a bit of clean-up before adding a new feature.
Modified: tomcat/tc7.0.x/trunk/ (props changed) tomcat/tc7.0.x/trunk/java/org/apache/catalina/manager/JMXProxyServlet.java Propchange: tomcat/tc7.0.x/trunk/ ------------------------------------------------------------------------------ Merged /tomcat/trunk:r1381623 Modified: tomcat/tc7.0.x/trunk/java/org/apache/catalina/manager/JMXProxyServlet.java URL: http://svn.apache.org/viewvc/tomcat/tc7.0.x/trunk/java/org/apache/catalina/manager/JMXProxyServlet.java?rev=1381634&r1=1381633&r2=1381634&view=diff ============================================================================== --- tomcat/tc7.0.x/trunk/java/org/apache/catalina/manager/JMXProxyServlet.java (original) +++ tomcat/tc7.0.x/trunk/java/org/apache/catalina/manager/JMXProxyServlet.java Thu Sep 6 15:05:54 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: dev-unsubscr...@tomcat.apache.org For additional commands, e-mail: dev-h...@tomcat.apache.org