FileDocCategorySizeDatePackage
JspC.javaAPI DocApache Tomcat 6.0.1446387Fri Jul 20 04:20:34 BST 2007org.apache.jasper

JspC

public class JspC extends Object implements Options
Shell for the jspc compiler. Handles all options associated with the command line and creates compilation contexts which it then compiles according to the specified options. This version can process files from a _single_ webapp at once, i.e. a single docbase can be specified. It can be used as an Ant task using:
<taskdef classname="org.apache.jasper.JspC" name="jasper2" >
<classpath>
<pathelement location="${java.home}/../lib/tools.jar"/>
<fileset dir="${ENV.CATALINA_HOME}/server/lib">
<include name="*.jar"/>
</fileset>
<fileset dir="${ENV.CATALINA_HOME}/common/lib">
<include name="*.jar"/>
</fileset>
<path refid="myjars"/>
</classpath>
</taskdef>

<jasper2 verbose="0"
package="my.package"
uriroot="${webapps.dir}/${webapp.name}"
webXmlFragment="${build.dir}/generated_web.xml"
outputDir="${webapp.dir}/${webapp.name}/WEB-INF/src/my/package" />
author
Danno Ferrin
author
Pierre Delisle
author
Costin Manolache
author
Yoav Shapira

Fields Summary
public static final String
DEFAULT_IE_CLASS_ID
protected static org.apache.juli.logging.Log
log
protected static final String
SWITCH_VERBOSE
protected static final String
SWITCH_HELP
protected static final String
SWITCH_OUTPUT_DIR
protected static final String
SWITCH_PACKAGE_NAME
protected static final String
SWITCH_CACHE
protected static final String
SWITCH_CLASS_NAME
protected static final String
SWITCH_FULL_STOP
protected static final String
SWITCH_COMPILE
protected static final String
SWITCH_SOURCE
protected static final String
SWITCH_TARGET
protected static final String
SWITCH_URI_BASE
protected static final String
SWITCH_URI_ROOT
protected static final String
SWITCH_FILE_WEBAPP
protected static final String
SWITCH_WEBAPP_INC
protected static final String
SWITCH_WEBAPP_XML
protected static final String
SWITCH_MAPPED
protected static final String
SWITCH_XPOWERED_BY
protected static final String
SWITCH_TRIM_SPACES
protected static final String
SWITCH_CLASSPATH
protected static final String
SWITCH_DIE
protected static final String
SWITCH_POOLING
protected static final String
SWITCH_ENCODING
protected static final String
SWITCH_SMAP
protected static final String
SWITCH_DUMP_SMAP
protected static final String
SHOW_SUCCESS
protected static final String
LIST_ERRORS
protected static final int
INC_WEBXML
protected static final int
ALL_WEBXML
protected static final int
DEFAULT_DIE_LEVEL
protected static final int
NO_DIE_LEVEL
protected static final String[]
insertBefore
protected static int
die
protected String
classPath
protected URLClassLoader
loader
protected boolean
trimSpaces
protected boolean
genStringAsCharArray
protected boolean
xpoweredBy
protected boolean
mappedFile
protected boolean
poolingEnabled
protected File
scratchDir
protected String
ieClassId
protected String
targetPackage
protected String
targetClassName
protected String
uriBase
protected String
uriRoot
protected org.apache.tools.ant.Project
project
protected int
dieLevel
protected boolean
helpNeeded
protected boolean
compile
protected boolean
smapSuppressed
protected boolean
smapDumped
protected boolean
caching
protected Map
cache
protected String
compiler
protected String
compilerTargetVM
protected String
compilerSourceVM
protected boolean
classDebugInfo
protected boolean
failOnError
Throw an exception if there's a compilation error, or swallow it. Default is true to preserve old behavior.
protected List
extensions
The file extensions to be handled as JSP files. Default list is .jsp and .jspx.
protected List
pages
The pages.
protected boolean
errorOnUseBeanInvalidClassAttribute
Needs better documentation, this data member does. True by default.
protected String
javaEncoding
The java file encoding. Default is UTF-8. Added per bugzilla 19622.
protected String
webxmlFile
protected int
webxmlLevel
protected boolean
addWebXmlMappings
protected Writer
mapout
protected CharArrayWriter
servletout
protected CharArrayWriter
mappingout
protected org.apache.jasper.servlet.JspCServletContext
context
The servlet context.
protected org.apache.jasper.compiler.JspRuntimeContext
rctxt
The runtime context. Maintain a dummy JspRuntimeContext for compiling tag files.
protected org.apache.jasper.compiler.TldLocationsCache
tldLocationsCache
Cache for the TLD locations
protected org.apache.jasper.compiler.JspConfig
jspConfig
protected org.apache.jasper.compiler.TagPluginManager
tagPluginManager
protected boolean
verbose
protected boolean
listErrors
protected boolean
showSuccess
protected int
argPos
protected boolean
fullstop
protected String[]
args
Constructors Summary
Methods Summary
protected voidaddExtension(java.lang.String extension)
Adds the given file extension to the list of extensions handled as JSP files.

