Author: kwall
Date: Thu Aug 20 16:29:52 2015
New Revision: 1696815

URL: http://svn.apache.org/r1696815
Log:
QPID-6706: Change PropertiesFileInitialContextFactory to understand schemes 
other than file:

Modified:
    
qpid/java/trunk/client/src/main/java/org/apache/qpid/jndi/PropertiesFileInitialContextFactory.java
    
qpid/java/trunk/client/src/test/java/org/apache/qpid/jndi/PropertiesFileInitialContextFactoryTest.java

Modified: 
qpid/java/trunk/client/src/main/java/org/apache/qpid/jndi/PropertiesFileInitialContextFactory.java
URL: 
http://svn.apache.org/viewvc/qpid/java/trunk/client/src/main/java/org/apache/qpid/jndi/PropertiesFileInitialContextFactory.java?rev=1696815&r1=1696814&r2=1696815&view=diff
==============================================================================
--- 
qpid/java/trunk/client/src/main/java/org/apache/qpid/jndi/PropertiesFileInitialContextFactory.java
 (original)
+++ 
qpid/java/trunk/client/src/main/java/org/apache/qpid/jndi/PropertiesFileInitialContextFactory.java
 Thu Aug 20 16:29:52 2015
@@ -24,8 +24,9 @@ import java.io.BufferedInputStream;
 import java.io.File;
 import java.io.FileInputStream;
 import java.io.IOException;
-import java.net.URI;
-import java.net.URISyntaxException;
+import java.io.InputStream;
+import java.net.MalformedURLException;
+import java.net.URL;
 import java.util.Hashtable;
 import java.util.Iterator;
 import java.util.Map;
