You are viewing a plain text version of this content. The canonical link for it is here.
Posted to axis-cvs@ws.apache.org by st...@apache.org on 2004/05/14 14:56:48 UTC

cvs commit: ws-axis/java/src/org/apache/axis/utils NetworkUtils.java

stevel      2004/05/14 05:56:48

  Modified:    java/src/org/apache/axis/transport/http
                        SimpleAxisWorker.java
  Added:       java/src/org/apache/axis/utils NetworkUtils.java
  Log:
  And here is the factoring out of hostname lookup.
  
  Revision  Changes    Path
  1.41      +2 -24     ws-axis/java/src/org/apache/axis/transport/http/SimpleAxisWorker.java
  
  Index: SimpleAxisWorker.java
  ===================================================================
  RCS file: /home/cvs/ws-axis/java/src/org/apache/axis/transport/http/SimpleAxisWorker.java,v
  retrieving revision 1.40
  retrieving revision 1.41
  diff -u -r1.40 -r1.41
  --- SimpleAxisWorker.java	3 May 2004 20:04:10 -0000	1.40
  +++ SimpleAxisWorker.java	14 May 2004 12:56:48 -0000	1.41
  @@ -29,6 +29,7 @@
   import org.apache.axis.server.AxisServer;
   import org.apache.axis.utils.Messages;
   import org.apache.axis.utils.XMLUtils;
  +import org.apache.axis.utils.NetworkUtils;
   import org.apache.commons.logging.Log;
   import org.w3c.dom.Document;
   
  @@ -788,29 +789,6 @@
        * One method for all host name lookups.
        */
       public static String getLocalHost() {
  -        // This doesn't return anything but 0.0.0.0
  -        //  String hostname = serverSocket.getInetAddress().getHostAddress();
  -        // And this returns the hostname of the host on the other
  -        // end of the socket:
  -        //  String hostname = socket.getInetAddress().getHostName();
  -        // This works for 99% of the uses of SimpleAxisServer,
  -        // but is very stupid. One challenge is that a machine may
  -        // have >1 network card, as on each attached network it will have a different
  -        // hostname.
  -        // The other challenge is that unmanaged networks lack reverse DNS. 
  -        InetAddress address;
  -        String hostname;
  -        try {
  -            address = InetAddress.getLocalHost();
  -            //force a best effort reverse DNS lookup
  -            hostname = address.getHostName();
  -            if (hostname == null || hostname.length() == 0) {
  -                hostname = address.toString();
  -            }
  -        } catch (UnknownHostException noIpAddrException) {
  -            //bail out here
  -            hostname = "127.0.0.1";
  -        }
  -        return hostname;
  +        return NetworkUtils.getLocalHostname();
       }
   }
  
  
  
  1.1                  ws-axis/java/src/org/apache/axis/utils/NetworkUtils.java
  
  Index: NetworkUtils.java
  ===================================================================
  /*
   * Copyright 2004 The Apache Software Foundation.
   *
   * Licensed 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.
   */
  
  package org.apache.axis.utils;
  
  import org.apache.commons.logging.Log;
  import org.apache.axis.components.logger.LogFactory;
  
  import java.net.InetAddress;
  import java.net.UnknownHostException;
  
  /**
   * Utility classes for networking
   * created 13-May-2004 16:17:51
   */
  
  public class NetworkUtils {
      /**
       * what we return when we cannot determine our hostname.
       * We use this rather than 'localhost' as if DNS is very confused,
       * localhost can map to different machines than "self".
       */
      public static final String LOCALHOST = "127.0.0.1";
  
      /**
       * keep this uninstantiable.
       */
      private NetworkUtils() {
      }
  
      protected static Log log =
              LogFactory.getLog(NetworkUtils.class.getName());
  
      /**
       * Get the string defining the hostname of the system, as taken from
       * the default network adapter of the system. There is no guarantee that
       * this will be fully qualified, or that it is the hostname used by external
       * machines to access the server.
       * If we cannot determine the name, then we return the default hostname,
       * which is defined by {@link #LOCALHOST}
       * @return a string name of the host.
       */
      public static String getLocalHostname() {
          InetAddress address;
          String hostname;
          try {
              address = InetAddress.getLocalHost();
              //force a best effort reverse DNS lookup
              hostname = address.getHostName();
              if (hostname == null || hostname.length() == 0) {
                  hostname = address.toString();
              }
          } catch (UnknownHostException noIpAddrException) {
  
              //this machine is not on a LAN, or DNS is unhappy
              //return the default hostname
              if(log.isDebugEnabled()) {
                  log.debug("Failed to lookup local IP address",noIpAddrException);
              }
              hostname = LOCALHOST;
          }
          return hostname;
      }
  }