98
Web Service Foundations: WSDL and SOAP

Web Service Foundations: WSDL and SOAP. Web Services Overview Marlon Pierce Indiana University [email protected]

Embed Size (px)

Citation preview

Page 1: Web Service Foundations: WSDL and SOAP. Web Services Overview Marlon Pierce Indiana University mpierce@cs.indiana.edu

Web Service Foundations: WSDL and SOAP

Page 2: Web Service Foundations: WSDL and SOAP. Web Services Overview Marlon Pierce Indiana University mpierce@cs.indiana.edu

Web Services Overview

Marlon Pierce

Indiana University

[email protected]

Page 3: Web Service Foundations: WSDL and SOAP. Web Services Overview Marlon Pierce Indiana University mpierce@cs.indiana.edu

What Are Web Services? Web services framework is an XML-based distributed services

system. SOAP, WSDL, UDDI WS-Interoperability Intended to support machine-to-machine interactions over the

network using messages. Basic ideas is to build a platform and programming language-

independent distributed invocation system out of existing Web standards. Most standards defined by W3C, Oasis (IP considerations) Interoperability really works, as long as you can map XML message

to a programming language type, structure, class, etc. We regularly use Java-C++ and Java-Perl communication

Very loosely defined, when compared to CORBA, etc. Inherit both good and bad of the web

Scalable, simple, distributed But no centralized management, not high performance, must be

tolerant of failures.

Page 4: Web Service Foundations: WSDL and SOAP. Web Services Overview Marlon Pierce Indiana University mpierce@cs.indiana.edu

Basic Architectures:Servlets/CGI and Web Services

Browser

WebServer

HTTP GET/POST

DB

JDBC

WebServer

DB

JDBC

Browser

WebServer

SOAP

GUIClient

SOAPWSDL

WSDL

WSD

LWSD

L

Page 5: Web Service Foundations: WSDL and SOAP. Web Services Overview Marlon Pierce Indiana University mpierce@cs.indiana.edu

Explanation of Previous Slide The diagram on the left represents a standard web

application. Browsers converse with web servers using HTTP GET/POST

methods. Servlets or CGI scripts process the parameters and take

action, like connect to a DB. Examples: Google, Amazon

On the right, we have a Web services system. Interactions may be either through the browser or through a

desktop client (Java Swing, Python, Windows, etc.) Examples: Google, Amazon

Page 6: Web Service Foundations: WSDL and SOAP. Web Services Overview Marlon Pierce Indiana University mpierce@cs.indiana.edu

Some Terminology The diagram on the left is called a client/server system. The diagram on the right is called a multi-tiered architecture. SOAP: Simple Object Access Protocol

No longer an abbreviation in SOAP 1.2 XML Message format between client and service.

WSDL: Web Service Description Language. Describes how the service is to be used Compare (for example) to Java Interface. Guideline for constructing SOAP messages. WSDL is an XML language for writing Application Programmer

Interfaces (APIs).

Page 7: Web Service Foundations: WSDL and SOAP. Web Services Overview Marlon Pierce Indiana University mpierce@cs.indiana.edu

Amazon and Google Experiment with Web Services Both Google and Amazon have conducted open experiments

with Web services. Why? To allow partners to develop custom user interfaces and

applications that work Google and Amazon data and services. You can download their APIs and try them.

http://www.google.com/apis/ http://www.amazon.com/webservices

Page 8: Web Service Foundations: WSDL and SOAP. Web Services Overview Marlon Pierce Indiana University mpierce@cs.indiana.edu

More Examples of Web Services Geographical Information Systems are perfect candidates for WS

The Open Geospatial Consortium defines several relevant standards Geographic Markup Language (GML) exchanges info. Web Feature Service works with abstract GML feature data. Web Map Service creates maps (images) Lots more at http://www.opengeospatial.org/specs/?page=specs

XMethods Lots and lots of contributed examples, live demos Try them

http://www.xmethods.com/ Lots more for bioinformatics.

Easiest way to find is to download Taverna from SourceForge. Then check out http://communitygrids.blogspot.com for guidelines.

CICC is building many new one for chemical informatics.

Page 9: Web Service Foundations: WSDL and SOAP. Web Services Overview Marlon Pierce Indiana University mpierce@cs.indiana.edu

Web Service Architectures

The following examples illustrate how Web services interact with clients.

For us, a client is typically a JSP, servlet, or portlet that a user accesses through browser.

You can also build other clients Web service interoperability means that clients and services can

be in different programming languages (C/C++, python, java, etc).

Page 10: Web Service Foundations: WSDL and SOAP. Web Services Overview Marlon Pierce Indiana University mpierce@cs.indiana.edu

Before Going On…

In the next several slides we’ll go into the details of WSDL and SOAP. But in practice, you don’t need to work directly with either.

Most tools that I’m familiar with generate the WSDL for you from your class. Similarly, SOAP messages are constructed by classes. Generated client stubs will even hide SOAP classes behind a local “façade” that

looks like a local class but actually constructs SOAP calls to the remote server. Many tools for developing services are available

Apache Axis 1.x and 2.x for Java and C++ Sun Web Services for Java SOAP Lite for Perl .NET tools from MS gSOAP for C++ …

Page 11: Web Service Foundations: WSDL and SOAP. Web Services Overview Marlon Pierce Indiana University mpierce@cs.indiana.edu

WSDL 1.1 Overview

Marlon Pierce Community Grids LabIndiana [email protected]

Page 12: Web Service Foundations: WSDL and SOAP. Web Services Overview Marlon Pierce Indiana University mpierce@cs.indiana.edu

What Is WSDL?

Web Service Description Language W3C specification See http://www.w3.org/TR/wsdl for the official “note” for

WSDL 1.1. WSDL 1.1 never became a full “recommendation”. WSDL 2.0 working draft just completed it’s public call for

comments. This slide set will review WSDL 1.1, which is still the

“standard”. WSDL 2.0 should replace this soon.

Page 13: Web Service Foundations: WSDL and SOAP. Web Services Overview Marlon Pierce Indiana University mpierce@cs.indiana.edu

Why Use WSDL? WSDL uses XML to describe interfaces

