Index: E:/Programme/Eclipse 3.2.1 Yoxos/Workspace/org.apache.tomcat.5.5.x/webapps/manager/WEB-INF/classes/org/apache/catalina/manager/JMXProxyServlet.java =================================================================== --- E:/Programme/Eclipse 3.2.1 Yoxos/Workspace/org.apache.tomcat.5.5.x/webapps/manager/WEB-INF/classes/org/apache/catalina/manager/JMXProxyServlet.java (revision 491796) +++ E:/Programme/Eclipse 3.2.1 Yoxos/Workspace/org.apache.tomcat.5.5.x/webapps/manager/WEB-INF/classes/org/apache/catalina/manager/JMXProxyServlet.java (working copy) @@ -23,6 +23,9 @@ import java.io.PrintWriter; import java.util.Iterator; import java.util.Set; + +import javax.management.MBeanOperationInfo; +import javax.management.MBeanParameterInfo; import javax.management.MBeanServer; import javax.management.ObjectName; import javax.management.MBeanInfo; @@ -98,11 +101,17 @@ getAttribute( writer, qry, name ); return; } + qry=request.getParameter("invoke"); + if( qry!= null ) { + String opName=request.getParameter("op"); + String[] valuesStr=request.getParameter("ps").split(","); + invokeOperation( writer, qry, opName,valuesStr ); + return; + } qry=request.getParameter("qry"); if( qry == null ) { qry = "*:*"; } @@ -191,6 +200,27 @@ } } + + public 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); + writer.println("OK - Operation " + op + " returned " + retVal); + } catch( Exception ex ) { + writer.println("Error - " + ex.toString()); + } + } public String escape(String value) { // The only invalid char is \n