@@ -69,18 +70,16 @@ public class PropertiesFileInitialContex
     {
         environment = (environment == null) ? new Hashtable() : environment;
 
-        String fileName = (environment.containsKey(Context.PROVIDER_URL))
+        String providerUrl = (environment.containsKey(Context.PROVIDER_URL))
                 ? (String)environment.get(Context.PROVIDER_URL) : 
System.getProperty(Context.PROVIDER_URL);
 
-        if (fileName != null)
+        if (providerUrl != null)
         {
-            try (BufferedInputStream inputStream = new BufferedInputStream(new 
FileInputStream((fileName.contains("file:"))
-                                                                           ? 
new File(new URI(fileName))
-                                                                           : 
new File(fileName))))
+
+            try (BufferedInputStream inputStream = new 
BufferedInputStream(getProviderUrlInputStream(providerUrl)))
             {
                 // make copy of the original environment to adhere to the 
Contexts interface
                 environment = new Hashtable(environment);
-                _logger.debug("Attempting to load '{}'", fileName);
 
                 Properties p = new Properties();
                 p.load(inputStream);
@@ -96,16 +95,17 @@ public class PropertiesFileInitialContex
                     environment.put(key, expanded);
                 }
             }
-            catch (IOException | URISyntaxException e)
+            catch (IOException e)
             {
-                NamingException ne = new NamingException("Unable to load 
property file specified in Provider_URL:" + fileName + ".");
+                NamingException ne = new NamingException("Unable to load 
property file specified in Provider_URL:" + providerUrl + ".");
                 ne.setRootCause(e);
                 throw ne;
             }
         }
         else
         {
-            _logger.debug("{} was not specified in the context's environment 
or as a system property.", Context.PROVIDER_URL);
+            _logger.debug("{} was not specified in the context's environment 
or as a system property.",
+                          Context.PROVIDER_URL);
         }
 
         Map data = new ConcurrentHashMap();
@@ -120,6 +120,21 @@ public class PropertiesFileInitialContex
         return createContext(data, environment);
     }
 
+    private InputStream getProviderUrlInputStream(final String providerUrl) 
throws IOException
+    {
+        try
+        {
+            URL url = new URL(providerUrl);
+            _logger.debug("Using provider URL : '{}'", url);
+            return url.openStream();
+        }
+        catch (MalformedURLException mue)
+        {
+            _logger.debug("Could not interpret '{}' as a valid URL, loading 
from file system instead.", providerUrl);
+            return new FileInputStream(new File(providerUrl));
+        }
+    }
+
     // Implementation methods
     // 
-------------------------------------------------------------------------
     protected ReadOnlyContext createContext(Map data, Hashtable environment)

Modified: 
qpid/java/trunk/client/src/test/java/org/apache/qpid/jndi/PropertiesFileInitialContextFactoryTest.java
URL: 
http://svn.apache.org/viewvc/qpid/java/trunk/client/src/test/java/org/apache/qpid/jndi/PropertiesFileInitialContextFactoryTest.java?rev=1696815&r1=1696814&r2=1696815&view=diff
==============================================================================
--- 
qpid/java/trunk/client/src/test/java/org/apache/qpid/jndi/PropertiesFileInitialContextFactoryTest.java
 (original)
+++ 
qpid/java/trunk/client/src/test/java/org/apache/qpid/jndi/PropertiesFileInitialContextFactoryTest.java
 Thu Aug 20 16:29:52 2015
@@ -99,7 +99,7 @@ public class PropertiesFileInitialContex
      * Test loading of a JNDI properties file through use of a file:// URL
      * supplied via the InitialContext.PROVIDER_URL system property.
      */
-    public void testContextFromProviderURL() throws Exception
+    public void testContextFromProviderFileURL() throws Exception
     {
         Properties properties = new Properties();
         properties.put("connectionfactory.qpidConnectionfactory", 
CONNECTION_URL);
@@ -108,9 +108,7 @@ public class PropertiesFileInitialContex
         File f = File.createTempFile(getTestName(), ".properties");
         try
         {
-            FileOutputStream fos = new FileOutputStream(f);
-            properties.store(fos, null);
-            fos.close();
+            createJndiPropertiesFile(properties, f);
 
             setTestSystemProperty(InitialContext.INITIAL_CONTEXT_FACTORY, 
"org.apache.qpid.jndi.PropertiesFileInitialContextFactory");
             setTestSystemProperty(InitialContext.PROVIDER_URL,  
f.toURI().toURL().toString());
@@ -123,7 +121,33 @@ public class PropertiesFileInitialContex
             ConnectionFactory factory = (ConnectionFactory) 
context.lookup("qpidConnectionfactory");
             assertTrue("ConnectionFactory was not an instance of 
AMQConnectionFactory", factory instanceof AMQConnectionFactory);
             assertEquals("Unexpected ConnectionURL value", 
CONNECTION_URL.replaceAll("password", "********"),
-                        
((AMQConnectionFactory)factory).getConnectionURLString());
+                         ((AMQConnectionFactory) 
factory).getConnectionURLString());
+
+            context.close();
+        }
+        finally
+        {
+            f.delete();
+        }
+    }
+
+    public void testContextFromFileOnFileSystem() throws Exception
+    {
+        Properties properties = new Properties();
+        properties.put("connectionfactory.qpidConnectionfactory", 
CONNECTION_URL);
+
+        File f = File.createTempFile(getTestName(), ".properties");
+        try
+        {
+            createJndiPropertiesFile(properties, f);
+
+            setTestSystemProperty(InitialContext.INITIAL_CONTEXT_FACTORY,
+                                  
"org.apache.qpid.jndi.PropertiesFileInitialContextFactory");
+            setTestSystemProperty(InitialContext.PROVIDER_URL, 
f.getAbsolutePath());
+
+            InitialContext context = new InitialContext();
+            ConnectionFactory factory = (ConnectionFactory) 
context.lookup("qpidConnectionfactory");
+            assertNotNull("Connection factory not present in loaded 
configuration", factory);
 
             context.close();
         }
@@ -154,4 +178,13 @@ public class PropertiesFileInitialContex
         }
 
     }
+
+    private void createJndiPropertiesFile(final Properties properties, final 
File f) throws IOException
+    {
+        try(FileOutputStream fos = new FileOutputStream(f))
+        {
+            properties.store(fos, null);
+        }
+    }
+
 }



---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to