Programming language independent way to do this. So you can use (for example) C++ programs to remotely invoke Java programs

and vice versa. Consider Web browsers and Web servers:

All web browsers work pretty well with all web sites. You don’t care what kind of web server Amazon.com uses. Amazon doesn’t care if you use IE, Mozilla, Konqueror, Safari, etc. You all speak HTTP.

WSDL (and SOAP) are a generalization of this. Note I will describe WSDL from an Remote Procedure Call/Remote Method

Invocation point of view. But WSDL and SOAP also support more a more message-centric point of view. C.f. Java Messaging System. This is probably the way of the future for Web Services.

Page 14: Web Service Foundations: WSDL and SOAP. Web Services Overview Marlon Pierce Indiana University mpierce@cs.indiana.edu

A Very Simple Example: Echopublic class echoService implements echoServiceInterface{

public String echo(String msg) {return msg;

}public static void main(String[] args) {

new echoService().echo(“hello”);}

}

Page 15: Web Service Foundations: WSDL and SOAP. Web Services Overview Marlon Pierce Indiana University mpierce@cs.indiana.edu

The Echo Interface

/*** All implementers of this interface must* implement the echo() method.*/public interface echoServiceInterface {

public String echo(String toEcho);}

Page 16: Web Service Foundations: WSDL and SOAP. Web Services Overview Marlon Pierce Indiana University mpierce@cs.indiana.edu

Now Use Echo As A Remote Service We can take the previous

Java program and deploy it in Tomcat as a service.

Clients can then invoke the echo service. WSDL tells them how to

do it. Clients don’t need to

know anything about the service implementation or even language.

WSDL is the latest IDL DCE and CORBA IDL

were two older examples.

C#Client

WSDL

Tomcat+Axis+Echo

WSDL

SOAP(Echo “hello”) “hello”

Page 17: Web Service Foundations: WSDL and SOAP. Web Services Overview Marlon Pierce Indiana University mpierce@cs.indiana.edu

What Does echoServiceInterface Look Like In WSDL? <?xml version="1.0" encoding="UTF-8" ?>

<wsdl:definitions targetNamespace="http://grids.ucs.indiana.edu:8045/GCWS/services/Echo" xmlns="http://schemas.xmlsoap.org/wsdl/" xmlns:apachesoap="http://xml.apache.org/xml-soap" xmlns:impl="http://grids.ucs.indiana.edu:8045/GCWS/services/Echo" xmlns:intf="http://grids.ucs.indiana.edu:8045/GCWS/services/Echo" xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/" xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" xmlns:wsdlsoap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:xsd="http://www.w3.org/2001/XMLSchema">

  <wsdl:types /> <wsdl:message name="echoResponse">  <wsdl:part name="echoReturn" type="xsd:string" />   </wsdl:message>

<wsdl:message name="echoRequest">  <wsdl:part name="in0" type="xsd:string" />   </wsdl:message><wsdl:portType name="Echo">

<wsdl:operation name="echo" parameterOrder="in0">  <wsdl:input message="impl:echoRequest" name="echoRequest" />   <wsdl:output message="impl:echoResponse" name="echoResponse" />   </wsdl:operation>  </wsdl:portType> There’s more…

Page 18: Web Service Foundations: WSDL and SOAP. Web Services Overview Marlon Pierce Indiana University mpierce@cs.indiana.edu

What Does This Look Like In WSDL, Continued?

  <wsdl:binding name="EchoSoapBinding" type="impl:Echo"><wsdlsoap:binding style="rpc" transport="http://schemas.xmlsoap.org/soap/http" /> <wsdl:operation name="echo">

  <wsdlsoap:operation soapAction="" /> <wsdl:input name="echoRequest">

  <wsdlsoap:body encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" namespace="http://grids.ucs.indiana.edu:8045/GCWS/services/Echo"

use="encoded" />   </wsdl:input>

<wsdl:output name="echoResponse">  <wsdlsoap:body encodingStyle="http://schemas.xmlsoap.org/soap/encoding

namespace="http://grids.ucs.indiana.edu:8045/GCWS/services/Echo" use="encoded" />

  </wsdl:output>  </wsdl:operation>  </wsdl:binding><wsdl:service name="EchoService">

<wsdl:port binding="impl:EchoSoapBinding" name="Echo">  <wsdlsoap:address location="http://grids.ucs.indiana.edu:8045/GCWS/services/Echo" />   </wsdl:port>  </wsdl:service></wsdl:definitions>

Don’t strain your eyes. We will break this down

Page 19: Web Service Foundations: WSDL and SOAP. Web Services Overview Marlon Pierce Indiana University mpierce@cs.indiana.edu

Writing WSDL I’m sure you are impressed with the previous two

slides. One could write WSDL by hand, but this is not the

usual way. It was automatically generated by Apache Axis. Most

other Web service tools will do the same from your service code.

We will go through the construction, though, for understanding.

You should not think of WSDL (and SOAP) as programming languages. They are just assertions, or descriptions.

Page 20: Web Service Foundations: WSDL and SOAP. Web Services Overview Marlon Pierce Indiana University mpierce@cs.indiana.edu

WSDL Parts Types

Used to define custom message types Messages

Abstraction of request and response messages that my client and service need to communicate.

PortTypes Contains a set of operations. Operations organize WSDL messages. Operation->method name, portType->java interface

Bindings Binds the portType to a specific protocol (typically SOAP over

http). You can bind one portType to several different protocols by using

more than one port. Services

Gives you one or more URLs for the service. Go here to execute “echo”.

Page 21: Web Service Foundations: WSDL and SOAP. Web Services Overview Marlon Pierce Indiana University mpierce@cs.indiana.edu

Echo Service WSDL, Section by Section

Page 22: Web Service Foundations: WSDL and SOAP. Web Services Overview Marlon Pierce Indiana University mpierce@cs.indiana.edu

Namespaces The WSDL document begins with several XML namespace

definitions. Namespaces allow you to compose a single XML document from

several XML schemas. Namespaces allow you to identify which schema an XML tag comes

from. Avoids name conflicts.

See earlier XML lectures As we will see, the Axis namespace generator went overboard.

Not all of these are used.

