Hmmm... sun.tools.javac.Main is deprecated in JDK1.4. This means it'll go away at some point (in a few years, so maybe we don't have to worry about it). When it DOES go away, what will we do, then?

Russell Butek
[EMAIL PROTECTED]

Please respond to [EMAIL PROTECTED]

To: [EMAIL PROTECTED]
cc:
Subject: cvs commit: xml-axis/java/src/org/apache/axis/utils/compiler Javac.java



dims        2002/06/05 11:53:41

    Modified:    java/src/org/apache/axis/utils/compiler Javac.java
    Log:
    Use Reflection to avoid deprecation errors.


    NOTE:
    com.sun.tools.javac.Main does not have an entry point for passing an output stream to capture the compile errors.
    So we use sun.tools.javac.Main entry-point in both environments. The modern flag is needed to parse the output,


    Revision  Changes    Path
    1.8       +26 -5     xml-axis/java/src/org/apache/axis/utils/compiler/Javac.java


    Index: Javac.java
    ===================================================================
    RCS file: /home/cvs/xml-axis/java/src/org/apache/axis/utils/compiler/Javac.java,v
    retrieving revision 1.7
    retrieving revision 1.8
    diff -u -r1.7 -r1.8
    --- Javac.java 15 Mar 2002 01:14:11 -0000 1.7
    +++ Javac.java 5 Jun 2002 18:53:41 -0000 1.8
    @@ -56,7 +56,6 @@

    package org.apache.axis.utils.compiler;

    import org.apache.axis.utils.JavaUtils;
    -

    import org.apache.commons.logging.Log;
    import org.apache.commons.logging.LogFactory;


    @@ -65,6 +64,9 @@
    import java.io.ByteArrayOutputStream;
    import java.io.File;
    import java.io.IOException;

    +import java.io.OutputStream;
    +import java.lang.reflect.Constructor;
    +import java.lang.reflect.Method;

    import java.util.ArrayList;
    import java.util.List;
    import java.util.NoSuchElementException;

    @@ -75,7 +77,7 @@
    *
    * @author <a href=""mailto:[EMAIL PROTECTED]">Davanum Srinivas</a>
    * @author <a href=""mailto:[EMAIL PROTECTED]">Stefano Mazzocchi</a>
    - * @version $Revision: 1.7 $ $Date: 2002/03/15 01:14:11 $
    + * @version $Revision: 1.8 $ $Date: 2002/06/05 18:53:41 $

    * @since 2.0
    */


    @@ -120,9 +122,28 @@
    */
      public boolean compile() throws IOException {
      ByteArrayOutputStream err = new ByteArrayOutputStream();
    -        sun.tools.javac.Main compiler = new sun.tools.javac.Main(err, "javac");
    -        boolean result =
    -                compiler.compile(toStringArray(fillArguments(new ArrayList())));
    +        boolean result = false;
    +
    +        try {
    +            // Create an instance of the compiler, redirecting output to err
    +            Class c = Class.forName("sun.tools.javac.Main");
    +            Constructor cons =
    +                c.getConstructor(new Class[] { OutputStream.class,
    +                                               String.class });
    +            Object compiler = cons.newInstance(new Object[] { err,
    +                                                              "javac" });
    +            // Call the compile() method
    +            Method compile = c.getMethod("compile",
    +                                         new Class [] { String[].class });
    +            Boolean ok =
    +                (Boolean) compile.invoke(compiler,
    +                                        new Object[] {toStringArray(fillArguments(new ArrayList()))});
    +            result = ok.booleanValue();
    +        } catch (Exception cnfe){
    +            log.error(JavaUtils.getMessage("noCompiler00"), cnfe);
    +            throw new RuntimeException(JavaUtils.getMessage("noCompiler00"));
    +        }
    +
          this.errors = new ByteArrayInputStream(err.toByteArray());
          return result;
      }


Reply via email to