Author: markt Date: Sat Apr 25 23:25:36 2009 New Revision: 768624 URL: http://svn.apache.org/viewvc?rev=768624&view=rev Log: Reduce dependency on URLClassloader. Allow custom Loader elements to use ClassLoader rather than URLClassLoader.
Modified: tomcat/trunk/java/org/apache/jasper/JspCompilationContext.java tomcat/trunk/java/org/apache/jasper/compiler/JspRuntimeContext.java tomcat/trunk/java/org/apache/jasper/compiler/TagFileProcessor.java Modified: tomcat/trunk/java/org/apache/jasper/JspCompilationContext.java URL: http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/jasper/JspCompilationContext.java?rev=768624&r1=768623&r2=768624&view=diff ============================================================================== --- tomcat/trunk/java/org/apache/jasper/JspCompilationContext.java (original) +++ tomcat/trunk/java/org/apache/jasper/JspCompilationContext.java Sat Apr 25 23:25:36 2009 @@ -77,7 +77,7 @@ protected String baseURI; protected String outputDir; protected ServletContext context; - protected URLClassLoader loader; + protected ClassLoader loader; protected JspRuntimeContext rctxt; @@ -170,7 +170,7 @@ return rctxt.getParentClassLoader(); } - public void setClassLoader(URLClassLoader loader) { + public void setClassLoader(ClassLoader loader) { this.loader = loader; } Modified: tomcat/trunk/java/org/apache/jasper/compiler/JspRuntimeContext.java URL: http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/jasper/compiler/JspRuntimeContext.java?rev=768624&r1=768623&r2=768624&view=diff ============================================================================== --- tomcat/trunk/java/org/apache/jasper/compiler/JspRuntimeContext.java (original) +++ tomcat/trunk/java/org/apache/jasper/compiler/JspRuntimeContext.java Sat Apr 25 23:25:36 2009 @@ -110,11 +110,9 @@ this.options = options; // Get the parent class loader - parentClassLoader = - (URLClassLoader) Thread.currentThread().getContextClassLoader(); + parentClassLoader = Thread.currentThread().getContextClassLoader(); if (parentClassLoader == null) { - parentClassLoader = - (URLClassLoader)this.getClass().getClassLoader(); + parentClassLoader = this.getClass().getClassLoader(); } if (log.isDebugEnabled()) { @@ -154,7 +152,7 @@ */ private ServletContext context; private Options options; - private URLClassLoader parentClassLoader; + private ClassLoader parentClassLoader; private PermissionCollection permissionCollection; private CodeSource codeSource; private String classpath; @@ -218,11 +216,11 @@ } /** - * Get the parent URLClassLoader. + * Get the parent ClassLoader. * - * @return URLClassLoader parent + * @return ClassLoader parent */ - public URLClassLoader getParentClassLoader() { + public ClassLoader getParentClassLoader() { return parentClassLoader; } @@ -325,20 +323,23 @@ */ private void initClassPath() { - URL [] urls = parentClassLoader.getURLs(); StringBuffer cpath = new StringBuffer(); String sep = System.getProperty("path.separator"); - for(int i = 0; i < urls.length; i++) { - // Tomcat 4 can use URL's other than file URL's, - // a protocol other than file: will generate a - // bad file system path, so only add file: - // protocol URL's to the classpath. - - if( urls[i].getProtocol().equals("file") ) { - cpath.append(urls[i].getFile()+sep); + if (parentClassLoader instanceof URLClassLoader) { + URL [] urls = ((URLClassLoader)parentClassLoader).getURLs(); + + for(int i = 0; i < urls.length; i++) { + // Tomcat 4 can use URL's other than file URL's, + // a protocol other than file: will generate a + // bad file system path, so only add file: + // protocol URL's to the classpath. + + if( urls[i].getProtocol().equals("file") ) { + cpath.append(urls[i].getFile()+sep); + } } - } + } cpath.append(options.getScratchDir() + sep); @@ -408,32 +409,34 @@ permissionCollection.add( new RuntimePermission( "accessClassInPackage.org.apache.jasper.runtime") ); - URL [] urls = parentClassLoader.getURLs(); - String jarUrl = null; - String jndiUrl = null; - for (int i=0; i<urls.length; i++) { - if (jndiUrl == null - && urls[i].toString().startsWith("jndi:") ) { - jndiUrl = urls[i].toString() + "-"; + if (parentClassLoader instanceof URLClassLoader) { + URL [] urls = ((URLClassLoader)parentClassLoader).getURLs(); + String jarUrl = null; + String jndiUrl = null; + for (int i=0; i<urls.length; i++) { + if (jndiUrl == null + && urls[i].toString().startsWith("jndi:") ) { + jndiUrl = urls[i].toString() + "-"; + } + if (jarUrl == null + && urls[i].toString().startsWith("jar:jndi:") + ) { + jarUrl = urls[i].toString(); + jarUrl = jarUrl.substring(0,jarUrl.length() - 2); + jarUrl = jarUrl.substring(0, + jarUrl.lastIndexOf('/')) + "/-"; + } } - if (jarUrl == null - && urls[i].toString().startsWith("jar:jndi:") - ) { - jarUrl = urls[i].toString(); - jarUrl = jarUrl.substring(0,jarUrl.length() - 2); - jarUrl = jarUrl.substring(0, - jarUrl.lastIndexOf('/')) + "/-"; + if (jarUrl != null) { + permissionCollection.add( + new FilePermission(jarUrl,"read")); + permissionCollection.add( + new FilePermission(jarUrl.substring(4),"read")); } + if (jndiUrl != null) + permissionCollection.add( + new FilePermission(jndiUrl,"read") ); } - if (jarUrl != null) { - permissionCollection.add( - new FilePermission(jarUrl,"read")); - permissionCollection.add( - new FilePermission(jarUrl.substring(4),"read")); - } - if (jndiUrl != null) - permissionCollection.add( - new FilePermission(jndiUrl,"read") ); } catch(Exception e) { context.log("Security Init for context failed",e); } Modified: tomcat/trunk/java/org/apache/jasper/compiler/TagFileProcessor.java URL: http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/jasper/compiler/TagFileProcessor.java?rev=768624&r1=768623&r2=768624&view=diff ============================================================================== --- tomcat/trunk/java/org/apache/jasper/compiler/TagFileProcessor.java (original) +++ tomcat/trunk/java/org/apache/jasper/compiler/TagFileProcessor.java Sat Apr 25 23:25:36 2009 @@ -21,7 +21,6 @@ import java.io.IOException; import java.net.MalformedURLException; import java.net.URL; -import java.net.URLClassLoader; import java.util.Iterator; import java.util.Vector; import java.util.HashMap; @@ -595,7 +594,7 @@ // Use same classloader and classpath for compiling tag files wrapper.getJspEngineContext().setClassLoader( - (URLClassLoader) ctxt.getClassLoader()); + ctxt.getClassLoader()); wrapper.getJspEngineContext().setClassPath(ctxt.getClassPath()); } else { // Make sure that JspCompilationContext gets the latest TagInfo --------------------------------------------------------------------- To unsubscribe, e-mail: dev-unsubscr...@tomcat.apache.org For additional commands, e-mail: dev-h...@tomcat.apache.org