Page 23: Web Service Foundations: WSDL and SOAP. Web Services Overview Marlon Pierce Indiana University mpierce@cs.indiana.edu

Front Matters<?xml version="1.0" encoding="UTF-8" ?> <wsdl:definitions

targetNamespace="http://grids.ucs.indiana.edu:8045/GCWS/services/Echo" xmlns="http://schemas.xmlsoap.org/wsdl/" xmlns:apachesoap="http://xml.apache.org/xml-soap" xmlns:impl="http://grids.ucs.indiana.edu:8045/GCWS/services/Echo" xmlns:intf="http://grids.ucs.indiana.edu:8045/GCWS/services/Echo" xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/" xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" xmlns:wsdlsoap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:xsd="http://www.w3.org/2001/XMLSchema">

…</wsdl:definitions>

Page 24: Web Service Foundations: WSDL and SOAP. Web Services Overview Marlon Pierce Indiana University mpierce@cs.indiana.edu

WSDL Types

Use <types/> to declare local message structures.

Page 25: Web Service Foundations: WSDL and SOAP. Web Services Overview Marlon Pierce Indiana University mpierce@cs.indiana.edu

What Does echoServiceInterface Look Like In WSDL?<?xml version="1.0" encoding="UTF-8" ?>

<wsdl:definitions …>  <wsdl:types /> <wsdl:message name="echoResponse">  <wsdl:part name="echoReturn" type="xsd:string" />   </wsdl:message>

<wsdl:message name="echoRequest">  <wsdl:part name="in0" type="xsd:string" />  </wsdl:message>…</wsdl:definitions>

Page 26: Web Service Foundations: WSDL and SOAP. Web Services Overview Marlon Pierce Indiana University mpierce@cs.indiana.edu

WSDL Types

WSDL messages don’t need to declare types when just sending XML Schema primitive objects.

EchoService just has string messages. So no special types definitions are needed in our WSDL.

Strings are an XML schema built-in type.

Page 27: Web Service Foundations: WSDL and SOAP. Web Services Overview Marlon Pierce Indiana University mpierce@cs.indiana.edu

Schema Built In Types

Page 28: Web Service Foundations: WSDL and SOAP. Web Services Overview Marlon Pierce Indiana University mpierce@cs.indiana.edu

When Would I Need A Type? Any time your Web Service needs to send data formatted by anything other than XML Schema built-in types, you must define the type in WSDL.

Example: Arrays are not built-in types! Arrays of strings, ints, etc., must be defined in the WSDL

<type></type> structure. Another example: JavaBeans (or C structs or any

data classes with get/set methods) can be serialized to XML. Pass as messages to the remote endpoint. Support for this in implementations is variable.

AXIS has limited support because they use their own serializers.

Sun has better support but it won’t work with Axis.

Page 29: Web Service Foundations: WSDL and SOAP. Web Services Overview Marlon Pierce Indiana University mpierce@cs.indiana.edu

How Does WSDL Encode String Arrays? Imagine that my echo service actually echoes

back an array of strings. Arrays are not part of the built-in types, so I

will have to define them myself. Luckily for us, SOAP defines arrays, so we

can import this definition. Next slide shows what this looks like.

Page 30: Web Service Foundations: WSDL and SOAP. Web Services Overview Marlon Pierce Indiana University mpierce@cs.indiana.edu

String Array Example<wsdl:types>

<schema targetNamespace="http://grids.ucs.indiana.edu:8045/GCWS/services/EchoArray"

xmlns="http://www.w3.org/2001/XMLSchema"> <import namespace="http://schemas.xmlsoap.org/soap/encoding/" /> <complexType name="ArrayOf_xsd_string">

<complexContent> <restriction base="soapenc:Array"> <attribute ref="soapenc:arrayType"

wsdl:arrayType="xsd:string[]" />   </restriction>  </complexContent>  </complexType>  <element name="ArrayOf_xsd_string" nillable="true"

type="impl:ArrayOf_xsd_string" />   </schema>  </wsdl:types>

Page 31: Web Service Foundations: WSDL and SOAP. Web Services Overview Marlon Pierce Indiana University mpierce@cs.indiana.edu

WSDL String Array Types

WSDL <type/> is nothing more than an extensibility placeholder in WSDL.

Technically, the WSDL schema specifies that <type> </type> can contain a <sequence> of 0 or more <any> tags. Look at the WSDL schema.

And note that the <any/> tag acts like wildcard. You can insert any sort of xml here.

Page 32: Web Service Foundations: WSDL and SOAP. Web Services Overview Marlon Pierce Indiana University mpierce@cs.indiana.edu

Inserting a Type Between <type></type>, we insert a <schema>. Since arrays are defined in SOAP encoding rules, I next import the

appropriate schema. I import the definition of the SOAP Array and extend it to a

String array. Typically imports also have “location” attributes

“This namespace is located here for download.” Next, insert our own local definition of a type called

“ArrayOf_xsd_string”. This is a restricted extension of the SOAP Array complex type.

We only allow 1 dimensional string arrays It is also nillable—I am allowed to returna “null” value for

the string.

Page 33: Web Service Foundations: WSDL and SOAP. Web Services Overview Marlon Pierce Indiana University mpierce@cs.indiana.edu

Handling Other XML Types

You can also express other message arguments as XML. Examples: a purchase order, an SVG description of an image, a GML

description of a map. In practice, these are handled by automatic Bean

serializers/deserializers. Castor is an example: http://www.castor.org/ XMLBeans is another http://xml.apache.org/xmlbeans/

These are tools that make it easy to convert between XML and JavaBeans.

By “JavaBeans” I mean objects that associate simple get/set methods with all data.

Implementation dependent.

Page 34: Web Service Foundations: WSDL and SOAP. Web Services Overview Marlon Pierce Indiana University mpierce@cs.indiana.edu

WSDL Messages

Page 35: Web Service Foundations: WSDL and SOAP. Web Services Overview Marlon Pierce Indiana University mpierce@cs.indiana.edu

WSDL Messages

The “message” section specifies communications that will go on between endpoints. Gives each message a name (to be used later for

reference). Specifies the type of message

Can be primitive types, like strings Can be defined types, as we saw previously.

