Avoid creating an unnecessary inner class by reusing an existing one and fix some thread safety issue in URLHandlersBundleURLConnection.

git-svn-id: https://svn.apache.org/repos/asf/felix/trunk@592555 13f79535-47bb-0310-9956-ffa450edef68
diff --git a/framework/src/main/java/org/apache/felix/framework/ExtensionManager.java b/framework/src/main/java/org/apache/felix/framework/ExtensionManager.java
index c09725e..d3f3c8e 100644
--- a/framework/src/main/java/org/apache/felix/framework/ExtensionManager.java
+++ b/framework/src/main/java/org/apache/felix/framework/ExtensionManager.java
@@ -512,13 +512,7 @@
 
         if (path.trim().equals("/"))
         {
-            return new URLConnection(url) 
-            {
-                public void connect() throws IOException 
-                {
-                    throw new IOException("Resource not provided by any extension!");
-                }
-            };
+            return new URLHandlersBundleURLConnection(url);
         }
 
         for (Iterator iter = m_extensions.iterator(); iter.hasNext();)
diff --git a/framework/src/main/java/org/apache/felix/framework/URLHandlersBundleURLConnection.java b/framework/src/main/java/org/apache/felix/framework/URLHandlersBundleURLConnection.java
index 69a3d7e..ac8cc82 100644
--- a/framework/src/main/java/org/apache/felix/framework/URLHandlersBundleURLConnection.java
+++ b/framework/src/main/java/org/apache/felix/framework/URLHandlersBundleURLConnection.java
@@ -37,6 +37,11 @@
     private String m_contentType;
     private InputStream m_is;
 
+    public URLHandlersBundleURLConnection(URL url)
+    {
+        super(url);
+    }
+
     public URLHandlersBundleURLConnection(URL url, Felix framework)
         throws IOException
     {
@@ -92,7 +97,7 @@
         }
     }
 
-    public void connect() throws IOException
+    public synchronized void connect() throws IOException
     {
         if (!connected)
         {
@@ -112,42 +117,36 @@
     public InputStream getInputStream()
         throws IOException
     {
-        if (!connected)
-        {
-            connect();
-        }
+        connect();
+
         return m_is;
     }
 
     public int getContentLength()
     {
-        if (!connected)
+        try
         {
-            try
-            {
-                connect();
-            }
-            catch(IOException ex)
-            {
-                return -1;
-            }
+            connect();
         }
+        catch(IOException ex)
+        {
+            return -1;
+        }
+
         return m_contentLength;
     }
 
     public long getLastModified()
     {
-        if (!connected)
+        try
         {
-            try
-            {
-                connect();
-            }
-            catch(IOException ex)
-            {
-                return 0;
-            }
+            connect();
         }
+        catch(IOException ex)
+        {
+            return 0;
+        }
+
         if (m_contentTime != -1L)
         {
             return m_contentTime;
@@ -160,17 +159,15 @@
 
     public String getContentType()
     {
-        if (!connected)
+        try
         {
-            try
-            {
-                connect();
-            }
-            catch (IOException ex)
-            {
-                return null;
-            }
+            connect();
         }
+        catch (IOException ex)
+        {
+            return null;
+        }
+
         return m_contentType;
     }