costin      02/01/23 15:28:49

  Modified:    src/share/org/apache/jasper/compiler SunJavaCompiler.java
  Log:
  A bit of cut&paste from ant, to better control javac.Main loading.
  
  In some cases, even if we do have tools.jar in the thread loader or another
  class loader, having Main referenced directly can result in ClassNotFound.
  
  Revision  Changes    Path
  1.4       +60 -25    
jakarta-tomcat/src/share/org/apache/jasper/compiler/SunJavaCompiler.java
  
  Index: SunJavaCompiler.java
  ===================================================================
  RCS file: 
/home/cvs/jakarta-tomcat/src/share/org/apache/jasper/compiler/SunJavaCompiler.java,v
  retrieving revision 1.3
  retrieving revision 1.4
  diff -u -r1.3 -r1.4
  --- SunJavaCompiler.java      14 Jan 2001 20:45:40 -0000      1.3
  +++ SunJavaCompiler.java      23 Jan 2002 23:28:49 -0000      1.4
  @@ -1,7 +1,7 @@
   /*
  - * $Header: 
/home/cvs/jakarta-tomcat/src/share/org/apache/jasper/compiler/SunJavaCompiler.java,v 
1.3 2001/01/14 20:45:40 larryi Exp $
  - * $Revision: 1.3 $
  - * $Date: 2001/01/14 20:45:40 $
  + * $Header: 
/home/cvs/jakarta-tomcat/src/share/org/apache/jasper/compiler/SunJavaCompiler.java,v 
1.4 2002/01/23 23:28:49 costin Exp $
  + * $Revision: 1.4 $
  + * $Date: 2002/01/23 23:28:49 $
    *
    * ====================================================================
    * 
  @@ -62,7 +62,8 @@
   package org.apache.jasper.compiler;
   
   import java.io.OutputStream;
  -import sun.tools.javac.Main;
  +import java.lang.reflect.Constructor;
  +import java.lang.reflect.Method;
   
   /**
    * The default compiler. This is the javac present in JDK 1.1.x and
  @@ -132,29 +133,63 @@
           this.classDebugInfo = classDebugInfo;
       }
   
  +    ClassLoader loader=null;
  +    public void setLoader( ClassLoader cl  ) {
  +        loader=cl;
  +    }
  +
       public boolean compile(String source) {
  -        Main compiler = new Main(out, "jsp->javac");
  -        String[] args;
   
  -        if (classDebugInfo) {
  -            args = new String[]
  -            {
  -                "-g",
  -                "-encoding", encoding,
  -                "-classpath", classpath,
  -                "-d", outdir,
  -                source
  -            };
  -     } else {
  -            args = new String[]
  -            {
  -                "-encoding", encoding,
  -                "-classpath", classpath,
  -                "-d", outdir,
  -                source
  -            };
  +        try {
  +            Class c;
  +            if( loader==null ) 
  +                c = Class.forName("sun.tools.javac.Main");
  +            else
  +                c=loader.loadClass("sun.tools.javac.Main");
  +            
  +            Constructor cons =
  +                c.getConstructor(new Class[] { OutputStream.class,
  +                                               String.class });
  +            
  +            Object compiler = cons.newInstance(new Object[] { out,
  +                                                              "jsp->javac" });
  +
  +            // Call the compile() method
  +            Method compile = c.getMethod("compile",
  +                                         new Class [] { String[].class });
  +
  +            String[] args;
  +
  +            if (classDebugInfo) {
  +                args = new String[]
  +                    {
  +                        "-g",
  +                        "-encoding", encoding,
  +                        "-classpath", classpath,
  +                        "-d", outdir,
  +                        source
  +                    };
  +            } else {
  +                args = new String[]
  +                    {
  +                        "-encoding", encoding,
  +                        "-classpath", classpath,
  +                        "-d", outdir,
  +                        source
  +                    };
  +            }
  +            Boolean ok =
  +                (Boolean)compile.invoke(compiler,
  +                                        new Object[] {args});
  +            return ok.booleanValue();
           }
  -
  -        return compiler.compile(args);
  +        catch (ClassNotFoundException ex) {
  +            ex.printStackTrace();
  +            return false;
  +        }
  +        catch (Exception ex1) {
  +            ex1.printStackTrace();
  +            return false;
  +        } 
       }
   }
  
  
  

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

Reply via email to