Page 36: Web Service Foundations: WSDL and SOAP. Web Services Overview Marlon Pierce Indiana University mpierce@cs.indiana.edu

The echoServiceInterface messages

<?xml version="1.0" encoding="UTF-8" ?> <wsdl:definitions>  <wsdl:types /> <wsdl:message name="echoResponse">  <wsdl:part name="echoReturn" type="xsd:string" /> </wsdl:message><wsdl:message name="echoRequest">  <wsdl:part name="in0" type="xsd:string" /> </wsdl:message><wsdl:portType name="Echo">

<wsdl:operation name="echo" parameterOrder="in0">  <wsdl:input message="impl:echoRequest" name="echoRequest" />   <wsdl:output message="impl:echoResponse"

name="echoResponse" />   </wsdl:operation>  </wsdl:portType>…</wsdl:definitions>

Page 37: Web Service Foundations: WSDL and SOAP. Web Services Overview Marlon Pierce Indiana University mpierce@cs.indiana.edu

Our Echo Messages<wsdl:message name="echoResponse">

  <wsdl:part name="echoReturn" type="xsd:string" />

</wsdl:message>

<wsdl:message name="echoRequest">

<wsdl:part name="in0" type="xsd:string" />

</wsdl:message>

Page 38: Web Service Foundations: WSDL and SOAP. Web Services Overview Marlon Pierce Indiana University mpierce@cs.indiana.edu

Echo Service Messages

Our echo service takes a string argument and returns a string answer.

In WSDL, I first abstract these as messages. Echo needs two messages.

Note we have not yet said message is the request and which is the response. That is the job of the portType operations, coming up.

Page 39: Web Service Foundations: WSDL and SOAP. Web Services Overview Marlon Pierce Indiana University mpierce@cs.indiana.edu

Structure of a Message

WSDL <message> elements have name attributes and one or more parts. The message name should be unique for the

document. <operation> elements will refer to messages by name.

I need one <part> for each piece of data I need to send in that message.

Each <part> is given a name and specifies its type. <part> types can point to <wsdl:type> definitions if

necessary. Our service just needs xsd:strings, so no problem.

Page 40: Web Service Foundations: WSDL and SOAP. Web Services Overview Marlon Pierce Indiana University mpierce@cs.indiana.edu

PortTypes and Operations

Page 41: Web Service Foundations: WSDL and SOAP. Web Services Overview Marlon Pierce Indiana University mpierce@cs.indiana.edu

WSDL portTypes WSDL messages are only abstract messages.

We bind them to operations within the portType. The structure of the portType specifies (still

abstractly) how the messages are to be used. Think of operations->java methods and portTypes-

>java interfaces.

Page 42: Web Service Foundations: WSDL and SOAP. Web Services Overview Marlon Pierce Indiana University mpierce@cs.indiana.edu

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

<wsdl:definitions>  <wsdl:types /> <wsdl:message name="echoResponse">  <wsdl:part name="echoReturn" type="xsd:string" />   </wsdl:message>

<wsdl:message name="echoRequest">  <wsdl:part name="in0" type="xsd:string" />   </wsdl:message><wsdl:portType name="Echo">

<wsdl:operation name="echo" parameterOrder="in0">  <wsdl:input message="impl:echoRequest"

name="echoRequest" />   <wsdl:output message="impl:echoResponse"

name="echoResponse" />   </wsdl:operation>  </wsdl:portType>…</wsdl:definition>

Page 43: Web Service Foundations: WSDL and SOAP. Web Services Overview Marlon Pierce Indiana University mpierce@cs.indiana.edu

EchoService portType<wsdl:portType name="Echo">

<wsdl:operation name="echo" parameterOrder="in0">

  <wsdl:input message="impl:echoRequest"

name="echoRequest" />

  <wsdl:output message="impl:echoResponse"

name="echoResponse" />

  </wsdl:operation>

  </wsdl:portType>

Page 44: Web Service Foundations: WSDL and SOAP. Web Services Overview Marlon Pierce Indiana University mpierce@cs.indiana.edu

portType Message Patterns PortTypes support four types of messaging:

One way: Client send a message to the service and doesn’t want a response. <input> only.

Request-Response: Client sends a message and waits for a response. <input>, then <output>

Solicit-Response: Service sends a message to the client first, then the client responds. <output>, then <input>

Notification: <output> only. These still are abstract. We must implement them using some

message protocol. HTTP units of transmission are request and response, so mapping

Solicit-Response to HTTP will take some work.

Page 45: Web Service Foundations: WSDL and SOAP. Web Services Overview Marlon Pierce Indiana University mpierce@cs.indiana.edu

portType for EchoService

The echo service has one method, echo. It takes one string argument and returns one string. In WSDL, the portType is “Echo”, the operation is “echo”. The messages are organized into input and output.

Messages are placed here as appropriate. That is, <input> takes the <echoRequest> message.

Page 46: Web Service Foundations: WSDL and SOAP. Web Services Overview Marlon Pierce Indiana University mpierce@cs.indiana.edu

Parameter Order

This attribute of operation is used to specify zero or more space-separated values.

The values give the order that the input messages must be sent.

Echo is a bad example, since it only has one input parameter, named in0.

Page 47: Web Service Foundations: WSDL and SOAP. Web Services Overview Marlon Pierce Indiana University mpierce@cs.indiana.edu

WSDL Self-Referencing

The WSDL <input> and <output> tags need to point back to the <message> definitions above:

<wsdl:message name="echoResponse">  <wsdl:part name="echoReturn" type="xsd:string" />  </wsdl:message>…<wsdl:portType name="Echo">

<wsdl:operation name="echo" parameterOrder="in0">  …  <wsdl:output message="impl:echoResponse"

name="echoResponse" />   </wsdl:operation>  </wsdl:portType>

Page 48: Web Service Foundations: WSDL and SOAP. Web Services Overview Marlon Pierce Indiana University mpierce@cs.indiana.edu

The Picture So Far…

Part

Input Message

Part

Input Message

PartPart

Output Message

portType

Operation

Input

Ouput

hasInput

hasOutput

Page 49: Web Service Foundations: WSDL and SOAP. Web Services Overview Marlon Pierce Indiana University mpierce@cs.indiana.edu

