You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@tomcat.apache.org by lu...@apache.org on 2002/08/21 01:35:31 UTC

cvs commit: jakarta-tomcat-jasper/jasper2/src/share/org/apache/jasper/compiler Compiler.java ParserController.java TagFileProcessor.java TagLibraryInfoImpl.java

luehe       2002/08/20 16:35:31

  Modified:    jasper2/src/share/org/apache/jasper
                        JspCompilationContext.java
               jasper2/src/share/org/apache/jasper/servlet
                        JspServletWrapper.java
               jasper2/src/share/org/apache/jasper/compiler Compiler.java
                        ParserController.java TagFileProcessor.java
                        TagLibraryInfoImpl.java
  Log:
  Added support for tag files packaged in JARs.
  
  Revision  Changes    Path
  1.17      +27 -8     jakarta-tomcat-jasper/jasper2/src/share/org/apache/jasper/JspCompilationContext.java
  
  Index: JspCompilationContext.java
  ===================================================================
  RCS file: /home/cvs/jakarta-tomcat-jasper/jasper2/src/share/org/apache/jasper/JspCompilationContext.java,v
  retrieving revision 1.16
  retrieving revision 1.17
  diff -u -r1.16 -r1.17
  --- JspCompilationContext.java	20 Aug 2002 19:30:29 -0000	1.16
  +++ JspCompilationContext.java	20 Aug 2002 23:35:30 -0000	1.17
  @@ -63,7 +63,7 @@
   
   import java.io.*;
   import java.net.*;
  -import java.util.Set;
  +import java.util.*;
   import javax.servlet.ServletContext;
   import javax.servlet.jsp.tagext.TagInfo;
   
  @@ -89,6 +89,9 @@
    */
   public class JspCompilationContext {
   
  +    private Hashtable tagFileJars;
  +    private boolean isPackagedTagFile;
  +
       protected String servletClassName;
       protected String jspUri;
       private boolean isErrPage;
  @@ -148,6 +151,8 @@
               baseURI += '/';
           }
           this.rctxt=rctxt;
  +
  +	this.tagFileJars = new Hashtable();
       }
   
       public JspCompilationContext(String tagfile,
  @@ -155,12 +160,16 @@
                                    Options options,
                                    ServletContext context,
   				 JspServletWrapper jsw,
  -                                 JspRuntimeContext rctxt) {
  +                                 JspRuntimeContext rctxt,
  +				 Hashtable tagFileJars) {
   
           this(tagfile, false, options, context, jsw, rctxt);
           this.isTagFile = true;
           this.tagInfo = tagInfo;
  -        return;
  +	this.tagFileJars = tagFileJars;
  +	if (tagFileJars != null && tagFileJars.get(tagfile) != null) {
  +	    isPackagedTagFile = true;
  +	}
       }
   
       /* ==================== Methods to override ==================== */
  @@ -268,7 +277,17 @@
           }
           return path;
       }
  -    
  +
  +    /**
  +     * Returns the tag-file-to-JAR-file mapping for tag files packaged in JARs.
  +     *
  +     * The mapping uses the tag file name as the key, and the JAR file 
  +     * containing the tag file as the value. 
  +     */
  +    public Hashtable getTagFileJars() {
  +	return tagFileJars;
  +    }
  +
       /* ==================== Common implementation ==================== */
   
       /**
  @@ -521,7 +540,7 @@
       
       public void compile() throws JasperException, FileNotFoundException {
           createCompiler();
  -	if (jspCompiler.isOutDated()) {
  +	if (isPackagedTagFile || jspCompiler.isOutDated()) {
               try {
                   jspCompiler.compile();
                   reload = true;
  
  
  
  1.13      +7 -5      jakarta-tomcat-jasper/jasper2/src/share/org/apache/jasper/servlet/JspServletWrapper.java
  
  Index: JspServletWrapper.java
  ===================================================================
  RCS file: /home/cvs/jakarta-tomcat-jasper/jasper2/src/share/org/apache/jasper/servlet/JspServletWrapper.java,v
  retrieving revision 1.12
  retrieving revision 1.13
  diff -u -r1.12 -r1.13
  --- JspServletWrapper.java	6 Aug 2002 00:11:36 -0000	1.12
  +++ JspServletWrapper.java	20 Aug 2002 23:35:30 -0000	1.13
  @@ -72,6 +72,7 @@
   
   import java.io.IOException;
   import java.io.FileNotFoundException;
  +import java.util.Hashtable;
   import java.net.URL;
   import java.net.URLClassLoader;
   import java.net.MalformedURLException;
  @@ -134,14 +135,15 @@
        */
       public JspServletWrapper(ServletContext servletContext, Options options,
   			     String tagFilePath, TagInfo tagInfo,
  -			     JspRuntimeContext rctxt)
  +			     JspRuntimeContext rctxt, Hashtable tagFileJars)
               throws JasperException {
   
           this.config = null;	// not used
           this.options = options;
   	this.jspUri = tagFilePath;
           ctxt = new JspCompilationContext(jspUri, tagInfo, options,
  -					 servletContext, this, rctxt);
  +					 servletContext, this, rctxt,
  +					 tagFileJars);
   
   	// Store tag file .java and .class files in standard location
   	// (/tagfiles/org/apache/jsp/), regardless of the original tag file
  
  
  
  1.30      +1 -1      jakarta-tomcat-jasper/jasper2/src/share/org/apache/jasper/compiler/Compiler.java
  
  Index: Compiler.java
  ===================================================================
  RCS file: /home/cvs/jakarta-tomcat-jasper/jasper2/src/share/org/apache/jasper/compiler/Compiler.java,v
  retrieving revision 1.29
  retrieving revision 1.30
  diff -u -r1.29 -r1.30
  --- Compiler.java	20 Aug 2002 19:35:24 -0000	1.29
  +++ Compiler.java	20 Aug 2002 23:35:30 -0000	1.30
  @@ -193,7 +193,7 @@
        * Compile the jsp file from the current engine context
        */
       public void generateJava()
  -        throws FileNotFoundException, JasperException, Exception
  +        throws Exception
       {
           long t1=System.currentTimeMillis();
   	// Setup page info area
  
  
  
  1.13      +25 -12    jakarta-tomcat-jasper/jasper2/src/share/org/apache/jasper/compiler/ParserController.java
  
  Index: ParserController.java
  ===================================================================
  RCS file: /home/cvs/jakarta-tomcat-jasper/jasper2/src/share/org/apache/jasper/compiler/ParserController.java,v
  retrieving revision 1.12
  retrieving revision 1.13
  diff -u -r1.12 -r1.13
  --- ParserController.java	20 Aug 2002 15:50:22 -0000	1.12
  +++ ParserController.java	20 Aug 2002 23:35:30 -0000	1.13
  @@ -56,6 +56,8 @@
   
   import java.io.*;
   import java.util.*;
  +import java.util.zip.*;
  +import java.util.jar.*;
   import javax.servlet.jsp.tagext.*;
   import org.xml.sax.InputSource;
   import org.xml.sax.Attributes;
  @@ -154,7 +156,7 @@
        * @param inFileName The name of the JSP file to be parsed.
        */
       public Node.Nodes parse(String inFileName)
  -	        throws FileNotFoundException, JasperException {
  +	        throws FileNotFoundException, JasperException, IOException {
   	return parse(inFileName, null);
       }
   
  @@ -166,15 +168,18 @@
        * @param parent The node for the 'include' directive.
        */
       public Node.Nodes parse(String inFileName, Node parent)
  -	        throws FileNotFoundException, JasperException {
  +	        throws FileNotFoundException, JasperException, IOException {
   
   	Node.Nodes parsedPage = null;
  -        String absFileName = resolveFileName(inFileName);
   	String encoding = topFileEncoding;
           InputStreamReader reader = null;
  +	String absFileName = resolveFileName(inFileName);
  +
  +	JarFile jarFile = (JarFile) ctxt.getTagFileJars().get(inFileName);
  +
           try {
               // Figure out what type of JSP document we are dealing with
  -            reader = getReader(absFileName, encoding);
  +            reader = getReader(absFileName, encoding, jarFile);
               figureOutJspDocument(absFileName, encoding, reader);
   	    if (newEncoding != null)
   		encoding = newEncoding;
  @@ -193,7 +198,7 @@
   
               // dispatch to the proper parser
   	    
  -            reader = getReader(absFileName, encoding);
  +            reader = getReader(absFileName, encoding, jarFile);
               if (isXml) {
                   parsedPage = JspDocumentParser.parse(this, absFileName,
   						     reader, parent,
  @@ -332,17 +337,25 @@
   	return fileName;
       }
   
  -    private InputStreamReader getReader(String file, String encoding)
  -	throws FileNotFoundException, JasperException
  -    {
  +    private InputStreamReader getReader(String file, String encoding,
  +					JarFile jarFile)
  +	throws FileNotFoundException, JasperException, IOException {
  +
           InputStream in;
           InputStreamReader reader;
   
  +	if (jarFile != null) {
  +	    ZipEntry jarEntry =
  +		jarFile.getEntry(file.substring(1, file.length()));
  +	    in = jarFile.getInputStream(jarEntry);
  +	} else {
  +	    in = ctxt.getResourceAsStream(file);
  +	}
  +	if (in == null) {
  +	    throw new FileNotFoundException(file);
  +	}
  +
   	try {
  -            in = ctxt.getResourceAsStream(file);
  -            if (in == null) {
  -                throw new FileNotFoundException(file);
  -            }
               return new InputStreamReader(in, encoding);
   	} catch (UnsupportedEncodingException ex) {
   	    throw new JasperException(
  
  
  
  1.15      +8 -4      jakarta-tomcat-jasper/jasper2/src/share/org/apache/jasper/compiler/TagFileProcessor.java
  
  Index: TagFileProcessor.java
  ===================================================================
  RCS file: /home/cvs/jakarta-tomcat-jasper/jasper2/src/share/org/apache/jasper/compiler/TagFileProcessor.java,v
  retrieving revision 1.14
  retrieving revision 1.15
  diff -u -r1.14 -r1.15
  --- TagFileProcessor.java	20 Aug 2002 15:50:22 -0000	1.14
  +++ TagFileProcessor.java	20 Aug 2002 23:35:30 -0000	1.15
  @@ -63,7 +63,7 @@
   package org.apache.jasper.compiler;
   
   import java.util.*;
  -import java.io.FileNotFoundException;
  +import java.io.*;
   
   import javax.servlet.ServletException;
   import javax.servlet.jsp.tagext.*;
  @@ -317,6 +317,9 @@
   	} catch (FileNotFoundException e) {
   	    pc.getCompiler().getErrorDispatcher().jspError(
                                           "jsp.error.file.not.found", tagfile);
  +	} catch (IOException e) {
  +	    pc.getCompiler().getErrorDispatcher().jspError(
  +                                        "jsp.error.file.not.found", tagfile);
   	}
   
           TagFileVisitor tagFileVisitor = new TagFileVisitor(pc.getCompiler(),
  @@ -344,7 +347,8 @@
   						    ctxt.getOptions(),
   						    tagFilePath,
                                                       tagInfo,
  -						    ctxt.getRuntimeContext());
  +						    ctxt.getRuntimeContext(),
  +						    ctxt.getTagFileJars());
   		}
   	    }
   	}
  
  
  
  1.12      +13 -8     jakarta-tomcat-jasper/jasper2/src/share/org/apache/jasper/compiler/TagLibraryInfoImpl.java
  
  Index: TagLibraryInfoImpl.java
  ===================================================================
  RCS file: /home/cvs/jakarta-tomcat-jasper/jasper2/src/share/org/apache/jasper/compiler/TagLibraryInfoImpl.java,v
  retrieving revision 1.11
  retrieving revision 1.12
  diff -u -r1.11 -r1.12
  --- TagLibraryInfoImpl.java	19 Aug 2002 16:54:16 -0000	1.11
  +++ TagLibraryInfoImpl.java	20 Aug 2002 23:35:30 -0000	1.12
  @@ -192,7 +192,7 @@
   		err.jspError("jsp.error.file.not.found", location[0]);
   	    }
   	    // Now parse the tld.
  -	    parseTLD(ctxt, location[0], in);
  +	    parseTLD(ctxt, location[0], in, null);
   	} else {
   	    // Location points to a jar file
   	    // tag library in jar file
  @@ -214,7 +214,7 @@
   		jarFile = conn.getJarFile();
   		jarEntry = jarFile.getEntry(location[1]);
   		stream = jarFile.getInputStream(jarEntry);
  -		parseTLD(ctxt, location[0], stream);
  +		parseTLD(ctxt, location[0], stream, jarFile);
   		// FIXME @@@
   		// -- it seems that the JarURLConnection class caches JarFile 
   		// objects for particular URLs, and there is no way to get 
  @@ -248,7 +248,7 @@
       }
         
       private void parseTLD(JspCompilationContext ctxt,
  -                          String uri, InputStream in) 
  +                          String uri, InputStream in, JarFile jarFile) 
           throws JasperException
       {
           Vector tagVector = new Vector();
  @@ -286,7 +286,8 @@
               else if ("tag".equals(tname))
                   tagVector.addElement(createTagInfo(element));
               else if ("tag-file".equals(tname))
  -                tagFileVector.addElement(createTagFileInfo(element, uri));
  +                tagFileVector.addElement(createTagFileInfo(element, uri,
  +							   jarFile));
               else if ("function".equals(tname))          // JSP2.0
                   functionVector.addElement(createFunctionInfo(element));
               else if ("display-name".equals(tname) ||    // Ignored elements
  @@ -429,7 +430,8 @@
        *
        * @return TagInfo correspoding to tag file directives
        */
  -    private TagFileInfo createTagFileInfo(TreeNode elem, String uri)
  +    private TagFileInfo createTagFileInfo(TreeNode elem, String uri,
  +					  JarFile jarFile)
   	        throws JasperException {
   
   	String name = null;
  @@ -455,6 +457,9 @@
   	if (!path.startsWith("/")) {
   	    // relative to uri of TLD file
               path = uri.substring(0, uri.lastIndexOf("/") + 1) + path;
  +	} else if (path.startsWith("/META-INF/tags")) {
  +	    // Tag file packaged in JAR
  +	    ctxt.getTagFileJars().put(path, jarFile);
   	}
   	TagInfo tagInfo = TagFileProcessor.parseTagFile(parserController,
   							name, path,
  
  
  

--
To unsubscribe, e-mail:   <ma...@jakarta.apache.org>
For additional commands, e-mail: <ma...@jakarta.apache.org>