nmukhi      2002/12/17 09:14:12

  Modified:    java/samples/multibinding README.html
  Added:       java/samples/multibinding StockQuoteService.wsdl
               java/samples/multibinding/client/dynamic README.html
               java/samples/multibinding/client/stub README.html
               java/samples/multibinding/client/stub/com/themindelectric/www
                        NetXmethodsServicesStockquoteStockQuotePortType.java
               java/samples/multibinding/service README.html
                        StockQuoteService.java
  Log:
  Completed multibinding sample
  
  Revision  Changes    Path
  1.2       +21 -0     xml-axis-wsif/java/samples/multibinding/README.html
  
  Index: README.html
  ===================================================================
  RCS file: /home/cvs/xml-axis-wsif/java/samples/multibinding/README.html,v
  retrieving revision 1.1
  retrieving revision 1.2
  diff -u -r1.1 -r1.2
  --- README.html       11 Dec 2002 16:00:48 -0000      1.1
  +++ README.html       17 Dec 2002 17:14:12 -0000      1.2
  @@ -0,0 +1,21 @@
  +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"><html><head>
  +<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
  +<meta name="Author" content="Nirmal Mukhi">
  +<meta http-equiv="Content-Style-Type" content="text/css">
  +<title>Web Services Invocation Framework: Samples</title>
  +<link rel="stylesheet" href="wsif.css" type="text/css"></head>
  +
  +<body alink="#0000ff" bgcolor="#ffffff" leftmargin="2" topmargin="2" 
marginwidth="2" marginheight="2">
  +
  +<h1>
  +Web Services Invocation Framework:<br>
  +Multiple binding sample</h1>
  +<p>This sample aims to demonstrate the invocation of a service that offers multiple 
bindings. We use the familiar stock quote service, and expose the functionality via a 
SOAP binding (implemented by the remotely hosted service on XMethods, as in the <a 
href="../simplesoap/README.html">simplesoap sample</a>) and also via a local java 
class binding. WSIF allows the client to defer selection of the actual port used for 
invocation until runtime. To demonstrate this, both the clients in this sample allow 
specification of a preferred port at runtime. If you choose the port that uses the 
java binding, the local class is called. If you choose the SOAP port, the SOAP service 
is called. The high level view of the service remains uniform.
  +
  +<p>The <a href="StockQuoteService.wsdl">WSDL file</a> is in this sample 
directory.</p>
  +<p>The SOAP implementation is hosted by the good folks at <a 
href="http://www.xmethods.net";>XMethods</a>. The service URL, where you can find 
details on the service implementation, etc. is <a 
href="http://www.xmethods.net/ve2/ViewListing.po?serviceid=2";>here</a>.</p>
  +<p><a href="service/README.html">Here's</a> how the local java class that 
implements the service functionality is implemented.</p>
  +<p><a href="client/dynamic/README.html">Here's</a> how to invoke this service 
dynamically using WSIF's dynamic invocation interface (DII).</p>
  +<p><a href="client/stub/README.html">Here's</a> how to invoke this service by first 
generating the stub interface and using this directly through WSIF's dynamic proxy, 
thus hiding all WSIF specifics from the client code. Note that the stub interface used 
is the the service interface as defined by the JAX-RPC specification.</p>
  +<hr width="100%">
  +</body></html>
  
  
  
  1.1                  xml-axis-wsif/java/samples/multibinding/StockQuoteService.wsdl
  
  Index: StockQuoteService.wsdl
  ===================================================================
  <?xml version='1.0' encoding='UTF-8'?>
  <definitions name='net.xmethods.services.stockquote.StockQuote' 
             
