Listing 1: StockQuoteIF.java

package stockquote;

import java.rmi.Remote;
import java.rmi.RemoteException;

public interface StockQuoteIF extends Remote {
    public float getQuote(String symbol) throws RemoteException, Exception;
}

Listing 2: StockQuoteImpl.java

package stockquote;

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;

public class StockQuoteImpl implements StockQuoteIF {

  // 20 minute delayed stock quote
  public float getQuote (String symbol) throws Exception {

    System.setProperty("http.proxyHost", "rio");//Replace with your proxy host
	System.setProperty("http.proxyPort", "8088");//Replace with your proxy port
	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");

      return Float.valueOf(quoteStr).floatValue();
    }
    return(0);
  }
}

Listing 3: MyStockQuoteService.wsdl

<?xml version="1.0" encoding="UTF-8"?>

<definitions name="MyStockQuoteService" targetNamespace="urn:Foo"
xmlns:tns="urn:Foo" xmlns="http://schemas.xmlsoap.org/wsdl/"
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/">
  <types/>
  <message name="StockQuoteIF_getQuote">
    <part name="String_1" type="xsd:string"/>
  </message>
  <message name="StockQuoteIF_getQuoteResponse">
    <part name="result" type="xsd:float"/>
  </message>
  <portType name="StockQuoteIF">
    <operation name="getQuote" parameterOrder="String_1">
      <input message="tns:StockQuoteIF_getQuote"/>
      <output message="tns:StockQuoteIF_getQuoteResponse"/>
	  </operation></portType>
  <binding name="StockQuoteIFBinding" type="tns:StockQuoteIF">
    <operation name="getQuote">
      <input>
        <soap:body encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"
		 use="encoded" namespace="urn:Foo"/></input>
      <output>
        <soap:body encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"
		 use="encoded" namespace="urn:Foo"/></output>
      <soap:operation soapAction=""/></operation>
    <soap:binding transport="http://schemas.xmlsoap.org/soap/http"
	 style="rpc"/></binding>
  <service name="MyStockQuoteService">
    <port name="StockQuoteIFPort" binding="tns:StockQuoteIFBinding">
      <soap:address
location="http://localhost:8000/stockquote-jaxrpc/mystockquote"/></port></service>
</definitions>

Listing 4: client-config.xml

<?xml version="1.0" encoding="UTF-8"?>
<configuration
 	xmlns="http://java.sun.com/xml/ns/jax-rpc/ri/config">
  <wsdl location="http://localhost:8000/stockquote-jaxrpc/mystockquote?WSDL"
   packageName="stockquote"/>
</conf5guration>

Listing 5: StockQuoteClient.java

package stockquote;

import javax.xml.rpc.Stub;

public class StockQuoteClient {

    private String endpointAddress;

    public static void main(String[] args) {

        System.out.println("Endpoint address = " + args[0]);
        try {
            Stub stub = createProxy();
            stub._setProperty(javax.xml.rpc.Stub.ENDPOINT_ADDRESS_PROPERTY,
			  args[0]);
            StockQuoteIF stock = (StockQuoteIF)stub;
            System.out.println(stock.getQuote("HPQ"));
        } catch (Exception ex) {
            ex.printStackTrace();
        }
    }

    private static Stub createProxy() {
        // Note: MyStockQuoteService_Impl is implementation-specific.
		return (Stub)(new MyStockQuoteService_Impl().getStockQuoteIFPort());
    }
}

Additional Code...for This Article49 KB