DO NOT REPLY TO THIS EMAIL, BUT PLEASE POST YOUR BUG 
RELATED COMMENTS THROUGH THE WEB INTERFACE AVAILABLE AT
<http://nagoya.apache.org/bugzilla/show_bug.cgi?id=6058>.
ANY REPLY MADE TO THIS MESSAGE WILL NOT BE COLLECTED AND 
INSERTED IN THE BUG DATABASE.

http://nagoya.apache.org/bugzilla/show_bug.cgi?id=6058

Generated java files not in a correct package





------- Additional Comments From [EMAIL PROTECTED]  2002-03-09 16:14 -------
Proposed changes to implement this enhancement :


changes to 3 classes in the jasper source.


1- JasperLoader.java
 
loadClass(string,boolean) method:
 
i changed this:
 
 // Only load classes for this JSP page
 if( name.startsWith(Constants.JSP_PACKAGE_NAME + "." + className) ) {
     String classFile = name.substring(Constants.JSP_PACKAGE_NAME.length()+1) +
  ".class";
     byte [] cdata = loadClassDataFromFile(classFile);
 
into this:
 
 // Only load classes for this JSP page
 if( name.startsWith(Constants.JSP_PACKAGE_NAME)) {
     byte [] cdata = loadClassDataFromFile(className +".class");

so the test if it is a jsp page is only about the standaard jsp package name
but that should be good enough for everything.
besides that i use the internal classname (which is the real classname without
package or ".class")
instead of computing it again. I really don't know why they do that because the
real class name
is given with the constructor of JasperLoader..
 
 
2- JspServlet.java
 
the loadJSP method:
 
changed this:
 
           if( outURI.endsWith("/") )
                outURI = outURI + jspUri.substring(1,jspUri.lastIndexOf("/")+1);
            else
                outURI = outURI + jspUri.substring(0,jspUri.lastIndexOf("/")+1);;
            outURL = new URL(outURI);
 
into this:
 
           if( outURI.endsWith("/") )
                outURI = outURI + jspUri.substring(1,jspUri.lastIndexOf("/")+1);
            else
                outURI = outURI + jspUri.substring(0,jspUri.lastIndexOf("/")+1);;
 
    StringBuffer sb = new StringBuffer(outURI.length());
          StringTokenizer st = new StringTokenizer(outURI, " ");
          while(st.hasMoreTokens())
          {
           sb.append(st.nextToken());
          }
         outURI = sb.toString();
 
            outURL = new URL(outURI);
 
for removing the spaces out of the output dir (so it is equal to the classpath,
see below)
 
 
and this
 
  jsw.servletClass = jsw.loader.loadClass(
   Constants.JSP_PACKAGE_NAME + "." + ctxt.getServletClassName());
 
into this
 
  jsw.servletClass = jsw.loader.loadClass(ctxt.getServletPackageName() + "." +
ctxt.getServletClassName());
 
This should be default anyway because the ctxt (context class) is defining
everything so it should
also be used here. Default it will say: Constants.JSP_PACKAGE_NAME.
 
 
3- JspEngineContext.java
 
This added to the constructor:
 
        jspFile = jspFile.replace('\\', '/');
        int index = jspFile.lastIndexOf('/');
        if(index > 0)
        {
    String sPackageEnd = jspFile.substring(0, index);
          sPackageEnd = sPackageEnd.replace('/', '.');
          StringBuffer sb = new StringBuffer(sPackageEnd.length());
          
          if(!sPackageEnd.startsWith(".")) sb.append(".");
          // filter out spaces
          StringTokenizer st = new StringTokenizer(sPackageEnd, " ");
          while(st.hasMoreTokens())
          {
           sb.append(st.nextToken());
          }
          this.servletPackageName += sb.toString();
        }
 
so the servletPackageName wil be the default one + the subdirs where it is in.
(i remove the spaces, any idee's what are more allowed in dirs but not in packages?)

--
To unsubscribe, e-mail:   <mailto:[EMAIL PROTECTED]>
For additional commands, e-mail: <mailto:[EMAIL PROTECTED]>

Reply via email to