You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@felix.apache.org by pa...@apache.org on 2007/12/13 23:43:30 UTC

svn commit: r604054 - in /felix/trunk/framework/src/main/java/org/apache/felix/framework: ExtensionManager.java URLHandlers.java

Author: pauls
Date: Thu Dec 13 14:43:29 2007
New Revision: 604054

URL: http://svn.apache.org/viewvc?rev=604054&view=rev
Log:
Fix a StackOverflowError in URLHandlers.createStreamHandler() when creating URL on jamvm and Mika. This patch resolves an unfortunate interaction between our ExtensionManager and the URLHandlers by making the URLHandlers aware of the extension protocol. Pretty much like we do already for the bundle protocol. (FELIX-435)

Modified:
    felix/trunk/framework/src/main/java/org/apache/felix/framework/ExtensionManager.java
    felix/trunk/framework/src/main/java/org/apache/felix/framework/URLHandlers.java

Modified: felix/trunk/framework/src/main/java/org/apache/felix/framework/ExtensionManager.java
URL: http://svn.apache.org/viewvc/felix/trunk/framework/src/main/java/org/apache/felix/framework/ExtensionManager.java?rev=604054&r1=604053&r2=604054&view=diff
==============================================================================
--- felix/trunk/framework/src/main/java/org/apache/felix/framework/ExtensionManager.java (original)
+++ felix/trunk/framework/src/main/java/org/apache/felix/framework/ExtensionManager.java Thu Dec 13 14:43:29 2007
@@ -84,7 +84,7 @@
     // The private instance that is added to Felix.class.getClassLoader() -
     // will be null if extension bundles are not supported (i.e., we are not 
     // loaded by an instance of URLClassLoader)
-    private static final ExtensionManager m_extensionManager;
+    static final ExtensionManager m_extensionManager;
     
     static
     {

Modified: felix/trunk/framework/src/main/java/org/apache/felix/framework/URLHandlers.java
URL: http://svn.apache.org/viewvc/felix/trunk/framework/src/main/java/org/apache/felix/framework/URLHandlers.java?rev=604054&r1=604053&r2=604054&view=diff
==============================================================================
--- felix/trunk/framework/src/main/java/org/apache/felix/framework/URLHandlers.java (original)
+++ felix/trunk/framework/src/main/java/org/apache/felix/framework/URLHandlers.java Thu Dec 13 14:43:29 2007
@@ -134,6 +134,22 @@
                 return handler;
             }
 
+            // If this is the framework's "felix:" extension protocol, then
+            // return the ExtensionManager.m_extensionManager handler for 
+            // that immediately - this is a workaround for certain jvms that
+            // do a toString() on the extension url we add to the global
+            // URLClassloader.
+            if (protocol.equals("felix"))
+            {
+                handler = ExtensionManager.m_extensionManager;
+                if (m_streamHandlerCache == null)
+                {
+                    m_streamHandlerCache = new HashMap();
+                }
+                m_streamHandlerCache.put(protocol, handler);
+                return handler;
+            }
+
             // If there is not cached handler, then search for built-in
             // handler or create a new handler proxy.
             if (handler == null)