You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@hc.apache.org by ol...@apache.org on 2007/04/12 14:35:33 UTC

svn commit: r527900 - in /jakarta/httpcomponents/httpclient/trunk/src: java/org/apache/http/auth/ java/org/apache/http/conn/ java/org/apache/http/cookie/ test/org/apache/http/conn/ test/org/apache/http/cookie/

Author: olegk
Date: Thu Apr 12 05:35:25 2007
New Revision: 527900

URL: http://svn.apache.org/viewvc?view=rev&rev=527900
Log:
Changelog:
* Made all methods in AuthPolicy and CookiePolicy non-static
* API and internal implementation of AuthPolicy, CookiePolicy and SchemeRegistry made more consistent
* Removed name iterator from the SchemeRegistry
* Changed AuthPolicy to use auth scheme factories

Added:
    jakarta/httpcomponents/httpclient/trunk/src/java/org/apache/http/auth/AuthSchemeFactory.java   (with props)
Modified:
    jakarta/httpcomponents/httpclient/trunk/src/java/org/apache/http/auth/AuthPolicy.java
    jakarta/httpcomponents/httpclient/trunk/src/java/org/apache/http/conn/SchemeRegistry.java
    jakarta/httpcomponents/httpclient/trunk/src/java/org/apache/http/cookie/CookiePolicy.java
    jakarta/httpcomponents/httpclient/trunk/src/test/org/apache/http/conn/TestScheme.java
    jakarta/httpcomponents/httpclient/trunk/src/test/org/apache/http/cookie/TestCookiePolicy.java

Modified: jakarta/httpcomponents/httpclient/trunk/src/java/org/apache/http/auth/AuthPolicy.java
URL: http://svn.apache.org/viewvc/jakarta/httpcomponents/httpclient/trunk/src/java/org/apache/http/auth/AuthPolicy.java?view=diff&rev=527900&r1=527899&r2=527900
==============================================================================
--- jakarta/httpcomponents/httpclient/trunk/src/java/org/apache/http/auth/AuthPolicy.java (original)
+++ jakarta/httpcomponents/httpclient/trunk/src/java/org/apache/http/auth/AuthPolicy.java Thu Apr 12 05:35:25 2007
@@ -31,161 +31,101 @@
 package org.apache.http.auth;
 
 import java.util.ArrayList;
-import java.util.HashMap;
+import java.util.LinkedHashMap;
 import java.util.List;
+import java.util.Map;
 
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
-import org.apache.http.impl.auth.BasicScheme;
-import org.apache.http.impl.auth.DigestScheme;
+import org.apache.http.cookie.CookieSpecFactory;
+import org.apache.http.params.HttpParams;
 
 /**
  * Authentication policy class. The Authentication policy provides corresponding
  * authentication scheme interfrace for a given type of authorization challenge. 
- * <p>The following specifications are provided:
- *  <ul>
- *   <li><tt>Basic</tt>: Basic authentication scheme as defined in RFC2617
- *           (considered inherently insecure, but most widely supported)
- *   <li><tt>Digest</tt>: Digest authentication scheme as defined in RFC2617
- *   <li><tt>NTLM</tt>: The NTLM scheme is a proprietary Microsoft Windows 
- *           Authentication protocol (considered to be the most secure among
- *           currently supported authentication schemes)
- *  </ul>
  * 
- * @author <a href="mailto:oleg@ural.ru">Oleg Kalnichevski</a>
+ * @author <a href="mailto:oleg at ural.ru">Oleg Kalnichevski</a>
  *
  * @version $Revision$
  * @since 3.0
  */
