You are viewing a plain text version of this content. The canonical link for it is here.
Posted to axis-cvs@ws.apache.org by di...@apache.org on 2004/06/11 21:09:07 UTC

cvs commit: ws-axis/java/src/org/apache/axis/handlers/soap SOAPService.java

dims        2004/06/11 12:09:07

  Modified:    java/src/org/apache/axis/transport/http AdminServlet.java
                        AxisServletBase.java
               java/src/org/apache/axis MessageContext.java
               java/src/org/apache/axis/i18n resource.properties
               java/src/org/apache/axis/handlers/soap SOAPService.java
  Log:
  Fix for AXIS-1389 - Ability to Suspend and Resume Specific Services
  
  Notes:
  - you need to switch on axis.development.system flag either in AdminServlet's init-param or in server-config.wsdd
  - Updated the AdminServlet page to display list of current services and links to suspend/resume.
  
  Revision  Changes    Path
  1.27      +56 -1     ws-axis/java/src/org/apache/axis/transport/http/AdminServlet.java
  
  Index: AdminServlet.java
  ===================================================================
  RCS file: /home/cvs/ws-axis/java/src/org/apache/axis/transport/http/AdminServlet.java,v
  retrieving revision 1.26
  retrieving revision 1.27
  diff -u -r1.26 -r1.27
  --- AdminServlet.java	25 Feb 2004 14:02:45 -0000	1.26
  +++ AdminServlet.java	11 Jun 2004 19:09:07 -0000	1.27
  @@ -19,12 +19,19 @@
   import org.apache.axis.components.logger.LogFactory;
   import org.apache.axis.server.AxisServer;
   import org.apache.axis.utils.Messages;
  +import org.apache.axis.AxisFault;
  +import org.apache.axis.ConfigurationException;
  +import org.apache.axis.handlers.soap.SOAPService;
  +import org.apache.axis.description.ServiceDesc;
   import org.apache.commons.logging.Log;
   
   import javax.servlet.ServletException;
   import javax.servlet.http.HttpServletRequest;
   import javax.servlet.http.HttpServletResponse;
  +import javax.xml.namespace.QName;
   import java.io.IOException;
  +import java.util.Iterator;
  +import java.util.ArrayList;
   
   /**
    * Proof-of-concept "management" servlet for Axis.
  @@ -74,7 +81,19 @@
                   else if (cmd.equals("stop")) {
                       log.info(Messages.getMessage("adminServiceStop", callerIP));
                       server.stop();
  -                }
  +                } 
  +                else if (cmd.equals("suspend")) {
  +                    String name = request.getParameter("service"); 
  +                    log.info(Messages.getMessage("adminServiceSuspend", name, callerIP));
  +                    SOAPService service = server.getConfig().getService(new QName("",name));
  +                    service.stop();
  +                } 
  +                else if (cmd.equals("resume")) {
  +                    String name = request.getParameter("service"); 
  +                    log.info(Messages.getMessage("adminServiceResume", name, callerIP));
  +                    SOAPService service = server.getConfig().getService(new QName("",name));
  +                    service.start();
  +                } 
               } else {
                   //in production we log a hostile probe. Remember: logs can be
                   //used for DoS attacks themselves.
  @@ -84,15 +103,51 @@
   
           // display status
           if (server.isRunning()) {
  +            buffer.append("<H2>");
               buffer.append(Messages.getMessage("serverRun00"));
  +            buffer.append("</H2>");
           }
           else {
  +            buffer.append("<H2>");
               buffer.append(Messages.getMessage("serverStop00"));
  +            buffer.append("</H2>");
           }
           //add commands
           if(isDevelopment()) {
               buffer.append("<p><a href=\"AdminServlet?cmd=start\">start server</a>\n");
               buffer.append("<p><a href=\"AdminServlet?cmd=stop\">stop server</a>\n");
  +
  +            Iterator i;
  +            try {
  +                i = server.getConfig().getDeployedServices();
  +            } catch (ConfigurationException configException) {
  +                //turn any internal configuration exceptions back into axis faults
  +                //if that is what they are
  +                if(configException.getContainedException() instanceof AxisFault) {
  +                    throw (AxisFault) configException.getContainedException();
  +                } else {
  +                    throw configException;
  +                }
  +            }
  +            
  +            buffer.append("<p><h2>Services</h2>");
  +            buffer.append("<ul>");
  +            while (i.hasNext()) {
  +                ServiceDesc sd = (ServiceDesc)i.next();
  +                StringBuffer sb = new StringBuffer();
  +                sb.append("<li>");
  +                String name = sd.getName();
  +                sb.append(name);
  +                SOAPService service = server.getConfig().getService(new QName("",name));
  +                if(service.isRunning()) {
  +                    sb.append("&nbsp;&nbsp;<a href=\"AdminServlet?cmd=suspend&service=" + name + "\">suspend</a>\n");
  +                } else {
  +                    sb.append("&nbsp;&nbsp;<a href=\"AdminServlet?cmd=resume&service=" + name + "\">resume</a>\n");
  +                }
  +                sb.append("</li>");
  +                buffer.append(sb.toString());
  +            }
  +            buffer.append("</ul>");
           }
           //print load
           buffer.append("<p>");
  
  
  
  1.26      +6 -0      ws-axis/java/src/org/apache/axis/transport/http/AxisServletBase.java
  
  Index: AxisServletBase.java
  ===================================================================
  RCS file: /home/cvs/ws-axis/java/src/org/apache/axis/transport/http/AxisServletBase.java,v
  retrieving revision 1.25
  retrieving revision 1.26
  diff -u -r1.25 -r1.26
  --- AxisServletBase.java	25 Feb 2004 14:02:45 -0000	1.25
  +++ AxisServletBase.java	11 Jun 2004 19:09:07 -0000	1.26
  @@ -366,6 +366,12 @@
   
           if (value == null)
               value = context.getInitParameter(param);
  +        try {
  +            AxisServer engine = getEngine(this);
  +            if (value == null && engine != null)
  +                value = (String) engine.getOption(param);
  +        } catch (AxisFault axisFault) {
  +        }
   
           return (value != null) ? value : dephault;
       }
  
  
  
  1.144     +3 -0      ws-axis/java/src/org/apache/axis/MessageContext.java
  
  Index: MessageContext.java
  ===================================================================
  RCS file: /home/cvs/ws-axis/java/src/org/apache/axis/MessageContext.java,v
  retrieving revision 1.143
  retrieving revision 1.144
  diff -u -r1.143 -r1.144
  --- MessageContext.java	26 Apr 2004 11:51:43 -0000	1.143
  +++ MessageContext.java	11 Jun 2004 19:09:07 -0000	1.144
  @@ -792,6 +792,9 @@
           log.debug("MessageContext: setServiceHandler("+sh+")");
           serviceHandler = sh;
           if (sh != null) {
  +            if(!sh.isRunning()) {
  +                throw new AxisFault(Messages.getMessage("disabled00"));
  +            }
               targetService = sh.getName();
               SOAPService service = sh;
               TypeMappingRegistry tmr = service.getTypeMappingRegistry();
  
  
  
  1.88      +2 -0      ws-axis/java/src/org/apache/axis/i18n/resource.properties
  
  Index: resource.properties
  ===================================================================
  RCS file: /home/cvs/ws-axis/java/src/org/apache/axis/i18n/resource.properties,v
  retrieving revision 1.87
  retrieving revision 1.88
  diff -u -r1.87 -r1.88
  --- resource.properties	8 Jun 2004 19:44:56 -0000	1.87
  +++ resource.properties	11 Jun 2004 19:09:07 -0000	1.88
  @@ -21,6 +21,8 @@
   adminServiceLoad=Current load = {0}
   adminServiceStart=Starting service in response to admin request from {0}
   adminServiceStop=Stopping service in response to admin request from {0}
  +adminServiceSuspend=Starting {0} service in response to admin request from {1}
  +adminServiceResume=Stopping {0} service in response to admin request from {1}
   auth00=User ''{0}'' authenticated to server
   auth01=User ''{0}'' authorized to ''{1}''
   
  
  
  
  1.117     +14 -2     ws-axis/java/src/org/apache/axis/handlers/soap/SOAPService.java
  
  Index: SOAPService.java
  ===================================================================
  RCS file: /home/cvs/ws-axis/java/src/org/apache/axis/handlers/soap/SOAPService.java,v
  retrieving revision 1.116
  retrieving revision 1.117
  diff -u -r1.116 -r1.117
  --- SOAPService.java	25 May 2004 19:41:44 -0000	1.116
  +++ SOAPService.java	11 Jun 2004 19:09:07 -0000	1.117
  @@ -114,6 +114,8 @@
        */
       static private Hashtable sessions = new Hashtable();
   
  +    private boolean isRunning = true;
  +    
       /** 
        * Add this passed in Session to this Service's list of sessions
        */
  @@ -432,18 +434,28 @@
        *********************************************************************
        */
   
  -    /** Placeholder for "enable this service" method
  +    /** Placeholder for "resume this service" method
        */
       public void start()
       {
  +        isRunning = true;
       }
   
  -    /** Placeholder for "disable this service" method
  +    /** Placeholder for "suspend this service" method
        */
       public void stop()
       {
  +        isRunning = false;
       }
   
  +    /**
  +     * Is this service suspended?
  +     * @return
  +     */ 
  +    public boolean isRunning() {
  +        return isRunning;
  +    }
  +    
       /**
        * Make this service available on a particular transport
        */