|
Developing J2EE 1.4 Web Services on the Fly by Arulazi Dhesiaseelan
WSJ Vol 03 Issue 06 - pg.26
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());
}
}
|