butek       02/04/05 09:51:30

  Modified:    java/samples/stock GetQuote1.java
               java/src/org/apache/axis/client ServiceFactory.java
               java/test/functional FunctionalTests.java
  Added:       java/samples/jaxrpc GetQuote1.java
               java/test/functional TestJAXRPCSamples.java
  Log:
  I did three things wrt JAX-RPC
  - implemented a ServiceFactory.createService method
  - implemented the first of several JAX-RPC compliance samples (GetQuote1)
  - fixed the original samples.stock.GetQuote1 so it would work (and I tidied
  it up a bit).
  
  Revision  Changes    Path
  1.1                  xml-axis/java/samples/jaxrpc/GetQuote1.java
  
  Index: GetQuote1.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 [EMAIL PROTECTED]
   *
   * 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 samples.jaxrpc;
  
  import java.net.URL;
  
  import javax.xml.rpc.Call;
  import javax.xml.rpc.ParameterMode;
  import javax.xml.rpc.Service;
  import javax.xml.rpc.ServiceFactory;
  
  import javax.xml.rpc.namespace.QName;
  
  import org.apache.axis.encoding.XMLType; // This should probably be 
javax.xml.rpc.encoding.XMLType if we're told that class is approved (ie., it gets into 
the spec rather than just in the RI).
  
  import org.apache.axis.utils.Options;
  
  /**
   * This version of the ever so popular GetQuote is a near-duplicate of
   * the GetQuote1 method in samples/stock which shows how to use the AXIS
   * client APIs with and without WSDL.  This version is strictly JAX-RPC
   * compliant.  It uses no AXIS enhancements.
   *
   * This sample supports the use of the standard options too (-p ...)
   *
   * @author Russell Butek ([EMAIL PROTECTED])
   */
  public class GetQuote1 {
      public  String symbol;
  
      /**
       * This will use the WSDL to prefill all of the info needed to make
       * the call.  All that's left is filling in the args to invoke().
       */
      public float getQuote1(String args[]) throws Exception {
          Options opts = new Options(args);
  
          args = opts.getRemainingArgs();
  
          if (args == null) {
              System.err.println("Usage: GetQuote <symbol>");
              System.exit(1);
          }
  
          /* Define the service QName and port QName */
          /*******************************************/
          QName servQN = new QName("urn:xmltoday-delayed-quotes",
                  "GetQuoteService");
          QName portQN = new QName("urn:xmltoday-delayed-quotes", "GetQuote");
  
          /* Now use those QNames as pointers into the WSDL doc */
          /******************************************************/
          Service service = ServiceFactory.newInstance().createService(
                  new URL("file:samples/stock/GetQuote.wsdl"), servQN);
          Call call = service.createCall(portQN, "getQuote");
  
          /* Strange - but allows the user to change just certain portions of */
          /* the URL we're gonna use to invoke the service.  Useful when you  */
          /* want to run it thru tcpmon (ie. put  -p81 on the cmd line).      */
          /********************************************************************/
          opts.setDefaultURL(call.getTargetEndpointAddress());
          call.setTargetEndpointAddress(opts.getURL());
  
          /* Define some service specific properties */
          /*******************************************/
          call.setProperty(Call.USERNAME_PROPERTY, opts.getUser());
          call.setProperty(Call.PASSWORD_PROPERTY, opts.getPassword());
  
          /* Get symbol and invoke the service */
          /*************************************/
          Object result = call.invoke(new Object[] {symbol = args[0]});
  
          return ((Float) result).floatValue();
      } // getQuote1
  
      /**
       * This will do everything manually (ie. no WSDL).
       */
      public float getQuote2(String args[]) throws Exception {
          Options opts = new Options(args);
  
          args = opts.getRemainingArgs();
  
          if (args == null) {
              System.err.println("Usage: GetQuote <symbol>");
              System.exit(1);
          }
  
          /* Create default/empty Service and Call object */
          /************************************************/
          Service service = ServiceFactory.newInstance().createService(null);
          Call call = service.createCall();
  
          /* Strange - but allows the user to change just certain portions of */
          /* the URL we're gonna use to invoke the service.  Useful when you  */
          /* want to run it thru tcpmon (ie. put  -p81 on the cmd line).      */
          /********************************************************************/
          opts.setDefaultURL("http://localhost:8080/axis/servlet/AxisServlet";);
  
          /* Set all of the stuff that would normally come from WSDL */
          /***********************************************************/
          call.setTargetEndpointAddress(opts.getURL());
          call.setProperty(Call.SOAPACTION_USE_PROPERTY, Boolean.TRUE);
          call.setProperty(Call.SOAPACTION_URI_PROPERTY, "getQuote");
          call.setProperty(Call.ENCODINGSTYLE_URI_PROPERTY,
                  "http://schemas.xmlsoap.org/soap/encoding/";);
          call.setOperationName(new QName("urn:xmltoday-delayed-quotes", "getQuote"));
          call.addParameter("symbol", XMLType.XSD_STRING, ParameterMode.IN);
          call.setReturnType(XMLType.XSD_FLOAT);
  
          /* Define some service specific properties */
          /*******************************************/
          call.setProperty(Call.USERNAME_PROPERTY, opts.getUser());
          call.setProperty(Call.PASSWORD_PROPERTY, opts.getPassword());
  
          /* Get symbol and invoke the service */
          /*************************************/
          Object result = call.invoke(new Object[] {symbol = args[0]});
  
          return ((Float) result).floatValue();
      } // getQuote2
  
      /**
       * This method does the same thing that getQuote1 does, but in
       * addition it reuses the Call object to make another call.
       */
      public float getQuote3(String args[]) throws Exception {
          Options opts = new Options(args);
  
          args = opts.getRemainingArgs();
  
          if (args == null) {
              System.err.println("Usage: GetQuote <symbol>");
              System.exit(1);
          }
  
          /* Define the service QName and port QName */
          /*******************************************/
          QName servQN = new QName("urn:xmltoday-delayed-quotes",
                  "GetQuoteService");
          QName portQN = new QName("urn:xmltoday-delayed-quotes", "GetQuote");
  
          /* Now use those QNames as pointers into the WSDL doc */
          /******************************************************/
          Service service = ServiceFactory.newInstance().createService(
                  new URL("file:GetQuote.wsdl"), servQN);
          Call call = service.createCall(portQN, "getQuote");
  
          /* Strange - but allows the user to change just certain portions of */
          /* the URL we're gonna use to invoke the service.  Useful when you  */
          /* want to run it thru tcpmon (ie. put  -p81 on the cmd line).      */
          /********************************************************************/
          opts.setDefaultURL(call.getTargetEndpointAddress());
          call.setTargetEndpointAddress(opts.getURL());
  
          /* Define some service specific properties */
          /*******************************************/
          call.setProperty(Call.USERNAME_PROPERTY, opts.getUser());
          call.setProperty(Call.PASSWORD_PROPERTY, opts.getPassword());
  
          /* Get symbol and invoke the service */
          /*************************************/
          Object result = call.invoke(new Object[] {symbol = args[0]});
  
          /* Reuse the Call object for a different call */
          /**********************************************/
          call.setOperationName(new QName("urn:xmltoday-delayed-quotes", "test"));
          call.setReturnType(XMLType.XSD_STRING);
  
          System.out.println(call.invoke(new Object[]{}));
          return ((Float) result).floatValue();
      } // getQuote3
  
      public static void main(String args[]) {
          try {
              String    save_args[] = new String[args.length];
              float     val;
              GetQuote1 gq = new GetQuote1();
  
              /* Call the getQuote() that uses the WDSL */
              /******************************************/
              System.out.println("Using WSDL");
              System.arraycopy(args, 0, save_args, 0, args.length);
              val = gq.getQuote1(args);
              System.out.println(gq.symbol + ": " + val);
  
              /* Call the getQuote() that does it all manually */
              /*************************************************/
              System.out.println("Manually");
              System.arraycopy(save_args, 0, args, 0, args.length);
              val = gq.getQuote2(args);
              System.out.println(gq.symbol + ": " + val);
  
              /* Call the getQuote() that uses Axis's generated WSDL */
              /*******************************************************/
              System.out.println("WSDL + Reuse Call");
              System.arraycopy(save_args, 0, args, 0, args.length);
              val = gq.getQuote3(args);
              System.out.println(gq.symbol + ": " + val);
          }
          catch(Exception e) {
              e.printStackTrace();
          }
      } // main
  }
  
  
  
  1.22      +3 -3      xml-axis/java/samples/stock/GetQuote1.java
  
  Index: GetQuote1.java
  ===================================================================
  RCS file: /home/cvs/xml-axis/java/samples/stock/GetQuote1.java,v
  retrieving revision 1.21
  retrieving revision 1.22
  diff -u -r1.21 -r1.22
  --- GetQuote1.java    27 Mar 2002 16:46:56 -0000      1.21
  +++ GetQuote1.java    5 Apr 2002 17:51:30 -0000       1.22
  @@ -120,7 +120,6 @@
         /* Get symbol and invoke the service */
         /*************************************/
           Object result = call.invoke( new Object[] { symbol = args[0] } );
  -        result = call.invoke( new Object[] { symbol = args[0] } );
   
         return( ((Float) result).floatValue() );
       }
  @@ -212,9 +211,10 @@
         Object result = call.invoke( new Object[] { symbol = args[0] } );
         result = call.invoke( new Object[] { symbol = args[0] } );
   
  +      /* Reuse the call object to call the test method */
  +      /*************************************************/
         call.setOperation( portQN, "test" );
  -      opts.setDefaultURL( call.getTargetEndpointAddress() );
  -      call.setTargetEndpointAddress( new URL(opts.getURL()) );
  +      call.setReturnType( XMLType.XSD_STRING );
   
         System.out.println( call.invoke(new Object[]{}) );
   
  
  
  
  1.9       +7 -2      xml-axis/java/src/org/apache/axis/client/ServiceFactory.java
  
  Index: ServiceFactory.java
  ===================================================================
  RCS file: /home/cvs/xml-axis/java/src/org/apache/axis/client/ServiceFactory.java,v
  retrieving revision 1.8
  retrieving revision 1.9
  diff -u -r1.8 -r1.9
  --- ServiceFactory.java       4 Apr 2002 20:45:27 -0000       1.8
  +++ ServiceFactory.java       5 Apr 2002 17:51:30 -0000       1.9
  @@ -245,7 +245,12 @@
        */
       public javax.xml.rpc.Service createService(QName serviceName)
               throws ServiceException {
  -        throw new ServiceException(JavaUtils.getMessage(
  -                "notImplemented00", "ServiceFactory.createService"));
  +
  +        // RJB - this isn't quite proper - I'm dropping the serviceName,
  +        // but I don't rightly know what use the service name is without
  +        // WSDL.  So I'll just create a default (empty) Service with the
  +        // assumption that callers of this method are going to do all
  +        // the work themselves.
  +        return new Service();
       } // createService
   }
  
  
  
  1.16      +3 -0      xml-axis/java/test/functional/FunctionalTests.java
  
  Index: FunctionalTests.java
  ===================================================================
  RCS file: /home/cvs/xml-axis/java/test/functional/FunctionalTests.java,v
  retrieving revision 1.15
  retrieving revision 1.16
  diff -u -r1.15 -r1.16
  --- FunctionalTests.java      17 Dec 2001 00:57:41 -0000      1.15
  +++ FunctionalTests.java      5 Apr 2002 17:51:30 -0000       1.16
  @@ -21,6 +21,9 @@
           // Echo test - end to end serialization and deserialization /
           // interop tests.
           suite.addTestSuite(TestEchoSample.class);
  +
  +        // Test the JAX-RPC compliance samples
  +        suite.addTestSuite(TestJAXRPCSamples.class);
           
           // stock sample test
           // run this BEFORE ALL OTHER TESTS to minimize confusion;
  
  
  
  1.1                  xml-axis/java/test/functional/TestJAXRPCSamples.java
  
  Index: TestJAXRPCSamples.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 [EMAIL PROTECTED]
   *
   * 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 test.functional;
  
  import junit.framework.TestCase;
  import org.apache.axis.AxisFault;
  import org.apache.axis.client.AdminClient;
  import org.apache.commons.logging.Log;
  import org.apache.commons.logging.LogFactory;
  import samples.jaxrpc.GetQuote1;
  
  /**
   * Test the JAX-RPC compliance samples.
   */
  public class TestJAXRPCSamples extends TestCase {
      static Log log = LogFactory.getLog(TestJAXRPCSamples.class.getName());
  
      public TestJAXRPCSamples(String name) {
          super(name);
      } // ctor
  
      public void doTestDeploy() throws Exception {
          String[] args = {"samples/stock/deploy.wsdd"};
          AdminClient.main(args);
      } // doTestDeploy
  
      public void doTestGetQuoteXXX() throws Exception {
          String[] args = {"-uuser1", "-wpass1", "XXX"};
          float val = new GetQuote1().getQuote1(args);
          assertEquals("Stock price is not the expected 55.25 +/- 0.01", val,
                  55.25, 0.01);
      } // doTestGetQuoteXXX
      
      public void doTestGetQuoteMain() throws Exception {
          String[] args = {"-uuser1", "-wpass1", "IBM"};
          GetQuote1.main(args);
      } // doTestGetQuoteMain
  
      public void doTestUndeploy() throws Exception {
          String[] args = {"samples/stock/undeploy.wsdd"};
          AdminClient.main(args);
      } // doTestStockNoAction
  
      public static void main(String args[]) throws Exception {
          TestJAXRPCSamples tester = new TestJAXRPCSamples("tester");
          tester.testGetQuote();
      } // main
  
      public void testGetQuote() throws Exception {
          try {
              log.info("Testing JAX-RPC GetQuote sample.");
              log.info("Testing deployment...");
              doTestDeploy();
              log.info("Testing service...");
              doTestGetQuoteXXX();
              doTestGetQuoteMain();
              log.info("Testing undeployment...");
              doTestUndeploy();
              log.info("Test complete.");
          }
          catch (Throwable t) {
              if (t instanceof AxisFault) ((AxisFault)t).dump();
              t.printStackTrace();
              throw new Exception("Fault returned from test: " + t);
          }
      } // testGetQuote
  }
  
  
  
  
  


Reply via email to