You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@xmlgraphics.apache.org by ma...@apache.org on 2008/04/01 12:03:42 UTC

svn commit: r643347 - /xmlgraphics/commons/trunk/src/java/org/apache/xmlgraphics/util/ClasspathResource.java

Author: maxberger
Date: Tue Apr  1 03:03:26 2008
New Revision: 643347

URL: http://svn.apache.org/viewvc?rev=643347&view=rev
Log:
Now iterates through multiple possible classloaders, as SystemClassLoader is not sufficient (e.g. in web environments)

Modified:
    xmlgraphics/commons/trunk/src/java/org/apache/xmlgraphics/util/ClasspathResource.java

Modified: xmlgraphics/commons/trunk/src/java/org/apache/xmlgraphics/util/ClasspathResource.java
URL: http://svn.apache.org/viewvc/xmlgraphics/commons/trunk/src/java/org/apache/xmlgraphics/util/ClasspathResource.java?rev=643347&r1=643346&r2=643347&view=diff
==============================================================================
--- xmlgraphics/commons/trunk/src/java/org/apache/xmlgraphics/util/ClasspathResource.java (original)
+++ xmlgraphics/commons/trunk/src/java/org/apache/xmlgraphics/util/ClasspathResource.java Tue Apr  1 03:03:26 2008
@@ -24,9 +24,11 @@
 import java.util.Collections;
 import java.util.Enumeration;
 import java.util.HashMap;
+import java.util.HashSet;
 import java.util.Iterator;
 import java.util.List;
 import java.util.Map;
+import java.util.Set;
 import java.util.Vector;
 import java.util.jar.Attributes;
 import java.util.jar.Manifest;
@@ -77,47 +79,84 @@
         return classpathResource;
     }
 
-    private ClassLoader getClassLoaderForResources() {
-        ClassLoader cl = ClassLoader.getSystemClassLoader();
-        return cl;
+    /* Actual return type: Set<ClassLoader> */
+    private Set getClassLoadersForResources() {
+        Set v = new HashSet();
+        try {
+            ClassLoader l = ClassLoader.getSystemClassLoader();
+            if (l != null) {
+                v.add(l);
+            }
+        } catch (SecurityException e) {
+            // Ignore
+        }
+        try {
+            ClassLoader l = Thread.currentThread().getContextClassLoader();
+            if (l != null) {
+                v.add(l);
+            }
+        } catch (SecurityException e) {
+            // Ignore
+        }
+        try {
+            ClassLoader l = ClasspathResource.class.getClassLoader();
+            if (l != null) {
+                v.add(l);
+            }
+        } catch (SecurityException e) {
+            // Ignore
+        }
+        return v;
     }
-    
+
     private void loadManifests() {
         Enumeration e;
         try {
-            e = getClassLoaderForResources().getResources(MANIFEST_PATH);
 
-            while (e.hasMoreElements()) {
-                final URL u = (URL) e.nextElement();
-                try {
-                    final Manifest manifest = new Manifest(u.openStream());
-                    final Map entries = manifest.getEntries();
-                    final Iterator entrysetiterator = entries.entrySet().iterator();
-                    while (entrysetiterator.hasNext()) {
-                        final Map.Entry entry = (Map.Entry) entrysetiterator.next();
-                        final String name = (String) entry.getKey();
-                        final Attributes attributes = (Attributes) entry.getValue();
-                        final String contentType = attributes.getValue(CONTENT_TYPE_KEY);
-                        if (contentType != null) {
-                            addToMapping(contentType, name);
+            Iterator it = getClassLoadersForResources().iterator();
+            while (it.hasNext()) {
+                ClassLoader classLoader = (ClassLoader) it.next();
+
+                e = classLoader.getResources(MANIFEST_PATH);
+
+                while (e.hasMoreElements()) {
+                    final URL u = (URL) e.nextElement();
+                    try {
+                        final Manifest manifest = new Manifest(u.openStream());
+                        final Map entries = manifest.getEntries();
+                        final Iterator entrysetiterator = entries.entrySet()
+                                .iterator();
+                        while (entrysetiterator.hasNext()) {
+                            final Map.Entry entry = (Map.Entry) entrysetiterator
+                                    .next();
+                            final String name = (String) entry.getKey();
+                            final Attributes attributes = (Attributes) entry
+                                    .getValue();
+                            final String contentType = attributes
+                                    .getValue(CONTENT_TYPE_KEY);
+                            if (contentType != null) {
+                                addToMapping(contentType, name, classLoader);
+                            }
                         }
+                    } catch (IOException io) {
+                        // TODO: Log.
                     }
-                } catch (IOException io) {
-                    // TODO: Log.
                 }
             }
+
         } catch (IOException io) {
             // TODO: Log.
         }
     }
 
-    private void addToMapping(final String contentType, final String name) {
+    private void addToMapping(final String contentType, final String name,
+            final ClassLoader classLoader) {
         List existingFiles = (List) contentMappings.get(contentType);
         if (existingFiles == null) {
             existingFiles = new Vector();
             contentMappings.put(contentType, existingFiles);
         }
-        final URL url = getClassLoaderForResources().getResource(name);
+        final URL url = classLoader.getResource(name);
         if (url != null) {
             existingFiles.add(url);
         }



---------------------------------------------------------------------
Apache XML Graphics Project URL: http://xmlgraphics.apache.org/
To unsubscribe, e-mail: commits-unsubscribe@xmlgraphics.apache.org
For additional commands, e-mail: commits-help@xmlgraphics.apache.org