You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@tomcat.apache.org by ma...@apache.org on 2009/04/26 01:25:36 UTC

svn commit: r768624 - in /tomcat/trunk/java/org/apache/jasper: JspCompilationContext.java compiler/JspRuntimeContext.java compiler/TagFileProcessor.java

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-unsubscribe@tomcat.apache.org
For additional commands, e-mail: dev-help@tomcat.apache.org