You are viewing a plain text version of this content. The canonical link for it is here.
Posted to xmlrpc-dev@ws.apache.org by rh...@apache.org on 2003/03/16 07:56:54 UTC

cvs commit: xml-rpc/src/java/org/apache/xmlrpc CommonsXmlRpcTransport.java

rhoegg      2003/03/15 22:56:54

  Modified:    .        build.xml
  Added:       src/test/org/apache/xmlrpc CommonsXmlRpcTransportTest.java
               src/java/org/apache/xmlrpc CommonsXmlRpcTransport.java
  Log:
  Added Jakarta Commons HttpClient based XmlRpcTransport and test.  Modified build.xml so it builds
  PR: 13363
  
  Revision  Changes    Path
  1.22      +16 -0     xml-rpc/build.xml
  
  Index: build.xml
  ===================================================================
  RCS file: /home/cvs/xml-rpc/build.xml,v
  retrieving revision 1.21
  retrieving revision 1.22
  diff -u -r1.21 -r1.22
  --- build.xml	26 Jan 2003 02:38:27 -0000	1.21
  +++ build.xml	16 Mar 2003 06:56:53 -0000	1.22
  @@ -18,6 +18,8 @@
       <pathelement location="${jcert.jar}"/>
       <pathelement location="${servlet.jar}"/>
       <pathelement location="${junit.jar}"/>
  +    <pathelement location="${commons-httpclient.jar}"/>
  +    <pathelement location="${commons-logging.jar}"/>
     </path>
   
     <!-- ================================================================== -->
  @@ -32,6 +34,7 @@
       <echo message="jcert.jar = ${jcert.jar}"/>
       <echo message="servlet.jar = ${servlet.jar}"/>
       <echo message="junit.jar = ${junit.jar}"/>
  +    <echo message="commons-logging.jar = ${commons-logging.jar}"/>
     </target>
   
     <!-- ================================================================== -->
  @@ -71,6 +74,12 @@
         classpathref="classpath"
       />
   
  +    <available
  +      classname="org.apache.commons.logging.LogFactory"
  +      property="commons-logging.present"
  +      classpathref="classpath"
  +    />
  +
     </target>
   
     <!-- ================================================================== -->
  @@ -93,6 +102,13 @@
       <antcall target="property-warning">
         <param name="name" value="junit.jar"/>
         <param name="value" value="${junit.jar}"/>
  +    </antcall>
  +  </target>
  +
  +  <target name="check.commons-logging" unless="commons-logging.present">
  +    <antcall target="property-warning">
  +      <param name="name" value="commons-logging.jar"/>
  +      <param name="value" value="${commons-logging.jar}"/>
       </antcall>
     </target>
   
  
  
  
  1.1                  xml-rpc/src/test/org/apache/xmlrpc/CommonsXmlRpcTransportTest.java
  
  Index: CommonsXmlRpcTransportTest.java
  ===================================================================
  package org.apache.xmlrpc;
  
  /* ====================================================================
   * 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 "Apache" and "Apache Software Foundation" and
   *    "Apache Turbine" 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",
   *    "Apache Turbine", 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/>.
   */
  
  import java.io.InputStream;
  import java.io.IOException;
  import java.net.MalformedURLException;
  import java.net.URL;
  import junit.framework.*;
  
  /**
   * Tests the CommonsXmlRpcTransport implementation.
   *
   * @author <a href="mailto:rhoegg@isisnetworks.net">Ryan Hoegg</a>
   * @version $Id: CommonsXmlRpcTransportTest.java,v 1.1 2003/03/16 06:56:54 rhoegg Exp $
   */
  public class CommonsXmlRpcTransportTest extends XmlRpcTransportTest {
      
      /** Creates a new instance of CommonsXmlRpcTransportTest */
      public CommonsXmlRpcTransportTest(String testName) {
          super(testName);
      }
      
      /**
       * Return the Test
       */
      public static Test suite() 
      {
          return new TestSuite(CommonsXmlRpcTransportTest.class);
      }
      
      /** 
       * Required by superclass.
       */
      protected XmlRpcTransport getTransport(URL url) {
          return new CommonsXmlRpcTransport(url);
      }
  }
  
  
  
  1.1                  xml-rpc/src/java/org/apache/xmlrpc/CommonsXmlRpcTransport.java
  
  Index: CommonsXmlRpcTransport.java
  ===================================================================
  package org.apache.xmlrpc;
  
  /*
   * 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 "XML-RPC" 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/>.
   */
  
  import java.io.ByteArrayInputStream;
  import java.io.InputStream;
  import java.io.IOException;
  import java.net.URL;
  import org.apache.commons.httpclient.Header;
  import org.apache.commons.httpclient.HostConfiguration;
  import org.apache.commons.httpclient.HttpClient;
  import org.apache.commons.httpclient.URI;
  import org.apache.commons.httpclient.methods.PostMethod;
  
  /**
   * Implementor of the XmlRpcTransport interface using the Apache
   * Commons HttpClient library v2.0 available at
   * http://jakarta.apache.org/commons/httpclient/
   *
   * Note: <b>Currently this transport is not thread safe</b>
   *
   * @author <a href="mailto:rhoegg@isisnetworks.net">Ryan Hoegg</a>
   * @version $Id: CommonsXmlRpcTransport.java,v 1.1 2003/03/16 06:56:54 rhoegg Exp $
   * @since 1.2
   */
  public class CommonsXmlRpcTransport implements XmlRpcTransport {
      
      /** Creates a new instance of CommonsXmlRpcTransport */
      public CommonsXmlRpcTransport(URL url, HttpClient client) {
          this.url = url;
          if (client == null) {
              HttpClient newClient = new HttpClient();
              this.client = newClient;
          } else {
              this.client = client;
          }
      }
      
      public CommonsXmlRpcTransport(URL url) {
          this(url, null);
      }
      
      private URL url;
      private HttpClient client;
      private final Header userAgentHeader = new Header("User-Agent", XmlRpc.version);
      private boolean http11 = false; // defaults to HTTP 1.0
      
      public InputStream sendXmlRpc(byte[] request) throws IOException, XmlRpcClientException {
          PostMethod method = new PostMethod(url.toString());
          method.setHttp11(http11);
          method.setRequestHeader(new Header("Content-Type", "text/xml"));
          method.setRequestHeader(userAgentHeader);
          // TODO: authentication not implemented yet
          method.setRequestBody(new ByteArrayInputStream(request));
          URI hostURI = new URI(url);
          HostConfiguration hostConfig = new HostConfiguration();
          hostConfig.setHost(hostURI);
          client.executeMethod(hostConfig, method);
          return method.getResponseBodyAsStream();
      }
      
      public void setHttp11(boolean http11) {
          this.http11 = http11;
      }
      
      public void setUserAgent(String userAgent) {
          userAgentHeader.setValue(userAgent);
      }
  }