-public abstract class AuthPolicy {
+public final class AuthPolicy {
 
-    private static final HashMap   SCHEMES     = new HashMap();
-    private static final ArrayList SCHEME_LIST = new ArrayList();
+    public final static AuthPolicy DEFAULT = new AuthPolicy();
     
-    /**
-     * The key used to look up the list of IDs of supported {@link AuthScheme 
-     * authentication schemes} in their order of preference. The scheme IDs are 
-     * stored in a {@link java.util.Collection} as {@link java.lang.String}s. 
-     * 
-     * <p>
-     * If several schemes are returned in the <tt>WWW-Authenticate</tt> 
-     * or <tt>Proxy-Authenticate</tt> header, this parameter defines which
-     * {@link AuthScheme authentication schemes} takes precedence over others.
-     * The first item in the collection represents the most preferred 
-     * {@link AuthScheme authentication scheme}, the last item represents the ID 
-     * of the least preferred one.
-     * </p>
-     * 
-     * @see org.apache.commons.httpclient.params.DefaultHttpParams
-     */
-    public static final String AUTH_SCHEME_PRIORITY = "http.auth.scheme-priority";
-
-    /**
-     * The NTLM scheme is a proprietary Microsoft Windows Authentication 
-     * protocol (considered to be the most secure among currently supported 
-     * authentication schemes).
-     */
-    public static final String NTLM = "NTLM";
+    private final Map registeredSchemes = new LinkedHashMap();
     
-    /** 
-     * Digest authentication scheme as defined in RFC2617.
-     */
-    public static final String DIGEST = "Digest";
-
-    /** 
-     * Basic authentication scheme as defined in RFC2617 (considered inherently
-     * insecure, but most widely supported)
-     */
-    public static final String BASIC = "Basic";
-    
-    static {
-//        AuthPolicy.registerAuthScheme(NTLM,   NTLMScheme.class);
-        AuthPolicy.registerAuthScheme(DIGEST, DigestScheme.class);
-        AuthPolicy.registerAuthScheme(BASIC,  BasicScheme.class);
-    }
-    
-    /** Log object. */
-    protected static final Log LOG = LogFactory.getLog(AuthPolicy.class);
-
     /**
-     * Registers a class implementing an {@link AuthScheme authentication scheme} with 
-     * the given identifier. If a class with the given ID already exists it will be overridden.  
-     * This ID is the same one used to retrieve the {@link AuthScheme authentication scheme} 
-     * from {@link #getAuthScheme(String)}.
+     * Registers a {@link CookieSpecFactory} with  the given identifier. If a factory with the 
+     * given name already exists it will be overridden. This name is the same one used to 
+     * retrieve the {@link AuthScheme authentication scheme} from {@link #getAuthScheme(String)}.
      * 
      * <p>
      * Please note that custom authentication preferences, if used, need to be updated accordingly 
      * for the new {@link AuthScheme authentication scheme} to take effect.
      * </p>    
      * 
-     * @param id the identifier for this scheme
-     * @param clazz the class to register
+     * @param name the identifier for this scheme
+     * @param factory the {@link AuthSchemeFactory} class to register
      * 
      * @see #getAuthScheme(String)
-     * @see #AUTH_SCHEME_PRIORITY
      */
-    public static synchronized void registerAuthScheme(final String id, Class clazz) {
-         if (id == null) {
-             throw new IllegalArgumentException("Id may not be null");
+    public synchronized void registerAuthScheme(
+            final String name, 
+            final AuthSchemeFactory factory) {
+         if (name == null) {
+             throw new IllegalArgumentException("Name may not be null");
          }
-        if (clazz == null) {
-            throw new IllegalArgumentException("Authentication scheme class may not be null");
+        if (factory == null) {
+            throw new IllegalArgumentException("Authentication scheme factory may not be null");
         }
-        SCHEMES.put(id.toLowerCase(), clazz);
-        SCHEME_LIST.add(id.toLowerCase());
+        registeredSchemes.put(name.toLowerCase(), factory);
     }
 
     /**
      * Unregisters the class implementing an {@link AuthScheme authentication scheme} with 
-     * the given ID.
+     * the given name.
      * 
-     * @param id the ID of the class to unregister
+     * @param name the identifier of the class to unregister
      */
-    public static synchronized void unregisterAuthScheme(final String id) {
-         if (id == null) {
-             throw new IllegalArgumentException("Id may not be null");
+    public synchronized void unregisterAuthScheme(final String name) {
+         if (name == null) {
+             throw new IllegalArgumentException("Name may not be null");
          }
-        SCHEMES.remove(id.toLowerCase());
-        SCHEME_LIST.remove(id.toLowerCase());
+        registeredSchemes.remove(name.toLowerCase());
     }
 
     /**
-     * Gets the {@link AuthScheme authentication scheme} with the given ID.
+     * Gets the {@link AuthScheme authentication scheme} with the given name.
      * 
-     * @param id the {@link AuthScheme authentication scheme} ID
+     * @param name the {@link AuthScheme authentication scheme} identifier
+     * @param params the {@link HttpParams HTTP parameters} for the authentication
+     *  scheme. 
      * 
      * @return {@link AuthScheme authentication scheme}
      * 
-     * @throws IllegalStateException if a scheme with the ID cannot be found
+     * @throws IllegalStateException if a scheme with the given name cannot be found
      */
-    public static synchronized AuthScheme getAuthScheme(final String id) 
+    public synchronized AuthScheme getAuthScheme(final String name, final HttpParams params) 
         throws IllegalStateException {
 
-        if (id == null) {
-            throw new IllegalArgumentException("Id may not be null");
+        if (name == null) {
+            throw new IllegalArgumentException("Name may not be null");
         }
-        Class clazz = (Class)SCHEMES.get(id.toLowerCase());
-        if (clazz != null) {
-            try {
-                return (AuthScheme)clazz.newInstance();
-            } catch (Exception e) {
-                LOG.error("Error initializing authentication scheme: " + id, e);
-                throw new IllegalStateException(id + 
-                    " authentication scheme implemented by " +
-                    clazz.getName() + " could not be initialized");
-            }
+        AuthSchemeFactory factory = (AuthSchemeFactory) registeredSchemes.get(name.toLowerCase());
+        if (factory != null) {
+            return factory.newInstance(params);
         } else {
-            throw new IllegalStateException("Unsupported authentication scheme " + id);
+            throw new IllegalStateException("Unsupported authentication scheme: " + name);
         }
     } 
 
     /**
-     * Returns a list containing all registered {@link AuthScheme authentication 
+     * Obtains a list containing names of all registered {@link AuthScheme authentication 
      * schemes} in their default order.
      * 
-     * @return {@link AuthScheme authentication scheme}
+     * @return list of registered scheme names
      */
-    public static synchronized List getDefaultAuthPrefs() {
-        return (List)SCHEME_LIST.clone(); 
+    public synchronized List getSchemeNames() {
+        return new ArrayList(registeredSchemes.keySet()); 
     } 
+    
 }

Added: jakarta/httpcomponents/httpclient/trunk/src/java/org/apache/http/auth/AuthSchemeFactory.java
URL: http://svn.apache.org/viewvc/jakarta/httpcomponents/httpclient/trunk/src/java/org/apache/http/auth/AuthSchemeFactory.java?view=auto&rev=527900
==============================================================================
--- jakarta/httpcomponents/httpclient/trunk/src/java/org/apache/http/auth/AuthSchemeFactory.java (added)
+++ jakarta/httpcomponents/httpclient/trunk/src/java/org/apache/http/auth/AuthSchemeFactory.java Thu Apr 12 05:35:25 2007
@@ -0,0 +1,46 @@
+/*
+ * $HeadURL$
+ * $Revision$
+ * $Date$
+ *
+ * ====================================================================
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ * ====================================================================
+ *
+ * This software consists of voluntary contributions made by many
+ * individuals on behalf of the Apache Software Foundation.  For more
+ * information on the Apache Software Foundation, please see
+ * <http://www.apache.org/>.
+ *
+ */
+
+package org.apache.http.auth;
+
+import org.apache.http.params.HttpParams;
+
+/**
+ * 
+ * @author <a href="mailto:oleg at ural.ru">Oleg Kalnichevski</a>
+ *
+ * @since 4.0
+ */
+public interface AuthSchemeFactory {    
+
+    AuthScheme newInstance(HttpParams params);
+
+}

Propchange: jakarta/httpcomponents/httpclient/trunk/src/java/org/apache/http/auth/AuthSchemeFactory.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: jakarta/httpcomponents/httpclient/trunk/src/java/org/apache/http/auth/AuthSchemeFactory.java
------------------------------------------------------------------------------
    svn:keywords = Date Author Id Revision HeadURL

Propchange: jakarta/httpcomponents/httpclient/trunk/src/java/org/apache/http/auth/AuthSchemeFactory.java
------------------------------------------------------------------------------
    svn:mime-type = text/plain

Modified: jakarta/httpcomponents/httpclient/trunk/src/java/org/apache/http/conn/SchemeRegistry.java
URL: http://svn.apache.org/viewvc/jakarta/httpcomponents/httpclient/trunk/src/java/org/apache/http/conn/SchemeRegistry.java?view=diff&rev=527900&r1=527899&r2=527900
==============================================================================
--- jakarta/httpcomponents/httpclient/trunk/src/java/org/apache/http/conn/SchemeRegistry.java (original)
+++ jakarta/httpcomponents/httpclient/trunk/src/java/org/apache/http/conn/SchemeRegistry.java Thu Apr 12 05:35:25 2007
@@ -30,16 +30,14 @@
  */
 package org.apache.http.conn;
 
-
+import java.util.ArrayList;
+import java.util.LinkedHashMap;
+import java.util.List;
 import java.util.Map;
-import java.util.HashMap;
-import java.util.Iterator;
-import java.util.Collections;
 
 import org.apache.http.HttpHost;
 
 
-
 /**
  * A set of supported protocol {@link Scheme schemes}.
  * Schemes are identified by lowercase names.
@@ -73,7 +71,8 @@
      * Creates a new, empty scheme registry.
      */
     public SchemeRegistry() {
-        registeredSchemes = Collections.synchronizedMap(new HashMap());
+        super();
+        registeredSchemes = new LinkedHashMap();
     }
 
 
@@ -87,7 +86,7 @@
      * @throws IllegalStateException
      *          if the scheme with the given name is not registered
      */
-    public final Scheme getScheme(String name) {
+    public synchronized final Scheme getScheme(String name) {
         Scheme found = get(name);
         if (found == null) {
             throw new IllegalStateException
@@ -108,7 +107,7 @@
      * @throws IllegalStateException
      *          if a scheme with the respective name is not registered
      */
-    public final Scheme getScheme(HttpHost host) {
+    public synchronized final Scheme getScheme(HttpHost host) {
         if (host == null) {
             throw new IllegalArgumentException("Host must not be null.");
         }
@@ -124,7 +123,7 @@
      * @return  the scheme, or
      *          <code>null</code> if there is none by this name
      */
-    public final Scheme get(String name) {
+    public synchronized final Scheme get(String name) {
         if (name == null)
             throw new IllegalArgumentException("Name must not be null.");
 
@@ -145,7 +144,7 @@
      * @return  the scheme previously registered with that name, or
      *          <code>null</code> if none was registered
      */
-    public final Scheme register(Scheme sch) {
+    public synchronized final Scheme register(Scheme sch) {
         if (sch == null)
             throw new IllegalArgumentException("Scheme must not be null.");
 
@@ -162,7 +161,7 @@
      * @return  the unregistered scheme, or
      *          <code>null</code> if there was none
      */
-    public final Scheme unregister(String name) {
+    public synchronized final Scheme unregister(String name) {
         if (name == null)
             throw new IllegalArgumentException("Name must not be null.");
 
@@ -174,13 +173,12 @@
 
 
     /**
-     * Obtains the names of the registered schemes.
+     * Obtains the names of the registered schemes in their default order.
      *
-     * @return  iterator over the registered scheme names.
-     *          The iterator supports {@link Iterator#remove remove()}.
+     * @return  List containing registered scheme names.
      */
-    public final Iterator getSchemeNames() {
-        return registeredSchemes.keySet().iterator();
+    public final List getSchemeNames() {
+        return new ArrayList(registeredSchemes.keySet());
     }
 
 

Modified: jakarta/httpcomponents/httpclient/trunk/src/java/org/apache/http/cookie/CookiePolicy.java
URL: http://svn.apache.org/viewvc/jakarta/httpcomponents/httpclient/trunk/src/java/org/apache/http/cookie/CookiePolicy.java?view=diff&rev=527900&r1=527899&r2=527900
==============================================================================
--- jakarta/httpcomponents/httpclient/trunk/src/java/org/apache/http/cookie/CookiePolicy.java (original)
+++ jakarta/httpcomponents/httpclient/trunk/src/java/org/apache/http/cookie/CookiePolicy.java Thu Apr 12 05:35:25 2007
@@ -31,8 +31,9 @@
 
 package org.apache.http.cookie;
 
-import java.util.Collections;
-import java.util.HashMap;
+import java.util.ArrayList;
+import java.util.LinkedHashMap;
+import java.util.List;
 import java.util.Map;
 
 import org.apache.http.cookie.params.CookieSpecParams;
@@ -47,74 +48,78 @@
  *
  * @since 4.0
  */
-public class CookiePolicy {
+public final class CookiePolicy {
 
-    private static Map SPECS = Collections.synchronizedMap(new HashMap());
+    public final static CookiePolicy DEFAULT = new CookiePolicy();
     
-    private CookiePolicy() {
+    private final Map registeredSpecs;
+    
+    public CookiePolicy() {
+        super();
+        this.registeredSpecs = new LinkedHashMap();
     }
     
     /**
      * Registers a {@link CookieSpecFactory} with the given identifier. 
-     * If a specification with the given ID already exists it will be overridden.  
-     * This ID is the same one used to retrieve the {@link CookieSpecFactory} 
+     * If a specification with the given name already exists it will be overridden.  
+     * This nameis the same one used to retrieve the {@link CookieSpecFactory} 
      * from {@link #getCookieSpec(String)}.
      * 
-     * @param id the identifier for this specification
+     * @param name the identifier for this specification
      * @param factory the {@link CookieSpecFactory} class to register
      * 
      * @see #getCookieSpec(String)
      */
-    public static void register(final String id, final CookieSpecFactory factory) {
-         if (id == null) {
-             throw new IllegalArgumentException("Id may not be null");
+    public synchronized void register(final String name, final CookieSpecFactory factory) {
+         if (name == null) {
+             throw new IllegalArgumentException("Name may not be null");
          }
         if (factory == null) {
             throw new IllegalArgumentException("Cookie spec factory may not be null");
         }
-        SPECS.put(id.toLowerCase(), factory);
+        registeredSpecs.put(name.toLowerCase(), factory);
     }
 
     /**
      * Unregisters the {@link CookieSpecFactory} with the given ID.
      * 
-     * @param id the ID of the {@link CookieSpec cookie specification} to unregister
+     * @param name the identifier of the {@link CookieSpec cookie specification} to unregister
      */
-    public static void unregister(final String id) {
+    public synchronized void unregister(final String id) {
          if (id == null) {
              throw new IllegalArgumentException("Id may not be null");
          }
-         SPECS.remove(id.toLowerCase());
+         registeredSpecs.remove(id.toLowerCase());
     }
 
     /**
      * Gets the {@link CookieSpec cookie specification} with the given ID.
      * 
-     * @param id the {@link CookieSpec cookie specification} ID
+     * @param name the {@link CookieSpec cookie specification} identifier
      * @param params the {@link HttpParams HTTP parameters} for the cookie
      *  specification. 
      * 
      * @return {@link CookieSpec cookie specification}
      * 
-     * @throws IllegalStateException if a policy with the ID cannot be found
+     * @throws IllegalStateException if a policy with the given name cannot be found
      */
-    public static CookieSpec getCookieSpec(final String id, final HttpParams params) 
+    public synchronized CookieSpec getCookieSpec(final String name, final HttpParams params) 
         throws IllegalStateException {
 
-        if (id == null) {
-            throw new IllegalArgumentException("Id may not be null");
+        if (name == null) {
+            throw new IllegalArgumentException("Name may not be null");
         }
-        CookieSpecFactory factory = (CookieSpecFactory) SPECS.get(id.toLowerCase());
+        CookieSpecFactory factory = (CookieSpecFactory) registeredSpecs.get(name.toLowerCase());
         if (factory != null) {
             return factory.newInstance(params);
         } else {
-            throw new IllegalStateException("Unsupported cookie spec " + id);
+            throw new IllegalStateException("Unsupported cookie spec: " + name);
         }
     } 
 
     /**
      * Gets the {@link CookieSpec cookie specification} based on the given
-     * HTTP parameters. The cookie specification ID will be obtained from
+     * HTTP parameters. The cookie specification name will be obtained from
      * the HTTP parameters.
      * 
      * @param params the {@link HttpParams HTTP parameters} for the cookie
@@ -122,11 +127,11 @@
      * 
      * @return {@link CookieSpec cookie specification}
      * 
-     * @throws IllegalStateException if a policy with the ID cannot be found
+     * @throws IllegalStateException if a policy with the given name cannot be found
      * 
      * @see CookieSpecParams#getCookiePolicy(HttpParams)
      */
-    public static CookieSpec getCookieSpec(final HttpParams params) 
+    public CookieSpec getCookieSpec(final HttpParams params) 
         throws IllegalStateException {
         if (params == null) {
             throw new IllegalArgumentException("HTTP parameters may not be null");
@@ -135,29 +140,30 @@
     } 
 
     /**
-     * Gets the {@link CookieSpec cookie specification} with the given ID.
+     * Gets the {@link CookieSpec cookie specification} with the given name.
      * 
-     * @param id the {@link CookieSpec cookie specification} ID
+     * @param name the {@link CookieSpec cookie specification} identifier
      * 
      * @return {@link CookieSpec cookie specification}
      * 
-     * @throws IllegalStateException if a policy with the ID cannot be found
+     * @throws IllegalStateException if a policy with the given name cannot be found
      */
-    public static CookieSpec getCookieSpec(final String id) 
+    public synchronized CookieSpec getCookieSpec(final String name) 
         throws IllegalStateException {
-        return getCookieSpec(id, null);
+        return getCookieSpec(name, null);
     } 
 
     /**
-     * Obtains the currently registered cookie policy names.
+     * Obtains a list containing names of all registered {@link CookieSpec cookie 
+     * specs} in their default order.
      * 
      * Note that the DEFAULT policy (if present) is likely to be the same
      * as one of the other policies, but does not have to be.
      * 
-     * @return array of registered cookie policy names
+     * @return list of registered cookie spec names
      */
-    public static String[] getRegisteredCookieSpecs(){
-            return (String[]) SPECS.keySet().toArray(new String [SPECS.size()]); 
+    public synchronized List getSpecNames(){
+        return new ArrayList(registeredSpecs.keySet()); 
     }
     
 }

Modified: jakarta/httpcomponents/httpclient/trunk/src/test/org/apache/http/conn/TestScheme.java
URL: http://svn.apache.org/viewvc/jakarta/httpcomponents/httpclient/trunk/src/test/org/apache/http/conn/TestScheme.java?view=diff&rev=527900&r1=527899&r2=527900
==============================================================================
--- jakarta/httpcomponents/httpclient/trunk/src/test/org/apache/http/conn/TestScheme.java (original)
+++ jakarta/httpcomponents/httpclient/trunk/src/test/org/apache/http/conn/TestScheme.java Thu Apr 12 05:35:25 2007
@@ -31,7 +31,7 @@
 
 package org.apache.http.conn;
 
-import java.util.Iterator;
+import java.util.List;
 
 import junit.framework.Test;
 import junit.framework.TestCase;
@@ -140,9 +140,9 @@
     public void testIterator() {
         SchemeRegistry schmreg = new SchemeRegistry();
 
-        Iterator iter = schmreg.getSchemeNames();
-        assertNotNull(iter);
-        assertFalse(iter.hasNext());
+        List names = schmreg.getSchemeNames();
+        assertNotNull(names);
+        assertTrue(names.isEmpty());
 
         Scheme http = new Scheme
             ("http", PlainSocketFactory.getSocketFactory(), 80);
@@ -152,14 +152,13 @@
     	schmreg.register(http);
     	schmreg.register(https);
 
-        iter = schmreg.getSchemeNames();
-        assertNotNull(iter);
-        assertTrue(iter.hasNext());
+        names = schmreg.getSchemeNames();
+        assertNotNull(names);
+        assertFalse(names.isEmpty());
 
         boolean flaghttp  = false;
         boolean flaghttps = false;
-        String name = (String) iter.next();
-        assertTrue(iter.hasNext());
+        String name = (String) names.get(0);
 
         if ("http".equals(name))
             flaghttp = true;
@@ -169,12 +168,10 @@
             fail("unexpected name in iterator: " + name);
 
         assertNotNull(schmreg.get(name));
-        iter.remove();
-        assertTrue(iter.hasNext());
+        schmreg.unregister(name);
         assertNull(schmreg.get(name));
 
-        name = (String) iter.next();
-        assertFalse(iter.hasNext());
+        name = (String) names.get(1);
 
         if ("http".equals(name)) {
             if (flaghttp) fail("name 'http' found twice");

Modified: jakarta/httpcomponents/httpclient/trunk/src/test/org/apache/http/cookie/TestCookiePolicy.java
URL: http://svn.apache.org/viewvc/jakarta/httpcomponents/httpclient/trunk/src/test/org/apache/http/cookie/TestCookiePolicy.java?view=diff&rev=527900&r1=527899&r2=527900
==============================================================================
--- jakarta/httpcomponents/httpclient/trunk/src/test/org/apache/http/cookie/TestCookiePolicy.java (original)
+++ jakarta/httpcomponents/httpclient/trunk/src/test/org/apache/http/cookie/TestCookiePolicy.java Thu Apr 12 05:35:25 2007
@@ -30,6 +30,8 @@
 
 package org.apache.http.cookie;
 
+import java.util.List;
+
 import junit.framework.Test;
 import junit.framework.TestCase;
 import junit.framework.TestSuite;
@@ -61,93 +63,101 @@
     }
 
     public void testRegisterUnregisterCookieSpecFactory() {
-        String[] specs = CookiePolicy.getRegisteredCookieSpecs();
-        assertNotNull(specs);
-        assertEquals(0, specs.length);
+        CookiePolicy registry  = CookiePolicy.DEFAULT; 
+        List names = registry.getSpecNames();
+        assertNotNull(names);
+        assertEquals(0, names.size());
         
-        CookiePolicy.register(CookieSpecParams.BROWSER_COMPATIBILITY, 
+        registry.register(CookieSpecParams.BROWSER_COMPATIBILITY, 
                 new BrowserCompatSpecFactory());
-        CookiePolicy.register(CookieSpecParams.NETSCAPE, 
+        registry.register(CookieSpecParams.NETSCAPE, 
                 new NetscapeDraftSpecFactory());
-        CookiePolicy.register(CookieSpecParams.RFC_2109, 
+        registry.register(CookieSpecParams.RFC_2109, 
                 new RFC2109SpecFactory());
-        CookiePolicy.register(CookieSpecParams.RFC_2109, 
+        registry.register(CookieSpecParams.RFC_2109, 
                 new RFC2109SpecFactory());
+        registry.register(CookieSpecParams.NETSCAPE, 
+                new NetscapeDraftSpecFactory());
 
-        specs = CookiePolicy.getRegisteredCookieSpecs();
-        assertNotNull(specs);
-        assertEquals(3, specs.length);
-
-        CookiePolicy.unregister(CookieSpecParams.NETSCAPE); 
-        CookiePolicy.unregister(CookieSpecParams.NETSCAPE); 
-        CookiePolicy.unregister(CookieSpecParams.RFC_2109); 
-        CookiePolicy.unregister(CookieSpecParams.BROWSER_COMPATIBILITY); 
-        CookiePolicy.unregister("whatever"); 
+        names = registry.getSpecNames();
+        assertNotNull(names);
+        assertEquals(3, names.size());
+        assertEquals(CookieSpecParams.BROWSER_COMPATIBILITY, (String) names.get(0));
+        assertEquals(CookieSpecParams.NETSCAPE, (String) names.get(1));
+        assertEquals(CookieSpecParams.RFC_2109, (String) names.get(2));
+
+        registry.unregister(CookieSpecParams.NETSCAPE); 
+        registry.unregister(CookieSpecParams.NETSCAPE); 
+        registry.unregister(CookieSpecParams.RFC_2109); 
+        registry.unregister(CookieSpecParams.BROWSER_COMPATIBILITY); 
+        registry.unregister("whatever"); 
         
-        specs = CookiePolicy.getRegisteredCookieSpecs();
-        assertNotNull(specs);
-        assertEquals(0, specs.length);
+        names = registry.getSpecNames();
+        assertNotNull(names);
+        assertEquals(0, names.size());
     }
 
     public void testGetNewCookieSpec() {
-        CookiePolicy.register(CookieSpecParams.BROWSER_COMPATIBILITY, 
+        CookiePolicy registry  = CookiePolicy.DEFAULT; 
+        registry.register(CookieSpecParams.BROWSER_COMPATIBILITY, 
                 new BrowserCompatSpecFactory());
-        CookiePolicy.register(CookieSpecParams.NETSCAPE, 
+        registry.register(CookieSpecParams.NETSCAPE, 
                 new NetscapeDraftSpecFactory());
-        CookiePolicy.register(CookieSpecParams.RFC_2109, 
+        registry.register(CookieSpecParams.RFC_2109, 
                 new RFC2109SpecFactory());
         
-        assertNotNull(CookiePolicy.getCookieSpec(CookieSpecParams.NETSCAPE));
-        assertNotNull(CookiePolicy.getCookieSpec(CookieSpecParams.RFC_2109));
-        assertNotNull(CookiePolicy.getCookieSpec(CookieSpecParams.BROWSER_COMPATIBILITY));
+        assertNotNull(registry.getCookieSpec(CookieSpecParams.NETSCAPE));
+        assertNotNull(registry.getCookieSpec(CookieSpecParams.RFC_2109));
+        assertNotNull(registry.getCookieSpec(CookieSpecParams.BROWSER_COMPATIBILITY));
         try {
-            CookiePolicy.getCookieSpec("whatever");
+            registry.getCookieSpec("whatever");
             fail("IllegalStateException should have been thrown");
         } catch (IllegalStateException ex) {
             // expected
         }
         HttpParams params = new BasicHttpParams();
-        assertNotNull(CookiePolicy.getCookieSpec(CookieSpecParams.NETSCAPE, params));
-        assertNotNull(CookiePolicy.getCookieSpec(CookieSpecParams.RFC_2109, params));
-        assertNotNull(CookiePolicy.getCookieSpec(CookieSpecParams.BROWSER_COMPATIBILITY, params));
+        assertNotNull(registry.getCookieSpec(CookieSpecParams.NETSCAPE, params));
+        assertNotNull(registry.getCookieSpec(CookieSpecParams.RFC_2109, params));
+        assertNotNull(registry.getCookieSpec(CookieSpecParams.BROWSER_COMPATIBILITY, params));
         try {
-            CookiePolicy.getCookieSpec("whatever", params);
+            registry.getCookieSpec("whatever", params);
             fail("IllegalStateException should have been thrown");
         } catch (IllegalStateException ex) {
             // expected
         }
         CookieSpecParams.setCookiePolicy(params, CookieSpecParams.BROWSER_COMPATIBILITY);
-        CookieSpec cookiespec = CookiePolicy.getCookieSpec(params);
+        CookieSpec cookiespec = registry.getCookieSpec(params);
         assertTrue(cookiespec instanceof BrowserCompatSpec);
     }
 
     public void testInvalidInput() {
+        CookiePolicy registry  = CookiePolicy.DEFAULT; 
         try {
-            CookiePolicy.register(null, null);
+            registry.register(null, null);
             fail("IllegalArgumentException should have been thrown");
         } catch (IllegalArgumentException ex) {
             // expected
         }
         try {
-            CookiePolicy.register("whatever", null);
+            registry.register("whatever", null);
             fail("IllegalArgumentException should have been thrown");
         } catch (IllegalArgumentException ex) {
             // expected
         }
         try {
-            CookiePolicy.unregister(null);
+            registry.unregister(null);
             fail("IllegalArgumentException should have been thrown");
         } catch (IllegalArgumentException ex) {
             // expected
         }
         try {
-            CookiePolicy.getCookieSpec((String)null);
+            registry.getCookieSpec((String)null);
             fail("IllegalArgumentException should have been thrown");
         } catch (IllegalArgumentException ex) {
             // expected
         }
         try {
-            CookiePolicy.getCookieSpec((HttpParams)null);
+            registry.getCookieSpec((HttpParams)null);
             fail("IllegalArgumentException should have been thrown");
         } catch (IllegalArgumentException ex) {
             // expected