Bindings

Page 50: Web Service Foundations: WSDL and SOAP. Web Services Overview Marlon Pierce Indiana University mpierce@cs.indiana.edu

WSDL SOAP Bindings

In the previous slide, we specify several things: We will use SOAP/HTTP We will use RPC encoding style

Other choice is literal “document” style. We specify the namespace associated with the Echo service

input and output messages. All of this corresponds to SOAP message parts.

We will expand this in the next lecture.

Page 51: Web Service Foundations: WSDL and SOAP. Web Services Overview Marlon Pierce Indiana University mpierce@cs.indiana.edu

Binding Section of WSDL<wsdl:definitions>…  <wsdl:binding name="EchoSoapBinding" type="impl:Echo">

<wsdlsoap:binding style="rpc" transport="http://schemas.xmlsoap.org/soap/http" /> <wsdl:operation name="echo">

  <wsdlsoap:operation soapAction="" /> <wsdl:input name="echoRequest">

  <wsdlsoap:body encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"

namespace="http://grids.ucs.indiana.edu:8045/GCWS/services/Echo" use="encoded" />

  </wsdl:input><wsdl:output name="echoResponse">

  <wsdlsoap:body encodingStyle="http://schemas.xmlsoap.org/soap/encoding

namespace="http://grids.ucs.indiana.edu:8045/GCWS/services/Echo" use="encoded" />

  </wsdl:output>  </wsdl:operation>  </wsdl:binding><wsdl:service name="EchoService">

<wsdl:port binding="impl:EchoSoapBinding" name="Echo">  <wsdlsoap:address location="http://grids.ucs.indiana.edu:8045/GCWS/services/Echo" />   </wsdl:port>  </wsdl:service></wsdl:definitions>

Don’t strain your eyes--we will zoom in.

Page 52: Web Service Foundations: WSDL and SOAP. Web Services Overview Marlon Pierce Indiana University mpierce@cs.indiana.edu

So Far…

We have defined abstract messages, which have XML values. Simple or custom-defined types.

We have grouped messages into operations and operations into portTypes.

We are now ready to bind the portTypes to specific protocols.

Page 53: Web Service Foundations: WSDL and SOAP. Web Services Overview Marlon Pierce Indiana University mpierce@cs.indiana.edu

The Binding for Echo<wsdl:binding name="EchoSoapBinding" type="impl:Echo">  <wsdlsoap:binding style="rpc" transport="http://schemas.xmlsoap.org/soap/http" /> <wsdl:operation name="echo">  <wsdl:input name="echoRequest">  <wsdlsoap:body

encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" namespace=“[echo service namespace URI]" use="encoded" />

  </wsdl:input> <wsdl:output name="echoResponse">  <wsdlsoap:body encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"

namespace=“[echo service namespace URI]" use="encoded" />

  </wsdl:output> </wsdl:operation></wsdl:binding> The highlighted “wsdlsoap:” tags are

extensions for SOAP message bindingand not part of the WSDL schema.

Page 54: Web Service Foundations: WSDL and SOAP. Web Services Overview Marlon Pierce Indiana University mpierce@cs.indiana.edu

Binding tags Binding tags are meant to bind the parts of

portTypes to sections of specific protocols. SOAP, HTTP GET/POST, and MIME are provided in the

WSDL specification. Bindings refer back to portTypes by name, just as

operations point to messages. They are mirror images of the portTypes. Each part is extended by schema elements for a particular

binding protocol (i.e. SOAP). In our WSDL bindings, we will have two messages

(input and output). Each corresponds to SOAP body sections, described later. Additionally, we specify that the body should be encoded.

That is, RPC encoded. Alternatively, could also be “literal” (or “document”).

Page 55: Web Service Foundations: WSDL and SOAP. Web Services Overview Marlon Pierce Indiana University mpierce@cs.indiana.edu

WSDL Internal References

portType

Operation

Input

Ouput

binding

Operation

Input

Output

Page 56: Web Service Foundations: WSDL and SOAP. Web Services Overview Marlon Pierce Indiana University mpierce@cs.indiana.edu

Structure of the Binding

<binding> tags are really just placeholders. They are meant to be extended at specific places by

wsdl protocol bindings. These protocol binding rules are defined in supplemental

schemas. The following box figure summarizes these things

Green boxes are part of WSDL From the wsdl namespace, that is.

Red boxes are parts of the document from other schemas From wsdlsoap namespace in the echo example.

Page 57: Web Service Foundations: WSDL and SOAP. Web Services Overview Marlon Pierce Indiana University mpierce@cs.indiana.edu

Binding Structure

binding

Non-wsdl extension

operation

Non-wsdl extension

input output

Non-wsdl extension

Non-wsdl extension

Page 58: Web Service Foundations: WSDL and SOAP. Web Services Overview Marlon Pierce Indiana University mpierce@cs.indiana.edu

A little more on encoding...

We specify SOAP encoding SOAP is a message format and needs a transport

protocol, so we specify HTTP. Operation styles may be either “RPC” or “Document”.

We use RPC. SOAP Body elements will be used to actually convey

message payloads. RPC requires “encoded” payloads.

Each value (echo strings) is wrapped in an element named after the operation.

Useful RPC processing on the server side. Documents are literal (unencoded)

Use to just send a payload of XML inside SOAP.

Page 59: Web Service Foundations: WSDL and SOAP. Web Services Overview Marlon Pierce Indiana University mpierce@cs.indiana.edu

Binding Associations to SOAP

Binding SOAP RPC

Operation

WSDL SOAP

SOAP Action

Input

Output

SOAP Body

SOAP Body

Page 60: Web Service Foundations: WSDL and SOAP. Web Services Overview Marlon Pierce Indiana University mpierce@cs.indiana.edu

Binding Restrictions

Binding elements point by name to portTypes.

WSDL allows more than one binding element to point to the same port type. Why? Because a service may support multiple,

alternative protocol bindings.

Page 61: Web Service Foundations: WSDL and SOAP. Web Services Overview Marlon Pierce Indiana University mpierce@cs.indiana.edu

