Tutorial on Web Services HY559 Infrastructure Technologies for Large- Scale Service-Oriented Systems Jason Polakis polakis@csd.uoc.gr
Required Software • Eclipse IDE for Java developers EE http://www.eclipse.org/downloads/ • Netbeans IDE http://netbeans.org/downloads/ • Apache Tomcat • Apache Tomcat http://tomcat.apache.org/ • Apache AXIS2 http://axis.apache.org/axis2/java/core/download.cgi • Apache JUDDI http://juddi.apache.org/releases.html
Getting Software • Either directly from given links, or: • In Ubuntu (as root) • To search for software – apt-cache search <program name> – Returns list of <packages> with short description • To install software – apt-get install <package> – Installs software, as well as dependencies
Web Services “Any piece of software that makes itself available over the Internet and uses a standardized XML messaging system” • Extremely available • Language and platform independent • Distributed application components • Discoverable via a simple find mechanism • Components of Web Services – SOAP (Simple Object Access Protocol) – WSDL (Web Services Description Language) – UDDI (Universal Description, Discovery and Integration)
Web Service Architecture • Web Service Protocol Stack – Service transport (transport messages between applications) • HTTP, SMTP, FTP – XML messaging (encode messages in common XML format ) – XML messaging (encode messages in common XML format ) • XML-RPC, WS-Addressing, and SOAP – Service description (describe public interface of service) – Service discovery (centralize services into common registry) • Programming models: – REST-based web services – SOAP-based web services
SOAP-based Services • Use SOAP – protocol for exchanging structured information • Use WSDL – xml-based language for describing Web services • WSDL file – created based on the JAVA code in the service – created based on the JAVA code in the service – exposed on the net • To use service, must create a client – based on WSDL info • Messages exchanged in SOAP • Java API for XML Web Services (JAX-WS) model also used for SOAP services. Can use instead of AXIS2.
WSDL example • Web service • Single publicly available function sayHello – argument: string – return value: string
WSDL Definitions element <definitions name="HelloService" targetNamespace="http://www.examples.com/wsdl/HelloService.wsdl" xmlns="http://schemas.xmlsoap.org/wsdl/" xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:tns="http://www.examples.com/wsdl/HelloService.wsdl" xmlns:xsd="http://www.w3.org/2001/XMLSchema"> ................................................ ................................................ </definitions> • container of all other elements • specifies that this document is the HelloService • Namespace: abstract container providing context -> logical grouping of code • specifies a targetNamespace attribute (XML convention) → enables self reference • specifies a default namespace • specifies numerous namespaces that will be used
WSDL types <types> <schema targetNamespace="http://example.com/stockquote.xsd" • Describes data types used xmlns="http://www.w3.org/2000/10/XMLSchema"> <element name="TradePriceRequest"> between client and server <complexType> <all> • Uses W3C XML Schema <element name="tickerSymbol" type="string"/> specification as default specification as default </all> choice to define data types </complexType> </element> • If the service uses only XML <element name="TradePrice"> Schema built-in simple <complexType> <all> types, such as strings and <element name="price" type="float"/> integers, then types element </all> </complexType> is not required </element> </schema> </types>
WSDL message <message name="SayHelloRequest"> <part name="firstName" type="xsd:string"/> </message> <message name="SayHelloResponse"> <part name="greeting" type="xsd:string"/> </message> • • <message>: describes the data exchanged between service providers and consumers • Each Web Service has two messages: input and output • Input: parameters for the Web Service • Output: return data from the Web Service • Each message contains zero or more <part> parameters, one for each parameter of the function • Each <part> parameter associates with a concrete type defined in the <types> container element
WSDL portType element <portType name="Hello_PortType"> <operation name="sayHello"> <input message="tns:SayHelloRequest"/> <output message="tns:SayHelloResponse"/> </operation> </portType> • • Basically, defines an interface: how unrelated objects communicate with each other • "portType“ used to define one or multiple operations • Operation: a sequence of messages to form an input-output pattern • WSDL supports four basic patterns of operation – One-way (input) – Request-response (input, output) – Solicit-response (output, input) – Notification (output) • Is an abstract definition
WSDL Binding Element • Concrete implement. of <binding name="Hello_Binding" type="tns:Hello_PortType"> portType <soap:binding style="rpc" transport="http://schemas.xmlsoap.org/soap/http"/> • How portType operation will <operation name="sayHello"> be transmitted <soap:operation soapAction="sayHello"/> • Where service is located <input> <soap:body • name attribute defines the encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" name of the binding namespace="urn:examples:helloservice" • type attribute points to the use="encoded"/> </input> port for the binding <output> • Binding: format of messages, <soap:body transport type (http) encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" • Operation: specifies that namespace="urn:examples:helloservice" use="encoded"/> soapAction HTTP header </output> identifies the service </operation> • Body: specify the details of </binding> the input and output messages
WSDL port <service name="Hello_Service"> <documentation>WSDL File for HelloService</documentation> <port binding="tns:Hello_Binding" name="Hello_Port"> <soap:address location="http://www.examples.com/SayHello/"> </port> </service> </service> • <port> element defines individual endpoint. Specifies single address for binding • name attribute: unique name among all ports defined • binding attribute: refers to binding element
WSDL service <service name="Hello_Service"> <documentation>WSDL File for HelloService</documentation> <port binding="tns:Hello_Binding" name="Hello_Port"> <soap:address location="http://www.examples.com/SayHello/"> </port> </service> • Defines ports supported by Web service • Service element: a collection of ports • For each supported protocol, there is one port element • clients learn from service element – where to access the service – through which port to access the Web service • Human-readable documentation • Binding attribute associates service with binding element
Apache Tomcat • Open source servlet container • HTTP web server environment for serving Java Implements • Java Servlet: class for responding to HTTP requests – Create object that receives a request – Generates responses based on requests • JavaServer Pages (JSP): serve dynamically generated web pages – Java code interleaved with static web content – Compiled and executed on server – Resulting HTML or XML document served
Apache AXIS2 • Web service framework • Will run over Tomcat • SOAP / WSDL engine • Also supports RESTful web services • Web service creation example – http://netbeans.org/kb/docs/websvc/gs- axis.html#deploy_axis – http://today.java.net/pub/a/today/2006/12/13/in voking-web-services-using-apache-axis2.html
Apache AXIS2 • Send SOAP messages • Receive and process SOAP messages • Create a Web service out of a plain Java class • Create implementation classes for both the • Create implementation classes for both the server and client using WSDL • Easily retrieve the WSDL for a service • Send and receive SOAP messages with attachments • Create or utilize a REST-based Web service
Netbeans IDE • Creating an Axis2 “Hello World” Web Service • First setup Axis2 and Tomcat – http://netbeans.org/kb/docs/websvc/gs- axis.html#setup – http://netbeans.org/kb/docs/websvc/gs- axis.html#axis_options_tomcat
Netbeans IDE example File -> New Project Name it AxisHello, click Finish Right-click project node , context menu opens choose New -> Other, Wizard opens
Netbeans IDE example • Click Next, Name the Java class HelloAxisWorld. • Name the package axishello. Click Finish. • Application created.
Recommend
More recommend