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 2006/10/31 17:28:56 UTC
svn commit: r469542 - in /tomcat/tc6.0.x/trunk/java/org/apache/jasper:
compiler/ImplicitTagLibraryInfo.java resources/LocalStrings.properties
Author: remm
Date: Tue Oct 31 08:28:55 2006
New Revision: 469542
URL: http://svn.apache.org/viewvc?view=rev&rev=469542
Log:
- Add parsing of implicit.tld for tag files.
Modified:
tomcat/tc6.0.x/trunk/java/org/apache/jasper/compiler/ImplicitTagLibraryInfo.java
tomcat/tc6.0.x/trunk/java/org/apache/jasper/resources/LocalStrings.properties
Modified: tomcat/tc6.0.x/trunk/java/org/apache/jasper/compiler/ImplicitTagLibraryInfo.java
URL: http://svn.apache.org/viewvc/tomcat/tc6.0.x/trunk/java/org/apache/jasper/compiler/ImplicitTagLibraryInfo.java?view=diff&rev=469542&r1=469541&r2=469542
==============================================================================
--- tomcat/tc6.0.x/trunk/java/org/apache/jasper/compiler/ImplicitTagLibraryInfo.java (original)
+++ tomcat/tc6.0.x/trunk/java/org/apache/jasper/compiler/ImplicitTagLibraryInfo.java Tue Oct 31 08:28:55 2006
@@ -17,13 +17,22 @@
package org.apache.jasper.compiler;
-import java.util.*;
+import java.io.InputStream;
+import java.util.Collection;
+import java.util.Hashtable;
+import java.util.Iterator;
+import java.util.Set;
+import java.util.Vector;
+
import javax.servlet.jsp.tagext.FunctionInfo;
-import javax.servlet.jsp.tagext.TagLibraryInfo;
-import javax.servlet.jsp.tagext.TagInfo;
import javax.servlet.jsp.tagext.TagFileInfo;
-import org.apache.jasper.JspCompilationContext;
+import javax.servlet.jsp.tagext.TagInfo;
+import javax.servlet.jsp.tagext.TagLibraryInfo;
+
import org.apache.jasper.JasperException;
+import org.apache.jasper.JspCompilationContext;
+import org.apache.jasper.xmlparser.ParserUtils;
+import org.apache.jasper.xmlparser.TreeNode;
/**
* Class responsible for generating an implicit tag library containing tag
@@ -40,6 +49,7 @@
private static final String TAGS_SHORTNAME = "tags";
private static final String TLIB_VERSION = "1.0";
private static final String JSP_VERSION = "2.0";
+ private static final String IMPLICIT_TLD = "implicit.tld";
// Maps tag names to tag file paths
private Hashtable tagFileMap;
@@ -52,59 +62,115 @@
* Constructor.
*/
public ImplicitTagLibraryInfo(JspCompilationContext ctxt,
- ParserController pc,
- PageInfo pi,
- String prefix,
- String tagdir,
- ErrorDispatcher err) throws JasperException {
+ ParserController pc,
+ PageInfo pi,
+ String prefix,
+ String tagdir,
+ ErrorDispatcher err) throws JasperException {
super(prefix, null);
- this.pc = pc;
- this.pi = pi;
- this.tagFileMap = new Hashtable();
- this.vec = new Vector();
+ this.pc = pc;
+ this.pi = pi;
+ this.tagFileMap = new Hashtable();
+ this.vec = new Vector();
// Implicit tag libraries have no functions:
this.functions = new FunctionInfo[0];
- tlibversion = TLIB_VERSION;
- jspversion = JSP_VERSION;
+ tlibversion = TLIB_VERSION;
+ jspversion = JSP_VERSION;
- if (!tagdir.startsWith(WEB_INF_TAGS)) {
- err.jspError("jsp.error.invalid.tagdir", tagdir);
- }
-
- // Determine the value of the <short-name> subelement of the
- // "imaginary" <taglib> element
- if (tagdir.equals(WEB_INF_TAGS)
- || tagdir.equals( WEB_INF_TAGS + "/")) {
- shortname = TAGS_SHORTNAME;
- } else {
- shortname = tagdir.substring(WEB_INF_TAGS.length());
- shortname = shortname.replace('/', '-');
- }
-
- // Populate mapping of tag names to tag file paths
- Set dirList = ctxt.getResourcePaths(tagdir);
- if (dirList != null) {
- Iterator it = dirList.iterator();
- while (it.hasNext()) {
- String path = (String) it.next();
- if (path.endsWith(TAG_FILE_SUFFIX)
- || path.endsWith(TAGX_FILE_SUFFIX)) {
- /*
- * Use the filename of the tag file, without the .tag or
- * .tagx extension, respectively, as the <name> subelement
- * of the "imaginary" <tag-file> element
- */
- String suffix = path.endsWith(TAG_FILE_SUFFIX) ?
- TAG_FILE_SUFFIX : TAGX_FILE_SUFFIX;
- String tagName = path.substring(path.lastIndexOf("/") + 1);
- tagName = tagName.substring(0,
- tagName.lastIndexOf(suffix));
- tagFileMap.put(tagName, path);
- }
- }
- }
+ if (!tagdir.startsWith(WEB_INF_TAGS)) {
+ err.jspError("jsp.error.invalid.tagdir", tagdir);
+ }
+
+ // Determine the value of the <short-name> subelement of the
+ // "imaginary" <taglib> element
+ if (tagdir.equals(WEB_INF_TAGS)
+ || tagdir.equals( WEB_INF_TAGS + "/")) {
+ shortname = TAGS_SHORTNAME;
+ } else {
+ shortname = tagdir.substring(WEB_INF_TAGS.length());
+ shortname = shortname.replace('/', '-');
+ }
+
+ // Populate mapping of tag names to tag file paths
+ Set dirList = ctxt.getResourcePaths(tagdir);
+ if (dirList != null) {
+ Iterator it = dirList.iterator();
+ while (it.hasNext()) {
+ String path = (String) it.next();
+ if (path.endsWith(TAG_FILE_SUFFIX)
+ || path.endsWith(TAGX_FILE_SUFFIX)) {
+ /*
+ * Use the filename of the tag file, without the .tag or
+ * .tagx extension, respectively, as the <name> subelement
+ * of the "imaginary" <tag-file> element
+ */
+ String suffix = path.endsWith(TAG_FILE_SUFFIX) ?
+ TAG_FILE_SUFFIX : TAGX_FILE_SUFFIX;
+ String tagName = path.substring(path.lastIndexOf("/") + 1);
+ tagName = tagName.substring(0,
+ tagName.lastIndexOf(suffix));
+ tagFileMap.put(tagName, path);
+ } else if (path.endsWith(IMPLICIT_TLD)) {
+ InputStream in = null;
+ try {
+ in = ctxt.getResourceAsStream(path);
+ if (in != null) {
+
+ // Add implicit TLD to dependency list
+ if (pi != null) {
+ pi.addDependant(path);
+ }
+
+ ParserUtils pu = new ParserUtils();
+ TreeNode tld = pu.parseXMLDocument(uri, in);
+
+ if (tld.findAttribute("version") != null) {
+ this.jspversion = tld.findAttribute("version");
+ }
+
+ // Process each child element of our <taglib> element
+ Iterator list = tld.findChildren();
+
+ while (list.hasNext()) {
+ TreeNode element = (TreeNode) list.next();
+ String tname = element.getName();
+
+ if ("tlibversion".equals(tname) // JSP 1.1
+ || "tlib-version".equals(tname)) { // JSP 1.2
+ this.tlibversion = element.getBody();
+ } else if ("jspversion".equals(tname)
+ || "jsp-version".equals(tname)) {
+ this.jspversion = element.getBody();
+ } else if ("shortname".equals(tname) || "short-name".equals(tname)) {
+ // Ignore
+ } else {
+ // All other elements are invalid
+ err.jspError("jsp.error.invalid.implicit", path);
+ }
+ }
+ try {
+ double version = Double.parseDouble(this.jspversion);
+ if (version < 2.0) {
+ err.jspError("jsp.error.invalid.implicit.version", path);
+ }
+ } catch (NumberFormatException e) {
+ err.jspError("jsp.error.invalid.implicit.version", path);
+ }
+ }
+ } finally {
+ if (in != null) {
+ try {
+ in.close();
+ } catch (Throwable t) {
+ }
+ }
+ }
+ }
+ }
+ }
+
}
/**
@@ -116,36 +182,36 @@
*/
public TagFileInfo getTagFile(String shortName) {
- TagFileInfo tagFile = super.getTagFile(shortName);
- if (tagFile == null) {
- String path = (String) tagFileMap.get(shortName);
- if (path == null) {
- return null;
- }
-
- TagInfo tagInfo = null;
- try {
- tagInfo = TagFileProcessor.parseTagFileDirectives(pc,
- shortName,
- path,
- this);
- } catch (JasperException je) {
- throw new RuntimeException(je.toString(), je);
- }
-
- tagFile = new TagFileInfo(shortName, path, tagInfo);
- vec.addElement(tagFile);
-
- this.tagFiles = new TagFileInfo[vec.size()];
- vec.copyInto(this.tagFiles);
- }
+ TagFileInfo tagFile = super.getTagFile(shortName);
+ if (tagFile == null) {
+ String path = (String) tagFileMap.get(shortName);
+ if (path == null) {
+ return null;
+ }
+
+ TagInfo tagInfo = null;
+ try {
+ tagInfo = TagFileProcessor.parseTagFileDirectives(pc,
+ shortName,
+ path,
+ this);
+ } catch (JasperException je) {
+ throw new RuntimeException(je.toString(), je);
+ }
+
+ tagFile = new TagFileInfo(shortName, path, tagInfo);
+ vec.addElement(tagFile);
+
+ this.tagFiles = new TagFileInfo[vec.size()];
+ vec.copyInto(this.tagFiles);
+ }
- return tagFile;
+ return tagFile;
}
-
+
public TagLibraryInfo[] getTagLibraryInfos() {
Collection coll = pi.getTaglibs();
return (TagLibraryInfo[]) coll.toArray(new TagLibraryInfo[0]);
}
-
+
}
Modified: tomcat/tc6.0.x/trunk/java/org/apache/jasper/resources/LocalStrings.properties
URL: http://svn.apache.org/viewvc/tomcat/tc6.0.x/trunk/java/org/apache/jasper/resources/LocalStrings.properties?view=diff&rev=469542&r1=469541&r2=469542
==============================================================================
--- tomcat/tc6.0.x/trunk/java/org/apache/jasper/resources/LocalStrings.properties (original)
+++ tomcat/tc6.0.x/trunk/java/org/apache/jasper/resources/LocalStrings.properties Tue Oct 31 08:28:55 2006
@@ -77,6 +77,8 @@
jsp.error.unknownException=Unhandled error! You might want to consider having an error page \
to report such errors more gracefully
jsp.error.invalid.directive=Invalid directive
+jsp.error.invalid.implicit=Invalid implicit TLD for tag file at {0}
+jsp.error.invalid.implicit.version=Invalid JSP version defined in implicit TLD for tag file at {0}
jsp.error.directive.istagfile={0} directive cannot be used in a tag file
jsp.error.directive.isnottagfile={0} directive can only be used in a tag file
jsp.error.tagfile.tld.name=The \"name\" attribute of the tag directive has a value {0} while the \"name\" tag of the \"tag-file\" element in the TLD is {1}
---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@tomcat.apache.org
For additional commands, e-mail: dev-help@tomcat.apache.org