You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@tomcat.apache.org by co...@apache.org on 2001/05/21 07:13:11 UTC

cvs commit: jakarta-tomcat/src/facade22/org/apache/tomcat/facade JspInterceptor.java

costin      01/05/20 22:13:11

  Modified:    src/facade22/org/apache/tomcat/facade JspInterceptor.java
  Log:
  A small change in JspInterceptor, to reduce the configuration pains.
  
  We'll check if jikes is available and used it - many people find
  editing configuration files harder than having code guess for them :-)
  
  There are few other places in the code where we can try a bit harder to
  guess what the user wants.
  
  ( you can still explicitely set a javaCompiler ).
  
  Revision  Changes    Path
  1.23      +66 -28    jakarta-tomcat/src/facade22/org/apache/tomcat/facade/JspInterceptor.java
  
  Index: JspInterceptor.java
  ===================================================================
  RCS file: /home/cvs/jakarta-tomcat/src/facade22/org/apache/tomcat/facade/JspInterceptor.java,v
  retrieving revision 1.22
  retrieving revision 1.23
  diff -u -r1.22 -r1.23
  --- JspInterceptor.java	2001/04/28 21:14:47	1.22
  +++ JspInterceptor.java	2001/05/21 05:13:10	1.23
  @@ -211,7 +211,9 @@
       public void setJavaCompiler( String type ) {
   	if( "jikes".equals( type ) )
   	    type=JIKES;
  -
  +	if( "javac".equals( type ) )
  +	    type="org.apache.jasper.compiler.SunJavaCompiler";
  +		
   	args.put( "jspCompilerPlugin", type );
       }
   
  @@ -613,10 +615,9 @@
   								    jspFile,
   								    options,
   								    mangler);
  -		JavaCompiler javaC=createJavaCompiler( options );
  -
   		jsp2java( mangler, ctxt );
  -		javac( javaC, ctxt, mangler );
  +
  +		javac( options, ctxt, mangler );
   	    
   		if(debug>0)log.log( "Generated " +
   				    mangler.getClassFileName() );
  @@ -671,33 +672,77 @@
       String javaEncoding = "UTF8";           // perhaps debatable?
       static String sep = System.getProperty("path.separator");
   
  -    /** Compile a java to class. This should be moved to util, togheter
  -	with JavaCompiler - it's a general purpose code, no need to
  -	keep it part of jasper
  -    */
  -    void javac(JavaCompiler javac, JspCompilationContext ctxt,
  -	       Mangler mangler)
  +    private void prepareCompiler( JavaCompiler javac,
  +				  Options options, 
  +				  JspCompilationContext ctxt )
   	throws JasperException
       {
  +	String compilerPath = options.getJspCompilerPath();
  +        if (compilerPath != null)
  +            javac.setCompilerPath(compilerPath);
   
  -        javac.setEncoding(javaEncoding);
  +	javac.setClassDebugInfo(options.getClassDebugInfo());
  +
  +	javac.setEncoding(javaEncoding);
   	String cp=System.getProperty("java.class.path")+ sep + 
   	    ctxt.getClassPath() + sep + ctxt.getOutputDir();
  -//        System.out.println("classpath:"+cp);
           javac.setClasspath( cp );
  -	if( debug>5) log.log( "ClassPath " + cp);
  -	
  -	ByteArrayOutputStream out = new ByteArrayOutputStream (256);
   	javac.setOutputDir(ctxt.getOutputDir());
  -        javac.setMsgOutput(out);
   
  +	if( debug>5) log.log( "ClassPath " + cp);
  +    }
  +
  +    static boolean tryJikes=true;
  +    static Class jspCompilerPlugin = null;
  +    
  +    /** Compile a java to class. This should be moved to util, togheter
  +	with JavaCompiler - it's a general purpose code, no need to
  +	keep it part of jasper
  +    */
  +    void javac(Options options, JspCompilationContext ctxt,
  +	       Mangler mangler)
  +	throws JasperException
  +    {
   	String javaFileName = mangler.getJavaFileName();
   	if( debug>0 ) log.log( "Compiling java file " + javaFileName);
  -	/**
  -         * Execute the compiler
  -         */
  -        boolean status = javac.compile(javaFileName);
   
  +	boolean status=true;
  +	if( jspCompilerPlugin == null ) {
  +	    jspCompilerPlugin=options.getJspCompilerPlugin();
  +	}
  +	// If no explicit compiler, and we never tried before
  +	if( jspCompilerPlugin==null && tryJikes ) {
  +	    ByteArrayOutputStream out = new ByteArrayOutputStream (256);
  +	    try {
  +
  +		jspCompilerPlugin=Class.
  +		    forName("org.apache.jasper.compiler.JikesJavaCompiler");
  +		JavaCompiler javaC=createJavaCompiler( jspCompilerPlugin );
  +		
  +		prepareCompiler( javaC, options, ctxt );
  +		javaC.setMsgOutput(out);
  +		status = javaC.compile(javaFileName);
  +	    } catch( Exception ex ) {	
  +		log.log("Guess java compiler: no jikes " + ex.toString());
  +		status=false;
  +	    }
  +	    if( status==false ) {
  +		log.log("Guess java compiler: no jikes ");
  +		log.log("Guess java compiler: OUT " + out.toString());
  +		jspCompilerPlugin=null;
  +		tryJikes=false;
  +	    } else {
  +		log.log("Guess java compiler: using jikes ");
  +	    }
  +	}
  +
  +	JavaCompiler javaC=createJavaCompiler( jspCompilerPlugin );
  +	prepareCompiler( javaC, options, ctxt );
  +	ByteArrayOutputStream out = new ByteArrayOutputStream (256);
  +	javaC.setMsgOutput(out);
  +	
  +	status = javaC.compile(javaFileName);
  +
           if (!ctxt.keepGenerated()) {
               File javaFile = new File(javaFileName);
               javaFile.delete();
  @@ -713,11 +758,9 @@
   
       /** tool for customizing javac.
        */
  -    public JavaCompiler createJavaCompiler(Options options)
  +    public JavaCompiler createJavaCompiler(Class jspCompilerPlugin )
   	throws JasperException
       {
  -	String compilerPath = options.getJspCompilerPath();
  -	Class jspCompilerPlugin = options.getJspCompilerPlugin();
           JavaCompiler javac;
   
   	if (jspCompilerPlugin != null) {
  @@ -732,11 +775,6 @@
   	} else {
               javac = new SunJavaCompiler();
   	}
  -
  -        if (compilerPath != null)
  -            javac.setCompilerPath(compilerPath);
  -
  -	javac.setClassDebugInfo(options.getClassDebugInfo());
   
   	return javac;
       }