Transcript output

Web Service
Jianguo Lu
03-60-569
1
SW and WS
SWS,
Intelligent Web
Agent
Semantic Web
Web Service
(RDF, RDFS, OWL)
(WSDL, SOAP, UDDI)
WWW
(HTML, HTTP, URI)
03-60-569
2
Service Oriented Architecture
Discovery
agency
publish
find
Requester
03-60-569
interact
Provider
3
A concrete SOA
UDDI
Registry
Finds
Service
WSDL
Describes
Service
Service
Consumer
SOAP
Web Service
Provider
Communicates with
XML Messages
03-60-569
4
Web service definitions
• A web service is an application accessible to other applications over
the internet
• “Self-contained, modular business applications that have open,
internet-oriented, standard based interfaces”—UDDI Consortium
• “a software application identified by a URI, whose interfaces and
bindings are capable of being defined, described, and discovered as
XML artifacts. A web service supports direct interactions with other
software agents using XML-based messages exchanged via
Internet-based protocols.” --W3C
• “a standardized way of integrating Web-based applications using the
XML, SOAP, WSDL, and UDDI open standards over an Internet
protocol backbone. XML is used to tag the data, SOAP is used to
transfer the data, WSDL is used for describing the service available,
and UDDI is used for listing what services are available”--Webopedia
More concrete
03-60-569
5
Web Service definition
• “encapsulated, loosely coupled, contracted software
objects offered via standard protocols” --ZapThink
Research
– Encapsulated
• Web Service implementation is invisible to entities outside the
service
• Exposes an interface but hides details
– Loosely Coupled
• Service and consumer software can be redesigned independently
03-60-569
6
Why Web Service
• “Just as the web revolutionized how users talk to applications, XML
transforms way applications talk to each other”—Bill Gates
• “Web services will be bigger than Java or XML”. – Rod Smith, VP of
Emerging Technology, IBM
• “Web services are expected to revolutionize our life in much the
same way as the internet has during the past decade or so.”—
Gartner
• “By 2004, 40% of the financial services transactions and 35% of
online government services will be web service-based.” –Gartner
• There are web services for Google, Amazon, Fedex, EBay … …
• It is another hype?
03-60-569
7
History of Interface Definition Languages (IDLs)
• IDL has a long history in distributed computing
–
–
–
–
DCE (Distributed Computing Environment)
CORBA IDL, OMG (Object Management Group)
COM IDL, Microsoft
WSDL
• Traditional IDLs
– Specifying what to call: the operation names, their signatures,
exceptions. This is the job of IDL.
– Agreeing on how to make an invocation: the mechanism of
naming, activation, data encoding. This is what distributed
standards such as CORBA or COM do.
• WSDL needs to specify the both: the operation provided
by the service, and the mechanism to access the service.
03-60-569
8
Web Service Description Language
• WSDL defines
– What the service is: the operations the service provides, including
the signature of the operation –- what
– Access specification: details of the data format and protocol
necessary to access the service’s operation–- how
– Location of the service: details of the network address, such as a
URL –- where
03-60-569
9
–What
WSDL functionality view
Legend: –how
–where
Interface
Port Type
Supports
Formats & Protocols
Binding
Operation
Input & Output
How to encode
Message
Implements
Port
Provides
Service
Endpoints
03-60-569
10
In WSDL 2.0, portType is changed to interface.
WSDL document structure view
WSDL specification
abstract part
types
messages
operations
port types
concrete part
bindings
services and
ports
03-60-569
11
<?xml version="1.0"?>
<definitions name="Procurement"
targetNamespace="http://example.com/procurement/definitions"
xmlns:tns="http://example.com/procurement/definitions"
xmlns:xs="http://www.w3.org/2001/XMLSchema"
xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/"
xmlns="http://schemas.xmlsoap.org/wsdl/" >
<message name="OrderMsg">
<part name="productName" type="xs:string"/>
<part name="quantity" type="xs:integer"/>
</message>
<portType name="procurementPortType">
<operation name="orderGoods">
<input message = "OrderMsg"/>
</operation>
</portType>
<binding name="ProcurementSoapBinding" type="tns:procurementPortType">
<soap:binding style="document"
transport="http://schemas.xmlsoap.org/soap/http"/>
<operation name="orderGoods">
<soap:operation soapAction="http://example.com/orderGoods"/>
<input>
<soap:body use="literal"/>
</input>
<output>
<soap:body use="literal"/>
</output>
</operation>
</binding>
<service name="ProcurementService">
<port name="ProcurementPort" binding="tns:ProcurementSoapBinding">
<soap:address location="http://example.com/procurement"/>
</port>
</service>
03-60-569
</definitions>
abstract
part
messages
operation and
port type
concrete
part
binding
port and
service
12
<definitions … name="BNQuoteService">
<message name="getPriceRequest"> <part name="isbn" type="xsd:string"/> </message>
<message name="getPriceResponse">
<part name="return" type="xsd:float"/>
</message>
<portType name="BNQuotePortType">
<operation name="getPrice">
<input name="getPrice" message="tns:getPriceRequest"/>
<output name="getPriceResponse" message="tns:getPriceResponse"/>
</operation>
</portType>
<binding name="BNQuoteBinding" type="tns:BNQuotePortType">
<soap:binding style="rpc" transport="http://schemas.xmlsoap.org/soap/http"/>
<operation name="getPrice"><soap:operation/>
<input>
<soap:body use="encoded"
encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" namespace="urn:xmethodsBNPriceCheck"/>
</input>
<output>
<soap:body use="encoded" encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"
namespace="urn:xmethods-BNPriceCheck"/>
</output>
</operation>
</binding>
<service name="BNQuoteService">
<documentation>Returns price of a book at BN.com given an ISBN number</documentation>
<port name="BNQuotePort" binding="tns:BNQuoteBinding">
<soap:address location="http://services.xmethods.net:80/soap/servlet/rpcrouter"/>
</port>
</service>
03-60-569
</definitions>
13
Visual representation
03-60-569
14
Types (type information for the document, e.g., XML Schema)
Message 1
Message 2
Operation 1
Message 3
Message 4
Operation 2
Message 5
Operation 3
Interface (abstract service)
binding 1
binding 2
binding 3
binding 4
endpoint 1
endpoint 2
endpoint 3
endpoint 4
03-60-569
By Gustavo Alonso and Cesare Pautasso
Service (the interface in all
its available implementations)
Concrete description
of the service
WSDL document
Abstract description of the service
WSDL structure—interconnection view
15
A WSDL example
<?xml version="1.0"?>
<definitions name="PriceCheck"
targetNamespace="http://www.skatestown.com/services/PriceCheck"
xmlns:pc="http://www.skatestown.com/services/PriceCheck"
xmlns:avail="http://www.skatestown.com/ns/availability"
xmlns:wsi="http://ws-i.org/schemas/conformanceClaim/"
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/"
xmlns="http://schemas.xmlsoap.org/wsdl/">
<types> …</types>
<message> …</message>
<message> … </message>
<portType> … </portType>
<binding> … </binding>
<service> … </service>
</definitions>
03-60-569
This example is from Steve Graham et al: Building Web Services
with Java
16
PortType
<portType name="PriceCheckPortType">
<operation name="checkPrice">
<input message="pc:PriceCheckRequest"/>
<output message="pc:PriceCheckResponse"/>
</operation>
</portType>
•
<portType> defines the interface of web service. Just as Java Interface
declaration;
– Will change the name to <interface> in WSDL 2.0.
•
•
•
It consists of a sequence of operation declarations.
WSDL can have zero or more <portType>s. Typically just one.
It has a name attribute, must be unique.
– The binding will refer the portType by its name
03-60-569
17
Operation
• Operation defines a method signature;
– Name, input, output, and fault
• Input and output elements are associated with
messages;
• Different combinations of input/output define different
operations types.
<operation name="checkPrice">
<input message="pc:PriceCheckRequest"/>
<output message="pc:PriceCheckResponse"/>
</operation>
03-60-569
18
Operation Types
•
The request-response type is the most common operation type, but WSDL
defines four types:
– Request-response: The operation can receive a request and will return a response
<operation name="checkPrice">
<input message="pc:PriceCheckRequest"/>
<output message="pc:PriceCheckResponse"/>
</operation>
– One-way: The operation can receive a message but will not return a response.
<operation name=“cancellation”>
<input message=“tns:orderCancellation”/>
</operation>
– Notification:The operation can send a message but will not wait for a response
<operation name=“notification”>
<output message=“tns:promotionNotification”/>
</operation>
– Solicit-response:The operation can send a request and will wait for a response
<operation name=“cancellation”>
<output message=“tns:pushThis”/>
<input message=“tns:reponseToPush”/>
</operation>
•
Different types are defined by decided by the order/occurrences of input and output.
03-60-569
19
Messages
<message name="PriceCheckRequest">
<part name="sku" element="avail:sku"/>
</message>
<message name="PriceCheckResponse">
<part name="result" element="avail:StockAvailability"/>
</message>
•
•
•
•
Describe the abstract form of input, output, or fault.
A WSDL file can have zero or more messages.
Each message has a name, which is unique within the document.
Each message has a collection of <part> elements.
03-60-569
20
Part
<part name="sku" element="avail:sku"/>
<part name="result" element="avail:StockAvailability"/>
• A <part> element can be compared to a parameter in a
method.
• A part element has two properties: one is name, the other
is its kind.
• Kind can be a type or an element
– Element refers to an element defined in XML Schema
– Type refers to a simpleType or a complexType in XSD
• In corresponding sku definition is:
<xsd:element name="sku" type="xsd:string" />
03-60-569
21
Types in WSDL
<types>
<xsd:schema
targetNamespace="http://www.skatestown.com/ns/availability" >
<xsd:element name="sku" type="xsd:string" />
<xsd:complexType name="availabilityType">
<xsd:sequence>
<xsd:element ref="avail:sku"/>
<xsd:element name="price" type="xsd:double"/>
<xsd:element name="quantityAvailable" type="xsd:integer"/>
</xsd:sequence>
</xsd:complexType>
<xsd:element name="StockAvailability"
type="avail:availabilityType" />
</xsd:schema>
</types>
•
The default type system is XML Schema;
–
•
•
Theoretically you can use any type system, such as Java types.
To be used in<part> element;
We can also import XML Schemas
03-60-569
22
SOAP request message
<soapenv:Envelope
xmlns:soapenv=“http://schema.xmlsoap.org/soap/evelope/”
xmlns:xsd=“http://www.w3.org/2001/XMLSchema”
xmlns:xsi=“http://www.w3.org/2001/XMLSchema-instance”>
<soapenv:Body>
<sku xmlns=“http://www.skatestown.com/ns/availability”>123</sku>
</soapenv:Body>
</soapenv:Envelope>
Envelope
•
Relevant part of the WSDL file:
<xsd:element name="sku" type="xsd:string" />
<message name="PriceCheckRequest">
<part name="sku" element="avail:sku"/>
</message>
<operation name="checkPrice">
<input message="pc:PriceCheckRequest"/>
<output message="pc:PriceCheckResponse"/>
</operation>
03-60-569
Header #0
Header #1
Body
Message
Payload
23
SOAP response message
<soapenv:Envelope
xmlns:soapenv= …
xmlns:xsd=…
xmlns:xsi=… >
<soapenv:Body>
<StockAvailability xmlns= … >
<sku> 123 </sku>
<price xmlns=“”>100.00</price>
<quantityAvailable xmlns=“”>
12
</quantityAvailable>
</StockAvailability>
</soapenv:Body>
</soapenv:Envelope>
03-60-569
• Relevant part of the WSDL file:
<xsd:complexType
name="availabilityType">
<xsd:sequence>
<xsd:element ref="avail:sku"/>
<xsd:element name="price"
type="xsd:double"/>
<xsd:element name="quantityAvailable"
type="xsd:integer"/>
</xsd:sequence>
</xsd:complexType>
<message name="PriceCheckResponse">
<part name="result"
element="avail:StockAvailability"/>
</message>
<operation name="checkPrice">
<input message="pc:PriceCheckRequest"/>
<output message="pc:PriceCheckResponse"/>
</operation>
24
Binding
<binding name="PriceCheckSOAPBinding" type="pc:PriceCheckPortType">
<soap:binding style="document" transport="http://schemas.xmlsoap.org/soap/http" />
<operation name="checkPrice">
<soap:operation soapAction =
"http://www.skatestown.com/services/PriceCheck/checkPrice" />
<input> <soap:body use="literal" />
</input>
<output> <soap:body use="literal" />
</output>
</operation>
</binding>
• Name of the binding should be unique;
• Link to the portType is achieved by the portType name
– This explains why portType name should be unique.
• Typically, there is only one <binding> element;
• Defines:
–
–
–
–
Invocation style
SOAPAction
Input message appearance
Output message appearance
03-60-569
25
Invocation Style
<soap:binding style="document"
transport="http://schemas.xmlsoap.org/soap/http" />
• All operations in this portType use SOAP messages;
• The style attribute indicates that operations will follow a
document-centric approach;
– The body of the SOAP message is a straight XML document;
– This is in contrast to RPC style;
03-60-569
26
RPC style and document style
•
•
When using Document style, you can structure the contents of the SOAP Body any
way you like.
When using RPC style, the contents of the SOAP Body must conform to a structure
that indicates the method name and contains a set of parameters. It looks like this:
<env:Body>
<m:methodName xmlns:m="someURI">
<m:m1>...</m:m1> <m:m2>...</m:m2> ...
</m:methodName>
</env:Body>
•
Document style:
<env:Body>
<m:purchaseOrder xmlns:m="someURI"> ... </m:purchaseOrder>
</env:Body>
•
RPC style:
<env:Body>
<m:placeOrder xmlns:m="someURI">
<m:purchaseOrder> ... </m:purchaseOrder>
</m:placeOrder>
</env:Body>
03-60-569
27
Service
<service name="PriceCheck">
<port name="Pricecheck" binding="pc:PriceCheckSOAPBinding">
<documentation>
<wsi:Claim
conformsTo="http://ws-i.org/profiles/basic/1.0" />
</documentation>
<soap:address location =
"http://www.skatestown.com/services/PriceCheck"/>
</port>
</service>
• Contains a set of <port> elements;
• <port> combines the interface binding with a network address
specified by a URI;
• A web service can be available in different web addresses;
03-60-569
28
Implications of WSDL
• Interaction mode:
– Not only expose the operations to invoke, but also a service
behave like a client. Blurring the distinction between a client and
server.
• Does not presume a particular form of communication,
protocol, data encoding.
– You can use HTTP, or SMTP, or FTP, …
– You can use SOAP, or others
03-60-569
29
WSDL 1.1 vs WSDL 2.0
WSDL 1.1
•
•
WSDL 2.0
Endpoints
Interfaces
•
•
Ports
PortTypes
•
Removed operation overloading
•
Supported operation overloading
•
•
•
•
•
Messages defined through Types
Operations nested inside
Interfaces
Endpoints nested inside Bindings
Messages composed of Parts
6 Top level elements: Messages,
Operations, PortTypes, Bindings,
Ports and Services.
•
9 Message Exchange Patterns
•
4 Transmission Primitives
•
New:
Features and Properties
03-60-569
– Support for Interface inheritance
– (One-way, Request-Response,
Solicit-Response, Notification)
30
Tools
• WSDL parser: WSDL4J
• Apache Axis
–
–
–
–
–
Invoking SOAP web service;
Translate WSDL to Java, and vice versa;
Mapping Java into XML Schema, and vice versa;
Host web service;
API for manipulating SOAP;
03-60-569
31
Mapping between Java and WSDL in JAX-RPC
• A simple example
<message name="fooRequest">
<part name="para1" type="xs:string"/>
</message>
<message name="fooResponse">
<part name="para2" type="xs:float"/>
</message>
<portType name="FooBar">
<operation name="foo">
<input message="y:fooRequest"/>
<output message="y:fooResponse"/>
</operation>
</portType>
public interface FooBar extends java.rmi.Remote{
public float foo(java.lang.String para1)
throws java.rmi.RemoteException;
}
03-60-569
32
• Multiple input parameters
<message name="fooRequest">
<part name="param1" type="xs:string"/>
<part name="param2" type="xs:int"/>
<part name="param3" type="xs:boolean"/>
</message>
<message name="fooResponse">
<part name="para2" type="xs:float"/>
</message>
<portType name="FooBar">
<operation name="foo">
<input message="y:fooRequest"/>
<output message="y:fooResponse"/>
</operation>
</portType>
public interface FooBar extends java.rmi.Remote{
public float foo(String param1, int param2, boolean param3)
throws java.rmi.RemoteException;
}
03-60-569
33
• Multiple output parameters
<message name="fooRequest">
<part name="param1" type="xs:string"/>
</message>
<message name="fooResponse">
<part name="param2" type="xs:int"/>
<part name="param3" type="xs:boolean"/>
<part name="param4" type="xs:float"/>
</message>
<portType name="FooBar">
<operation name="foo">
<input message="y:fooRequest"/>
<output message="y:fooResponse"/>
</operation>
</portType>
public interface FooBar extends java.rmi.Remote{
public void foo(String param1,
javax.xml.rpc.holders.IntHolder param2,
javax.xml.rpc.holders.BooleanHolder param3,
javax.xml.rpc.holders.FloatHolder param3,
) throws java.rmi.RemoteException;
03-60-569
}
34
Mapping XML Schema to Java
public class Address {
private String street;
private String city;
public String getCity(){return city; }
public void setCity(String c){city=c; }
……
}
<complexType name="Address">
<sequence>
<element name="city" nillable="true" type="xsd:string"/>
<element name="street" nillable="true" type="xsd:string"/>
</sequence>
</complexType>
• Class has to have correct getters and setters;
• In axis, you can use WSDL2Java and Java2WSDL to do the mapping.
03-60-569
35