Transcript slides3b

Web Services
Part II
Implementation details
ITCS 4010 Grid Computing, 2005, UNC-Charlotte, B. Wilkinson, slides 3b version 0.1.
3b.1
What we know so far
• Basis parts of a service-oriented architecture:
– The service provider, (server)
– service requestor (client),
– a service registry.
• If registry used, web services generally use a
UDDI registry, which itself is a web service.
• SOAP used as the messaging protocol
carrying XML documents and using an HTTP
transport.
• WSDL, an XML language, is used to describe
the web service.
3b.2
• After registry populated with web service entries, client
can access registry to find out whether desired web
service exists in registry and if so where it is located.
• Registry responds with identification of server capable
of satisfying needs of client.
• Then, client can access server for web service
interface.
• Server responds with an WSDL document describing
the service and how to access it.
• Client can then send web service a request requesting
an operation.
• Result of operation returned in a message from the
web service.
• All messages are SOAP messages.
3b.3
Web Services
From http://www.globus.org
3b.4
Web Service Container
• Web Services generally “hosted” in a
web service container
– software environment that provides
communication mechanisms to and from
the web services and clients.
3b.5
Several possible software environments
designed for web services:
• Apache Axis (Apache eXtensible Interaction System)
• IBM Websphere
• Microsoft .NET
J2EE (Java 2 Enterprise Edition) server
container also a candidate for hosting web
services especially in enterprise (business)
applications.
3b.6
Apache Axis available for free down (Windows
or Linux):
http://ws.apache.org/axis
Used for the first web service assignment in
course.
Apache Axis requires an application server.
– Can be installed on top of a servlet engine such as
Apache Jakarta Tomcat.
– However, could be installed on top of a fullyfleldged J2EE server.
3b.7
Web service environment
Web service container
(e.g. Apache Axis)
SOAP messages
carried with HTTP transport
Client
Web services
Will use an Application server (servlet engine)
(e.g. Apache Jakara Tomcat)
Network
3b.8
Client-Service Implementation
• In the implementation, it is convenient to use
stubs - java classes suitable for web services
defined with WSDL.
3b.9
Client Stub
• Between client code and the network is a client
stub, sometimes called client proxy.
• The client stub is responsible for taking a request
from the client and converting the request into a
SOAP request on the network - marshalling.
• Also responsible for receiving SOAP responses
on network and converting to a suitable form for
client.
3b.10
Server Stub
• Between the service and the network is a server
stub, sometimes called a skeleton.
• Responsible for receiving a SOAP request from
the client stub and converting it into a suitable
form for the service -unmarshalling.
• Also converts the response from the service into a
SOAP message for the client stub.
3b.11
Web Service Application
3b.12
Steps
• Client calls client stub.
• SOAP request sent across network
• Server stub receives request and sends
request to service
• Service send result to serve stub
• Server stub sends result across network to
client stub.
• Client stub sends result to client.
3b.13
Web Service Application
Request service
SOAP
request
Result returned
SOAP
Client receives result
response
Call client stub
3b.14
Web Service Description
• Recall use an Interface Description
language (IDL) called WSDL to formally
describe a service, what is does, how it
is accessed, etc.
3b.15
Web Service Definition
Language (WSDL)
A W3C standard XML document that
describes three fundamental properties of a
service:
• What it is - operations (methods) it provides.
• How it is accessed - data format, protocols.
• Where it is located - protocol specific
network address.
3b.16
Math Web service
For concreteness, let us consider the web
service used in assignment 1. A simple version
is:
public class MyMath
{
public int squared(int x)
{
return x * x;
}
}
3b.17
Question
What does this service do?
Answer
3b.18
Elements of a WSDL
document
3b.19
Parts of a WSDL Document
• Root definitions - namespaces
• portType definitions - abstract definition of
service
• Message definitions - parameters in method
signature
• Type definitions - data types
• Binding definitions - to protocols i.e. SOAP over
HTTP
• Service definitions - where service is, ports
3b.20
<?xml version="1.0" encoding="UTF-8"?>
<wsdl:definitions targetNamespace="http://DefaultNamespace"
xmlns:apachesoap="http://xml.apache.org/xml-soap"
xmlns:impl="http://DefaultNamespace"
xmlns:intf="http://DefaultNamespace"
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:message name="squaredRequest">
<wsdl:part name="in0" type="xsd:int"/>
</wsdl:message>
<wsdl:message name="squaredResponse">
<wsdl:part name="squaredReturn" type="xsd:int"/>
</wsdl:message>
<wsdl:portType name="MyMath">
<wsdl:operation name="squared" parameterOrder="in0">
<wsdl:input message="impl:squaredRequest" name="squaredRequest"/>
<wsdl:output message="impl:squaredResponse" name="squaredResponse"/>
</wsdl:operation>
</wsdl:portType>
<wsdl:binding name="MyMathSoapBinding" type="impl:MyMath">
<wsdlsoap:binding style="rpc" transport="http://schemas.xmlsoap.org/ soap/http"/>
<wsdl:operation name="squared">
<wsdlsoap:operation soapAction=""/>
<wsdl:input name="squaredRequest">
<wsdlsoap:body encodingStyle="http://schemas.xmlsoap.org/soap/ encoding/"
namespace="http://DefaultNamespace" use="encoded"/>
</wsdl:input>
<wsdl:output name="squaredResponse">
<wsdlsoap:body encodingStyle="http://schemas.xmlsoap.org/soap/ encoding/"
namespace="http://DefaultNamespace" use="encoded"/>
</wsdl:output>
</wsdl:operation>
</wsdl:binding>
<wsdl:service name="MyMathService">
<wsdl:port binding="impl:MyMathSoapBinding" name="MyMath">
<wsdlsoap:address location="http://localhost:8080/axis/testaccount/ MyMath"/>
</wsdl:port>
</wsdl:service>
</wsdl:definitions>
WSDL file for math
web service
3b.21
<?xml version="1.0" encoding="UTF-8"?>
<wsdl:definitions targetNamespace="http://DefaultNamespace"
xmlns:apachesoap="http://xml.apache.org/xml-soap"
xmlns:impl="http://DefaultNamespace"
xmlns:intf="http://DefaultNamespace"
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:message name="squaredRequest">
<wsdl:part name="in0" type="xsd:int"/>
</wsdl:message>
<wsdl:message name="squaredResponse">
<wsdl:part name="squaredReturn" type="xsd:int"/>
</wsdl:message>
<wsdl:portType name="MyMath">
<wsdl:operation name="squared" parameterOrder="in0">
<wsdl:input message="impl:squaredRequest" name="squaredRequest"/>
<wsdl:output message="impl:squaredResponse" name="squaredResponse"/>
</wsdl:operation>
</wsdl:portType>
<wsdl:binding name="MyMathSoapBinding" type="impl:MyMath">
<wsdlsoap:binding style="rpc" transport="http://schemas.xmlsoap.org/ soap/http"/>
<wsdl:operation name="squared">
<wsdlsoap:operation soapAction=""/>
<wsdl:input name="squaredRequest">
<wsdlsoap:body encodingStyle="http://schemas.xmlsoap.org/soap/ encoding/"
namespace="http://DefaultNamespace" use="encoded"/>
</wsdl:input>
<wsdl:output name="squaredResponse">
<wsdlsoap:body encodingStyle="http://schemas.xmlsoap.org/soap/ encoding/"
namespace="http://DefaultNamespace" use="encoded"/>
</wsdl:output>
</wsdl:operation>
</wsdl:binding>
<wsdl:service name="MyMathService">
<wsdl:port binding="impl:MyMathSoapBinding" name="MyMath">
<wsdlsoap:address location="http://localhost:8080/axis/testaccount/ MyMath"/>
</wsdl:port>
</wsdl:service>
</wsdl:definitions>
Namespaces
Message definitions
portType
Bindings
Service definitions
3b.22
Root Definitions
Namespaces
<?xml version="1.0" encoding="UTF-8"?>
<wsdl:definitions targetNamespace="http://DefaultNamespace"
xmlns:apachesoap="http://xml.apache.org/xml-soap"
xmlns:impl="http://DefaultNamespace"
xmlns:intf="http://DefaultNamespace"
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">
3b.23
portType
Describes “What” - an abstract definition
of service operation. Uses the elements:
• message definitions - a set of
parameters referred to by method
signature, decomposed into parts
• type definitions - defines all data types
used
3b.24
portType Definitions
<wsdl:portType name="MyMath">
<wsdl:operation name="squared" parameterOrder="in0">
<wsdl:input message="impl:squaredRequest" name="squaredRequest"/>
<wsdl:output message="impl:squaredResponse" name="squaredResponse"/>
</wsdl:operation>
</wsdl:portType>
3b.25
Message Definitions
<wsdl:message name="squaredRequest">
<wsdl:part name="in0" type="xsd:int"/>
</wsdl:message>
<wsdl:message name="squaredResponse">
<wsdl:part name="squaredReturn" type="xsd:int"/>
</wsdl:message>
Standard XML integer type –
no special types in this example
3b.26
Binding
Describes “how” the elements in
abstract interface (portType) are
converted in actual data representations
and protocols e.g. SOAP over HTTP.
3b.27
Binding definitions
<wsdl:binding name="MyMathSoapBinding" type="impl:MyMath">
<wsdlsoap:binding style="rpc" transport="http://schemas.xmlsoap.org/ soap/http"/>
<wsdl:operation name="squared">
<wsdlsoap:operation soapAction=""/>
<wsdl:input name="squaredRequest">
<wsdlsoap:body encodingStyle="http://schemas.xmlsoap.org/soap/ encoding/"
namespace="http://DefaultNamespace" use="encoded"/>
</wsdl:input>
<wsdl:output name="squaredResponse">
<wsdlsoap:body encodingStyle="http://schemas.xmlsoap.org/soap/ encoding/"
namespace="http://DefaultNamespace" use="encoded"/>
</wsdl:output>
</wsdl:operation>
</wsdl:binding>
3b.28
port and service
Describe “where” service is.
• port - describes how a binding is
deployed at the endpoint of a network
• service - a named collection of ports
3b.29
Port/Service Definitions
<wsdl:service name="MyMathService">
<wsdl:port binding="impl:MyMathSoapBinding" name="MyMath">
<wsdlsoap:address location="http://localhost:8080/axis/testaccount/MyMath"/>
</wsdl:port>
</wsdl:service>
</wsdl:definitions>
Where math service is
3b.30
Build and deploy a web service
Several ways to create a web service within a
container and have accessible by clients.
Fundamental service components to build are:
• Web service code
• WDSL service description file
• Web service stub
and client components:
• Client stub
• Client code
3b.31
What to create to deploy and test a service
Client Applications
Container
Client
Service
Client stub
Server stub
WSDL
service
description
Web service stub
Client stub
Web service code
Client code
WDSL service description file
3b.32
In the following, we will assume that we are using
Apache Axis, which has several tools for building
and deploying a web service.
3b.33
Java Web Service (JWS) deployment facility
Absolute simplest way in Axis to deplore a web service:
• First, web service class file with methods created.
• Then file simply renamed as .jws and dropped into a
specific directory that axis expects .jws services to be.
Service code with .jws extension interpreted as a web
service. .jws file automatically compiled if necessary
when service called. All public methods in the service
code available and accessible as service operations.
• Simple and used in assignment 1 but has limitations.
– Restrictions include using globally known data types, i.e., data
types known to Axis. If not part of standard type mappings, one
must declare mappings.
3b.34
jws facility
Could actually use web service after
deployment with JWS without using a WSDL file
nor stubs. One could just use service URL,
which would have a .jws extension. Client and
service need code to make SOAP calls.
However, one would normally create a WSDL
file and the stubs, and get the stubs to handle
the SOAP. That is done in assignment 1.
3b.35
Web Service Deployment
Descriptor (WSDD)
• WSDD is an XML language used to
describe how to deploy a service.
• Provides for greater flexibility than with
jws “instant” deployment facility.
3b.36
WSDD file for MyService
<deployment xmlns="http://xml.apache.org/axis/wsdd/
xmlns:java="http://xml.apache.org/axis/wsdd/providers/java">
<service name="MyService" provider="java:RPC">
<parameter name="className" value="... MyService"/>
<parameter name="allowedMethods" value="*"/>
</service>
</deployment>
3b.37
Deployment with WSDD file
Once WSDD file deploy.wsdd created, can
deploy with Axis tool AdminClient:
java org.apache.axis.client.AdminClient deploy.wsdd
This method not use in assignment 1.
3b.38
Creating WSDL file
Several ways this can be approached:
• Create service code first and use as basis for
WSDL file
or
• Create WSDL file first and use this as basis
for the service code
Second method probably better from a
Software Engineering perspective, but will
look at both.
3b.39
WSDL from Service Code
Java2WSDL Tool
Axis Java2WSDL program generates WSDL file
(and its schema) from service code.
Program has number of flags including to
specify:
• Name of the output WSDL file (-o flag)
• Location (URL) of the service (-l flag)
• Namespace of WSDL file (-n flag)
• Mapping from package to namespace (-p flag)
3b.40
Example
Suppose we have interface MyMath.java for our service as:
public interface MyMath {
public int squared(int x)
}
To create WDSL file MyMath.wsdl from this interface file, we
might issue command:
% java org.apache.axis.wsdl.Java2WSDL -o MyMath.wsdl
-l "http://localhost:8080/axis/services/MyMath" MyMath
3b.41
<?xml version="1.0" encoding="UTF-8"?>
<wsdl:definitions targetNamespace="http://DefaultNamespace"
xmlns:apachesoap="http://xml.apache.org/xml-soap"
xmlns:impl="http://DefaultNamespace"
xmlns:intf="http://DefaultNamespace"
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 created by Apache Axis version: 1.2
Built on May 03, 2005 (02:20:24 EDT)-->
<wsdl:message name="squaredRequest">
<wsdl:part name="in0" type="xsd:int"/>
</wsdl:message>
<wsdl:message name="squaredResponse">
<wsdl:part name="squaredReturn" type="xsd:int"/>
</wsdl:message>
<wsdl:portType name="MyMath">
<wsdl:operation name="squared" parameterOrder="in0">
<wsdl:input message="impl:squaredRequest" name="squaredRequest"/>
<wsdl:output message="impl:squaredResponse" name="squaredResponse"/>
</wsdl:operation>
</wsdl:portType>
<wsdl:binding name="MyMathSoapBinding" type="impl:MyMath">
<wsdlsoap:binding style="rpc" transport="http://schemas.xmlsoap.org/ soap/http"/>
<wsdl:operation name="squared">
<wsdlsoap:operation soapAction=""/>
<wsdl:input name="squaredRequest">
<wsdlsoap:body encodingStyle="http://schemas.xmlsoap.org/soap/
encoding/"
namespace="http://DefaultNamespace" use="encoded"/>
</wsdl:input>
<wsdl:output name="squaredResponse">
<wsdlsoap:body encodingStyle="http://schemas.xmlsoap.org/soap/
encoding/"
namespace="http://DefaultNamespace" use="encoded"/>
</wsdl:output>
</wsdl:operation>
</wsdl:binding>
<wsdl:service name="MyMathService">
<wsdl:port binding="impl:MyMathSoapBinding" name="MyMath">
<wsdlsoap:address location="http://localhost:8080/axis/testaccount/ MyMath"/>
</wsdl:port>
</wsdl:service>
</wsdl:definitions>
3b.42
WSDL file
created
Stubs from WSDL
• If we have WSDL document for service,
can use tools to generate client and
server stubs:
– Axis WSDL2Java program generates stubs
for use on client and server
– Example of this in assignment 1.
3b.43
Axis tool WSDL2Java
Has a number of flags, including to specify:
• Root directory of output files (-o flag)
• Create server-side bindings for web service (-s flag)
• Deploy server stub (skeleton)
implementation( -S true/false)
or
deploy
• Add scope to deploy.wsdd, "Application", Request"
or "Session" (-d flag)
• Mapping all namespace in WSDL document to
same Java package name (-p flag)
3b.44
WSDL2Java Example
Suppose we have wsdl file MyMath.wsdl for our service.
Invoke as:
java org.apache.axis.wsdl.WSDL2Java -o . -d Session -s
-S true
-p localhost.axis.yourusername.MyMath_jws MyMath.wsdl
3b.45
WSDL from Running Service
In Axis, can generate WSDL document directly from a
running deployed service. Add ?wsdl onto service URL.
Example
If MyMath already deployed, say with the jws deployment
facility, then setting browser to point to:
http://yourserver.yourdomain.edu:8080/axis/…/MyMath.jws?wsdl
will display the WSDL file. Port number (8080) may be
different in an actual system.
3b.46
Putting all together
Can couple ?wsdl method with invoking WSDL2Java to create required
files with composite command:
java -classpath $AXISCLASSPATH org.apache.axis.wsdl.WSDL2Java
http://localhost:8080/axis/yourusername/MyMath.jws?wsdl
Will generate a directory structure .../… /MyMath.jws/ and four files
within MyMath.jws:
• MyMath.java -- source for the Java interface for MyMath class.
• MyMathService.java - source for Java interface.
• MyMathServiceLocator.java - source for Java class MyMathServiceLocator.
• MyMathSoapBindingStub.java - source for Java class
MyMathSoapBindingStub.
These files need to be compiled with, for example, the command:
javac -classpath $AXISCLASSPATH
localhost/axis/yourusername/MyMath_jws/*.java
3b.47
Client side programming
Once deployed service, want to use it or allow others to use
it. Depending upon details of deployed service and web
service environment, a simple Java program can be used to
access service such as:
import localhost.axis.yourusername.MyMath_jws.MyMathServiceLocator;
import localhost.axis.yourusername.MyMath_jws.MyMathService;
import localhost.axis.yourusername.MyMath_jws.MyMath;
public class MyMathClient {
public static void main(String args[]) throws
Exception {
MyMathService service = new MyMathServiceLocator();
MyMath myMath = service.getMyMath();
int x = (new Integer(args[0])).intValue();
System.out.println("The square of " + args[0] + " is "
+ myMath.squared(x));
}
}
3b.48
Quiz
What is Apache Axis?
(a) A tool used by American Indians
(b) A hosting environment for web services
(c) A compiler
(d) A type of make tool
3b.49
Which of the following contains all the services
that have been deployed?
(a) Class
(b) Shell
(c) Container
(d) Object
3b.50
What is a client stub?
(a) A way of offending a customer
(b) Code between the client code and the
network
(c) A document that explains the client code
(d) None of the other answers
3b.51
More information on Axis
http://xml.apache.org/axis
3b.52