What Does It Mean? WSDL is not a programming language. A service that exposes an WSDL interface is just telling a client what it

needs to do to communicate with the service. Send me strings and I will return strings. I expect SOAP messages that include the strings in the body. I expect this body to be RPC encoded with the operation name so that I will

know which operation the body contents belong to. I will return SOAP messages that include Strings in the body. These will also be encoded so that you know what to do with them.

Page 62: Web Service Foundations: WSDL and SOAP. Web Services Overview Marlon Pierce Indiana University mpierce@cs.indiana.edu

Ports and Services

Page 63: Web Service Foundations: WSDL and SOAP. Web Services Overview Marlon Pierce Indiana University mpierce@cs.indiana.edu

What Does This Look Like In WSDL, Continued?

<wsdl:definitions>…

<wsdl:binding>… 

  </wsdl:binding><wsdl:service name="EchoService">

<wsdl:port binding="impl:EchoSoapBinding" name="Echo">

  <wsdlsoap:address location="http://grids.ucs.indiana.edu:8045/GCWS/services/Echo" />

  </wsdl:port>  </wsdl:service></wsdl:definitions>

Page 64: Web Service Foundations: WSDL and SOAP. Web Services Overview Marlon Pierce Indiana University mpierce@cs.indiana.edu

Ports and Services

<wsdl:service name="EchoService">

<wsdl:port binding="impl:EchoSoapBinding" name="Echo"> <wsdlsoap:address

location=“http://..../"/>

  </wsdl:port>

</wsdl:service>

Page 65: Web Service Foundations: WSDL and SOAP. Web Services Overview Marlon Pierce Indiana University mpierce@cs.indiana.edu

Port and Service Tags

The service element is a collection of ports. That’s all it is for.

Ports are intended to point to actual Web service locations The location depends on the binding. For SOAP bindings, this is a URL.

Page 66: Web Service Foundations: WSDL and SOAP. Web Services Overview Marlon Pierce Indiana University mpierce@cs.indiana.edu

Ports and Services

A service can have more than one port. Two ports can point back to the same binding

element. Ports refer to bindings by name This allows you to provide alternative service locations.

The figure on next slide conceptually depicts associating two ports to a single binding. The ports differ only in the URLs of their services.

Page 67: Web Service Foundations: WSDL and SOAP. Web Services Overview Marlon Pierce Indiana University mpierce@cs.indiana.edu

Port Associations to Bindings

Binding Service

OperationPort #1

Input

Output

URL #1

URL #2

Port #2

Page 68: Web Service Foundations: WSDL and SOAP. Web Services Overview Marlon Pierce Indiana University mpierce@cs.indiana.edu

Summary of WSDL

WSDL decouples remote service operations. Types=custom message definitions.

Any data types not in the XML schema. Message=name the messages that must be exchanged and their

data types, possibly defined by <type>. PortTypes=service interfaces

Operations=remote method signatures. Bindings=mappings of portType operations to real message

formats Ports=locations (URLs) of real services.

Page 69: Web Service Foundations: WSDL and SOAP. Web Services Overview Marlon Pierce Indiana University mpierce@cs.indiana.edu

SOAP Intro and Message Formats

Marlon PierceCommunity Grids LabIndiana [email protected]

Page 70: Web Service Foundations: WSDL and SOAP. Web Services Overview Marlon Pierce Indiana University mpierce@cs.indiana.edu

SOAP Primary References

SOAP is defined by a number of links http://www.w3.org/TR/soap/

See primarily the “Primer” and “Messaging Framework” links.

The actual SOAP schema is available from http://www.w3.org/2003/05/soap-envelope/ It is pretty small, as these things go.

Page 71: Web Service Foundations: WSDL and SOAP. Web Services Overview Marlon Pierce Indiana University mpierce@cs.indiana.edu

SOAP and Web Services

Our previous lectures have looked at WSDL Defines the interfaces for

remote services. Provides guidelines for

constructing clients to the service.

Tells the client how to communicate with the service.

The actual communications are encoded with SOAP. Transported by HTTP

Client

Service

WSDL

WSDL

SOAPRequest

SOAPResponse

Page 72: Web Service Foundations: WSDL and SOAP. Web Services Overview Marlon Pierce Indiana University mpierce@cs.indiana.edu

Beyond Client-Server SOAP assumes messages

have an originator, one or more ultimate receivers, and zero or more intermediaries.

The reason is to support distributed message processing.

Implementing this message routing is out of scope for SOAP. Assume each node is a

Tomcat server or JMS broker.

That is, we can go beyond client-server messaging.

Originator Recipient

Intermediary

Intermediary

Intermediary

Page 73: Web Service Foundations: WSDL and SOAP. Web Services Overview Marlon Pierce Indiana University mpierce@cs.indiana.edu

SOAP in One Slide SOAP is just a message format.

Must transport with HTTP, TCP, etc. SOAP is independent of but can be connected

to WSDL. SOAP provides rules for processing the

message as it passes through multiple steps. SOAP payloads

SOAP carries arbitrary XML payloads as a body. SOAP headers contain any additional information These are encoded using optional conventions

Page 74: Web Service Foundations: WSDL and SOAP. Web Services Overview Marlon Pierce Indiana University mpierce@cs.indiana.edu

Defining SOAP Messages

Given what you have learned about WSDL, imagine it is your job to design the message interchange layer. What are the requirements?

Note SOAP actually predates WSDL, so this is in reverse order.

Page 75: Web Service Foundations: WSDL and SOAP. Web Services Overview Marlon Pierce Indiana University mpierce@cs.indiana.edu

Web Service Messaging Infrastructure Requirements?

Define a message format Define a messaging XML schema Allow the message to contain arbitrary XML from other schemas.

Keep It Simple and Extensible Messages may require advanced features like security, reliability, conversational

state, etc. KISS, so don’t design these but do design a place where this sort of advanced

information can go. Add these capabilities in further specifications: WS-Security, WS-ReliableMessaging, etc.

Tell the message originator is something goes wrong. Define data encodings

That is, you need to tell the message recipient the types of each piece of data. Define some RPC conventions that match WSDL

Your service will need to process the message, so you need to provide some simple conventions for matching the message content to the WSDL service.