param
extension The extension to add, e.g. "myjsp"

        if(extension != null) {
            if(extensions == null) {
                extensions = new Vector();
            }

            extensions.add(extension);
        }
    
protected voidcompleteWebXml()

        if (mapout != null) {
            try {
                servletout.writeTo(mapout);
                mappingout.writeTo(mapout);
                if (webxmlLevel >= ALL_WEBXML) {
                    mapout.write(Localizer.getMessage("jspc.webxml.footer"));
                } else if ((webxmlLevel >= INC_WEBXML) && !addWebXmlMappings) {
                    mapout.write(Localizer.getMessage("jspc.webinc.footer"));
                }
                mapout.close();
            } catch (IOException ioe) {
                // noting to do if it fails since we are done with it
            }
        }
    
public voidexecute()
Executes the compilation.

throws
JasperException If an error occurs

        if(log.isDebugEnabled()) {
            log.debug("execute() starting for " + pages.size() + " pages.");
        }

        try {
            if (uriRoot == null) {
                if( pages.size() == 0 ) {
                    throw new JasperException(
                        Localizer.getMessage("jsp.error.jspc.missingTarget"));
                }
                String firstJsp = (String) pages.get( 0 );
                File firstJspF = new File( firstJsp );
                if (!firstJspF.exists()) {
                    throw new JasperException(
                        Localizer.getMessage("jspc.error.fileDoesNotExist",
                                             firstJsp));
                }
                locateUriRoot( firstJspF );
            }

            if (uriRoot == null) {
                throw new JasperException(
                    Localizer.getMessage("jsp.error.jspc.no_uriroot"));
            }

            if( context==null ) {
                initServletContext();
            }

            // No explicit pages, we'll process all .jsp in the webapp
            if (pages.size() == 0) {
                scanFiles( new File( uriRoot ));
            }

            File uriRootF = new File(uriRoot);
            if (!uriRootF.exists() || !uriRootF.isDirectory()) {
                throw new JasperException(
                    Localizer.getMessage("jsp.error.jspc.uriroot_not_dir"));
            }

            initWebXml();

            Iterator iter = pages.iterator();
            while (iter.hasNext()) {
                String nextjsp = iter.next().toString();
                File fjsp = new File(nextjsp);
                if (!fjsp.isAbsolute()) {
                    fjsp = new File(uriRootF, nextjsp);
                }
                if (!fjsp.exists()) {
                    if (log.isWarnEnabled()) {
                        log.warn
                            (Localizer.getMessage
                             ("jspc.error.fileDoesNotExist", fjsp.toString()));
                    }
                    continue;
                }
                String s = fjsp.getAbsolutePath();
                if (s.startsWith(uriRoot)) {
                    nextjsp = s.substring(uriRoot.length());
                }
                if (nextjsp.startsWith("." + File.separatorChar)) {
                    nextjsp = nextjsp.substring(2);
                }
                processFile(nextjsp);
            }

            completeWebXml();

            if (addWebXmlMappings) {
                mergeIntoWebXml();
            }

        } catch (IOException ioe) {
            throw new JasperException(ioe);

        } catch (JasperException je) {
            Throwable rootCause = je;
            while (rootCause instanceof JasperException
                    && ((JasperException) rootCause).getRootCause() != null) {
                rootCause = ((JasperException) rootCause).getRootCause();
            }
            if (rootCause != je) {
                rootCause.printStackTrace();
            }
            throw je;
        } finally {
            if (loader != null) {
                LogFactory.release(loader);
            }
        }
    
public booleangenStringAsCharArray()
Indicates whether text strings are to be generated as char arrays.

return
true if text strings are to be generated as char arrays, false otherwise

        return genStringAsCharArray;
    
