You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@tomcat.apache.org by re...@apache.org on 2001/12/01 18:50:53 UTC
cvs commit: jakarta-tomcat-4.0/jasper/src/share/org/apache/jasper/compiler KjcJavaCompiler.java
remm 01/12/01 09:50:53
Added: jasper/src/share/org/apache/jasper/compiler
KjcJavaCompiler.java
Log:
- Add support for the KJC Java compiler.
Patch submitted Takashi Okamoto <toraneko at kun.ne.jp>
- Note: maybe the compiler support should be refactored to use Ant, as Costin
suggested, since it would avoid having lots of different wrappers and duplicating
functionality.
Revision Changes Path
1.1 jakarta-tomcat-4.0/jasper/src/share/org/apache/jasper/compiler/KjcJavaCompiler.java
Index: KjcJavaCompiler.java
===================================================================
/*
* $Header: /home/cvs/jakarta-tomcat-4.0/jasper/src/share/org/apache/jasper/compiler/KjcJavaCompiler.java,v 1.1 2001/12/01 17:50:53 remm Exp $
* $Revision: 1.1 $
* $Date: 2001/12/01 17:50:53 $
*
* ====================================================================
*
* The Apache Software License, Version 1.1
*
* Copyright (c) 1999 The Apache Software Foundation. All rights
* reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
*
* 1. Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
*
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in
* the documentation and/or other materials provided with the
* distribution.
*
* 3. The end-user documentation included with the redistribution, if
* any, must include the following acknowlegement:
* "This product includes software developed by the
* Apache Software Foundation (http://www.apache.org/)."
* Alternately, this acknowlegement may appear in the software itself,
* if and wherever such third-party acknowlegements normally appear.
*
* 4. The names "The Jakarta Project", "Tomcat", and "Apache Software
* Foundation" must not be used to endorse or promote products derived
* from this software without prior written permission. For written
* permission, please contact apache@apache.org.
*
* 5. Products derived from this software may not be called "Apache"
* nor may "Apache" appear in their names without prior written
* permission of the Apache Group.
*
* THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
* OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
* DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
* ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
* USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
* ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
* OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
* OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
* SUCH DAMAGE.
* ====================================================================
*
* This software consists of voluntary contributions made by many
* individuals on behalf of the Apache Software Foundation. For more
* information on the Apache Software Foundation, please see
* <http://www.apache.org/>.
*
*/
package org.apache.jasper.compiler;
import java.io.OutputStream;
import java.io.OutputStreamWriter;
import java.io.PrintWriter;
import java.io.File;
import java.lang.reflect.Constructor;
import java.lang.reflect.Method;
import java.lang.reflect.InvocationTargetException;
import org.apache.jasper.Constants;
/**
* A Plug-in class for specifying a 'kjc' compiler.
*
* Please link $CATALINA_HOME/jasper/jasper-compiler.jar and kjc.jar
* (or kopi.jar) to $CATALINA_HOME/lib before use.
+
* Most of code in this class is copied from SunJavaCompiler.java.
*
* @author Anil K. Vijendran
* @author Takashi Okamoto <to...@debian.org>
* @author teik <te...@rd5.so-net.ne.jp>
*/
public class KjcJavaCompiler implements JavaCompiler {
String encoding;
String classpath; // ignored
String compilerPath;
String outdir; // ignored
OutputStream out;
/**
* Specify where the compiler can be found
*/
public void setCompilerPath(String compilerPath) {
// not used by the KjcJavaCompiler
this.compilerPath = compilerPath;
}
/**
* Set the encoding (character set) of the source
*/
public void setEncoding(String encoding) {
this.encoding = encoding;
}
/**
* Set the class path for the compiler
*/
public void setClasspath(String classpath) {
this.classpath = classpath;
}
/**
* Set the output directory
*/
public void setOutputDir(String outdir) {
this.outdir = outdir;
}
/**
* Set where you want the compiler output (messages) to go
*/
public void setMsgOutput(OutputStream out) {
this.out = out;
}
/**
* Set where you want the compiler output (messages) to go
*/
public void setOut(OutputStream out) {
this.out = out;
}
public boolean compile(String source) {
char spr = File.separatorChar;
String outputdir = source.substring(0, source.lastIndexOf(spr));
String[] args = new String[]
{
"-encoding", encoding,
"-classpath", classpath,
"-d", outputdir,
source
};
try {
Class c = Class.forName("at.dms.kjc.Main");
Constructor cons = c.getConstructor(null);
Object compiler = cons.newInstance(null);
Method compile = c.getMethod
("run", new Class [] {String.class, PrintWriter.class,
String[].class});
Boolean ok = (Boolean)compile.invoke
(compiler, new Object[] {
(String)null,
new PrintWriter(new OutputStreamWriter(out, encoding)),
args});
String packageName = Constants.JSP_PACKAGE_NAME;
if(packageName != null) {
packageName = spr + packageName.replace('.', spr);
} else {
packageName = "";
}
String className = source.substring
(source.lastIndexOf(spr), source.lastIndexOf(".java"))
+ ".class";
File classFile = new File
(outputdir + packageName + spr + className);
classFile.renameTo(new File(outputdir + spr + className));
return ok.booleanValue();
} catch (ClassNotFoundException e) {
try {
out.write(":kjc can't find. please check kjc installation.".getBytes());
} catch (Exception e2) {
}
return false;
} catch (InvocationTargetException ei) {
try {
out.write(":maybe kjc setup is invalid. please check gnu.getopt.jar installation.".getBytes());
} catch (Exception e2) {
}
return false;
} catch (Exception e){
try {
out.write(":unknown error occured while compiling jsp with kjc.".getBytes());
} catch (Exception e2) {
}
return false;
}
}
}
--
To unsubscribe, e-mail: <ma...@jakarta.apache.org>
For additional commands, e-mail: <ma...@jakarta.apache.org>