280 likes | 411 Views
Web Services Description Language. Notes from article by Aaron Skonnard found at. http://msdn.microsoft.com/library/default.asp ?url=/library/en-us/dnwebsrv/html/understandWSDL.asp. XSDL and WSDL. XSDL (The XML Schema Definition Language) allows us to describe the structure of an XML message
E N D
Web Services Description Language Notes from article by Aaron Skonnard found at http://msdn.microsoft.com/library/default.asp ?url=/library/en-us/dnwebsrv/html/understandWSDL.asp CMU/MSCF
XSDL and WSDL • XSDL (The XML Schema Definition Language) allows us to describe the structure of an XML message • WSDL allows us to describe message exchanges CMU/MSCF
WSDL • A message exchange is called an operation • Related operations are grouped into interfaces • A binding specifies concrete details about what goes on the wire CMU/MSCF
WSDL • Describes the contract between applications • Can be automatically generated from a collection of Java or C# classes • Can be read by utilities that generate client side stub code or server side ties • See wscompile (Sun’s J2EE) or wsdl.exe on the Microsoft side CMU/MSCF
WSDL Structure <definition> <!– abstract definitions <types> <messages> <portType> <!– concrete definitions <binding> <service> </definition> CMU/MSCF
WSDL Structure <definition> <!– Terms found in application code <types> <messages> <portType> <!– Handled by XML infrastructure <binding> <service> </definition> CMU/MSCF
WSDL Structure <definition> <types> - a container for XSDL Type definitions - element names may be defined here as well CMU/MSCF
WSDL Structure <definition> <types> For example, in Google’s WSDL,GoogleSearchResult is defined as a complex type with many elements. CMU/MSCF
WSDL Structure <definition> <types> <message> - May have more than one part (think parameters) - Define the input or output of an operation - RPC style messages associate a name with a type (defined above) - Document style messages associate a name with an XML element </definition> CMU/MSCF
WSDL Structure <definition> <types> <message> Two examples: - In Google’s WSDL, a doGoogleSearch message is defined with many parts of basic xsd types. - In Google’s WSDL, a doGoogleSearchResponse message is defined as of type GoogleSearchResult </definition> CMU/MSCF
WSDL Structure <definition> <types> <messages> <portType> - The definition of an interface or group of operations - The term “portType” will be replaced with the term “interface” in WSDL 1.2 - Each operation has a name and normally specifies both input and output messages </definition> CMU/MSCF
WSDL Structure <definition> <types> <messages> <portType> - For example, in Google’s WSDL, GoogleSearchPort contains three operations. - The operation doGoogleSearch has an input message (doGoogleSearch) and an output message (doGoogleSearchResponse.) </definition> CMU/MSCF
WSDL Structure <definition> <types> <messages> <portType> <binding> - Each binding has a unique name that is associated with a particular interface. - The protocol used is specified. - Details found here specify how the data will look on the wire. </definition> CMU/MSCF
WSDL Structure <definition> <types> <messages> <portType> <binding> - For example, in Google’s WSDL, the binding name GoogleSearchBinding is introduced and is associated with the interface GoogleSearchPort. - Each operation within that interface is described as soap operations. </definition> CMU/MSCF
WSDL Structure <definition> <types><messages><portType><binding> <service> - Defines a collection of ports (endpoints) that exposes a particular bindind - An address is associated with a binding </definition> CMU/MSCF
WSDL Structure <definition> <types><messages><portType><binding> <service> For example, in Google’s WSDL, the service name GoogleSearchService is introduced. The interface GoogleSearchPort is associated with the binding GoogleSearchBinding. The service element holds the address of the service. </definition> CMU/MSCF
WSDL Message Exchange Patterns An interface may define four types of operations: • One-Way The endpoint receives a message. • Request-response The endpoint receives a message and returns a message. • Solicit-response The endpoint sends a message and receives a response. • Notification The endpoint sends a message. CMU/MSCF
Writing A Google Client • Get the WSDL from http://www.google.com/apis/ • Run wscompile on config.xml and generate an API from the WSDL • Examine the WSDL and note the service element <!-- Endpoint for Google Web APIs --> <service name="GoogleSearchService"> <port name="GoogleSearchPort" binding="typens:GoogleSearchBinding"> <soap:address location="http://api.google.com/search/beta2"/> </port> </service> The API has a GoogleSearchService_Impl() class with a getGoogleSearchPort() method. The GoogleSearchPort interface implements operations like doSpellingSuggestion and doGoogleSearch. CMU/MSCF
A Google Client // Running a simple Google RPC client import javax.xml.rpc.Stub; import stubcode.*; public class MyGoogleClient{ private static String endpointAddress = "http://api.google.com/search/beta2"; CMU/MSCF
public static void main(String[] args) throws Exception { System.out.println("Contacting Google Web Service at " + endpointAddress); Stub stub = (Stub) (new GoogleSearchService_Impl().getGoogleSearchPort()); stub._setProperty(javax.xml.rpc.Stub.ENDPOINT_ADDRESS_PROPERTY, endpointAddress); GoogleSearchPort gsp = (GoogleSearchPort)stub; String answer = gsp.doSpellingSuggestion( "n6lHU/FQFHIHzpbzRTPFvrUP4Cw+/k+N", "buuaty"); System.out.println(answer); } } CMU/MSCF
D:\McCarthy\www\95-702\examples\GoogleWSDLOnly>java MyGoogleClient Contacting Google Web Service at http://api.google.com/search/beta2 beauty CMU/MSCF
Another simple client Look over some web services at http://www.capescience.com/webservices/index.shtml Suppose we choose Airport Weather http://www.capescience.com/webservices/airportweather/index.shtml We need the WSDL for this service. It’s found at http://live.capescience.com/wsdl/AirportWeather.wsdl CMU/MSCF
Code Generation • We will run wscompile against the WSDL • Build a simple config.xml that points to the WSDL <?xml version="1.0" encoding="UTF-8"?> <configuration xmlns="http://java.sun.com/xml/ns/jax-rpc/ri/config"> <wsdl location="AirportWeather.wsdl" packageName="airport"/> </configuration> CMU/MSCF
Code Generation • Set up for wscompile (provided with the J2EE Application server) • Prior to running wscompile, my D:\Sun\AppServer\jdk\jre\lib\endorsed contains the following .jar files: activation, dom, jax-qname, jaxrpc-api, jsf-api mail, saaj-api, saaj-impl, xalan, xercesImpl, jaxrpc-impl.jar CMU/MSCF
Code Generation • Running wscompile C:>wscompile -gen:client -keep -d airport config.xml • Generates client side files in the • airport directory and keeps the source code. CMU/MSCF
Examine the WSDL <service name="AirportWeather"> <documentation>AirportWeather</documentation> <port binding="tns:StationBinding" name="Station"> <soap:address location= "http://live.capescience.com:80/ccx/AirportWeather"/> </port> </service> The API has a AirportWeather_Impl class with a getStation() method. The Station interface implements operations like getSkyConditions, getLocation, and getVisibility. CMU/MSCF
Write a Java Client import airport.*; public class Client { public static void main (String args[]) throws Exception { AirportWeather_Impl service = new AirportWeather_Impl(); Station stub = service.getStation(); String temp = stub.getTemperature ( "KCID" ); System.out.println ( temp ); } } CMU/MSCF
The Output D:\McCarthy\www\95-702\examples\AirPort>java Client The Temperature at Cedar Rapids, The Eastern Iowa Airport, IA, United States is 46.9 F (8.3 C) CMU/MSCF