public voidgenerateWebMapping(java.lang.String file, JspCompilationContext clctxt)

        if (log.isDebugEnabled()) {
            log.debug("Generating web mapping for file " + file
                      + " using compilation context " + clctxt);
        }

        String className = clctxt.getServletClassName();
        String packageName = clctxt.getServletPackageName();

        String thisServletName;
        if  ("".equals(packageName)) {
            thisServletName = className;
        } else {
            thisServletName = packageName + '." + className;
        }

        if (servletout != null) {
            servletout.write("\n    <servlet>\n        <servlet-name>");
            servletout.write(thisServletName);
            servletout.write("</servlet-name>\n        <servlet-class>");
            servletout.write(thisServletName);
            servletout.write("</servlet-class>\n    </servlet>\n");
        }
        if (mappingout != null) {
            mappingout.write("\n    <servlet-mapping>\n        <servlet-name>");
            mappingout.write(thisServletName);
            mappingout.write("</servlet-name>\n        <url-pattern>");
            mappingout.write(file.replace('\\", '/"));
            mappingout.write("</url-pattern>\n    </servlet-mapping>\n");

        }
    
public java.util.MapgetCache()

see
Options#getCache()

        return cache;
    
public intgetCheckInterval()
Background compilation check intervals in seconds

        return 0;
    
public booleangetClassDebugInfo()

        // compile with debug info
        return classDebugInfo;
    
public java.lang.StringgetClassPath()

        if( classPath != null )
            return classPath;
        return System.getProperty("java.class.path");
    
public java.lang.StringgetCompiler()
Compiler to use.

        return compiler;
    
public java.lang.StringgetCompilerClassName()
Compiler class name to use.

        return null;
    
public java.lang.StringgetCompilerSourceVM()

see
Options#getCompilerSourceVM()

         return compilerSourceVM;
     
public java.lang.StringgetCompilerTargetVM()

see
Options#getCompilerTargetVM

        return compilerTargetVM;
    
public booleangetDevelopment()
Is Jasper being used in development mode?

        return false;
    
public booleangetDisplaySourceFragment()

        return true;
    
public booleangetErrorOnUseBeanInvalidClassAttribute()

        return errorOnUseBeanInvalidClassAttribute;
    
public java.util.ListgetExtensions()
Returns the list of file extensions that are treated as JSP files.

return
The list of extensions

        return extensions;
    
public booleangetFailOnError()

        return failOnError;
    
public booleangetFork()

        return false;
    
public java.lang.StringgetIeClassId()
Gets the class-id value that is sent to Internet Explorer when using tags.

return
Class-id value

        return ieClassId;
    
public java.lang.StringgetJavaEncoding()
Returns the encoding to use for java files. The default is UTF-8.

return
String The encoding

        return javaEncoding;
    
public java.lang.StringgetJspCompilerPath()

       // we don't compile, so this is meanlingless
        return null;
    
public java.lang.ClassgetJspCompilerPlugin()

       // we don't compile, so this is meanlingless
        return null;
    
public org.apache.jasper.compiler.JspConfiggetJspConfig()
Obtain JSP configuration informantion specified in web.xml.

        return jspConfig;
    
public booleangetKeepGenerated()

        // isn't this why we are running jspc?
        return true;
    
public booleangetMappedFile()
Are we supporting HTML mapped servlets?

        return mappedFile;
    
public intgetModificationTestInterval()
Modification test interval.

        return 0;
    
public org.apache.tools.ant.ProjectgetProject()
Returns the project: may be null if not running inside an Ant project.

return
The project

        return project;
    
public java.lang.ObjectgetProtectionDomain()

        return null;
    
public java.io.FilegetScratchDir()

        return scratchDir;
    
public booleangetSendErrorToClient()

        // implied send to System.err
        return true;
    
public org.apache.jasper.compiler.TagPluginManagergetTagPluginManager()

        return tagPluginManager;
    
public intgetTagPoolSize()

        return Constants.MAX_POOL_SIZE;
    
public org.apache.jasper.compiler.TldLocationsCachegetTldLocationsCache()

        return tldLocationsCache;
    
public booleangetTrimSpaces()

        return trimSpaces;
    
protected voidinitClassLoader(JspCompilationContext clctxt)
Initializes the classloader as/if needed for the given compilation context.

param
clctxt The compilation context
throws
IOException If an error occurs


        classPath = getClassPath();

        ClassLoader jspcLoader = getClass().getClassLoader();
        if (jspcLoader instanceof AntClassLoader) {
            classPath += File.pathSeparator
                + ((AntClassLoader) jspcLoader).getClasspath();
        }

        // Turn the classPath into URLs
        ArrayList<URL> urls = new ArrayList<URL>();
        StringTokenizer tokenizer = new StringTokenizer(classPath,
                                                        File.pathSeparator);
        while (tokenizer.hasMoreTokens()) {
            String path = tokenizer.nextToken();
            try {
                File libFile = new File(path);
                urls.add(libFile.toURL());
            } catch (IOException ioe) {
                // Failing a toCanonicalPath on a file that
                // exists() should be a JVM regression test,
                // therefore we have permission to freak uot
                throw new RuntimeException(ioe.toString());
            }
        }

        File webappBase = new File(uriRoot);
        if (webappBase.exists()) {
            File classes = new File(webappBase, "/WEB-INF/classes");
            try {
                if (classes.exists()) {
                    classPath = classPath + File.pathSeparator
                        + classes.getCanonicalPath();
                    urls.add(classes.getCanonicalFile().toURL());
                }
            } catch (IOException ioe) {
                // failing a toCanonicalPath on a file that
                // exists() should be a JVM regression test,
                // therefore we have permission to freak out
                throw new RuntimeException(ioe.toString());
            }
            File lib = new File(webappBase, "/WEB-INF/lib");
            if (lib.exists() && lib.isDirectory()) {
                String[] libs = lib.list();
                for (int i = 0; i < libs.length; i++) {
                    if( libs[i].length() <5 ) continue;
                    String ext=libs[i].substring( libs[i].length() - 4 );
                    if (! ".jar".equalsIgnoreCase(ext)) {
                        if (".tld".equalsIgnoreCase(ext)) {
                            log.warn("TLD files should not be placed in "
                                     + "/WEB-INF/lib");
                        }
                        continue;
                    }
                    try {
                        File libFile = new File(lib, libs[i]);
                        classPath = classPath + File.pathSeparator
                            + libFile.getAbsolutePath();
                        urls.add(libFile.getAbsoluteFile().toURL());
                    } catch (IOException ioe) {
                        // failing a toCanonicalPath on a file that
                        // exists() should be a JVM regression test,
                        // therefore we have permission to freak out
                        throw new RuntimeException(ioe.toString());
                    }
                }
            }
        }

        // What is this ??
        urls.add(new File(clctxt.getRealPath("/")).getCanonicalFile().toURL());

        URL urlsA[]=new URL[urls.size()];
        urls.toArray(urlsA);
        loader = new URLClassLoader(urlsA, this.getClass().getClassLoader());

    
protected voidinitServletContext()

        try {
            context =new JspCServletContext
                (new PrintWriter(System.out),
                 new URL("file:" + uriRoot.replace('\\",'/") + '/"));
            tldLocationsCache = new TldLocationsCache(context, true);
        } catch (MalformedURLException me) {
            System.out.println("**" + me);
        }
        rctxt = new JspRuntimeContext(context, this);
        jspConfig = new JspConfig(context);
        tagPluginManager = new TagPluginManager(context);
    
protected voidinitWebXml()

        try {
            if (webxmlLevel >= INC_WEBXML) {
                File fmapings = new File(webxmlFile);
                mapout = new FileWriter(fmapings);
                servletout = new CharArrayWriter();
                mappingout = new CharArrayWriter();
            } else {
                mapout = null;
                servletout = null;
                mappingout = null;
            }
            if (webxmlLevel >= ALL_WEBXML) {
                mapout.write(Localizer.getMessage("jspc.webxml.header"));
                mapout.flush();
            } else if ((webxmlLevel>= INC_WEBXML) && !addWebXmlMappings) {
                mapout.write(Localizer.getMessage("jspc.webinc.header"));
                mapout.flush();
            }
        } catch (IOException ioe) {
            mapout = null;
            servletout = null;
            mappingout = null;
        }
    
public booleanisCaching()

see
Options#isCaching()

        return caching;
    
public booleanisPoolingEnabled()

        return poolingEnabled;
    
public booleanisSmapDumped()
Should SMAP info for JSR45 debugging be dumped to a file?

        return smapDumped;
    
public booleanisSmapSuppressed()
Is the generation of SMAP info for JSR45 debuggin suppressed?

        return smapSuppressed;
    
public booleanisXpoweredBy()

        return xpoweredBy;
    
protected voidlocateUriRoot(java.io.File f)
Find the WEB-INF dir by looking up in the directory tree. This is used if no explicit docbase is set, but only files. XXX Maybe we should require the docbase.

        String tUriBase = uriBase;
        if (tUriBase == null) {
            tUriBase = "/";
        }
        try {
            if (f.exists()) {
                f = new File(f.getAbsolutePath());
                while (f != null) {
                    File g = new File(f, "WEB-INF");
                    if (g.exists() && g.isDirectory()) {
                        uriRoot = f.getCanonicalPath();
                        uriBase = tUriBase;
                        if (log.isInfoEnabled()) {
                            log.info(Localizer.getMessage(
                                        "jspc.implicit.uriRoot",
                                        uriRoot));
                        }
                        break;
                    }
                    if (f.exists() && f.isDirectory()) {
                        tUriBase = "/" + f.getName() + "/" + tUriBase;
                    }

                    String fParent = f.getParent();
                    if (fParent == null) {
                        break;
                    } else {
                        f = new File(fParent);
                    }

                    // If there is no acceptible candidate, uriRoot will
                    // remain null to indicate to the CompilerContext to
                    // use the current working/user dir.
                }

                if (uriRoot != null) {
                    File froot = new File(uriRoot);
                    uriRoot = froot.getCanonicalPath();
                }
            }
        } catch (IOException ioe) {
            // since this is an optional default and a null value
            // for uriRoot has a non-error meaning, we can just
            // pass straight through
        }
    
public static voidmain(java.lang.String[] arg)


         
        if (arg.length == 0) {
            System.out.println(Localizer.getMessage("jspc.usage"));
        } else {
            try {
                JspC jspc = new JspC();
                jspc.setArgs(arg);
                if (jspc.helpNeeded) {
                    System.out.println(Localizer.getMessage("jspc.usage"));
                } else {
                    jspc.execute();
                }
            } catch (JasperException je) {
                System.err.println(je);
                if (die != NO_DIE_LEVEL) {
                    System.exit(die);
                }
            }
        }
    
protected voidmergeIntoWebXml()
Include the generated web.xml inside the webapp's web.xml.


        File webappBase = new File(uriRoot);
        File webXml = new File(webappBase, "WEB-INF/web.xml");
        File webXml2 = new File(webappBase, "WEB-INF/web2.xml");
        String insertStartMarker =
            Localizer.getMessage("jspc.webinc.insertStart");
        String insertEndMarker =
            Localizer.getMessage("jspc.webinc.insertEnd");

        BufferedReader reader = new BufferedReader(new FileReader(webXml));
        BufferedReader fragmentReader =
            new BufferedReader(new FileReader(webxmlFile));
        PrintWriter writer = new PrintWriter(new FileWriter(webXml2));

        // Insert the <servlet> and <servlet-mapping> declarations
        int pos = -1;
        String line = null;
        while (true) {
            line = reader.readLine();
            if (line == null) {
                break;
            }
            // Skip anything previously generated by JSPC
            if (line.indexOf(insertStartMarker) >= 0) {
                while (true) {
                    line = reader.readLine();
                    if (line == null) {
                        return;
                    }
                    if (line.indexOf(insertEndMarker) >= 0) {
                        line = reader.readLine();
                        line = reader.readLine();
                        if (line == null) {
                            return;
                        }
                        break;
                    }
                }
            }
            for (int i = 0; i < insertBefore.length; i++) {
                pos = line.indexOf(insertBefore[i]);
                if (pos >= 0)
                    break;
            }
            if (pos >= 0) {
                writer.print(line.substring(0, pos));
                break;
            } else {
                writer.println(line);
            }
        }

        writer.println(insertStartMarker);
        while (true) {
            String line2 = fragmentReader.readLine();
            if (line2 == null) {
                writer.println();
                break;
            }
            writer.println(line2);
        }
        writer.println(insertEndMarker);
        writer.println();

        for (int i = 0; i < pos; i++) {
            writer.print(" ");
        }
        writer.println(line.substring(pos));

        while (true) {
            line = reader.readLine();
            if (line == null) {
                break;
            }
            writer.println(line);
        }
        writer.close();

        reader.close();
        fragmentReader.close();

        FileInputStream fis = new FileInputStream(webXml2);
        FileOutputStream fos = new FileOutputStream(webXml);

        byte buf[] = new byte[512];
        while (true) {
            int n = fis.read(buf);
            if (n < 0) {
                break;
            }
            fos.write(buf, 0, n);
        }

        fis.close();
        fos.close();

        webXml2.delete();
        (new File(webxmlFile)).delete();

    
protected java.lang.StringnextArg()

        if ((argPos >= args.length)
            || (fullstop = SWITCH_FULL_STOP.equals(args[argPos]))) {
            return null;
        } else {
            return args[argPos++];
        }
    
protected java.lang.StringnextFile()

        if (fullstop) argPos++;
        if (argPos >= args.length) {
            return null;
        } else {
            return args[argPos++];
        }
    
protected voidprocessFile(java.lang.String file)

        if (log.isDebugEnabled()) {
            log.debug("Processing file: " + file);
        }

        ClassLoader originalClassLoader = null;

        try {
            // set up a scratch/output dir if none is provided
            if (scratchDir == null) {
                String temp = System.getProperty("java.io.tmpdir");
                if (temp == null) {
                    temp = "";
                }
                scratchDir = new File(new File(temp).getAbsolutePath());
            }

            String jspUri=file.replace('\\",'/");
            JspCompilationContext clctxt = new JspCompilationContext
                ( jspUri, false,  this, context, null, rctxt );

            /* Override the defaults */
            if ((targetClassName != null) && (targetClassName.length() > 0)) {
                clctxt.setServletClassName(targetClassName);
                targetClassName = null;
            }
            if (targetPackage != null) {
                clctxt.setServletPackageName(targetPackage);
            }

            originalClassLoader = Thread.currentThread().getContextClassLoader();
            if( loader==null ) {
                initClassLoader( clctxt );
            }
            Thread.currentThread().setContextClassLoader(loader);

            clctxt.setClassLoader(loader);
            clctxt.setClassPath(classPath);

            Compiler clc = clctxt.createCompiler();

            // If compile is set, generate both .java and .class, if
            // .jsp file is newer than .class file;
            // Otherwise only generate .java, if .jsp file is newer than
            // the .java file
            if( clc.isOutDated(compile) ) {
                if (log.isDebugEnabled()) {
                    log.debug(jspUri + " is out dated, compiling...");
                }

                clc.compile(compile, true);
            }

            // Generate mapping
            generateWebMapping( file, clctxt );
            if ( showSuccess ) {
                log.info( "Built File: " + file );
            }

        } catch (JasperException je) {
            Throwable rootCause = je;
            while (rootCause instanceof JasperException
                    && ((JasperException) rootCause).getRootCause() != null) {
                rootCause = ((JasperException) rootCause).getRootCause();
            }
            if (rootCause != je) {
                log.error(Localizer.getMessage("jspc.error.generalException",
                                               file),
                          rootCause);
            }

            // Bugzilla 35114.
            if(getFailOnError()) {
                throw je;
            } else {
                log.error(je.getMessage());
            }

        } catch (Exception e) {
            if ((e instanceof FileNotFoundException) && log.isWarnEnabled()) {
                log.warn(Localizer.getMessage("jspc.error.fileDoesNotExist",
                                              e.getMessage()));
            }
            throw new JasperException(e);
        } finally {
            if(originalClassLoader != null) {
                Thread.currentThread().setContextClassLoader(originalClassLoader);
            }
        }
    
protected java.io.FileresolveFile(java.lang.String s)
Resolves the relative or absolute pathname correctly in both Ant and command-line situations. If Ant launched us, we should use the basedir of the current project to resolve relative paths. See Bugzilla 35571.

param
s The file
return
The file resolved

         if(getProject() == null) {
             // Note FileUtils.getFileUtils replaces FileUtils.newFileUtils in Ant 1.6.3
             return FileUtils.newFileUtils().resolveFile(null, s);
         } else {
             return FileUtils.newFileUtils().resolveFile(getProject().getBaseDir(), s);
         }
     
public voidscanFiles(java.io.File base)
Locate all jsp files in the webapp. Used if no explicit jsps are specified.

        Stack<String> dirs = new Stack<String>();
        dirs.push(base.toString());

        // Make sure default extensions are always included
        if ((getExtensions() == null) || (getExtensions().size() < 2)) {
            addExtension("jsp");
            addExtension("jspx");
        }

        while (!dirs.isEmpty()) {
            String s = dirs.pop();
            File f = new File(s);
            if (f.exists() && f.isDirectory()) {
                String[] files = f.list();
                String ext;
                for (int i = 0; (files != null) && i < files.length; i++) {
                    File f2 = new File(s, files[i]);
                    if (f2.isDirectory()) {
                        dirs.push(f2.getPath());
                    } else {
                        String path = f2.getPath();
                        String uri = path.substring(uriRoot.length());
                        ext = files[i].substring(files[i].lastIndexOf('.") +1);
                        if (getExtensions().contains(ext) ||
                            jspConfig.isJspPage(uri)) {
                            pages.add(path);
                        }
                    }
                }
            }
        }
    
public voidsetAddWebXmlMappings(boolean b)

        addWebXmlMappings = b;
    
public voidsetArgs(java.lang.String[] arg)

        args = arg;
        String tok;

        dieLevel = NO_DIE_LEVEL;
        die = dieLevel;

        while ((tok = nextArg()) != null) {
            if (tok.equals(SWITCH_VERBOSE)) {
                verbose = true;
                showSuccess = true;
                listErrors = true;
            } else if (tok.equals(SWITCH_OUTPUT_DIR)) {
                tok = nextArg();
                setOutputDir( tok );
            } else if (tok.equals(SWITCH_PACKAGE_NAME)) {
                targetPackage = nextArg();
            } else if (tok.equals(SWITCH_COMPILE)) {
                compile=true;
            } else if (tok.equals(SWITCH_CLASS_NAME)) {
                targetClassName = nextArg();
            } else if (tok.equals(SWITCH_URI_BASE)) {
                uriBase=nextArg();
            } else if (tok.equals(SWITCH_URI_ROOT)) {
                setUriroot( nextArg());
            } else if (tok.equals(SWITCH_FILE_WEBAPP)) {
                setUriroot( nextArg());
            } else if ( tok.equals( SHOW_SUCCESS ) ) {
                showSuccess = true;
            } else if ( tok.equals( LIST_ERRORS ) ) {
                listErrors = true;
            } else if (tok.equals(SWITCH_WEBAPP_INC)) {
                webxmlFile = nextArg();
                if (webxmlFile != null) {
                    webxmlLevel = INC_WEBXML;
                }
            } else if (tok.equals(SWITCH_WEBAPP_XML)) {
                webxmlFile = nextArg();
                if (webxmlFile != null) {
                    webxmlLevel = ALL_WEBXML;
                }
            } else if (tok.equals(SWITCH_MAPPED)) {
                mappedFile = true;
            } else if (tok.equals(SWITCH_XPOWERED_BY)) {
                xpoweredBy = true;
            } else if (tok.equals(SWITCH_TRIM_SPACES)) {
                setTrimSpaces(true);
            } else if (tok.equals(SWITCH_CACHE)) {
                tok = nextArg();
                if ("false".equals(tok)) {
                    caching = false;
                } else {
                    caching = true;
                }            
            } else if (tok.equals(SWITCH_CLASSPATH)) {
                setClassPath(nextArg());
            } else if (tok.startsWith(SWITCH_DIE)) {
                try {
                    dieLevel = Integer.parseInt(
                        tok.substring(SWITCH_DIE.length()));
                } catch (NumberFormatException nfe) {
                    dieLevel = DEFAULT_DIE_LEVEL;
                }
                die = dieLevel;
            } else if (tok.equals(SWITCH_HELP)) {
                helpNeeded = true;
            } else if (tok.equals(SWITCH_POOLING)) {
                tok = nextArg();
                if ("false".equals(tok)) {
                    poolingEnabled = false;
                } else {
                    poolingEnabled = true;
                }
            } else if (tok.equals(SWITCH_ENCODING)) {
                setJavaEncoding(nextArg());
            } else if (tok.equals(SWITCH_SOURCE)) {
                setCompilerSourceVM(nextArg());
            } else if (tok.equals(SWITCH_TARGET)) {
                setCompilerTargetVM(nextArg());
            } else if (tok.equals(SWITCH_SMAP)) {
                smapSuppressed = false;
            } else if (tok.equals(SWITCH_DUMP_SMAP)) {
                smapDumped = true;
            } else {
                if (tok.startsWith("-")) {
                    throw new JasperException("Unrecognized option: " + tok +
                        ".  Use -help for help.");
                }
                if (!fullstop) {
                    argPos--;
                }
                // Start treating the rest as JSP Pages
                break;
            }
        }

        // Add all extra arguments to the list of files
        while( true ) {
            String file = nextFile();
            if( file==null ) {
                break;
            }
            pages.add( file );
        }
    
public voidsetCaching(boolean caching)

see
Options#isCaching()

        this.caching = caching;
    
public voidsetClassDebugInfo(boolean b)

        classDebugInfo=b;
    
public voidsetClassName(java.lang.String p)
Class name of the generated file ( without package ). Can only be used if a single file is converted. XXX Do we need this feature ?

        targetClassName=p;
    
public voidsetClassPath(java.lang.String s)

        classPath=s;
    
public voidsetCompile(boolean b)
Sets the compile flag.

param
b Flag value

        compile = b;
    
public voidsetCompiler(java.lang.String c)

        compiler=c;
    
public voidsetCompilerSourceVM(java.lang.String vm)

see
Options#getCompilerSourceVM()

        compilerSourceVM = vm;
    
public voidsetCompilerTargetVM(java.lang.String vm)

        compilerTargetVM = vm;
    
public voidsetErrorOnUseBeanInvalidClassAttribute(boolean b)

        errorOnUseBeanInvalidClassAttribute = b;
    
public voidsetFailOnError(boolean b)
Set the option that throws an exception in case of a compilation error.

        failOnError = b;
    
public voidsetGenStringAsCharArray(boolean genStringAsCharArray)
Determines whether text strings are to be generated as char arrays, which improves performance in some cases.

param
genStringAsCharArray true if text strings are to be generated as char arrays, false otherwise

        this.genStringAsCharArray = genStringAsCharArray;
    
public voidsetIeClassId(java.lang.String ieClassId)
Sets the class-id value to be sent to Internet Explorer when using tags.

param
ieClassId Class-id value

        this.ieClassId = ieClassId;
    
public voidsetJavaEncoding(java.lang.String encodingName)
Sets the encoding to use for java files.

param
encodingName The name, e.g. "UTF-8"

        javaEncoding = encodingName;
    
public voidsetJspFiles(java.lang.String jspFiles)
Parses comma-separated list of JSP files to be processed. If the argument is null, nothing is done.

Each file is interpreted relative to uriroot, unless it is absolute, in which case it must start with uriroot.

param
jspFiles Comma-separated list of JSP files to be processed

        if(jspFiles == null) {
            return;
        }

        StringTokenizer tok = new StringTokenizer(jspFiles, ",");
        while (tok.hasMoreTokens()) {
            pages.add(tok.nextToken());
        }
    
public voidsetListErrors(boolean b)

        listErrors = b;
    
public voidsetOutputDir(java.lang.String s)

        if( s!= null ) {
            scratchDir = resolveFile(s).getAbsoluteFile();
        } else {
            scratchDir=null;
        }
    
public voidsetPackage(java.lang.String p)

        targetPackage=p;
    
public voidsetPoolingEnabled(boolean poolingEnabled)

        this.poolingEnabled = poolingEnabled;
    
public voidsetProject(org.apache.tools.ant.Project theProject)
Sets the project.

param
theProject The project

        project = theProject;
    
public voidsetSmapDumped(boolean smapDumped)
Set smapSuppressed flag.

        this.smapDumped = smapDumped;
    
public voidsetSmapSuppressed(boolean smapSuppressed)
Set smapSuppressed flag.

        this.smapSuppressed = smapSuppressed;
    
public voidsetTrimSpaces(boolean ts)

        this.trimSpaces = ts;
    
public voidsetUriroot(java.lang.String s)
Base dir for the webapp. Used to generate class names and resolve includes

        if( s==null ) {
            uriRoot = s;
            return;
        }
        try {
            uriRoot = resolveFile(s).getCanonicalPath();
        } catch( Exception ex ) {
            uriRoot = s;
        }
    
public voidsetValidateXml(boolean b)

        org.apache.jasper.xmlparser.ParserUtils.validating=b;
    
public voidsetVerbose(int level)
Sets the verbosity level. The actual number doesn't matter: if it's greater than zero, the verbose flag will be true.

param
level Positive means verbose

        if (level > 0) {
            verbose = true;
            showSuccess = true;
            listErrors = true;
        }
    
public voidsetWebXml(java.lang.String s)
File where we generate a complete web.xml with the class definitions.

        webxmlFile=resolveFile(s).getAbsolutePath();
        webxmlLevel=ALL_WEBXML;
    
public voidsetWebXmlFragment(java.lang.String s)
File where we generate a web.xml fragment with the class definitions.

        webxmlFile=resolveFile(s).getAbsolutePath();
        webxmlLevel=INC_WEBXML;
    
public voidsetXpoweredBy(boolean xpoweredBy)

        this.xpoweredBy = xpoweredBy;