remm 01/06/02 13:18:23
Modified: jasper/src/share/org/apache/jasper/compiler
TldLocationsCache.java
Log:
- Update the TLD parsing code so that it doesn't try to directly access the
filesystem. Instead, it uses the new getResourcePaths call of the
Servlet API 2.3.
- Based on a patch submitted by Robert Petersen <robert at orangefood.com>
Revision Changes Path
1.9 +13 -31
jakarta-tomcat-4.0/jasper/src/share/org/apache/jasper/compiler/TldLocationsCache.java
Index: TldLocationsCache.java
===================================================================
RCS file:
/home/cvs/jakarta-tomcat-4.0/jasper/src/share/org/apache/jasper/compiler/TldLocationsCache.java,v
retrieving revision 1.8
retrieving revision 1.9
diff -u -r1.8 -r1.9
--- TldLocationsCache.java 2001/03/22 17:20:08 1.8
+++ TldLocationsCache.java 2001/06/02 20:18:23 1.9
@@ -61,6 +61,7 @@
import java.util.Hashtable;
import java.util.Enumeration;
import java.util.Iterator;
+import java.util.Set;
import java.util.jar.*;
import java.net.JarURLConnection;
import java.net.*;
@@ -197,22 +198,15 @@
private void processJars(ServletContext ctxt)
throws JasperException
{
- URL libURL = null;
- try {
- libURL = ctxt.getResource("/WEB-INF/lib");
- } catch (MalformedURLException e) {}
- if ((libURL != null) && "file".equals(libURL.getProtocol())) {
- File libFile = new File(libURL.getFile());
- if (libFile.exists() && libFile.canRead() &&
- libFile.isDirectory()) {
- String filenames[] = libFile.list();
- for (int i=0; i<filenames.length; i++) {
- if (!filenames[i].endsWith(".jar")) continue;
- tldConfigJar(ctxt, "/WEB-INF/lib/" + filenames[i]);
- }
- }
+ Set libSet = ctxt.getResourcePaths("/WEB-INF/lib");
+ Iterator it = libSet.iterator();
+ while (it.hasNext()) {
+ String resourcePath = (String) it.next();
+ if (resourcePath.endsWith(".jar"))
+ tldConfigJar(ctxt, resourcePath);
}
+
}
/**
@@ -279,23 +273,11 @@
// Parse the tag library descriptor at the specified resource path
ParserUtils pu = new ParserUtils();
TreeNode tld = pu.parseXMLDocument(resourcePath, in);
- Iterator taglibs = tld.findChildren("taglib");
- int n = 0;
- while (taglibs.hasNext()) {
- n++;
- if (n > 1) {
- Constants.message("jsp.error.more.than.one.taglib",
- new Object[] {resourcePath},
- Logger.ERROR);
- return null;
- }
- TreeNode taglib = (TreeNode) taglibs.next();
- TreeNode uri = taglib.findChild("uri");
- if (uri != null) {
- String body = uri.getBody();
- if (body != null)
- return body;
- }
+ TreeNode uri = tld.findChild("uri");
+ if (uri != null) {
+ String body = uri.getBody();
+ if (body != null)
+ return body;
}
return null; // No <uri> element is present