Author: pauls
Date: Wed Jun 27 10:39:56 2018
New Revision: 1834491

URL: http://svn.apache.org/viewvc?rev=1834491&view=rev
Log:
FELIX-5874: Make URLHandlersContentHandlerProxy.getBuiltIn return the cached 
handler if any.

Modified:
    
felix/trunk/framework/src/main/java/org/apache/felix/framework/URLHandlersContentHandlerProxy.java
    
felix/trunk/framework/src/test/java/org/apache/felix/framework/URLHandlersTest.java

Modified: 
felix/trunk/framework/src/main/java/org/apache/felix/framework/URLHandlersContentHandlerProxy.java
URL: 
http://svn.apache.org/viewvc/felix/trunk/framework/src/main/java/org/apache/felix/framework/URLHandlersContentHandlerProxy.java?rev=1834491&r1=1834490&r2=1834491&view=diff
==============================================================================
--- 
felix/trunk/framework/src/main/java/org/apache/felix/framework/URLHandlersContentHandlerProxy.java
 (original)
+++ 
felix/trunk/framework/src/main/java/org/apache/felix/framework/URLHandlersContentHandlerProxy.java
 Wed Jun 27 10:39:56 2018
@@ -144,7 +144,7 @@ class URLHandlersContentHandlerProxy ext
     {
         ContentHandler result = m_builtIn.get(m_mimeType);
 
-        if (result == null)
+        if (result != null)
         {
             return result;
         }

Modified: 
felix/trunk/framework/src/test/java/org/apache/felix/framework/URLHandlersTest.java
URL: 
http://svn.apache.org/viewvc/felix/trunk/framework/src/test/java/org/apache/felix/framework/URLHandlersTest.java?rev=1834491&r1=1834490&r2=1834491&view=diff
==============================================================================
--- 
felix/trunk/framework/src/test/java/org/apache/felix/framework/URLHandlersTest.java
 (original)
+++ 
felix/trunk/framework/src/test/java/org/apache/felix/framework/URLHandlersTest.java
 Wed Jun 27 10:39:56 2018
@@ -21,6 +21,7 @@ import java.io.File;
 import java.io.FileOutputStream;
 import java.io.IOException;
 import java.io.InputStream;
+import java.net.ContentHandler;
 import java.net.InetAddress;
 import java.net.URL;
 import java.net.URLClassLoader;
@@ -52,6 +53,7 @@ import org.osgi.service.url.URLStreamHan
  */
 public class URLHandlersTest extends TestCase
 {
+
     public void testURLHandlers() throws Exception
     {
         String mf = "Bundle-SymbolicName: url.test\n"
@@ -61,7 +63,7 @@ public class URLHandlersTest extends Tes
             + "Manifest-Version: 1.0\n"
             + Constants.BUNDLE_ACTIVATOR + ": " + 
TestURLHandlersActivator.class.getName() + "\n\n";
 
-        File bundleFile = createBundle(mf, TestURLHandlersActivator.class);
+        File bundleFile = createBundle(mf, TestURLHandlersActivator.class, 
UC.class);
 
         Framework f = createFramework();
         f.init();
@@ -103,7 +105,7 @@ public class URLHandlersTest extends Tes
             + "Manifest-Version: 1.0\n"
             + Constants.BUNDLE_ACTIVATOR + ": " + 
TestURLHandlersActivator.class.getName();
 
-        File bundleFile = createBundle(mf, TestURLHandlersActivator.class);
+        File bundleFile = createBundle(mf, TestURLHandlersActivator.class, 
UC.class);
 
         final Bundle bundle = 
f.getBundleContext().installBundle(bundleFile.toURI().toString());
         bundle.start();
@@ -202,14 +204,40 @@ public class URLHandlersTest extends Tes
             return super.defineClass(name, buffer, 0, buffer.length, null);
         }
     }
+    public static class UC extends URLConnection
+    {
+        public UC(URL u)
+        {
+            super(u);
+        }
+
+        @Override
+        public void connect() throws IOException
+        {
+
+        }
+
+        @Override
+        public String getContentType()
+        {
+            return "test";
+        }
+
+        @Override
+        public InputStream getInputStream() throws IOException
+        {
+            return null;
+        }
+    }
 
-    public static class TestURLHandlersActivator implements BundleActivator, 
URLStreamHandlerService
+    public static class TestURLHandlersActivator extends ContentHandler 
implements BundleActivator, URLStreamHandlerService
     {
+
         private volatile ServiceRegistration m_reg = null;
 
         public URLConnection openConnection(URL u) throws IOException
         {
-            return null;//throw new UnsupportedOperationException("Not 
supported yet.");
+            return new UC(u);//throw new UnsupportedOperationException("Not 
supported yet.");
         }
 
         public void parseURL(URLStreamHandlerSetter realHandler, URL u, String 
spec, int start, int limit)
@@ -260,7 +288,7 @@ public class URLHandlersTest extends Tes
                 new URL("test" + 
System.identityHashCode(TestURLHandlersActivator.this) + ":").openConnection();
                 throw new Exception("Unexpected url resolve");
             }
-            catch (Exception ex)
+            catch (IOException ex)
             {
                 // pass
             }
@@ -272,7 +300,54 @@ public class URLHandlersTest extends Tes
 
             new URL("test" + 
System.identityHashCode(TestURLHandlersActivator.this) + ":").openConnection();
 
-            reg.unregister();
+
+
+            try
+            {
+                if (new URL("test" + 
System.identityHashCode(TestURLHandlersActivator.this) + ":").getContent() != 
null)
+                {
+                    throw new Exception("Unexpected content resolve");
+                }
+            }
+            catch (IOException ex)
+            {
+                // pass
+            }
+
+            props = new Hashtable<String, String>();
+            props.put(URLConstants.URL_CONTENT_MIMETYPE, "test");
+
+            try
+            {
+                ServiceRegistration reg2 = 
context.registerService(ContentHandler.class, this, props);
+
+                try
+                {
+                    if (new URL("test" + 
System.identityHashCode(TestURLHandlersActivator.this) + ":").getContent() != 
this)
+                    {
+                        throw new Exception("Unexpected content");
+                    }
+                }
+                finally
+                {
+                    reg2.unregister();
+                }
+                try
+                {
+                    if (new URL("test" + 
System.identityHashCode(TestURLHandlersActivator.this) + ":").getContent() != 
null)
+                    {
+                        throw new Exception("Unexpected content resolve");
+                    }
+                }
+                catch (IOException ex)
+                {
+                    // pass
+                }
+            }
+            finally
+            {
+                reg.unregister();
+            }
 
             try
             {
@@ -295,7 +370,7 @@ public class URLHandlersTest extends Tes
                     + "Manifest-Version: 1.0\n"
                     + Constants.BUNDLE_ACTIVATOR + ": " + 
TestURLHandlersActivator.class.getName() + "\n\n";
 
-                File bundleFile = createBundle(mf, 
TestURLHandlersActivator.class);
+                File bundleFile = createBundle(mf, 
TestURLHandlersActivator.class, UC.class);
 
                 bundle2 = 
context.installBundle(bundleFile.toURI().toURL().toString());
             }
@@ -371,6 +446,12 @@ public class URLHandlersTest extends Tes
                 m_reg.unregister();
             }
         }
+
+        @Override
+        public Object getContent(URLConnection urlc) throws IOException
+        {
+            return this;
+        }
     }
 
     private static File createBundle(String manifest, Class... classes) throws 
IOException


Reply via email to