FileDocCategorySizeDatePackage
GetQuote1.javaAPI DocApache Axis 1.48573Sat Apr 22 18:56:52 BST 2006samples.stock

GetQuote1

public class GetQuote1 extends Object
This version of the ever so popular GetQuote shows how to use the Axis client APIs with and without WSDL. The first flavor (getQuote1) will use WSDL to prefill all of the data about the remote service. The second one (getQuote2) will do it all manually. Either way the service is invoked it should produce the exact same request XML and of course same results. This sample supports the use of the standard options too (-p ...)
author
Doug Davis (dug@us.ibm.com.com)

Fields Summary
public String
symbol
Constructors Summary
Methods Summary
public floatgetQuote1(java.lang.String[] args)
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().

      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 = new Service( new URL("file:GetQuote.wsdl"), servQN );
      Call    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( new URL(opts.getURL()) );

      /* Define some service specific properties */
      /*******************************************/
      call.setUsername( opts.getUser() );
      call.setPassword( opts.getPassword() );

      /* Get symbol and invoke the service */
      /*************************************/
        Object result = call.invoke( new Object[] { symbol = args[0] } );

      return( ((Float) result).floatValue() );
    
public floatgetQuote2(java.lang.String[] args)
This will do everything manually (ie. no WSDL).

      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 = new Service();
      Call     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( new URL(opts.getURL()) );
      call.setUseSOAPAction( true );
      call.setSOAPActionURI( "getQuote" );
      call.setEncodingStyle( "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.setUsername( opts.getUser() );
      call.setPassword( opts.getPassword() );

      /* Get symbol and invoke the service */
      /*************************************/
      Object result = call.invoke( new Object[] { symbol = args[0] } );

      return( ((Float) result).floatValue() );
    
public floatgetQuote3(java.lang.String[] args)
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().

      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 = new Service( new URL("file:GetQuote.wsdl"), servQN );
      Call    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( new URL(opts.getURL()) );

      /* Define some service specific properties */
      /*******************************************/
      call.setUsername( opts.getUser() );
      call.setPassword( opts.getPassword() );

      /* Get symbol and invoke the service */
      /*************************************/
      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" );
      call.setReturnType( XMLType.XSD_STRING );

      System.out.println( call.invoke(new Object[]{}) );

      return( ((Float) result).floatValue() );
    
public static voidmain(java.lang.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();
      }