gdaniels    02/02/04 06:51:58

  Modified:    java/src/org/apache/axis Constants.java
               java/src/org/apache/axis/handlers JWSProcessor.java
               java/src/org/apache/axis/transport/http AxisServlet.java
                        SimpleAxisServer.java
  Log:
  Allow the system property "axis.jws.servletClassDir"  to change the default
  JWS output directory.  For instance, if we set this to "WEB-INF/jwsClasses"
  and we have a jws file at axis/Foo.jws, the resulting class file will be
  axis/WEB-INF/jwsClasses/Foo.class
  
  Note that I removed the code which changed the class name to match the
  subdirectory structure (i.e. axis/jws/Foo.jws would be assumed to be a
  class called "jws.Foo"), since this seemed just wrong.  The classname
  should come from the package statement, if any, and if we want to respect
  packages, we should just do that right.
  
  Individual tests seem to work, but functional tests are hanging at the moment
  due to what appear to be network problems connecting to whitemesa.  If
  there are problems with this I'll fix them as soon as they're found.
  
  Revision  Changes    Path
  1.50      +2 -2      xml-axis/java/src/org/apache/axis/Constants.java
  
  Index: Constants.java
  ===================================================================
  RCS file: /home/cvs/xml-axis/java/src/org/apache/axis/Constants.java,v
  retrieving revision 1.49
  retrieving revision 1.50
  diff -u -r1.49 -r1.50
  --- Constants.java    1 Feb 2002 05:21:21 -0000       1.49
  +++ Constants.java    4 Feb 2002 14:51:57 -0000       1.50
  @@ -406,8 +406,8 @@
       //////////////////////////////////////////////////////////////////////////
       public static final String URI_DEBUG = "http://xml.apache.org/axis/debug";;
   
  -    // Absolute path of our home directory (if we can determine one)
  -    public static final String MC_HOME_DIR = "homeDir" ;
  +    // Where to put those pesky JWS classes
  +    public static final String MC_JWS_CLASSDIR = "jws.classDir" ;
   
       // Relative path of the request URL (ie. http://.../axis/a.jws = /a.jws
       public static final String MC_RELATIVE_PATH = "path";
  
  
  
  1.34      +36 -10    xml-axis/java/src/org/apache/axis/handlers/JWSProcessor.java
  
  Index: JWSProcessor.java
  ===================================================================
  RCS file: /home/cvs/xml-axis/java/src/org/apache/axis/handlers/JWSProcessor.java,v
  retrieving revision 1.33
  retrieving revision 1.34
  diff -u -r1.33 -r1.34
  --- JWSProcessor.java 15 Jan 2002 17:23:00 -0000      1.33
  +++ JWSProcessor.java 4 Feb 2002 14:51:57 -0000       1.34
  @@ -117,12 +117,43 @@
               /* placed there by another handler (ie. HTTPActionHandler)     */
               /***************************************************************/
               Runtime  rt      = Runtime.getRuntime();
  -            String   jwsFile = msgContext.getStrProp(Constants.MC_REALPATH);
  +            String   jwsFile = msgContext.getStrProp(Constants.MC_RELATIVE_PATH);
  +
  +            int lastSlash = jwsFile.lastIndexOf('/');
  +            String dir = null;
  +
  +            if (lastSlash > 0) {
  +                dir = jwsFile.substring(0, lastSlash);
  +            }
  +
  +            String file = jwsFile.substring(lastSlash + 1);
  +
  +            String outdir = msgContext.getStrProp( Constants.MC_JWS_CLASSDIR );
  +            if ( outdir == null ) outdir = "." ;
  +
  +            // Build matching directory structure under the output
  +            // directory.  In other words, if we have:
  +            //    /webroot/jws1/Foo.jws
  +            //
  +            // That will be compiled to:
  +            //    .../jwsOutputDirectory/jws1/Foo.class
  +            if (dir != null) {
  +                outdir = outdir + File.separator + dir;
  +            }
  +
  +            // Confirm output directory exists.  If not, create it IF we're
  +            // allowed to.
  +            // !!! TODO: add a switch to control this.
  +            File outDirectory = new File(outdir);
  +            if (!outDirectory.exists()) {
  +                outDirectory.mkdirs();
  +            }
  +
               if (category.isInfoEnabled())
                   category.info("jwsFile: " + jwsFile );
               String   jFile   = jwsFile.substring(0, jwsFile.length()-3) +
                       "java" ;
  -            String   cFile   = jwsFile.substring(0, jwsFile.length()-3) +
  +            String   cFile   = outdir + File.separator + file.substring(0, 
file.length()-3) +
                       "class" ;
   
               if (category.isInfoEnabled()) {
  @@ -136,14 +167,14 @@
               /* Get the class */
               /*****************/
               String clsName = null ;
  -            clsName = msgContext.getStrProp(Constants.MC_RELATIVE_PATH);
  +            //clsName = msgContext.getStrProp(Constants.MC_RELATIVE_PATH);
               if ( clsName == null ) clsName = f2.getName();
               if ( clsName != null && clsName.charAt(0) == '/' )
                   clsName = clsName.substring(1);
   
               clsName = clsName.substring( 0, clsName.length()-4 );
               clsName = clsName.replace('/', '.');
  -            
  +
               if (category.isInfoEnabled())
                   category.info("ClsName: " + clsName );
   
  @@ -171,19 +202,14 @@
                   // Process proc = rt.exec( "javac " + jFile );
                   // proc.waitFor();
                   Compiler          compiler = CompilerFactory.getCompiler();
  -                String            outdir   = null ;
                   String[]          args     = null ;
   
  -                outdir = msgContext.getStrProp( Constants.MC_HOME_DIR );
  -                if ( outdir == null ) outdir = f1.getParent();
  -                if ( outdir == null ) outdir = "." ;
  -
                   compiler.setClasspath(getDefaultClasspath(msgContext));
                   compiler.setDestination(outdir);
                   compiler.setFile(jFile);
   
                   boolean result   = compiler.compile();
  -                
  +
                   /* Delete the temporary *.java file and check return code */
                   /**********************************************************/
                   (new File(jFile)).delete();
  
  
  
  1.73      +65 -31    
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.72
  retrieving revision 1.73
  diff -u -r1.72 -r1.73
  --- AxisServlet.java  30 Jan 2002 16:19:11 -0000      1.72
  +++ AxisServlet.java  4 Feb 2002 14:51:58 -0000       1.73
  @@ -112,13 +112,22 @@
   
       private boolean isDebug= false;
   
  +    // Cached path to our WEB-INF directory
  +    private String webInfPath;
  +    // Cached path to JWS output directory
  +    private String jwsClassDir = null;
  +
  +    public AxisServlet() {
  +    }
  +
       public void init() {
  +        webInfPath = getServletContext().getRealPath("/WEB-INF");
  +
           isDebug= category.isDebugEnabled();
           if(isDebug) category.debug("In servlet init");
           String param = getInitParameter("transport.name");
           ServletContext context = getServletConfig().getServletContext();
   
  -
           if (param == null)
               param = context.getInitParameter("transport.name");
           if (param != null)
  @@ -133,6 +142,15 @@
           if (!(param == null) && (param.equalsIgnoreCase("true"))) {
               enableList = true;
           }
  +
  +        // Allow system property to override our default placement of
  +        // JWS class files.
  +        param = System.getProperty("axis.jws.servletClassDir");
  +        if (param != null) {
  +            jwsClassDir = param;
  +        } else {
  +            jwsClassDir = context.getRealPath("/");
  +        }
       }
   
       public AxisServer getEngine() throws AxisFault {
  @@ -144,7 +162,8 @@
               // (so the config files can't get snooped by a browser)
               FileProvider provider = null ;
   
  -            if (!(new File(webInfPath, Constants.SERVER_CONFIG_FILE)).exists()){
  +            if (!(new File(webInfPath,
  +                           Constants.SERVER_CONFIG_FILE)).exists()){
                   InputStream is = null ;
                   is = context.getResourceAsStream("/WEB-INF/"+
                                                    Constants.SERVER_CONFIG_FILE);
  @@ -197,10 +216,11 @@
           ServletContext context = getServletConfig().getServletContext();
           MessageContext msgContext = new MessageContext(engine);
   
  -        msgContext.setProperty(Constants.MC_HOME_DIR, context.getRealPath("/"));
  +        msgContext.setProperty(Constants.MC_JWS_CLASSDIR,
  +                               jwsClassDir);
   
           String realpath = context.getRealPath(req.getServletPath());
  -        String configPath = context.getRealPath("/WEB-INF");
  +        String configPath = webInfPath;
           if (realpath != null) {
               msgContext.setProperty(Constants.MC_REALPATH, realpath);
               msgContext.setProperty(Constants.MC_CONFIGPATH, configPath);
  @@ -209,15 +229,19 @@
               /*********************/
               msgContext.setTransportName(transportName);
   
  -            /* Save some HTTP specific info in the bag in case a handler needs it */
  -            /**********************************************************************/
  +            /* 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, 
getServletContext().getRealPath("/WEB-INF") );
  -            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());
  +            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());
   
               try {
                   String url = req.getScheme() + "://" +
  @@ -262,7 +286,8 @@
                               writer.println("<h2>" +
                                       JavaUtils.getMessage("error00") + "</h2>");
                               writer.println("<p>" +
  -                                    JavaUtils.getMessage("noDeploy00") + "</p>");
  +                                           JavaUtils.getMessage("noDeploy00") +
  +                                           "</p>");
                           }
                       } else {
                           res.setContentType("text/html");
  @@ -287,9 +312,11 @@
                           }
                       }
                       if (method == null) {
  -                        writer.println("<h2>" + JavaUtils.getMessage("error00") +
  -                                ":  " +
  -                                JavaUtils.getMessage("invokeGet00") + "</h2>");
  +                        writer.println("<h2>" +
  +                                       JavaUtils.getMessage("error00") +
  +                                       ":  " +
  +                                       JavaUtils.getMessage("invokeGet00") +
  +                                       "</h2>");
                           writer.println("<p>" +
                                   JavaUtils.getMessage("noMethod01") + "</p>");
                           return;
  @@ -311,7 +338,8 @@
                       Message respMsg = msgContext.getResponseMessage();
                       if (respMsg != null) {
                           writer.println("<p>" +
  -                                JavaUtils.getMessage("gotResponse00") + "</p>");
  +                                       JavaUtils.getMessage("gotResponse00") +
  +                                       "</p>");
                           writer.println(respMsg.getSOAPPart().getAsString());
                       } else {
                           writer.println("<p>" +
  @@ -326,7 +354,7 @@
                               "<p>" +
                               JavaUtils.getMessage("axisService00") + "</p>");
                       writer.println(
  -                            "<i>" + JavaUtils.getMessage("perhaps00") + "</i>");
  +                           "<i>" + JavaUtils.getMessage("perhaps00") + "</i>");
                   }
               } catch (AxisFault fault) {
                   res.setContentType("text/html");
  @@ -384,7 +412,8 @@
   
           if (engine == null) {
               // !!! should return a SOAP fault...
  -            ServletException se= new 
ServletException(JavaUtils.getMessage("noEngine00"));
  +            ServletException se =
  +                    new ServletException(JavaUtils.getMessage("noEngine00"));
               category.debug(se);
               throw se; 
           }
  @@ -403,9 +432,10 @@
           if(isDebug) category.debug("HEADER_CONTENT_LOCATION:" +
             req.getHeader( HTTPConstants.HEADER_CONTENT_LOCATION));
   
  -        Message           msg        = new Message( req.getInputStream(), false,
  -           req.getHeader( HTTPConstants.HEADER_CONTENT_TYPE),
  -            req.getHeader( HTTPConstants.HEADER_CONTENT_LOCATION));
  +        Message msg = new Message( req.getInputStream(),
  +                       false,
  +                       req.getHeader( HTTPConstants.HEADER_CONTENT_TYPE),
  +                       req.getHeader( HTTPConstants.HEADER_CONTENT_LOCATION));
           if(isDebug) category.debug("Message:" + msg);
   
           /* Set the request(incoming) message field in the context */
  @@ -416,16 +446,20 @@
           /*********************/
           msgContext.setTransportName(transportName);
   
  -        /* Save some HTTP specific info in the bag in case a handler needs it */
  -        /**********************************************************************/
  -        msgContext.setProperty(Constants.MC_HOME_DIR, context.getRealPath("/"));
  -        msgContext.setProperty(Constants.MC_RELATIVE_PATH, req.getServletPath());
  +        /* Save some HTTP specific info in the bag in case someone needs it */
  +        /********************************************************************/
  +        msgContext.setProperty(Constants.MC_JWS_CLASSDIR, jwsClassDir);
  +        msgContext.setProperty(Constants.MC_RELATIVE_PATH,
  +                               req.getServletPath());
           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, 
getServletContext().getRealPath("/WEB-INF") );
  -        msgContext.setProperty(HTTPConstants.MC_HTTP_SERVLETPATHINFO, 
req.getPathInfo() );
  -        msgContext.setProperty(HTTPConstants.HEADER_AUTHORIZATION, 
req.getHeader(HTTPConstants.HEADER_AUTHORIZATION) );
  +        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());
   
   
  @@ -436,7 +470,7 @@
               category.debug("Constants.MC_HOME_DIR:" + context.getRealPath("/"));
               category.debug("Constants.MC_RELATIVE_PATH:"+req.getServletPath());
               category.debug("HTTPConstants.MC_HTTP_SERVLETLOCATION:"+
  -               getServletContext().getRealPath("/WEB-INF") );
  +                           webInfPath );
               category.debug("HTTPConstants.MC_HTTP_SERVLETPATHINFO:" + 
req.getPathInfo() );
               category.debug("HTTPConstants.HEADER_AUTHORIZATION:" + 
req.getHeader(HTTPConstants.HEADER_AUTHORIZATION));
               category.debug("Constants.MC_REMOTE_ADDR:"+req.getRemoteAddr());
  @@ -486,7 +520,7 @@
               if (realpath != null)
                   msgContext.setProperty(Constants.MC_REALPATH, realpath);
   
  -            String configPath = context.getRealPath("/WEB-INF");
  +            String configPath = webInfPath;
               if(isDebug) category.debug("configPath:" + configPath);
   
               msgContext.setProperty(Constants.MC_CONFIGPATH, configPath);
  
  
  
  1.44      +4 -0      
xml-axis/java/src/org/apache/axis/transport/http/SimpleAxisServer.java
  
  Index: SimpleAxisServer.java
  ===================================================================
  RCS file: 
/home/cvs/xml-axis/java/src/org/apache/axis/transport/http/SimpleAxisServer.java,v
  retrieving revision 1.43
  retrieving revision 1.44
  diff -u -r1.43 -r1.44
  --- SimpleAxisServer.java     15 Jan 2002 17:57:03 -0000      1.43
  +++ SimpleAxisServer.java     4 Feb 2002 14:51:58 -0000       1.44
  @@ -261,7 +261,11 @@
                               doWsdl = true;
                       }
   
  +                    // Real and relative paths are the same for the
  +                    // SimpleAxisServer
                       msgContext.setProperty(Constants.MC_REALPATH,
  +                                           fileName.toString());
  +                    msgContext.setProperty(Constants.MC_RELATIVE_PATH,
                                              fileName.toString());
   
                       // !!! Fix string concatenation
  
  
  


Reply via email to