targetNamespace='http://www.themindelectric.com/wsdl/net.xmethods.services.stockquote.StockQuote/'
 
             
xmlns:tns='http://www.themindelectric.com/wsdl/net.xmethods.services.stockquote.StockQuote/'
 
               xmlns:electric='http://www.themindelectric.com/' 
               xmlns:soap='http://schemas.xmlsoap.org/wsdl/soap/' 
               xmlns:xsd='http://www.w3.org/2001/XMLSchema' 
               xmlns:format="http://schemas.xmlsoap.org/wsdl/formatbinding/";
               xmlns:java="http://schemas.xmlsoap.org/wsdl/java/";
               xmlns:soapenc='http://schemas.xmlsoap.org/soap/encoding/' 
               xmlns:wsdl='http://schemas.xmlsoap.org/wsdl/' 
               xmlns='http://schemas.xmlsoap.org/wsdl/'>
  
     <message name='getQuoteResponse1'>
        <part name='Result' type='xsd:float'/>
     </message>
  
     <message name='getQuoteRequest1'>
        <part name='symbol' type='xsd:string'/>
     </message>
  
     <portType name='net.xmethods.services.stockquote.StockQuotePortType'>
        <operation name='getQuote' parameterOrder='symbol'>
           <input message='tns:getQuoteRequest1'/>
           <output message='tns:getQuoteResponse1'/>
        </operation>
     </portType>
  
     <!-- SOAP binding -->
     <binding name='StockQuoteSOAPBinding' 
              type='tns:net.xmethods.services.stockquote.StockQuotePortType'>
        <soap:binding style='rpc' transport='http://schemas.xmlsoap.org/soap/http'/>
        <operation name='getQuote'>
           <soap:operation soapAction='urn:xmethods-delayed-quotes#getQuote'/>
           <input>
              <soap:body use='encoded' 
                         namespace='urn:xmethods-delayed-quotes' 
                         encodingStyle='http://schemas.xmlsoap.org/soap/encoding/'/>
           </input>
           <output>
              <soap:body use='encoded' 
                         namespace='urn:xmethods-delayed-quotes' 
                         encodingStyle='http://schemas.xmlsoap.org/soap/encoding/'/>
           </output>
        </operation>
     </binding>
  
     <!-- Java binding -->
     <binding name='StockQuoteJavaBinding' 
              type='tns:net.xmethods.services.stockquote.StockQuotePortType'>
      <java:binding/>
      <format:typeMapping encoding="Java" style="Java">
        <format:typeMap typeName="xsd:string" formatType="java.lang.String" />
        <format:typeMap typeName="xsd:float" formatType="java.lang.Float" />
      </format:typeMapping>
      <operation name="getQuote">
        <java:operation
           methodName="getQuote"
           methodType="instance" />
        <input/>
      </operation>
     </binding>
  
     <service name='net.xmethods.services.stockquote.StockQuoteService'>
        <documentation>net.xmethods.services.stockquote.StockQuote web 
service</documentation>
        <port name='StockQuoteSOAPPort' 
              binding='tns:StockQuoteSOAPBinding'>
           <soap:address location='http://66.28.98.121:9090/soap'/>
        </port>
        <port name="StockQuoteJavaPort" binding="tns:StockQuoteJavaBinding">
          <java:address className="multibinding.service.StockQuoteService"/>
        </port>
     </service>
  </definitions>
  
  
  1.1                  
xml-axis-wsif/java/samples/multibinding/client/dynamic/README.html
  
  Index: README.html
  ===================================================================
  <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"><html><head>
  <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
  <meta name="Author" content="Nirmal Mukhi">
  <meta http-equiv="Content-Style-Type" content="text/css">
  <title>Web Services Invocation Framework: Samples</title>
  <link rel="stylesheet" href="wsif.css" type="text/css"></head>
  
  <body alink="#0000ff" bgcolor="#ffffff" leftmargin="2" topmargin="2" marginwidth="2" 
marginheight="2">
  
  <h2>
  Web Services Invocation Framework:<br>
  Invoking the MultiBinding Sample using WSIF's dynamic invocation interface</h2>
  <p>After you have <a href="../../../../doc/samples.html">set up the CLASSPATH in 