Decide how to transport the message. Generalize it, since messages may pass through many entities.

Decide what to do about non-XML payloads (movies, images, arbitrary documents).

Page 76: Web Service Foundations: WSDL and SOAP. Web Services Overview Marlon Pierce Indiana University mpierce@cs.indiana.edu

SOAP Messaging

Page 77: Web Service Foundations: WSDL and SOAP. Web Services Overview Marlon Pierce Indiana University mpierce@cs.indiana.edu

SOAP Basics

SOAP is often thought of as a protocol extension for doing Remote Procedure Calls (RPC) over HTTP. This is how it is often used.

This is not accurate: SOAP is an XML message format for exchanging structured, typed data. It may be used for RPC in client-server applications May be used to send XML documents Also suitable for messaging systems (like JMS) that

follow one-to-many (or publish-subscribe) models. SOAP is not a transport protocol. You must attach

your message to a transport mechanism like HTTP.

Page 78: Web Service Foundations: WSDL and SOAP. Web Services Overview Marlon Pierce Indiana University mpierce@cs.indiana.edu

What Does SOAP Look Like? The next two slides shows examples of SOAP

message from our Echo service. It’s just XML

First slide is an example message that might be sent from a client to the echo service.

Second slide is an example response. I have highlighted the actual message payload.

Page 79: Web Service Foundations: WSDL and SOAP. Web Services Overview Marlon Pierce Indiana University mpierce@cs.indiana.edu

<?xml version=‘1.0’ ?><soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsd=http://www.w3.org/2001/XMLSchema xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> <soapenv:Body> <ns1:echo soapenv:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" xmlns:ns1="http://.../axis/services/EchoService">

<in0 xsi:type="xsd:string">Hollow World</in0> </ns1:echo> </soapenv:Body></soapenv:Envelope>

SOAP Request

Page 80: Web Service Foundations: WSDL and SOAP. Web Services Overview Marlon Pierce Indiana University mpierce@cs.indiana.edu

<?xml version=‘1.0’ ?><soapenv:Envelope xmlns:soapenv=http://schemas.xmlsoap.org/soap/envelope/ xmlns:xsd=http://www.w3.org/2001/XMLSchema xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> <soapenv:Body> <ns1:echoResponse soapenv:encodingStyle=http://schemas.xmlsoap.org/soap/encoding/ xmlns:ns1="http://../axis/services/echoService">

<echoReturn xsi:type=“String“>Hollow World

</echoReturn> </ns1:echoResponse> </soapenv:Body></soapenv:Envelope>

SOAP Response

Page 81: Web Service Foundations: WSDL and SOAP. Web Services Overview Marlon Pierce Indiana University mpierce@cs.indiana.edu

SOAP Structure SOAP structure is very

simple. 0 or 1 header elements 1 body element Envelop that wraps it all.

Body contains XML payload.

Headers are structured the same way. Can contain additional

payloads of “metadata” Security information,

quality of service, etc.

Envelope

Body

MessagePayload

Header

Page 82: Web Service Foundations: WSDL and SOAP. Web Services Overview Marlon Pierce Indiana University mpierce@cs.indiana.edu

SOAP Schema Notes All of this is expressed formally

in the SOAP schema. Which in turn derives from the

SOAP Infoset XML on the right is taken

directly from the SOAP schema.

This just encodes the previously stated rules.

Also, note that the SOAP envelope can contain other attributes. <anyAttribute> tag is the

wildcard

<xs:complexType name="Envelope">

<xs:sequence>  <xs:element

ref="tns:Header" minOccurs="0" />

  <xs:element ref="tns:Body" minOccurs="1" />

</xs:sequence>  <xs:anyAttribute

namespace="##other" processContents="lax" />

</xs:complexType>

Page 83: Web Service Foundations: WSDL and SOAP. Web Services Overview Marlon Pierce Indiana University mpierce@cs.indiana.edu

SOAP Envelop

The envelop is the root container of the SOAP message. Things to put in the envelop:

Namespaces you will need. http://schemas.xmlsoap.org/soap/envelope is required, so that the recipient

knows it has gotten a SOAP message. Others as necessary

Encoding rules (optional) Specific rules for deserializing the encoded SOAP data. More later on this.

Header and body elements. Headers are optional, body is mandatory. Headers come first in the message, but we will look at the body first.

Page 84: Web Service Foundations: WSDL and SOAP. Web Services Overview Marlon Pierce Indiana University mpierce@cs.indiana.edu

Brief Aside:WS-* is WS-<any> We’ll next look at the structure of the header and

body. SOAP and many other web services use the <any>

tag for extensibility. And they use “lax” processing assertions.

Allows for skipping over the SOAP payload. Needed in distributed messaging environments

Page 85: Web Service Foundations: WSDL and SOAP. Web Services Overview Marlon Pierce Indiana University mpierce@cs.indiana.edu

Options on <xsd:any/> The <xsd:any/> element takes the usual optional

maxOccurs, minOccurs attributes. Allows a namespace attribute taking one of the values:

##any (the default), ##other (any namespace except the target

namespace), List of namespace names, optionally including either

##targetNamespace or ##local. Controls what elements the wildcard matches, according to

namespace. It also allows a processContents attribute taking one of the

values strict, skip, lax (default strict), controlling the extent to which the contents of the matched element are validated. SOAP is lax.

Page 86: Web Service Foundations: WSDL and SOAP. Web Services Overview Marlon Pierce Indiana University mpierce@cs.indiana.edu

Lax

“If the item, or any items among its children if it's an element information item, has a uniquely determined declaration available, it must be ·valid· with respect to that definition.”

That is, ·validate· message payloads when you can, don't worry when you can't.

Page 87: Web Service Foundations: WSDL and SOAP. Web Services Overview Marlon Pierce Indiana University mpierce@cs.indiana.edu

SOAP Headers

SOAP Body elements contain the primary message contents. Headers are really just extension points where you can

include elements from other namespaces. i.e., headers can contain arbitrary XML.

Headers may be processed independently of the body. Headers may optionally define encodingStyle. Headers may optionally have a “role” attribute Header entries may optionally have a “mustUnderstand”

