package org.jboss.console.remote;
import javax.servlet.ServletException;
public class InvokerServlet extends javax.servlet.http.HttpServlet
{
private static org.jboss.logging.Logger log = org.jboss.logging.Logger.getLogger (InvokerServlet.class);
private static String REQUEST_CONTENT_TYPE =
"application/x-java-serialized-object; class=org.jboss.console.remote.RemoteMBeanInvocation";
private static String RESPONSE_CONTENT_TYPE =
"application/x-java-serialized-object; class=org.jboss.invocation.MarshalledValue";
private javax.management.MBeanServer mbeanServer;
public void init (javax.servlet.ServletConfig config) throws ServletException
{
super.init (config);
mbeanServer = org.jboss.mx.util.MBeanServerLocator.locateJBoss();
if( mbeanServer == null )
throw new ServletException ("Failed to locate the MBeanServer");
}
public void destroy ()
{
}
protected void processRequest (javax.servlet.http.HttpServletRequest request, javax.servlet.http.HttpServletResponse response) throws ServletException, java.io.IOException
{
boolean trace = log.isTraceEnabled ();
if( trace )
{
log.trace ("processRequest, ContentLength: "+request.getContentLength ());
log.trace ("processRequest, ContentType: "+request.getContentType ());
}
try
{
response.setContentType (RESPONSE_CONTENT_TYPE);
Object mi = request.getAttribute ("RemoteMBeanInvocation");
if( mi == null )
{
javax.servlet.ServletInputStream sis = request.getInputStream ();
java.io.ObjectInputStream ois = new java.io.ObjectInputStream (sis);
mi = ois.readObject ();
ois.close ();
}
Object value = null;
if (mi instanceof RemoteMBeanInvocation)
{
RemoteMBeanInvocation invocation = (RemoteMBeanInvocation)mi;
value = mbeanServer.invoke (invocation.targetObjectName, invocation.actionName, invocation.params, invocation.signature);
}
else
{
RemoteMBeanAttributeInvocation invocation = (RemoteMBeanAttributeInvocation)mi;
value = mbeanServer.getAttribute(invocation.targetObjectName, invocation.attributeName);
}
org.jboss.invocation.MarshalledValue mv = new org.jboss.invocation.MarshalledValue (value);
javax.servlet.ServletOutputStream sos = response.getOutputStream ();
java.io.ObjectOutputStream oos = new java.io.ObjectOutputStream (sos);
oos.writeObject (mv);
oos.close ();
}
catch(Throwable t)
{
t = org.jboss.mx.util.JMXExceptionDecoder.decode (t);
org.jboss.invocation.InvocationException appException = new org.jboss.invocation.InvocationException (t);
log.debug ("Invoke threw exception", t);
response.resetBuffer ();
org.jboss.invocation.MarshalledValue mv = new org.jboss.invocation.MarshalledValue (appException);
javax.servlet.ServletOutputStream sos = response.getOutputStream ();
java.io.ObjectOutputStream oos = new java.io.ObjectOutputStream (sos);
oos.writeObject (mv);
oos.close ();
}
}
protected void doGet (javax.servlet.http.HttpServletRequest request, javax.servlet.http.HttpServletResponse response) throws ServletException, java.io.IOException
{
processRequest (request, response);
}
protected void doPost (javax.servlet.http.HttpServletRequest request, javax.servlet.http.HttpServletResponse response) throws ServletException, java.io.IOException
{
processRequest (request, response);
}
public String getServletInfo ()
{
return "An HTTP to JMX MBeanServer servlet";
}
}