your environment</a>, to invoke this sample using WSIF's DII, run the DynamicInvoker 
class. Specify as command line arguments the location of the WSDL file for the 
multibinding sample followed by the operation you wish to invoke, an optional 
preferred port in parentheses and the symbol for the company whose stockquote you are 
interested in. For example, 
  <br>Invocation with no port preference: <tt>java  clients.DynamicInvoker 
samples/simplesoap/StockquoteSOAP.wsdl getQuote IBM</tt>
  <br>Invocation with SOAP port preference: <tt>java  clients.DynamicInvoker 
samples/simplesoap/StockquoteSOAP.wsdl getQuote(StockQuoteSOAPPort) IBM</tt>
  <br>Invocation with java port preference: <tt>java  clients.DynamicInvoker 
samples/simplesoap/StockquoteSOAP.wsdl getQuote(StockQuoteJavaPort) IBM</tt>
  </p>
  <p>To see details of how the WSIF API is used to make invocations dynamically, take 
a look at the code for the <a 
href="../../../clients/DynamicInvoker.java">DynamicInvoker class</a>. Note the use of 
the <tt>portName</tt> parameter to make the invocation using the selected port.</p>
  <hr width="100%">
  </body></html>
  
  
  1.1                  xml-axis-wsif/java/samples/multibinding/client/stub/README.html
  
  Index: README.html
  ===================================================================
  <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"><html><head>
  <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
  <meta name="Author" content="Nirmal Mukhi">
  <meta http-equiv="Content-Style-Type" content="text/css">
  <title>Web Services Invocation Framework: Samples</title>
  <link rel="stylesheet" href="wsif.css" type="text/css"></head>
  
  <body alink="#0000ff" bgcolor="#ffffff" leftmargin="2" topmargin="2" marginwidth="2" 
marginheight="2">
  
  <h2>
  Web Services Invocation Framework:<br>
  Invoking the Multibinding Sample through a high level stub interface</h2>
  First, you must <a href="../../../../doc/samples.html">set up the CLASSPATH in your 
environment</a>.
  <p>This directory contains a file called <tt>Run.java</tt> that contains the 
<tt>main</tt> method. This is the logic that uses the generated stub interface to run 
the sample. So you can run this class, specifying on the command line the location of 
the WSDL file for the sample, the symbol for the company whose stock quote you are 
interested in and an optional port preference. For example, 
  <br>Invoking the service without specifying any port preference:
  <tt>java multibinding.client.stub.Run samples/multibinding/StockquoteSOAP.wsdl 
IBM</tt>
  <br>Invoking the service with the SOAP port preference:
  <tt>java multibinding.client.stub.Run samples/multibinding/StockquoteSOAP.wsdl IBM 
StockQuoteSOAPPort</tt>
  <br>Invoking the service with the java port preference:
  <tt>java multibinding.client.stub.Run samples/multibinding/StockquoteSOAP.wsdl IBM 
StockQuoteJavaPort</tt>
  </p>
  <p>The WSIF API allows programs to choose a preferred port when getting a reference 
to the stub interface. Any calls made via that stub interface will then use the 
selected port and its associated binding protocol. See the <tt>Run.java</tt> code for 
details.</p>
  <p>To generate the stub interface, you can use any tool that generates Java 
interfaces for WSDL services using their port type descriptions, such as WSDL2Java 
from Axis. WSIF assumes a correspondence between the generated Java interface and the 
WSDL port type that has its abstract description as specified in the JAX-RPC 
specification. This particular sample used WSDL2Java in the following way:<br>
  <tt>java org.apache.axis.wsdl.WSDL2Java ../../StockquoteService.wsdl</tt><br>
  After the tool finished running, we deleted all the generated files except 
<tt>NetXmethodsServicesStockquoteStockQuotePortType.java</tt> (this is the java 
interface corresponding to the port type and is all that is required by WSIF).</p>
  <hr width="100%">
  </body></html>
  
  
  1.1                  