attribute. mustUnderstand=1 means the message recipient must

process the header element. If mustUnderstand=0 or is missing, the header element is

optional. Headers may also have a “relay” attribute.

Page 88: Web Service Foundations: WSDL and SOAP. Web Services Overview Marlon Pierce Indiana University mpierce@cs.indiana.edu

Header Definition From SOAP Schema

<xs:element name="Header" type="tns:Header" /> <xs:complexType name="Header">

<xs:annotation> <xs:documentation>Elements replacing the wildcard MUST be

namespace qualified, but can be in the targetNamespace</xs:documentation>

  </xs:annotation><xs:sequence>

<xs:any namespace="##any" processContents="lax" minOccurs="0" maxOccurs="unbounded" />

</xs:sequence>  <xs:anyAttribute namespace="##other" processContents="lax" />   </xs:complexType>

Page 89: Web Service Foundations: WSDL and SOAP. Web Services Overview Marlon Pierce Indiana University mpierce@cs.indiana.edu

Example Uses of Headers

Security: WS-Security and SAML place additional security information (like digital signatures and public keys) in the header.

Quality of Service: SOAP headers can be used if we want to negotiate particular qualities of service such as reliable message delivery and transactions.

Session State Support: Many services require several steps and so will require maintenance of session state. Equivalent to cookies in HTTP. Put session identifier in the header.

Page 90: Web Service Foundations: WSDL and SOAP. Web Services Overview Marlon Pierce Indiana University mpierce@cs.indiana.edu

Example Header from SOAP Primer<?xml version='1.0' ?> <env:Envelope xmlns:env="http://www.w3.org/2003/05/soap-

envelope"> <env:Header> <m:reservation xmlns:m=“http://my.example.com/"

env:role="http://www.w3.org/2003/05/soap-envelope/role/next" env:mustUnderstand="true">

<m:reference>uuid:093a2da1-q345-739r-ba5d-pqff98fe8j7d </m:reference>

<m:dateAndTime>2001-11-29T13:20:00.000-05:00 </m:dateAndTime>

</m:reservation> <n:passenger xmlns:n=“…"

env:role="http://www.w3.org/2003/05/soap-envelope/role/next" env:mustUnderstand="true">

<n:name>Åke Jógvan Øyvind</n:name> </n:passenger> </env:Header>

Page 91: Web Service Foundations: WSDL and SOAP. Web Services Overview Marlon Pierce Indiana University mpierce@cs.indiana.edu

Explanation of Header Example In general, we can import tags into the header from name

spaces outside of soap. <reservation/>, <reference/>, <dataAndTime/>,<passenger/>

SOAP doesn’t need to worry to much about these. It is the node’s job to process these things.

In this particular case, we may imagine an ongoing transaction for making an airline reservation. Involves several steps and messages, so client must remind

the server of this state information when sending a message. The actual header content all comes from other namespaces.

The role and mustUnderstand attributes are from SOAP.

Page 92: Web Service Foundations: WSDL and SOAP. Web Services Overview Marlon Pierce Indiana University mpierce@cs.indiana.edu

Header Processing

SOAP messages are allowed to pass through many intermediaries before reaching their destination. Intermediary=some unspecified routing application. Imagine SOAP messages being passed through many

distinct nodes. The final destination processes the body of the

message. Headers are allowed to be processed independently of

the body. May be processed by intermediaries.

This allows an intermediary application to determine if it can process the body, provide the required security, session, or reliability requirements, etc.

Page 93: Web Service Foundations: WSDL and SOAP. Web Services Overview Marlon Pierce Indiana University mpierce@cs.indiana.edu

Roles, Understanding, and Relays

Role?must

Understand

Relay?ForwardHeader

No

Yes ProcessHeader

Yes

No

Yes No RemoveHeader

Page 94: Web Service Foundations: WSDL and SOAP. Web Services Overview Marlon Pierce Indiana University mpierce@cs.indiana.edu

Header Roles SOAP nodes may be assigned role designations. SOAP headers then specify which role or roles

should process. Standard SOAP roles:

None: SOAP nodes MUST NOT act in this role. Next: Each SOAP intermediary and the ultimate SOAP

receiver MUST act in this role. UltimateReceiver: The ultimate receiver MUST act in

this role. In our example, all nodes must process the

header entries.

Page 95: Web Service Foundations: WSDL and SOAP. Web Services Overview Marlon Pierce Indiana University mpierce@cs.indiana.edu

SOAP Body Body entries are really just placeholders for XML

from some other namespace. The body contains the XML message that you

are transmitting. It may also define encodingStyle, just as the

envelop. The message format is not specified by SOAP.

The <Body></Body> tag pairs are just a way to notify the recipient that the actual XML message is contained therein.

The recipient decides what to do with the message.

Page 96: Web Service Foundations: WSDL and SOAP. Web Services Overview Marlon Pierce Indiana University mpierce@cs.indiana.edu

SOAP Body Element Definition<xs:element name="Body" type="tns:Body" /> <xs:complexType name="Body">

<xs:sequence> <xs:any namespace="##any"

processContents="lax" minOccurs="0“ maxOccurs="unbounded" />

  </xs:sequence>  <xs:anyAttribute namespace="##other"

processContents="lax" /> </xs:complexType>

Page 97: Web Service Foundations: WSDL and SOAP. Web Services Overview Marlon Pierce Indiana University mpierce@cs.indiana.edu

SOAP Body Example

<soapenv:Body> <ns1:echo soapenv:encodingStyle=

"http://schemas.xmlsoap.org/soap/encoding/"

xmlns:ns1="http://.../axis/services/EchoService">

<in0 xsi:type="xsd:string">HollowWorld</in0>

</ns1:echo></soapenv:Body.

Page 98: Web Service Foundations: WSDL and SOAP. Web Services Overview Marlon Pierce Indiana University mpierce@cs.indiana.edu

Example SOAP Body Details

The <Body> tag is extended to include elements defined in our Echo Service WSDL schema.

This particular style is called RPC. Maps WSDL bindings to SOAP body elements. Guidelines will be given in next lecture.

xsi-type is used to specify that the <in0> element takes a string value. This is data encoding Data encoding rules will also be examined in next lectures.