antelder    2002/09/20 02:34:04

  Modified:    java/src/org/apache/wsif/providers/soap/apachesoap
                        WSIFOperation_ApacheSOAP.java
  Log:
  Enance the apache soap provider to work through a proxy server.
  SOAP by default doesn't  take account of the Java system property proxy settings. 
This change will set the SOAP proxy to be based on the Java system property settings.
  
  Revision  Changes    Path
  1.27      +55 -0     
xml-axis-wsif/java/src/org/apache/wsif/providers/soap/apachesoap/WSIFOperation_ApacheSOAP.java
  
  Index: WSIFOperation_ApacheSOAP.java
  ===================================================================
  RCS file: 
/home/cvs/xml-axis-wsif/java/src/org/apache/wsif/providers/soap/apachesoap/WSIFOperation_ApacheSOAP.java,v
  retrieving revision 1.26
  retrieving revision 1.27
  diff -u -r1.26 -r1.27
  --- WSIFOperation_ApacheSOAP.java     18 Sep 2002 15:38:19 -0000      1.26
  +++ WSIFOperation_ApacheSOAP.java     20 Sep 2002 09:34:04 -0000      1.27
  @@ -68,6 +68,7 @@
   import java.util.HashMap;
   import java.util.Iterator;
   import java.util.List;
  +import java.util.StringTokenizer;
   import java.util.Vector;
   
   import javax.wsdl.Definition;
  @@ -155,6 +156,13 @@
       protected String partSerializerName = null;
       protected ArrayList wsdlOutParams;
   
  +    private static final String HTTP_PROXY_HOST_PROPERTY =
  +       "http.proxyHost";     
  +    private static final String HTTP_PROXY_PORT_PROPERTY =
  +       "http.proxyPort";     
  +    private static final String PROXY_EXCLUDES_PROPERTY = 
  +       "http.nonProxyHosts";
  +       
       /**
        * Create Apache SOAP operation instance that encapsultes all necessary
        * information required to create and execute Apache SOAP Call.
  @@ -628,6 +636,9 @@
           Response resp;
           boolean respOK = true;
           URL locationUri = portInstance.getEndPoint();
  +        if ( locationUri != null && !isHostInNonProxyProperty( locationUri ) ) {
  +           setSOAPProxy( st );
  +        }
   
           Trc.event(
               this,
  @@ -740,6 +751,10 @@
           //TODO docstyle headers
           //setCallContext( call );
   
  +        if ( url != null && !isHostInNonProxyProperty( url ) ) {
  +           setSOAPProxy( st );
  +        }
  +
           // create and send message
           try {
               Message msg = new Message();
  @@ -1511,6 +1526,46 @@
               } else if (name.equals(WSIFConstants.CONTEXT_HTTP_PSWD)) {
                   httpTransport.setPassword(value);
               }
  +        }
  +    }
  +
  +    private boolean isHostInNonProxyProperty(URL u) {
  +     if ( u != null ) {
  +           String excludeList = System.getProperty( PROXY_EXCLUDES_PROPERTY );
  +           if ( excludeList != null ) { 
  +              StringTokenizer st = new StringTokenizer( excludeList, "|" );
  +              while ( st.hasMoreTokens() ) {
  +                  String xhost = st.nextToken().trim();
  +                  if ( WSIFUtils.wildcardCompare( xhost, u.getHost(), '*' ) ) {
  +                     return true;
  +                  }
  +              }
  +           }
  +     }
  +     return false;
  +    }
  +    
  +    /**
  +     * Unike axis, soap doesn't automatically use the Java
  +     * system properties for a proxy server, we need to set
  +     * it up manually.
  +     */
  +    private void setSOAPProxy(SOAPTransport st) {
  +        if (st instanceof SOAPHTTPConnection) {
  +           SOAPHTTPConnection shttpc = (SOAPHTTPConnection) st;
  +           String proxyHost = System.getProperty( HTTP_PROXY_HOST_PROPERTY ); 
  +           String proxyPort = System.getProperty( HTTP_PROXY_PORT_PROPERTY );       
  
  +           if ( proxyHost != null && proxyHost.length() > 0 ) {
  +              shttpc.setProxyHost( proxyHost );
  +              if ( proxyPort != null && proxyPort.length() > 0 ) {
  +                      try {
  +                             int port = Integer.parseInt( proxyPort );
  +                    shttpc.setProxyPort( port );
  +                      } catch (NumberFormatException ex) {
  +                    Trc.ignoredException(ex);
  +                      }
  +              }
  +           }
           }
       }
   
  
  
  


Reply via email to