Author: rajith
Date: Tue Oct  7 07:10:39 2008
New Revision: 702488

URL: http://svn.apache.org/viewvc?rev=702488&view=rev
Log:
This is a fix for QPID-1319.
If SSL is specified as an option in the ConnectionURL then it will be copied to 
the broker level options.
If SSL is also specified in the broker URL then it will override the value 
given at the top level.
I also added a simple test case for this use case.


Modified:
    
incubator/qpid/trunk/qpid/java/client/src/main/java/org/apache/qpid/client/AMQBrokerDetails.java
    
incubator/qpid/trunk/qpid/java/client/src/main/java/org/apache/qpid/jms/BrokerDetails.java
    
incubator/qpid/trunk/qpid/java/client/src/test/java/org/apache/qpid/test/unit/client/BrokerDetails/BrokerDetailsTest.java

Modified: 
incubator/qpid/trunk/qpid/java/client/src/main/java/org/apache/qpid/client/AMQBrokerDetails.java
URL: 
http://svn.apache.org/viewvc/incubator/qpid/trunk/qpid/java/client/src/main/java/org/apache/qpid/client/AMQBrokerDetails.java?rev=702488&r1=702487&r2=702488&view=diff
==============================================================================
--- 
incubator/qpid/trunk/qpid/java/client/src/main/java/org/apache/qpid/client/AMQBrokerDetails.java
 (original)
+++ 
incubator/qpid/trunk/qpid/java/client/src/main/java/org/apache/qpid/client/AMQBrokerDetails.java
 Tue Oct  7 07:10:39 2008
@@ -26,6 +26,7 @@
 import java.util.Map;
 
 import org.apache.qpid.jms.BrokerDetails;
+import org.apache.qpid.jms.ConnectionURL;
 import org.apache.qpid.url.URLHelper;
 import org.apache.qpid.url.URLSyntaxException;
 
@@ -35,18 +36,28 @@
     private int _port;
     private String _transport;
 
-    private Map<String, String> _options;
+    private Map<String, String> _options = new HashMap<String, String>();
 
     private SSLConfiguration _sslConfiguration;
 
-    public AMQBrokerDetails()
-    {
-        _options = new HashMap<String, String>();
-    }
-
-    public AMQBrokerDetails(String url) throws URLSyntaxException
-    {
-        this();
+    public AMQBrokerDetails(){}
+    
+    public AMQBrokerDetails(String url)throws URLSyntaxException
+    {   
+        this(url,null);
+    }
+
+    public AMQBrokerDetails(String url,Map<String, String> options) throws 
URLSyntaxException
+    {        
+        /* According to the wiki the AMQBroker options should default to 
connection level options.
+           unless overridden by broker specific options.
+           Currently there seems to be only one such option (SSL).            
+        */   
+        if (options != null)
+        {
+            
_options.put(ConnectionURL.OPTIONS_SSL,options.get(ConnectionURL.OPTIONS_SSL)); 
      
+        }
+        
         // URL should be of format 
tcp://host:port?option='value',option='value'
         try
         {
@@ -252,6 +263,23 @@
 
         return BrokerDetails.DEFAULT_CONNECT_TIMEOUT;
     }
+    
+    public boolean useSSL()
+    {
+        if (_options.containsKey(ConnectionURL.OPTIONS_SSL))
+        {
+            try
+            {
+                return 
Boolean.parseBoolean(_options.get(ConnectionURL.OPTIONS_SSL));
+            }
+            catch (NumberFormatException nfe)
+            {
+                //Do nothing as we will use the default below.
+            }
+        }
+
+        return false;
+    }    
 
     public void setTimeout(long timeout)
     {

Modified: 
incubator/qpid/trunk/qpid/java/client/src/main/java/org/apache/qpid/jms/BrokerDetails.java
URL: 
http://svn.apache.org/viewvc/incubator/qpid/trunk/qpid/java/client/src/main/java/org/apache/qpid/jms/BrokerDetails.java?rev=702488&r1=702487&r2=702488&view=diff
==============================================================================
--- 
incubator/qpid/trunk/qpid/java/client/src/main/java/org/apache/qpid/jms/BrokerDetails.java
 (original)
+++ 
incubator/qpid/trunk/qpid/java/client/src/main/java/org/apache/qpid/jms/BrokerDetails.java
 Tue Oct  7 07:10:39 2008
@@ -94,6 +94,8 @@
     SSLConfiguration getSSLConfiguration();
 
     void setSSLConfiguration(SSLConfiguration sslConfiguration);
+    
+    boolean useSSL();
 
     String toString();
 

Modified: 
incubator/qpid/trunk/qpid/java/client/src/test/java/org/apache/qpid/test/unit/client/BrokerDetails/BrokerDetailsTest.java
URL: 
http://svn.apache.org/viewvc/incubator/qpid/trunk/qpid/java/client/src/test/java/org/apache/qpid/test/unit/client/BrokerDetails/BrokerDetailsTest.java?rev=702488&r1=702487&r2=702488&view=diff
==============================================================================
--- 
incubator/qpid/trunk/qpid/java/client/src/test/java/org/apache/qpid/test/unit/client/BrokerDetails/BrokerDetailsTest.java
 (original)
+++ 
incubator/qpid/trunk/qpid/java/client/src/test/java/org/apache/qpid/test/unit/client/BrokerDetails/BrokerDetailsTest.java
 Tue Oct  7 07:10:39 2008
@@ -20,14 +20,19 @@
  */
 package org.apache.qpid.test.unit.client.BrokerDetails;
 
+import java.util.HashMap;
+import java.util.Map;
+
 import junit.framework.TestCase;
 
 import org.apache.qpid.client.AMQBrokerDetails;
+import org.apache.qpid.client.AMQConnectionURL;
+import org.apache.qpid.jms.ConnectionURL;
+import org.apache.qpid.jms.BrokerDetails;
 import org.apache.qpid.url.URLSyntaxException;
 
 public class BrokerDetailsTest extends TestCase
 {
-
     public void testMultiParameters() throws URLSyntaxException
     {
         String url = 
"tcp://localhost:5672?timeout='200',immediatedelivery='true'";
@@ -86,6 +91,17 @@
         }
 
     }
+    
+    public void testBrokerDefaultsToTopLevelOptions() throws URLSyntaxException
+    {
+        String url = "amqp://guest:[EMAIL 
PROTECTED]/test?ssl='false'&brokerlist='tcp://localhost:5672?ssl='true';tcp://myhost:5672'";
+        ConnectionURL connectionurl = new AMQConnectionURL(url);
+        BrokerDetails bd1 = connectionurl.getBrokerDetails(0);
+        BrokerDetails bd2 = connectionurl.getBrokerDetails(1);
+        
+        assertTrue("Broker option should override the top level 
option",bd1.useSSL());
+        assertFalse("Broker options should default to the top level 
options",bd2.useSSL());
+    }
 
     public static junit.framework.Test suite()
     {


Reply via email to