xml-axis-wsif/java/samples/multibinding/client/stub/com/themindelectric/www/NetXmethodsServicesStockquoteStockQuotePortType.java
  
  Index: NetXmethodsServicesStockquoteStockQuotePortType.java
  ===================================================================
  /**
   * NetXmethodsServicesStockquoteStockQuotePortType.java
   *
   * This file was auto-generated from WSDL
   * by the Apache Axis WSDL2Java emitter.
   */
  
  package multibinding.client.stub.com.themindelectric.www;
  
  public interface NetXmethodsServicesStockquoteStockQuotePortType extends 
java.rmi.Remote {
      public float getQuote(java.lang.String symbol) throws java.rmi.RemoteException;
  }
  
  
  
  1.1                  xml-axis-wsif/java/samples/multibinding/service/README.html
  
  Index: README.html
  ===================================================================
  <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"><html><head>
  <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
  <meta name="Author" content="Nirmal Mukhi">
  <meta http-equiv="Content-Style-Type" content="text/css">
  <title>Web Services Invocation Framework: Samples</title>
  <link rel="stylesheet" href="wsif.css" type="text/css"></head>
  
  <body alink="#0000ff" bgcolor="#ffffff" leftmargin="2" topmargin="2" marginwidth="2" 
marginheight="2">
  
  <h2>
  Web Services Invocation Framework:<br>
  Java implementation of the StockQuoteService</h2>
  Take a look at the <tt><a 
href="StockQuoteService.java">StockQuoteService.java</a></tt> file in this directory. 
<p>This class implements the stock quote service functionality advertised in <a 
href="../StockQuoteService.wsdl">the sample WSDL</a>. This implementation actually 
uses HTTP GET to communicate with a remote web site that returns the quote for a given 
stock symbol; of course it could also look up a local table of stock quotes; the 
details are completely hidden from the code that accesses the class. Note that the 
WSDL file refers to this class as the service endpoint in the <tt>java:address</tt> 
element.</p>
  <hr width="100%">
  </body></html>
  
  
  
  1.1                  
xml-axis-wsif/java/samples/multibinding/service/StockQuoteService.java
  
  Index: StockQuoteService.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 multibinding.service;
  
  import org.w3c.dom.Document;
  import org.w3c.dom.Element;
  import org.w3c.dom.NodeList;
  
  import javax.xml.parsers.DocumentBuilder;
  import javax.xml.parsers.DocumentBuilderFactory;
  import java.net.URL;
  
  /**
   *
   * @author Sanjiva Weerawarana ([EMAIL PROTECTED])
   * @author Doug Davis ([EMAIL PROTECTED])
   */
  public class StockQuoteService {
    public float getQuote (String symbol) throws Exception {
      // get a real (delayed by 20min) stockquote from 
      // http://www.xmltoday.com/examples/stockquote/. The IP addr 
      // below came from the host that the above form posts to ..
  
      if ( symbol.equals("XXX") ) return( (float) 55.25 );
  
      URL          url = new URL( "http://services.xmethods.net/"; +
                                  "axis/getQuote?s="+symbol );
  
      DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
      DocumentBuilder        db  = dbf.newDocumentBuilder();
  
      Document doc  = db.parse( url.toExternalForm() );
      Element  elem = doc.getDocumentElement();
      NodeList list = elem.getElementsByTagName( "stock_quote" );
  
      if ( list != null && list.getLength() != 0 ) {
        elem = (Element) list.item(0);
        list = elem.getElementsByTagName( "price" );
        elem = (Element) list.item(0);
        String quoteStr = elem.getAttribute("value");
        try {
          return Float.valueOf(quoteStr).floatValue();
        } catch (NumberFormatException e1) {
          // maybe its an int?
          try {
            return Integer.valueOf(quoteStr).intValue() * 1.0F;
          } catch (NumberFormatException e2) {
            return -1.0F;
          }
        }
      }
      return( 0 );
    }
  }
  
  
  


Reply via email to