rsitze      02/05/14 16:15:26

  Modified:    java/src/org/apache/axis/transport/http AxisServlet.java
  Log:
  Added hooks to facilitate using as a derived class.
  
  Revision  Changes    Path
  1.100     +245 -203  
xml-axis/java/src/org/apache/axis/transport/http/AxisServlet.java
  
  Index: AxisServlet.java
  ===================================================================
  RCS file: 
/home/cvs/xml-axis/java/src/org/apache/axis/transport/http/AxisServlet.java,v
  retrieving revision 1.99
  retrieving revision 1.100
  diff -u -r1.99 -r1.100
  --- AxisServlet.java  9 May 2002 18:31:58 -0000       1.99
  +++ AxisServlet.java  14 May 2002 23:15:26 -0000      1.100
  @@ -82,14 +82,15 @@
   import javax.servlet.http.HttpServletRequest;
   import javax.servlet.http.HttpServletResponse;
   import javax.servlet.http.HttpUtils;
  -import java.io.ByteArrayInputStream;
  +
   import java.io.File;
  +import java.io.ByteArrayInputStream;
   import java.io.IOException;
  -
   import java.io.PrintWriter;
  +
   import java.util.Enumeration;
  -import java.util.Map;
   import java.util.HashMap;
  +import java.util.Map;
   import java.util.Iterator;
   import java.util.ArrayList;
   
  @@ -116,7 +117,7 @@
   
       private static final String AXIS_ENGINE = "AxisEngine" ;
   
  -    private boolean isDebug= false;
  +    private static boolean isDebug = false;
   
       // Cached path to our WEB-INF directory
       private String webInfPath = null;
  @@ -136,6 +137,7 @@
           
           isDebug= log.isDebugEnabled();
           if(isDebug) log.debug("In servlet init");
  +
           String param = getInitParameter("transport.name");
   
           if (param == null)
  @@ -159,7 +161,7 @@
           if (param != null) {
               jwsClassDir = homeDir + param;
           } else {
  -            jwsClassDir = webInfPath + File.separator +  "jwsClasses";
  +            jwsClassDir = getDefaultJWSClassDir();
           }
       }
   
  @@ -182,15 +184,17 @@
        * This is a uniform method of initializing AxisServer in a servlet
        * context.
        */
  -    static public AxisServer getEngine(HttpServlet servlet) throws AxisFault {
  +    static public AxisServer getEngine(HttpServlet servlet) throws AxisFault
  +    {
  +        if (isDebug)
  +            log.debug("Enter: getEngine()");
  +
           ServletContext context = servlet.getServletContext();
  -        
  +
           if (context.getAttribute("AxisEngine") == null) {
               String webInfPath = context.getRealPath("/WEB-INF");
   
  -            EngineConfiguration config =
  -                (new ServletEngineConfigurationFactory(context)).
  -                getServerEngineConfig();
  +            EngineConfiguration config = getEngineConfig(context);
   
               Map environment = new HashMap();
               environment.put(AxisEngine.ENV_SERVLET_CONTEXT, context);
  @@ -215,235 +219,253 @@
               context.setAttribute("AxisEngine", 
                                    AxisServer.getServer(environment));
           }
  +
  +        if (isDebug) 
  +            log.debug("Exit: getEngine()");
  +
           return (AxisServer)context.getAttribute("AxisEngine");
       }
   
       public void doGet(HttpServletRequest req, HttpServletResponse res)
  -        throws ServletException, IOException {
  -        if(isDebug) log.debug("In doGet");
  +        throws ServletException, IOException
  +    {
  +        if (isDebug) 
  +            log.debug("Enter: doGet()");
  +
           PrintWriter writer = res.getWriter();
   
  -        if (engine == null) {
  -            try {
  -                engine = getEngine();
  -            } catch (AxisFault fault) {
  -                res.setContentType("text/html");
  -                writer.println("<h2>" +
  -                        JavaUtils.getMessage("error00") + "</h2>");
  -                writer.println("<p>" +
  -                        JavaUtils.getMessage("somethingWrong00") + "</p>");
  -                writer.println("<pre>" + fault.toString() + " </pre>");
  -                return;
  +        try
  +        {
  +            if (engine == null) {
  +                try {
  +                    engine = getEngine();
  +                } catch (AxisFault fault) {
  +                    res.setContentType("text/html");
  +                    writer.println("<h2>" +
  +                                   JavaUtils.getMessage("error00") + "</h2>");
  +                    writer.println("<p>" +
  +                                   JavaUtils.getMessage("somethingWrong00") + 
"</p>");
  +                    writer.println("<pre>" + fault.toString() + " </pre>");
  +                    return;
  +                }
               }
  -        }
   
  -        ServletContext context = getServletConfig().getServletContext();
  -        MessageContext msgContext = new MessageContext(engine);
  +            ServletContext context = getServletConfig().getServletContext();
  +            MessageContext msgContext = new MessageContext(engine);
   
  -        msgContext.setProperty(Constants.MC_JWS_CLASSDIR,
  -                               jwsClassDir);
  -        msgContext.setProperty(Constants.MC_HOME_DIR, homeDir);
  +            msgContext.setProperty(Constants.MC_JWS_CLASSDIR,
  +                                   jwsClassDir);
  +            msgContext.setProperty(Constants.MC_HOME_DIR, homeDir);
   
  -        String pathInfo = req.getPathInfo();
  -        String realpath = context.getRealPath(req.getServletPath());
  -        if ((pathInfo == null || pathInfo.equals("")) &&
  -            !realpath.endsWith(".jws")) {
  -            res.setContentType("text/html");
  -            writer.println("<h2>And now... Some Services</h2>");
  -            Iterator i = engine.getConfig().getDeployedServices();
  -            writer.println("<ul>");
  -            while (i.hasNext()) {
  -                ServiceDesc sd = (ServiceDesc)i.next();
  -                writer.println("<li>" + sd.getName());
  -                ArrayList operations = sd.getOperations();
  -                if (!operations.isEmpty()) {
  -                    writer.println("<ul>");
  -                    for (Iterator it = operations.iterator(); it.hasNext();) {
  -                        OperationDesc desc = (OperationDesc) it.next();
  -                        writer.println("<li>" + desc.getName());
  +            String pathInfo = req.getPathInfo();
  +            String realpath = context.getRealPath(req.getServletPath());
  +            if ((pathInfo == null || pathInfo.equals("")) &&
  +                !realpath.endsWith(".jws")) {
  +                res.setContentType("text/html");
  +                writer.println("<h2>And now... Some Services</h2>");
  +                Iterator i = engine.getConfig().getDeployedServices();
  +                writer.println("<ul>");
  +                while (i.hasNext()) {
  +                    ServiceDesc sd = (ServiceDesc)i.next();
  +                    writer.println("<li>" + sd.getName());
  +                    ArrayList operations = sd.getOperations();
  +                    if (!operations.isEmpty()) {
  +                        writer.println("<ul>");
  +                        for (Iterator it = operations.iterator(); it.hasNext();) {
  +                            OperationDesc desc = (OperationDesc) it.next();
  +                            writer.println("<li>" + desc.getName());
  +                        }
  +                        writer.println("</ul>");
                       }
  -                    writer.println("</ul>");
                   }
  +                writer.println("</ul>");
  +                return;
               }
  -            writer.println("</ul>");
  -            return;
  -        }
  -
  -        String configPath = webInfPath;
  -        if (realpath != null) {
  -            msgContext.setProperty(Constants.MC_RELATIVE_PATH,
  -                                   req.getServletPath());
  -            msgContext.setProperty(Constants.MC_REALPATH, realpath);
  -            msgContext.setProperty(Constants.MC_CONFIGPATH, configPath);
   
  -            /* Set the Transport */
  -            /*********************/
  -            msgContext.setTransportName(transportName);
  -
  -            /* Save some HTTP specific info in the bag in case we need it */
  -            /**************************************************************/
  -            msgContext.setProperty(HTTPConstants.MC_HTTP_SERVLET, this );
  -            msgContext.setProperty(HTTPConstants.MC_HTTP_SERVLETREQUEST, req);
  -            msgContext.setProperty(HTTPConstants.MC_HTTP_SERVLETRESPONSE, res);
  -            msgContext.setProperty(HTTPConstants.MC_HTTP_SERVLETLOCATION,
  -                                   webInfPath);
  -            msgContext.setProperty(HTTPConstants.MC_HTTP_SERVLETPATHINFO,
  -                                   req.getPathInfo() );
  -            msgContext.setProperty(HTTPConstants.HEADER_AUTHORIZATION,
  -                            req.getHeader(HTTPConstants.HEADER_AUTHORIZATION));
  -            msgContext.setProperty(Constants.MC_REMOTE_ADDR,
  -                                   req.getRemoteAddr());
  +            String configPath = webInfPath;
  +            if (realpath != null) {
  +                msgContext.setProperty(Constants.MC_RELATIVE_PATH,
  +                                       req.getServletPath());
  +                msgContext.setProperty(Constants.MC_REALPATH, realpath);
  +                msgContext.setProperty(Constants.MC_CONFIGPATH, configPath);
   
  -            try {
  +                /* Set the Transport */
  +                /*********************/
  +                msgContext.setTransportName(transportName);
  +
  +                /* Save some HTTP specific info in the bag in case we need it */
  +                /**************************************************************/
  +                msgContext.setProperty(HTTPConstants.MC_HTTP_SERVLET, this );
  +                msgContext.setProperty(HTTPConstants.MC_HTTP_SERVLETREQUEST, req);
  +                msgContext.setProperty(HTTPConstants.MC_HTTP_SERVLETRESPONSE, res);
  +                msgContext.setProperty(HTTPConstants.MC_HTTP_SERVLETLOCATION,
  +                                       webInfPath);
  +                msgContext.setProperty(HTTPConstants.MC_HTTP_SERVLETPATHINFO,
  +                                       req.getPathInfo() );
  +                msgContext.setProperty(HTTPConstants.HEADER_AUTHORIZATION,
  +                                       
req.getHeader(HTTPConstants.HEADER_AUTHORIZATION));
  +                msgContext.setProperty(Constants.MC_REMOTE_ADDR,
  +                                       req.getRemoteAddr());
   
  -                // NOTE:  HttpUtils.getRequestURL has been deprecated.  This line 
SHOULD
  -                // be:  String url = req.getRequestURL().toString()
  -                // HOWEVER!!!!  DON'T REPLACE IT!  There's a bug in 
req.getRequestURL
  -                // that is not in HttpUtils.getRequestURL.  req.getRequestURL 
returns
  -                // "localhost" in the remote scenario rather than the actual host 
name.
  -                String url = HttpUtils.getRequestURL(req).toString();
  -
  -                msgContext.setProperty(MessageContext.TRANS_URL, url);
  -
  -                boolean wsdlRequested = false;
  -                boolean listRequested = false;
  -
  -                String queryString = req.getQueryString();
  -                if (queryString != null) {
  -                    if (queryString.equalsIgnoreCase("wsdl")) {
  -                        wsdlRequested = true;
  -                    } else if (queryString.equalsIgnoreCase("list")) {
  -                        listRequested = true;
  +                try {
  +                    // NOTE:  HttpUtils.getRequestURL has been deprecated.
  +                    // This line SHOULD be:
  +                    //    String url = req.getRequestURL().toString()
  +                    // HOWEVER!!!!  DON'T REPLACE IT!  There's a bug in
  +                    // req.getRequestURL that is not in HttpUtils.getRequestURL
  +                    // req.getRequestURL returns"localhost" in the remote
  +                    // scenario rather than the actual host name.
  +                    String url = HttpUtils.getRequestURL(req).toString();
  +
  +                    msgContext.setProperty(MessageContext.TRANS_URL, url);
  +
  +                    boolean wsdlRequested = false;
  +                    boolean listRequested = false;
  +
  +                    String queryString = req.getQueryString();
  +                    if (queryString != null) {
  +                        if (queryString.equalsIgnoreCase("wsdl")) {
  +                            wsdlRequested = true;
  +                        } else if (queryString.equalsIgnoreCase("list")) {
  +                            listRequested = true;
  +                        }
                       }
  -                }
   
  -                if (wsdlRequested) {
  -                    engine.generateWSDL(msgContext);
  -                    Document doc = (Document) msgContext.getProperty("WSDL");
  -                    if (doc != null) {
  -                        res.setContentType("text/xml");
  -                        XMLUtils.DocumentToWriter(doc, writer);
  -                    } else {
  -                        res.setContentType("text/html");
  -                        writer.println("<h2>" +
  -                                JavaUtils.getMessage("error00") + "</h2>");
  -                        writer.println("<p>" +
  -                                JavaUtils.getMessage("noWSDL00") + "</p>");
  -                    }
  -                } else if (listRequested) {
  -                    if (enableList) {
  -                        Document doc = Admin.listConfig(engine);
  +                    if (wsdlRequested) {
  +                        engine.generateWSDL(msgContext);
  +                        Document doc = (Document) msgContext.getProperty("WSDL");
                           if (doc != null) {
                               res.setContentType("text/xml");
                               XMLUtils.DocumentToWriter(doc, writer);
                           } else {
                               res.setContentType("text/html");
                               writer.println("<h2>" +
  -                                    JavaUtils.getMessage("error00") + "</h2>");
  +                                           JavaUtils.getMessage("error00") + 
"</h2>");
                               writer.println("<p>" +
  -                                           JavaUtils.getMessage("noDeploy00") +
  -                                           "</p>");
  +                                           JavaUtils.getMessage("noWSDL00") + 
"</p>");
                           }
  -                    } else {
  -                        res.setContentType("text/html");
  -                        writer.println("<h2>" +
  -                                JavaUtils.getMessage("error00") + "</h2>");
  -                        writer.println("<p><i>?list</i>" +
  -                                JavaUtils.getMessage("disabled00") + "</p>");
  -                    }
  -                } else if (req.getParameterNames().hasMoreElements()) {
  -                    res.setContentType("text/html");
  -                    Enumeration enum = req.getParameterNames();
  -                    String method = null;
  -                    String args = "";
  -                    while (enum.hasMoreElements()) {
  -                        String param = (String) enum.nextElement();
  -                        if (param.equalsIgnoreCase("method")) {
  -                            method = req.getParameter(param);
  +                    } else if (listRequested) {
  +                        if (enableList) {
  +                            Document doc = Admin.listConfig(engine);
  +                            if (doc != null) {
  +                                res.setContentType("text/xml");
  +                                XMLUtils.DocumentToWriter(doc, writer);
  +                            } else {
  +                                res.setContentType("text/html");
  +                                writer.println("<h2>" +
  +                                               JavaUtils.getMessage("error00") + 
"</h2>");
  +                                writer.println("<p>" +
  +                                               JavaUtils.getMessage("noDeploy00") +
  +                                               "</p>");
  +                            }
                           } else {
  -                            args += "<" + param + ">" +
  +                            res.setContentType("text/html");
  +                            writer.println("<h2>" +
  +                                           JavaUtils.getMessage("error00") + 
"</h2>");
  +                            writer.println("<p><i>?list</i>" +
  +                                           JavaUtils.getMessage("disabled00") + 
"</p>");
  +                        }
  +                    } else if (req.getParameterNames().hasMoreElements()) {
  +                        res.setContentType("text/html");
  +                        Enumeration enum = req.getParameterNames();
  +                        String method = null;
  +                        String args = "";
  +                        while (enum.hasMoreElements()) {
  +                            String param = (String) enum.nextElement();
  +                            if (param.equalsIgnoreCase("method")) {
  +                                method = req.getParameter(param);
  +                            } else {
  +                                args += "<" + param + ">" +
                                       req.getParameter(param) +
                                       "</" + param + ">";
  +                            }
  +                        }
  +                        if (method == null) {
  +                            writer.println("<h2>" +
  +                                           JavaUtils.getMessage("error00") +
  +                                           ":  " +
  +                                           JavaUtils.getMessage("invokeGet00") +
  +                                           "</h2>");
  +                            writer.println("<p>" +
  +                                           JavaUtils.getMessage("noMethod01") + 
"</p>");
  +                            return;
  +                        }
  +                        String body = "<" + method + ">" + args +
  +                            "</" + method + ">";
  +                        String msgtxt = "<SOAP-ENV:Envelope 
xmlns:SOAP-ENV=\"http://schemas.xmlsoap.org/soap/envelope/\";>" +
  +                            "<SOAP-ENV:Body>" + body + "</SOAP-ENV:Body>" +
  +                            "</SOAP-ENV:Envelope>";
  +                        ByteArrayInputStream istream = new ByteArrayInputStream(
  +                                msgtxt.getBytes());
  +                        Message msg = new Message(istream, false);
  +                        msgContext.setRequestMessage(msg);
  +                        //                    if (msg != null) {
  +                        //                        writer.println(msg.getAsString());
  +                        //                        return;
  +                        //                    }
  +                        engine.invoke(msgContext);
  +                        Message respMsg = msgContext.getResponseMessage();
  +                        if (respMsg != null) {
  +                            writer.println("<p>" +
  +                                           JavaUtils.getMessage("gotResponse00") +
  +                                           "</p>");
  +                            writer.println(respMsg.getSOAPPart().getAsString());
  +                        } else {
  +                            writer.println("<p>" +
  +                                           JavaUtils.getMessage("noResponse01") + 
"</p>");
                           }
  -                    }
  -                    if (method == null) {
  -                        writer.println("<h2>" +
  -                                       JavaUtils.getMessage("error00") +
  -                                       ":  " +
  -                                       JavaUtils.getMessage("invokeGet00") +
  -                                       "</h2>");
  -                        writer.println("<p>" +
  -                                JavaUtils.getMessage("noMethod01") + "</p>");
  -                        return;
  -                    }
  -                    String body = "<" + method + ">" + args +
  -                                  "</" + method + ">";
  -                    String msgtxt = "<SOAP-ENV:Envelope 
xmlns:SOAP-ENV=\"http://schemas.xmlsoap.org/soap/envelope/\";>" +
  -                                 "<SOAP-ENV:Body>" + body + "</SOAP-ENV:Body>" +
  -                                 "</SOAP-ENV:Envelope>";
  -                    ByteArrayInputStream istream = new ByteArrayInputStream(
  -                        msgtxt.getBytes());
  -                    Message msg = new Message(istream, false);
  -                    msgContext.setRequestMessage(msg);
  -//                    if (msg != null) {
  -//                        writer.println(msg.getAsString());
  -//                        return;
  -//                    }
  -                    engine.invoke(msgContext);
  -                    Message respMsg = msgContext.getResponseMessage();
  -                    if (respMsg != null) {
  -                        writer.println("<p>" +
  -                                       JavaUtils.getMessage("gotResponse00") +
  -                                       "</p>");
  -                        writer.println(respMsg.getSOAPPart().getAsString());
                       } else {
  -                        writer.println("<p>" +
  -                                JavaUtils.getMessage("noResponse01") + "</p>");
  +                        res.setContentType("text/html");
  +                        writer.println("<h1>" + req.getRequestURI() +
  +                                       "</h1>");
  +                        writer.println(
  +                                "<p>" +
  +                                JavaUtils.getMessage("axisService00") + "</p>");
  +                        writer.println(
  +                                "<i>" + JavaUtils.getMessage("perhaps00") + "</i>");
                       }
  -                } else {
  +                } catch (AxisFault fault) {
  +                    res.setContentType("text/html");
  +                    writer.println("<h2>" +
  +                                   JavaUtils.getMessage("error00") + "</h2>");
  +                    writer.println("<p>" +
  +                                   JavaUtils.getMessage("somethingWrong00") + 
"</p>");
  +                    writer.println("<pre>" + fault.toString() + " </pre>");
  +                } catch (Exception e) {
                       res.setContentType("text/html");
  -                    writer.println("<h1>" + req.getRequestURI() +
  -                            "</h1>");
  -                    writer.println(
  -                            "<p>" +
  -                            JavaUtils.getMessage("axisService00") + "</p>");
  -                    writer.println(
  -                           "<i>" + JavaUtils.getMessage("perhaps00") + "</i>");
  +                    writer.println("<h2>" +
  +                                   JavaUtils.getMessage("error00") + "</h2>");
  +                    writer.println("<p>" +
  +                                   JavaUtils.getMessage("somethingWrong00") + 
"</p>");
  +                    writer.println("<pre>Exception - " + e + "<br>");
  +                    e.printStackTrace(res.getWriter());
  +                    writer.println("</pre>");
                   }
  -            } catch (AxisFault fault) {
  -                res.setContentType("text/html");
  -                writer.println("<h2>" +
  -                        JavaUtils.getMessage("error00") + "</h2>");
  -                writer.println("<p>" +
  -                        JavaUtils.getMessage("somethingWrong00") + "</p>");
  -                writer.println("<pre>" + fault.toString() + " </pre>");
  -            } catch (Exception e) {
  +            }
  +            else
  +            {
                   res.setContentType("text/html");
  -                writer.println("<h2>" +
  -                        JavaUtils.getMessage("error00") + "</h2>");
  -                writer.println("<p>" +
  -                        JavaUtils.getMessage("somethingWrong00") + "</p>");
  -                writer.println("<pre>Exception - " + e + "<br>");
  -                e.printStackTrace(res.getWriter());
  -                writer.println("</pre>");
  -            } finally {
  -                writer.close();
  -                return;
  +                writer.println( "<html><h1>Axis HTTP Servlet</h1>" );
  +                writer.println( JavaUtils.getMessage("reachedServlet00"));
  +
  +                writer.println("<p>" + JavaUtils.getMessage("transportName00",
  +                                                            "<b>" + transportName + 
"</b>"));
  +                writer.println("</html>");
               }
  +        } finally {
  +            writer.close();
           }
   
  -        res.setContentType("text/html");
  -        writer.println( "<html><h1>Axis HTTP Servlet</h1>" );
  -        writer.println( JavaUtils.getMessage("reachedServlet00"));
  -
  -        writer.println("<p>" + JavaUtils.getMessage("transportName00",
  -                "<b>" + transportName + "</b>"));
  -        writer.println("</html>");
  +        if (isDebug) 
  +            log.debug("Exit: doGet()");
       }
   
       public void doPost(HttpServletRequest req, HttpServletResponse res)
  -        throws ServletException, IOException {
  -        if(isDebug) log.debug("In doPost");
  +        throws ServletException, IOException
  +    {
  +        if (isDebug) 
  +            log.debug("Enter: doPost()");
  +
           if (engine == null) {
               try {
                   engine = getEngine();
  @@ -468,7 +490,7 @@
               // !!! should return a SOAP fault...
               ServletException se =
                       new ServletException(JavaUtils.getMessage("noEngine00"));
  -            log.debug(se);
  +            log.debug("No Engine!", se);
               throw se; 
           }
   
  @@ -595,9 +617,8 @@
               if ( e instanceof AxisFault ) {
                   AxisFault  af = (AxisFault) e ;
                   // Should really be doing this with explicit AxisFault
  -                // sublcasses... --Glen
  -                if ( "Server.Unauthorized".equals(
  -                        af.getFaultCode().getLocalPart() ) )
  +                // subclasses... --Glen
  +                if ( "Server.Unauthorized".equals(af.getFaultCode().getLocalPart() 
) )
                       res.setStatus( HttpServletResponse.SC_UNAUTHORIZED );
                   else
                       res.setStatus( HttpServletResponse.SC_INTERNAL_SERVER_ERROR );
  @@ -644,6 +665,27 @@
           if(!res.isCommitted()) {
               res.flushBuffer(); //Force it right now.
           }
  -        if(isDebug) log.debug("Response sent.");
  +
  +        if (isDebug) {
  +            log.debug("Response sent.");
  +            log.debug("Exit: doPost()");
  +        }
  +    }
  +
  +    /**
  +     * Provided to allow overload of default JWSClassDir
  +     * by derived class.
  +     */
  +    protected String getDefaultJWSClassDir() {
  +        return webInfPath + File.separator +  "jwsClasses";
  +    }
  +
  +    /**
  +     * Provided to allow overload of default engine config
  +     * by derived class.
  +     */
  +    protected static EngineConfiguration getEngineConfig(ServletContext context) {
  +        return (new ServletEngineConfigurationFactory(context)).
  +            getServerEngineConfig();
       }
   }
  
  
  


Reply via email to