Author: pauls
Date: Wed Jan 23 13:45:25 2019
New Revision: 1851915

URL: http://svn.apache.org/viewvc?rev=1851915&view=rev
Log:
FELIX-6035: preload the jrt handler on URLHandlers init using the URL to avoid 
an add-opens requirement.

Modified:
    felix/trunk/framework/pom.xml
    
felix/trunk/framework/src/main/java/org/apache/felix/framework/URLHandlers.java
    
felix/trunk/framework/src/main/java/org/apache/felix/framework/URLHandlersStreamHandlerProxy.java

Modified: felix/trunk/framework/pom.xml
URL: 
http://svn.apache.org/viewvc/felix/trunk/framework/pom.xml?rev=1851915&r1=1851914&r2=1851915&view=diff
==============================================================================
--- felix/trunk/framework/pom.xml (original)
+++ felix/trunk/framework/pom.xml Wed Jan 23 13:45:25 2019
@@ -43,7 +43,7 @@
       <plugin>
         <groupId>org.apache.felix</groupId>
         <artifactId>maven-bundle-plugin</artifactId>
-        <version>3.5.0</version>
+        <version>4.1.0</version>
         <extensions>true</extensions>
         <configuration>
           <instructions>

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=1851915&r1=1851914&r2=1851915&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 
Wed Jan 23 13:45:25 2019
@@ -18,6 +18,7 @@
  */
 package org.apache.felix.framework;
 
+import java.lang.reflect.Method;
 import java.net.ContentHandler;
 import java.net.ContentHandlerFactory;
 import java.net.URL;
@@ -173,6 +174,30 @@ class URLHandlers implements URLStreamHa
                 // Ignore, this is a best effort (maybe log it or something)
             }
 
+            // Try to preload the jrt handler as we need it from the jvm on 
java > 8
+            if (getFromCache(m_builtIn, "jrt") == null)
+            {
+                try
+                {
+                    // Try to get it directly from the URL class to if possible
+                    Method getURLStreamHandler = 
m_secureAction.getDeclaredMethod(URL.class,"getURLStreamHandler", new 
Class[]{String.class});
+                    URLStreamHandler handler = (URLStreamHandler) 
m_secureAction.invoke(getURLStreamHandler, null, new Object[]{"jrt"});
+                    addToCache(m_builtIn, "jrt", handler);
+                }
+                catch (Throwable ex)
+                {
+                    // Ignore, this is a best effort and try to load the 
normal way
+                    try
+                    {
+                        getBuiltInStreamHandler("jrt", currentFactory);
+                    }
+                    catch (Throwable ex2)
+                    {
+                        // Ignore, this is a best efforts
+                    }
+                }
+            }
+
             if (currentFactory != null)
             {
                 try

Modified: 
felix/trunk/framework/src/main/java/org/apache/felix/framework/URLHandlersStreamHandlerProxy.java
URL: 
http://svn.apache.org/viewvc/felix/trunk/framework/src/main/java/org/apache/felix/framework/URLHandlersStreamHandlerProxy.java?rev=1851915&r1=1851914&r2=1851915&view=diff
==============================================================================
--- 
felix/trunk/framework/src/main/java/org/apache/felix/framework/URLHandlersStreamHandlerProxy.java
 (original)
+++ 
felix/trunk/framework/src/main/java/org/apache/felix/framework/URLHandlersStreamHandlerProxy.java
 Wed Jan 23 13:45:25 2019
@@ -264,7 +264,7 @@ public class URLHandlersStreamHandlerPro
         Object svc = getStreamHandlerService();
         if (svc == null)
         {
-            throw new MalformedURLException("Unknown protocol: " + 
url.toString());
+            throw new MalformedURLException("Unknown protocol: " + 
url.getProtocol());
         }
         if (svc instanceof URLStreamHandlerService)
         {
@@ -317,7 +317,7 @@ public class URLHandlersStreamHandlerPro
         Object svc = getStreamHandlerService();
         if (svc == null)
         {
-            throw new MalformedURLException("Unknown protocol: " + 
url.toString());
+            throw new MalformedURLException("Unknown protocol: " + 
url.getProtocol());
         }
         if (svc instanceof URLStreamHandlerService)
         {


Reply via email to