Assoc.Prof. Dr. Thanachart Numnondawww.imcinstitute.com
August 2010
Topic 4
Java API for XML Web Services
2
Agenda
Java APIs for Web Services
JAX-RPC
JAX-WS
3
Java APIs for Web Services
4
JWSDP Java Web Services Development Pack (JWSDP) is a free
software development kit (SDK) for developing Web Services
JWSDP has been replaced by GlassFish and WSIT and several components are in Java SE 6.
JWSDP APIs Java API for XML Processing (JAXP), v 1.3
Java Architecture for XML Binding (JAXB), v 1.0 and 2.0
JAX-RPC v 1.1
JAX-WS v 2.0
SAAJ (SOAP with Attachments API for Java)
Java API for XML Registries (JAXR)
5
Java API for XML Processing (JAXP)
• JAXP enables applications to parse, validate and transform XML documents.
• Java developers can invoke • SAX parser• DOM parser
• The main JAXP APIs are defined in the javax.xml.parsers package• SAXParserFactory• DocumentBuilderFactory
6
Java API for XML Binding (JAXB)
• JAXB allows Java developers to access and process XML data without having to know XML or XML processing.
• JAXB is a Java technology that enables you to generate Java classes from XML schemas by means of a JAXB binding compiler.
• unmarshalling • XML instance documents into Java content trees
• marshalling • Java content trees back into XML instance documents.
7
SAAJ (SOAP with AttachmentsAPI for Java™)
• SAAJ provides a convenient API for constructing
and sending SOAP messages without having to
directly create the XML yourself.
• SAAJ was originally part of the Java API
for XML Messaging (JAXM) Separated out from
JAXM 1.0 into JAXM 1.1 and SAAJ 1.1
(SAAJ 1.3 (Java EE 5))
8
JAXR
• Standard Java API for performing registry operations over diverse set of registries
� Web service publication & discovery
• A unified information model for describing business registry content
• Provides multi-layered API abstractions
� Level 0: for UDDI
� Level 1: for ebXML registry/repository
9
JAX-RPC
• XML data types to/from Java types mapping
• SOAP Message Handler framework
• WSDL to/from Java mapping
• Servlet-based Web service endpoint model
• JAX-RPC Client Programming Models
• Extensible type mapping
10
JAX-WS (JAX-RPC 2.0)
• New handler framework
• Metadata-based Web services
• Operational style improvement
• Asynchronous Web services
• Support for non-HTTP transport
• Interoperable attachments (as part of WS-I)
• Secure Web services (as part of Security)
11
JAXM
• JAXM is not part of Java EE 5
• JAXM-based asynchronous messaging on Java EE 5 is supported via
� Message-driven Bean (MDB) in EJB 3 can receive both JMS and JAXM message types
� Connector 1.5 allows pluggability of various types message providers (JAXM provider and JMS provider)
12
Java APIs for Web Services Protocols
SOAP JAXM 1.0 (JSR 67), SAAJ
JAX-RPC => JAX-WS 2.0 (JSR 224)
WSDL JAX-RPC => JAX-WS 2.0 (JSR 224)
UDDI JAXR 1.0 (JSR 93)
13
Sun’s Web Services Stack
14
JAX-RPC
Remote Procedure Call (RPC)
RPC, COM, CORBA, RMI:
Synchronous communication: calling process blocks until there is a response
More tightly coupled (than non-RPC model): client must find recipients and know method and its arguments
Non persistent
Client System Server System
Request
Response
Remote Procedure Calls
Protocol Run TimeRun Time
ServantClient
Stub Skeleton
Interface Interface
Common Interface between client and Server Stub for client, Skeleton/Tie for server On-the-wire protocol needs to be agreed upon
RPC Example – Java RMI <<Interface>>Java Remote
Interface
Java Remote Method Protocol (JRMP) isOn-the-wire protocol
Remote ObjectImplementation
RMI ServerSkeleton
RMI ClientStub
rmic compiler
Client
RPC Example - JAX-RPC
Common Interface Service is described in IDL (Interface Description
Language) IDL of CORBA service Java RMI interface in RMI (Language specific) WSDL for Web service
Used by tools to statically or dynamically generate and/or configure interfaces, proxies, and ties in a network technology specific environment
What is JAX-RPC?
Java™ API for XML-based RPC Web Services operations are performed by exchanging
SOAP 1.1 messages
Services are described using WSDL• WSDL is the contract between service provider and
client (only contract needed)
Web service endpoints and clients use JAX-RPC programming model
Key technology for Web Services in the J2EE 1.4 platform
JAX-RPC Design Goals
Easy to use programming model• For both defining & using a service
Hides all the plumbing• You don't have to create SOAP messages yourself
SOAP and WSDL-based interoperability• Interoperate with any SOAP 1.1 compliant peers
Extensibility and Modularity• Support new versions of XML specification, i.e. SOAP 1.2
and beyond• Message handler architecture
JAX-RPC Architecture
Server-side JAX-RPCRuntime System
Container
JAX-RPCService Endpoint
WSDLJava
WSDL Document
HTTP
Client-side JAX-RPCRuntime System
SOAP
Container
JavaWSDLGenerated Code
JAX-RPC Client
JAX-RPC Runtime System
Core of a JAX-RPC implementation:• Library that provides runtime services
for JAX-RPC mechanisms• Implements some of the JAX-RPC APIs
Client side:• Can be implemented over J2SE™, J2EE™ or J2ME™
platforms
Server-side:• J2EE 1.3 or 1.4 Containers: EJB™ or Servlet
Developing a Web Service
tool
Interfaces (java.rmi.Remote type)Must follow JAX-RPC conventions
Implementation classesServlet-based endpoint modelOptional handler and serializer classes
Packaged application (war file)
WSDL Service contract
JAX-RPC : Web Service Endpoint
HTTP
Server-Side JAX-RPCRuntime System
SOAP
Container
JAX-RPC Service Endpoint
WSDL<-->Java
WSDL Document
26
JAX-WS
27
Quick overview of JAX-WS
Easy way to use Java API for XML Web Services Replace JAX-RPC
Just add @annotation to POJO XML Descriptor free programming
Layer architecture SOAP 1.2 (Document/Literal) Use JAXB for data binding Protocol and transport independence Part of Java SE6 and Java EE 5 Platform
28
JAX-WS Layered Architecture
29
What Does It Mean?
• Upper layer uses annotations extensively• Easy to use
• Great toolability
• Fewer generated classes
• Lower layer is more traditional• API-based
• For advanced scenarios
• Most application will use the upper layer only
• Either way, portability is guaranteed
30
Two ways to create a Web Service
• Starting from a WSDL file> Generate classes using wsimport (=> xjc)
> WS interface> WS implementation skeleton class
> Implement WS interface> Build and deploy
• Starting from a Java class (POJO) > Annotate POJO > Build and deploy
> WSDL file generated automatically
31
Start with a Java Class
32
Server-Side Programming Model: POJO
1 Write a POJO implementing the service
2 Add @WebService annotation to it
3 Build and Deploy the applicationWSDL is automatically generated at runtime
1 Point your clients at the WSDLe.g. http://myserver/myapp/MyService?WSDL
33
Example 1: Servlet-Based Endpoint
@WebServicepublic class Calculator { public int add( int a, int b) { return a + b; }}
• @WebService annotation• All public methods become web service operations
• WSDL/Schema generated automatically• Default values are used
34
Service Description Default Mapping• Java mapping => WSDL
35
Example 2: EJB-Based Endpoint
@WebService@Statelesspublic class Calculator { public int add( int a, int b) { return a + b; }}
• It’s a regular EJB 3.0 component, so it can use any EJB features
>Transactions, security, interceptors...
36
Customizing through Annotations
@WebService(name=”CreditRatingService”, targetNamespace=”http://example.org”)public class CreditRating {
@WebMethod(operationName=”getCreditScore”) public Score getCredit( @WebParam(name=”customer”) Customer c) {
// ... implementation code ...}
}
37
Start with a WSDL file
38
Generating an interface from WSDL• WSDL => Java generation
39
Implementing a Web Service froma Generated Interface
40
Server Side Web Service
41
JAX-WS uses JAXB for Data Binding
42
add() Parameter : Example
43
JAXB XML Schema to Java Mapping
44
Client Side Programming
45
Java SE Client Side Programming
• Point a tool (NetBeans or wsimport) at the WSDL for the service
wsimport http://example.org/Calculator.wsdl
• Generate annotated classes and interfaces
• Call new on the service class
• Get a proxy using a get<ServiceName>Port method
• Invoke any remote operations
46
Example : Java SE-Based Client
CalculatorService svc = new CalculatorService();Calculator proxy = svc.getCalculatorPort();int answer = proxy.add(35, 7);
• No need to use factories
• The code is fully portable
• XML is completely hidden from programmer
47
Java EE Client Side Programming
• Point a tool (NetBeans or wsimport) at the WSDL for the service
wsimport http://example.org/calculator.wsdl
• Generate annotated classes and interfaces
• Inject a @WebServiceReference of theappropriate type
• No JNDI needed
• Invoke any remote operations
48
Example : Java EE-Based Client
@Statelesspublic class MyBean { // Resource injection
@WebServiceRef(CalculatorService.class) Calculator proxy;
public int mymethod() {return proxy.add(35, 7);
}
49
Client Side
Annotations Used in JAX-WS
• JSR 181: Web Services Metadata for the Java Platform
• JSR 222: Java Architecture for XML Binding (JAXB)
• JSR 224: Java API for XML Web Services (JAX-WS)
• JSR 250: Common Annotations for the Java Platform
@WebService• Marks a Java class as implementing a
Web Service, or a Java interface as defining a Web Service interface.
• Attributes> endpointInterface> name> portName> serviceName> targetNamespace> wsdlLocation
@WebMethod
• Customizes a method that is exposed as a Web Service operation
• The method is not required to throw java.rmi.RemoteException.
• Attributes> action> exclude> operationName
@WebParam
• Customizes the mapping of an individual parameter to a Web Service message part and XML element.
• Attributes> header> mode> name> partName> targetNamespace
@WebResult
• Customizes the mapping of the return value to a WSDL part and XML element.
• Attributes> header> name> partName> targetNamespace
JAX-WS - Provider
• Web Service endpoints may choose to work at the XML message level by implementing the Provider interface.
• The endpoint accesses the message or message payload using this low-level, generic API
• Implement one of the following> Provider<Source>> Provider<SOAPMessage>> Provider<DataSource>
JAX-WS - Provider
JAX-WS - Dispatch
• Web service client applications may choose to work at the XML message level by using the Dispatch<T> APIs.
• The javax.xml.ws.Dispatch<T> interface provides support for the dynamic invocation of service endpoint operations.
• Similar to Provider on server side
JAX-WS - Dispatch
59
Resources
Some contents are borrowed from the presentation slides of Sang Shin, Java™ Technology Evangelist, Sun Microsystems, Inc.
Web Services and Java, Elsa Estevez, Tomasz Janowski and Gabriel Oteniya, UNU-IIST, Macau