You are viewing a plain text version of this content. The canonical link for it is here.
Posted to java-dev@axis.apache.org by rs...@apache.org on 2002/08/17 00:51:22 UTC

cvs commit: xml-axis/java/src/org/apache/axis/transport/http CommonsHTTPSender.java

rsitze      2002/08/16 15:51:21

  Modified:    java/src/org/apache/axis AxisProperties.java
               java     .cvsignore
               java/src/org/apache/axis/components/net
                        JSSESocketFactory.java SocketFactoryFactory.java
                        DefaultSocketFactory.java SocketFactory.java
               java/src/org/apache/axis/utils DefaultAuthenticator.java
               java/src/org/apache/axis/handlers JWSProcessor.java
               java/src/org/apache/axis/transport/http
                        CommonsHTTPSender.java
  Added:       java/src/org/apache/axis/components/net
                        TransportClientProperties.java
                        TransportClientPropertiesFactory.java
                        DefaultHTTPTransportClientProperties.java
                        DefaultHTTPSTransportClientProperties.java
  Log:
  Pluggable transport client proxy properties... Please change the names if
  you have any opinion, I'm not sure they are quite right.  Adapted everything
  except tcpmon to use these.  Caching is hardwired on (minimize perf. hit).
  
  Revision  Changes    Path
  1.9       +65 -0     xml-axis/java/src/org/apache/axis/AxisProperties.java
  
  Index: AxisProperties.java
  ===================================================================
  RCS file: /home/cvs/xml-axis/java/src/org/apache/axis/AxisProperties.java,v
  retrieving revision 1.8
  retrieving revision 1.9
  diff -u -r1.8 -r1.9
  --- AxisProperties.java	15 Aug 2002 17:54:08 -0000	1.8
  +++ AxisProperties.java	16 Aug 2002 22:51:21 -0000	1.9
  @@ -59,6 +59,13 @@
   import java.util.Map;
   import java.util.Properties;
   
  +import java.lang.reflect.InvocationTargetException;
  +
  +import org.apache.commons.discovery.DiscoverClass;
  +import org.apache.commons.discovery.DiscoveryException;
  +import org.apache.commons.discovery.base.Environment;
  +import org.apache.commons.discovery.base.ImplClass;
  +import org.apache.commons.discovery.base.SPInterface;
   import org.apache.commons.discovery.tools.ManagedProperties;
   
   
  @@ -93,6 +100,64 @@
    * @author Richard A. Sitze
    */
   public class AxisProperties {
  +    public static Environment getDiscoverEnvironment() {
  +        return new Environment(getCommonsGroupContext());
  +    }
  +    
  +    public static Object newInstance(Class spiClass, String defaultClass)
  +        throws DiscoveryException,
  +               InstantiationException,
  +               IllegalAccessException,
  +               NoSuchMethodException,
  +               InvocationTargetException
  +    {
  +        SPInterface spi = new SPInterface(spiClass);
  +        return DiscoverClass.newInstance(getDiscoverEnvironment(),
  +                                         spi,
  +                                         (String) null,
  +                                         spi.createImplClass(defaultClass));
  +    }
  +    
  +    public static Object newInstance(Class spiClass, Class defaultClass)
  +        throws DiscoveryException,
  +               InstantiationException,
  +               IllegalAccessException,
  +               NoSuchMethodException,
  +               InvocationTargetException
  +    {
  +        SPInterface spi = new SPInterface(spiClass);
  +        return DiscoverClass.newInstance(getDiscoverEnvironment(),
  +                                         spi,
  +                                         (String) null,
  +                                         spi.createImplClass(defaultClass));
  +    }
  +
  +    public static Object newInstance(SPInterface spi, String defaultClass)
  +        throws DiscoveryException,
  +               InstantiationException,
  +               IllegalAccessException,
  +               NoSuchMethodException,
  +               InvocationTargetException
  +    {
  +        return DiscoverClass.newInstance(getDiscoverEnvironment(),
  +                                         spi,
  +                                         (String) null,
  +                                         spi.createImplClass(defaultClass));
  +    }
  +
  +    public static Object newInstance(SPInterface spi, Class defaultClass)
  +        throws DiscoveryException,
  +               InstantiationException,
  +               IllegalAccessException,
  +               NoSuchMethodException,
  +               InvocationTargetException
  +    {
  +        return DiscoverClass.newInstance(getDiscoverEnvironment(),
  +                                         spi,
  +                                         (String) null,
  +                                         spi.createImplClass(defaultClass));
  +    }
  +
   
       private static String commonsGroupContext = null;
       
  
  
  
  1.6       +3 -0      xml-axis/java/.cvsignore
  
  Index: .cvsignore
  ===================================================================
  RCS file: /home/cvs/xml-axis/java/.cvsignore,v
  retrieving revision 1.5
  retrieving revision 1.6
  diff -u -r1.5 -r1.6
  --- .cvsignore	4 Jun 2002 17:53:37 -0000	1.5
  +++ .cvsignore	16 Aug 2002 22:51:21 -0000	1.6
  @@ -4,3 +4,6 @@
   server-config.wsdd
   test-reports
   junit*
  +bin
  +.project
  +.classpath
  
  
  
  1.3       +18 -42    xml-axis/java/src/org/apache/axis/components/net/JSSESocketFactory.java
  
  Index: JSSESocketFactory.java
  ===================================================================
  RCS file: /home/cvs/xml-axis/java/src/org/apache/axis/components/net/JSSESocketFactory.java,v
  retrieving revision 1.2
  retrieving revision 1.3
  diff -u -r1.2 -r1.3
  --- JSSESocketFactory.java	2 Aug 2002 17:27:42 -0000	1.2
  +++ JSSESocketFactory.java	16 Aug 2002 22:51:21 -0000	1.3
  @@ -104,8 +104,8 @@
       private SSLSocketFactory sslFactory = null;
   
       /** Field defaultKeystoreFile           */
  -    static String defaultKeystoreFile = AxisProperties.getProperty("user.home")
  -            + "/.keystore";
  +    static String defaultKeystoreFile =
  +        System.getProperty("user.home") + "/.keystore";
   
       /** Field defaultKeyPass           */
       static String defaultKeyPass = "changeit";
  @@ -141,55 +141,29 @@
               port = 443;
           }
   
  -        // Get https.proxyXXX settings
  -        String tunnelHost = getGlobalProperty("https.proxyHost");
  -        String tunnelPortStr = getGlobalProperty("https.proxyPort");
  -        String nonProxyHosts = getGlobalProperty("https.nonProxyHosts");
  -
  -        // Use http.proxyXXX settings if https.proxyXXX is not set
  -        if (tunnelHost == null) {
  -            tunnelHost = getGlobalProperty("http.proxyHost");
  -        }
  -        if (tunnelPortStr == null) {
  -            tunnelPortStr = getGlobalProperty("http.proxyPort");
  -        }
  -        if (nonProxyHosts == null) {
  -            nonProxyHosts = getGlobalProperty("http.nonProxyHosts");
  -        }
  -        boolean hostInNonProxyList = isHostInNonProxyList(host, nonProxyHosts);
  +        TransportClientProperties tcp = TransportClientPropertiesFactory.create("https");
   
  -        if ((tunnelHost == null) || tunnelHost.equals("")
  -                || hostInNonProxyList) {
  +        boolean hostInNonProxyList = isHostInNonProxyList(host, tcp.getNonProxyHosts());
   
  +        if (tcp.getProxyHost().length() == 0 || hostInNonProxyList) {
               // direct SSL connection
               sslSocket = sslFactory.createSocket(host, port);
           } else {
   
               // Default proxy port is 80, even for https
  -            int tunnelPort = ((tunnelPortStr != null)
  -                    ? ((Integer.parseInt(tunnelPortStr) < 0)
  -                    ? 80
  -                    : Integer.parseInt(tunnelPortStr))
  -                    : 80);
  +            int tunnelPort = (tcp.getProxyPort().length() != 0)
  +                             ? Integer.parseInt(tcp.getProxyPort())
  +                             : 80;
  +            if (tunnelPort < 0)
  +                tunnelPort = 80;
   
               // Create the regular socket connection to the proxy
  -            Socket tunnel = new Socket(tunnelHost, tunnelPort);
  +            Socket tunnel = new Socket(tcp.getProxyHost(), tunnelPort);
   
               // The tunnel handshake method (condensed and made reflexive)
               OutputStream tunnelOutputStream = tunnel.getOutputStream();
               PrintWriter out = new PrintWriter(
                       new BufferedWriter(new OutputStreamWriter(tunnelOutputStream)));
  -            String tunnelUser =
  -                    getGlobalProperty("https.proxyUser");
  -            String tunnelPassword =
  -                    getGlobalProperty("https.proxyPassword");
  -
  -            if (tunnelUser == null) {
  -                tunnelUser = getGlobalProperty("http.proxyUser");
  -            }
  -            if (tunnelPassword == null) {
  -                tunnelPassword = getGlobalProperty("http.proxyPassword");
  -            }
   
               // More secure version... engage later?
               // PasswordAuthentication pa =
  @@ -205,12 +179,13 @@
               // }
               out.print("CONNECT " + host + ":" + port + " HTTP/1.0\r\n"
                       + "User-Agent: AxisClient");
  -            if ((tunnelUser != null) && (tunnelPassword != null)) {
  +            if (tcp.getProxyUser().length() != 0 &&
  +                tcp.getProxyPassword().length() != 0) {
   
                   // add basic authentication header for the proxy
  -                String encodedPassword = XMLUtils.base64encode((tunnelUser
  +                String encodedPassword = XMLUtils.base64encode((tcp.getProxyUser()
                           + ":"
  -                        + tunnelPassword).getBytes());
  +                        + tcp.getProxyPassword()).getBytes());
   
                   out.print("\nProxy-Authorization: Basic " + encodedPassword);
               }
  @@ -252,7 +227,7 @@
                       && !replyStr.startsWith("HTTP/1.1 200")) {
                   throw new IOException(JavaUtils.getMessage("cantTunnel00",
                           new String[]{
  -                            tunnelHost,
  +                            tcp.getProxyHost(),
                               "" + tunnelPort,
                               replyStr}));
               }
  @@ -260,7 +235,8 @@
               // End of condensed reflective tunnel handshake method
               sslSocket = sslFactory.createSocket(tunnel, host, port, true);
               if (log.isDebugEnabled()) {
  -                log.debug(JavaUtils.getMessage("setupTunnel00", tunnelHost,
  +                log.debug(JavaUtils.getMessage("setupTunnel00",
  +                          tcp.getProxyHost(),
                           "" + tunnelPort));
               }
           }
  
  
  
  1.4       +28 -61    xml-axis/java/src/org/apache/axis/components/net/SocketFactoryFactory.java
  
  Index: SocketFactoryFactory.java
  ===================================================================
  RCS file: /home/cvs/xml-axis/java/src/org/apache/axis/components/net/SocketFactoryFactory.java,v
  retrieving revision 1.3
  retrieving revision 1.4
  diff -u -r1.3 -r1.4
  --- SocketFactoryFactory.java	2 Aug 2002 17:27:42 -0000	1.3
  +++ SocketFactoryFactory.java	16 Aug 2002 22:51:21 -0000	1.4
  @@ -61,6 +61,9 @@
   import org.apache.axis.components.logger.LogFactory;
   import org.apache.commons.logging.Log;
   
  +import org.apache.commons.discovery.base.ImplClass;
  +import org.apache.commons.discovery.base.SPInterface;
  +
   import java.lang.reflect.Constructor;
   import java.util.Hashtable;
   
  @@ -90,38 +93,20 @@
        * @return
        */
       public static synchronized SocketFactory getFactory(Hashtable attributes) {
  -
  -        String socketFactoryClassName =
  -                AxisProperties.getProperty("axis.socketFactory",
  -                        "org.apache.axis.components.net.DefaultSocketFactory");
  -
  -        log.debug("axis.socketFactory:" + socketFactoryClassName);
  -        SocketFactory extractor = null;
  -
  -        try {
  -            if (theFactory == null) {
  -                Class extractorClass =
  -                        ClassUtils.forName(socketFactoryClassName);
  -
  -                if (SocketFactory.class.isAssignableFrom(extractorClass)) {
  -                    Class classes[] = new Class[1];
  -
  -                    classes[0] = Hashtable.class;
  -                    Object objects[] = new Object[1];
  -
  -                    objects[0] = attributes;
  -                    Constructor constructor =
  -                            extractorClass.getConstructor(classes);
  -
  -                    theFactory =
  -                            (SocketFactory) constructor.newInstance(objects);
  -                }
  +        if (theFactory == null) {
  +            try {
  +                Class classes[] = new Class[] { Hashtable.class };
  +                Object objects[] = new Object[] { attributes };
  +
  +                theFactory = (SocketFactory)AxisProperties.newInstance(
  +                         new SPInterface(SocketFactory.class,
  +                                         "axis.socketFactory",
  +                                         classes,
  +                                         objects),
  +                         "org.apache.axis.components.net.DefaultSocketFactory");
  +            } catch (Exception e) {
  +                log.error(JavaUtils.getMessage("exception00"), e);
               }
  -        } catch (Exception e) {
  -
  -            // If something goes wrong here, should we just fall
  -            // through and use the default one?
  -            log.error(JavaUtils.getMessage("exception00"), e);
           }
           return theFactory;
       }
  @@ -135,38 +120,20 @@
        */
       public static synchronized SocketFactory getSecureFactory(
               Hashtable attributes) {
  -
  -        String socketFactoryClassName =
  -                AxisProperties.getProperty("axis.socketSecureFactory",
  +        if (theSecureFactory == null) {
  +            try {
  +                Class classes[] = new Class[] { Hashtable.class };
  +                Object objects[] = new Object[] { attributes };
  +
  +                theSecureFactory = (SocketFactory)AxisProperties.newInstance(
  +                        new SPInterface(SocketFactory.class,
  +                                        "axis.socketSecureFactory",
  +                                        classes,
  +                                        objects),
                           "org.apache.axis.components.net.JSSESocketFactory");
  -
  -        log.debug("axis.socketSecureFactory:" + socketFactoryClassName);
  -        SocketFactory extractor = null;
  -
  -        try {
  -            if (theSecureFactory == null) {
  -                Class extractorClass =
  -                        ClassUtils.forName(socketFactoryClassName);
  -
  -                if (SocketFactory.class.isAssignableFrom(extractorClass)) {
  -                    Class classes[] = new Class[1];
  -
  -                    classes[0] = Hashtable.class;
  -                    Object objects[] = new Object[1];
  -
  -                    objects[0] = attributes;
  -                    Constructor constructor =
  -                            extractorClass.getConstructor(classes);
  -
  -                    theSecureFactory =
  -                            (SocketFactory) constructor.newInstance(objects);
  -                }
  +            } catch (Exception e) {
  +                log.error(JavaUtils.getMessage("exception00"), e);
               }
  -        } catch (Exception e) {
  -
  -            // If something goes wrong here, should we just fall
  -            // through and use the default one?
  -            log.error(JavaUtils.getMessage("exception00"), e);
           }
           return theSecureFactory;
       }
  
  
  
  1.3       +18 -30    xml-axis/java/src/org/apache/axis/components/net/DefaultSocketFactory.java
  
  Index: DefaultSocketFactory.java
  ===================================================================
  RCS file: /home/cvs/xml-axis/java/src/org/apache/axis/components/net/DefaultSocketFactory.java,v
  retrieving revision 1.2
  retrieving revision 1.3
  diff -u -r1.2 -r1.3
  --- DefaultSocketFactory.java	2 Aug 2002 17:27:42 -0000	1.2
  +++ DefaultSocketFactory.java	16 Aug 2002 22:51:21 -0000	1.3
  @@ -104,55 +104,43 @@
               String host, int port, StringBuffer otherHeaders, BooleanHolder useFullURL)
               throws Exception {
   
  +        TransportClientProperties tcp = TransportClientPropertiesFactory.create("http");
  +
           Socket sock = null;
  -        String proxyHost = getGlobalProperty("http.proxyHost");
  -        String proxyPort = getGlobalProperty("http.proxyPort");
  -        String nonProxyHosts = getGlobalProperty("http.nonProxyHosts");
  -        boolean hostInNonProxyList = isHostInNonProxyList(host, nonProxyHosts);
  -        String proxyUsername = getGlobalProperty("http.proxyUser");
  -        String proxyPassword = getGlobalProperty("http.proxyPassword");
  +        boolean hostInNonProxyList = isHostInNonProxyList(host, tcp.getNonProxyHosts());
   
  -        if (proxyUsername != null) {
  +        if (tcp.getProxyUser().length() != 0) {
               StringBuffer tmpBuf = new StringBuffer();
   
  -            tmpBuf.append(proxyUsername).append(":").append((proxyPassword
  -                    == null)
  -                    ? ""
  -                    : proxyPassword);
  +            tmpBuf.append(tcp.getProxyUser())
  +                  .append(":")
  +                  .append(tcp.getProxyPassword());
               otherHeaders.append(HTTPConstants.HEADER_PROXY_AUTHORIZATION)
  -                    .append(": Basic ")
  -                    .append(Base64.encode(tmpBuf.toString().getBytes()))
  -                    .append("\r\n");
  +                        .append(": Basic ")
  +                        .append(Base64.encode(tmpBuf.toString().getBytes()))
  +                        .append("\r\n");
           }
           if (port == -1) {
               port = 80;
           }
  -        if ((proxyHost == null) || proxyHost.equals("") || (proxyPort == null)
  -                || proxyPort.equals("") || hostInNonProxyList) {
  +        if ((tcp.getProxyHost().length() == 0) ||
  +            (tcp.getProxyPort().length() == 0) ||
  +            hostInNonProxyList)
  +        {
               sock = new Socket(host, port);
               if (log.isDebugEnabled()) {
                   log.debug(JavaUtils.getMessage("createdHTTP00"));
               }
           } else {
  -            sock = new Socket(proxyHost, new Integer(proxyPort).intValue());
  +            sock = new Socket(tcp.getProxyHost(),
  +                              new Integer(tcp.getProxyPort()).intValue());
               if (log.isDebugEnabled()) {
  -                log.debug(JavaUtils.getMessage("createdHTTP01", proxyHost,
  -                        proxyPort));
  +                log.debug(JavaUtils.getMessage("createdHTTP01", tcp.getProxyHost(),
  +                          tcp.getProxyPort()));
               }
               useFullURL.value = true;
           }
           return sock;
  -    }
  -
  -    /**
  -     * Method getGlobalProperty
  -     *
  -     * @param property
  -     *
  -     * @return
  -     */
  -    protected String getGlobalProperty(String property) {
  -        return AxisProperties.getProperty(property);
       }
   
       /**
  
  
  
  1.2       +5 -3      xml-axis/java/src/org/apache/axis/components/net/SocketFactory.java
  
  Index: SocketFactory.java
  ===================================================================
  RCS file: /home/cvs/xml-axis/java/src/org/apache/axis/components/net/SocketFactory.java,v
  retrieving revision 1.1
  retrieving revision 1.2
  diff -u -r1.1 -r1.2
  --- SocketFactory.java	9 Jul 2002 12:54:53 -0000	1.1
  +++ SocketFactory.java	16 Aug 2002 22:51:21 -0000	1.2
  @@ -74,7 +74,9 @@
        *
        * @throws Exception
        */
  -    public Socket create(
  -            String host, int port, StringBuffer otherHeaders,
  -            BooleanHolder useFullURL) throws Exception;
  +    public Socket create(String host,
  +                         int port,
  +                         StringBuffer otherHeaders,
  +                         BooleanHolder useFullURL)
  +        throws Exception;
   }
  
  
  
  1.1                  xml-axis/java/src/org/apache/axis/components/net/TransportClientProperties.java
  
  Index: TransportClientProperties.java
  ===================================================================
  /*
   * The Apache Software License, Version 1.1
   *
   *
   * Copyright (c) 2001 The Apache Software Foundation.  All rights
   * reserved.
   *
   * Redistribution and use in source and binary forms, with or without
   * modification, are permitted provided that the following conditions
   * are met:
   *
   * 1. Redistributions of source code must retain the above copyright
   *    notice, this list of conditions and the following disclaimer.
   *
   * 2. Redistributions in binary form must reproduce the above copyright
   *    notice, this list of conditions and the following disclaimer in
   *    the documentation and/or other materials provided with the
   *    distribution.
   *
   * 3. The end-user documentation included with the redistribution,
   *    if any, must include the following acknowledgment:
   *       "This product includes software developed by the
   *    Apache Software Foundation (http://www.apache.org/)."
   *    Alternately, this acknowledgment may appear in the software itself,
   *    if and wherever such third-party acknowledgments normally appear.
   *
   * 4. The names "Axis" and "Apache Software Foundation" must
   *    not be used to endorse or promote products derived from this
   *    software without prior written permission. For written
   *    permission, please contact apache@apache.org.
   *
   * 5. Products derived from this software may not be called "Apache",
   *    nor may "Apache" appear in their name, without prior written
   *    permission of the Apache Software Foundation.
   *
   * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
   * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
   * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
   * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
   * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
   * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
   * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
   * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
   * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
   * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
   * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
   * SUCH DAMAGE.
   * ====================================================================
   *
   * 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.axis.components.net;
  
  /**
   * @author Richard A. Sitze
   */
  public interface TransportClientProperties {
      
      /**
       * Returns a valid String, may be empty ("").
       */
      public String getProxyHost();
  
      /**
       * Returns a valid String, may be empty ("").
       */
      public String getNonProxyHosts();
  
      /**
       * Returns a valid String, may be empty ("").
       */
      public String getProxyPort();
  
      /**
       * Returns a valid String, may be empty ("").
       */
      public String getProxyUser();
  
      /**
       * Returns a valid String, may be empty ("").
       */
      public String getProxyPassword();
  }
  
  
  
  1.1                  xml-axis/java/src/org/apache/axis/components/net/TransportClientPropertiesFactory.java
  
  Index: TransportClientPropertiesFactory.java
  ===================================================================
  /*
   * The Apache Software License, Version 1.1
   *
   *
   * Copyright (c) 2002 The Apache Software Foundation.  All rights
   * reserved.
   *
   * Redistribution and use in source and binary forms, with or without
   * modification, are permitted provided that the following conditions
   * are met:
   *
   * 1. Redistributions of source code must retain the above copyright
   *    notice, this list of conditions and the following disclaimer.
   *
   * 2. Redistributions in binary form must reproduce the above copyright
   *    notice, this list of conditions and the following disclaimer in
   *    the documentation and/or other materials provided with the
   *    distribution.
   *
   * 3. The end-user documentation included with the redistribution,
   *    if any, must include the following acknowledgment:
   *       "This product includes software developed by the
   *        Apache Software Foundation (http://www.apache.org/)."
   *    Alternately, this acknowledgment may appear in the software itself,
   *    if and wherever such third-party acknowledgments normally appear.
   *
   * 4. The names "Axis" and "Apache Software Foundation" must
   *    not be used to endorse or promote products derived from this
   *    software without prior written permission. For written
   *    permission, please contact apache@apache.org.
   *
   * 5. Products derived from this software may not be called "Apache",
   *    nor may "Apache" appear in their name, without prior written
   *    permission of the Apache Software Foundation.
   *
   * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
   * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
   * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
   * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
   * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
   * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
   * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
   * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
   * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
   * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
   * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
   * SUCH DAMAGE.
   * ====================================================================
   *
   * 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.axis.components.net;
  
  import java.util.HashMap;
  
  import org.apache.axis.AxisProperties;
  import org.apache.axis.utils.JavaUtils;
  
  import org.apache.axis.components.logger.LogFactory;
  import org.apache.commons.logging.Log;
  
  
  /**
   * @author Richard A. Sitze
   */
  public class TransportClientPropertiesFactory {
      protected static Log log =
              LogFactory.getLog(SocketFactoryFactory.class.getName());
      
      private static HashMap cache = new HashMap();
      private static HashMap defaults = new HashMap();
      
      static {
          defaults.put("http", DefaultHTTPTransportClientProperties.class);
          defaults.put("https", DefaultHTTPSTransportClientProperties.class);
      }
  
      public static TransportClientProperties create(String protocol)
      {
          TransportClientProperties tcp = null;
          
          try {
              tcp = (TransportClientProperties)cache.get(protocol);
              
              if (tcp == null) {
                  tcp = (TransportClientProperties)
                      AxisProperties.newInstance(TransportClientProperties.class,
                                                 (Class)defaults.get(protocol));
  
                  if (tcp != null) {
                      cache.put(protocol, tcp);
                  }
              }
          } catch (Exception e) {
              log.error(JavaUtils.getMessage("exception00"), e);
              tcp = null;
          }
          
          return tcp;
      }
  }
  
  
  
  1.1                  xml-axis/java/src/org/apache/axis/components/net/DefaultHTTPTransportClientProperties.java
  
  Index: DefaultHTTPTransportClientProperties.java
  ===================================================================
  /*
   * The Apache Software License, Version 1.1
   *
   *
   * Copyright (c) 2001 The Apache Software Foundation.  All rights
   * reserved.
   *
   * Redistribution and use in source and binary forms, with or without
   * modification, are permitted provided that the following conditions
   * are met:
   *
   * 1. Redistributions of source code must retain the above copyright
   *    notice, this list of conditions and the following disclaimer.
   *
   * 2. Redistributions in binary form must reproduce the above copyright
   *    notice, this list of conditions and the following disclaimer in
   *    the documentation and/or other materials provided with the
   *    distribution.
   *
   * 3. The end-user documentation included with the redistribution,
   *    if any, must include the following acknowledgment:
   *       "This product includes software developed by the
   *    Apache Software Foundation (http://www.apache.org/)."
   *    Alternately, this acknowledgment may appear in the software itself,
   *    if and wherever such third-party acknowledgments normally appear.
   *
   * 4. The names "Axis" and "Apache Software Foundation" must
   *    not be used to endorse or promote products derived from this
   *    software without prior written permission. For written
   *    permission, please contact apache@apache.org.
   *
   * 5. Products derived from this software may not be called "Apache",
   *    nor may "Apache" appear in their name, without prior written
   *    permission of the Apache Software Foundation.
   *
   * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
   * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
   * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
   * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
   * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
   * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
   * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
   * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
   * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
   * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
   * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
   * SUCH DAMAGE.
   * ====================================================================
   *
   * 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.axis.components.net;
  
  import org.apache.axis.AxisProperties;
  
  
  /**
   * @author Richard A. Sitze
   */
  public class DefaultHTTPTransportClientProperties
      implements TransportClientProperties {
          
      private final static String emptyString = "";
  
      protected String proxyHost = null;
      protected String nonProxyHosts = null;
      protected String proxyPort = null;
      protected String proxyUser = null;
      protected String proxyPassword = null;
  
  
      /**
       * @see org.apache.axis.components.net.TransportClientProperties#getProxyHost()
       */
      public String getProxyHost() {
          if (proxyHost == null) {
              proxyHost = AxisProperties.getProperty("http.proxyHost");
              if (proxyHost == null)
                  proxyHost = emptyString;
          }
          return proxyHost;
      }
  
      /**
       * @see org.apache.axis.components.net.TransportClientProperties#getNonProxyHosts()
       */
      public String getNonProxyHosts() {
          if (nonProxyHosts == null) {
              nonProxyHosts = AxisProperties.getProperty("http.nonProxyHosts");
              if (nonProxyHosts == null)
                  nonProxyHosts = emptyString;
          }
          return nonProxyHosts;
      }
  
      /**
       * @see org.apache.axis.components.net.TransportClientProperties#getPort()
       */
      public String getProxyPort() {
          if (proxyPort == null) {
              proxyPort = AxisProperties.getProperty("http.proxyPort");
              if (proxyPort == null)
                  proxyPort = emptyString;
          }
          return proxyPort;
      }
  
      /**
       * @see org.apache.axis.components.net.TransportClientProperties#getUser()
       */
      public String getProxyUser() {
          if (proxyUser == null) {
              proxyUser = AxisProperties.getProperty("http.proxyUser");
              if (proxyUser == null)
                  proxyUser = emptyString;
          }
          return proxyUser;
      }
  
      /**
       * @see org.apache.axis.components.net.TransportClientProperties#getPassword()
       */
      public String getProxyPassword() {
          if (proxyPassword == null) {
              proxyPassword = AxisProperties.getProperty("http.proxyPassword");
              if (proxyPassword == null)
                  proxyPassword = emptyString;
          }
          return proxyPassword;
      }
  }
  
  
  
  1.1                  xml-axis/java/src/org/apache/axis/components/net/DefaultHTTPSTransportClientProperties.java
  
  Index: DefaultHTTPSTransportClientProperties.java
  ===================================================================
  /*
   * The Apache Software License, Version 1.1
   *
   *
   * Copyright (c) 2001 The Apache Software Foundation.  All rights
   * reserved.
   *
   * Redistribution and use in source and binary forms, with or without
   * modification, are permitted provided that the following conditions
   * are met:
   *
   * 1. Redistributions of source code must retain the above copyright
   *    notice, this list of conditions and the following disclaimer.
   *
   * 2. Redistributions in binary form must reproduce the above copyright
   *    notice, this list of conditions and the following disclaimer in
   *    the documentation and/or other materials provided with the
   *    distribution.
   *
   * 3. The end-user documentation included with the redistribution,
   *    if any, must include the following acknowledgment:
   *       "This product includes software developed by the
   *    Apache Software Foundation (http://www.apache.org/)."
   *    Alternately, this acknowledgment may appear in the software itself,
   *    if and wherever such third-party acknowledgments normally appear.
   *
   * 4. The names "Axis" and "Apache Software Foundation" must
   *    not be used to endorse or promote products derived from this
   *    software without prior written permission. For written
   *    permission, please contact apache@apache.org.
   *
   * 5. Products derived from this software may not be called "Apache",
   *    nor may "Apache" appear in their name, without prior written
   *    permission of the Apache Software Foundation.
   *
   * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
   * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
   * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
   * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
   * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
   * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
   * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
   * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
   * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
   * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
   * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
   * SUCH DAMAGE.
   * ====================================================================
   *
   * 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.axis.components.net;
  
  import org.apache.axis.AxisProperties;
  
  
  /**
   * @author Richard A. Sitze
   */
  public class DefaultHTTPSTransportClientProperties
      extends DefaultHTTPTransportClientProperties {
  
      /**
       * @see org.apache.axis.components.net.TransportClientProperties#getProxyHost()
       */
      public String getProxyHost() {
          if (proxyHost == null) {
              proxyHost = AxisProperties.getProperty("https.proxyHost");
              super.getProxyHost();
          }
          return proxyHost;
      }
  
      /**
       * @see org.apache.axis.components.net.TransportClientProperties#getNonProxyHosts()
       */
      public String getNonProxyHosts() {
          if (nonProxyHosts == null) {
              nonProxyHosts = AxisProperties.getProperty("https.nonProxyHosts");
              super.getNonProxyHosts();
          }
          return nonProxyHosts;
      }
  
      /**
       * @see org.apache.axis.components.net.TransportClientProperties#getPort()
       */
      public String getProxyPort() {
          if (proxyPort == null) {
              proxyPort = AxisProperties.getProperty("https.proxyPort");
              super.getProxyPort();
          }
          return proxyPort;
      }
  
      /**
       * @see org.apache.axis.components.net.TransportClientProperties#getUser()
       */
      public String getProxyUser() {
          if (proxyUser == null) {
              proxyUser = AxisProperties.getProperty("https.proxyUser");
              super.getProxyUser();
          }
          return proxyUser;
      }
  
      /**
       * @see org.apache.axis.components.net.TransportClientProperties#getPassword()
       */
      public String getProxyPassword() {
          if (proxyPassword == null) {
              proxyPassword = AxisProperties.getProperty("https.proxyPassword");
              super.getProxyPassword();
          }
          return proxyPassword;
      }
  }
  
  
  
  1.4       +14 -2     xml-axis/java/src/org/apache/axis/utils/DefaultAuthenticator.java
  
  Index: DefaultAuthenticator.java
  ===================================================================
  RCS file: /home/cvs/xml-axis/java/src/org/apache/axis/utils/DefaultAuthenticator.java,v
  retrieving revision 1.3
  retrieving revision 1.4
  diff -u -r1.3 -r1.4
  --- DefaultAuthenticator.java	12 Aug 2002 22:52:13 -0000	1.3
  +++ DefaultAuthenticator.java	16 Aug 2002 22:51:21 -0000	1.4
  @@ -54,12 +54,17 @@
   
   package org.apache.axis.utils;
   
  +import org.apache.axis.components.net.TransportClientProperties;
  +import org.apache.axis.components.net.TransportClientPropertiesFactory;
  +
   
   /**
    * This class is used by WSDL2javaAntTask and WSDL2.
    * Supports the http.proxyUser and http.proxyPassword properties.
    */
   public class DefaultAuthenticator extends java.net.Authenticator {
  +    private TransportClientProperties tcp = null;
  +    
       private String user;
       private String password;
   
  @@ -71,11 +76,18 @@
       protected java.net.PasswordAuthentication getPasswordAuthentication() {
           // if user and password weren't provided, check the system properties
           if (user == null) {
  -            user = System.getProperty("http.proxyUser", "");
  +            user = getTransportClientProperties().getProxyUser();
           }
           if (password == null) {
  -            password = System.getProperty("http.proxyPassword", "");
  +            password = getTransportClientProperties().getProxyPassword();
           }
           return new java.net.PasswordAuthentication(user, password.toCharArray());
  +    }
  +    
  +    private TransportClientProperties getTransportClientProperties() {
  +        if (tcp == null) {
  +            tcp = TransportClientPropertiesFactory.create("http");
  +        }
  +        return tcp;
       }
   }
  
  
  
  1.61      +3 -2      xml-axis/java/src/org/apache/axis/handlers/JWSProcessor.java
  
  Index: JWSProcessor.java
  ===================================================================
  RCS file: /home/cvs/xml-axis/java/src/org/apache/axis/handlers/JWSProcessor.java,v
  retrieving revision 1.60
  retrieving revision 1.61
  diff -u -r1.60 -r1.61
  --- JWSProcessor.java	6 Aug 2002 03:55:04 -0000	1.60
  +++ JWSProcessor.java	16 Aug 2002 22:51:21 -0000	1.61
  @@ -436,8 +436,9 @@
           }
   
           // boot classpath isn't found in above search
  -        if(AxisProperties.getProperty("sun.boot.class.path") != null) {
  -            classpath.append(AxisProperties.getProperty("sun.boot.class.path"));
  +        String bootClassPath = AxisProperties.getProperty("sun.boot.class.path");
  +        if( bootClassPath != null) {
  +            classpath.append(bootClassPath);
           }
   
           return classpath.toString();
  
  
  
  1.4       +28 -50    xml-axis/java/src/org/apache/axis/transport/http/CommonsHTTPSender.java
  
  Index: CommonsHTTPSender.java
  ===================================================================
  RCS file: /home/cvs/xml-axis/java/src/org/apache/axis/transport/http/CommonsHTTPSender.java,v
  retrieving revision 1.3
  retrieving revision 1.4
  diff -u -r1.3 -r1.4
  --- CommonsHTTPSender.java	4 Aug 2002 03:27:24 -0000	1.3
  +++ CommonsHTTPSender.java	16 Aug 2002 22:51:21 -0000	1.4
  @@ -55,7 +55,6 @@
   package org.apache.axis.transport.http;
   
   import org.apache.axis.AxisFault;
  -import org.apache.axis.AxisProperties;
   import org.apache.axis.Message;
   import org.apache.axis.MessageContext;
   import org.apache.axis.components.logger.LogFactory;
  @@ -63,6 +62,8 @@
   import org.apache.axis.encoding.Base64;
   import org.apache.axis.handlers.BasicHandler;
   import org.apache.axis.utils.JavaUtils;
  +import org.apache.axis.components.net.TransportClientProperties;
  +import org.apache.axis.components.net.TransportClientPropertiesFactory;
   import org.apache.commons.httpclient.Credentials;
   import org.apache.commons.httpclient.Header;
   import org.apache.commons.httpclient.HttpConnection;
  @@ -234,56 +235,36 @@
        */
       private HttpConnection getSecureConnection(
               HttpState state, String host, int port) throws Exception {
  +        TransportClientProperties tcp = TransportClientPropertiesFactory.create("https");
   
           if (port == -1) {
               port = 443;
           }
   
  -        // Get https.proxyXXX settings
  -        String tunnelHost = AxisProperties.getProperty("https.proxyHost");
  -        String tunnelPortStr = AxisProperties.getProperty("https.proxyPort");
  -        String nonProxyHosts = AxisProperties.getProperty("https.nonProxyHosts");
  -
  -        // Use http.proxyXXX settings if https.proxyXXX is not set
  -        if (tunnelHost == null) {
  -            tunnelHost = AxisProperties.getProperty("http.proxyHost");
  -        }
  -        if (tunnelPortStr == null) {
  -            tunnelPortStr = AxisProperties.getProperty("http.proxyPort");
  -        }
  -        if (nonProxyHosts == null) {
  -            nonProxyHosts = AxisProperties.getProperty("http.nonProxyHosts");
  -        }
           boolean hostInNonProxyList =
  -                isHostInNonProxyList(host, nonProxyHosts);
  +                isHostInNonProxyList(host, tcp.getNonProxyHosts());
   
  -        if ((tunnelHost == null) || tunnelHost.equals("")
  -                || hostInNonProxyList) {
  +        if (tcp.getProxyHost().length() == 0 || hostInNonProxyList) {
               return new HttpConnection(host, port, true);
           } else {
   
               // Default proxy port is 80, even for https
  -            int tunnelPort = ((tunnelPortStr != null)
  -                    ? ((Integer.parseInt(tunnelPortStr) < 0)
  -                    ? 80
  -                    : Integer.parseInt(tunnelPortStr))
  -                    : 80);
  -            String tunnelUser = AxisProperties.getProperty("https.proxyUser");
  -            String tunnelPassword = AxisProperties.getProperty("https.proxyPassword");
  -
  -            if (tunnelUser == null) {
  -                tunnelUser = AxisProperties.getProperty("http.proxyUser");
  -            }
  -            if (tunnelPassword == null) {
  -                tunnelPassword = AxisProperties.getProperty("http.proxyPassword");
  -            }
  -            if (tunnelUser != null) {
  +            int tunnelPort = ((tcp.getProxyPort().length() != 0)
  +                              ? Integer.parseInt(tcp.getProxyPort())
  +                              : 80);
  +
  +            if (tunnelPort < 0)
  +                tunnelPort = 80;
  +                
  +            if (tcp.getProxyUser().length() != 0) {
                   Credentials proxyCred =
  -                        new UsernamePasswordCredentials(tunnelUser, tunnelPassword);
  +                        new UsernamePasswordCredentials(tcp.getProxyUser(),
  +                                                        tcp.getProxyPassword());
   
                   state.setProxyCredentials(null, proxyCred);
               }
  -            return new HttpConnection(tunnelHost, tunnelPort, host, port, true);
  +
  +            return new HttpConnection(tcp.getProxyHost(), tunnelPort, host, port, true);
           }
       }
   
  @@ -300,32 +281,29 @@
        */
       private HttpConnection getConnection(HttpState state, String host, int port)
               throws Exception {
  +        TransportClientProperties tcp = TransportClientPropertiesFactory.create("http");
   
  -        String proxyHost = AxisProperties.getProperty("http.proxyHost");
  -        String proxyPort = AxisProperties.getProperty("http.proxyPort");
  -        String nonProxyHosts = AxisProperties.getProperty("http.nonProxyHosts");
           boolean hostInNonProxyList =
  -                isHostInNonProxyList(host, nonProxyHosts);
  -        String proxyUsername = AxisProperties.getProperty("http.proxyUser");
  -        String proxyPassword = AxisProperties.getProperty("http.proxyPassword");
  +                isHostInNonProxyList(host, tcp.getNonProxyHosts());
   
           if (port == -1) {
               port = 80;
           }
  -        if ((proxyHost == null) || proxyHost.equals("") || (proxyPort == null)
  -                || proxyPort.equals("") || hostInNonProxyList) {
  +        if (tcp.getProxyHost().length() == 0 ||
  +            tcp.getProxyPort().length() == 0 ||
  +            hostInNonProxyList) {
               return new HttpConnection(host, port);
           } else {
  -            if (proxyUsername != null) {
  +            if (tcp.getProxyUser().length() != 0) {
                   Credentials proxyCred =
  -                        new UsernamePasswordCredentials(proxyUsername,
  -                                proxyPassword);
  +                        new UsernamePasswordCredentials(tcp.getProxyUser(),
  +                                                        tcp.getProxyPassword());
   
                   state.setProxyCredentials(null, proxyCred);
               }
  -            return new HttpConnection(proxyHost,
  -                    new Integer(proxyPort).intValue(), host,
  -                    port);
  +            return new HttpConnection(tcp.getProxyHost(),
  +                                      new Integer(tcp.getProxyPort()).intValue(), host,
  +                                      port);
           }
       }