KEMBAR78
Java Web Services [4/5]: Java API for XML Web Services | PDF
Topic 4

  Java API for XML Web Services



Assoc.Prof. Dr. Thanachart Numnonda
       www.imcinstitute.com
            August 2010
Agenda
 Java APIs   for Web Services
 JAX-RPC

 JAX-WS




                                 2
Java APIs for Web Services




                             3
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)
                                                                     4
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



                                                     5
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.

                                                                6
SAAJ (SOAP with Attachments
         API 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))
                                                    7
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
                                                         8
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

                                              9
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)


                                                  10
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)

                                                          11
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)




                                          12
Sun’s Web Services Stack




                           13
JAX-RPC




          14
Remote Procedure Call (RPC)
                             Request

                            Response
        Client System                          Server System

   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
Remote Procedure Calls

Client       Interface                  Interface         Servant

               Stub                     Skeleton



             Run Time      Protocol     Run Time

         
           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


                     rmic compiler

  Client                               Remote Object
                                       Implementation



RMI Client                               RMI Server
  Stub                                    Skeleton

           Java Remote Method Protocol (JRMP) is
                   On-the-wire protocol
RPC Example - JAX-RPC
Common Interface
   Service is described in IDL (Interface Description
    Language)
      IDL ofCORBA 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
    JAX-RPC                                             JAX-RPC
      Client                WSDL Document            Service Endpoint
 Generated        JavaWSDL             WSDLJava
   Code

Container                                                   Container


      Client-side JAX-RPC                   Server-side JAX-RPC
        Runtime System                        Runtime System


                                SOAP

                                HTTP
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
       Interfaces (java.rmi.Remote type)
       Must follow JAX-RPC conventions


       Implementation classes
       Servlet-based endpoint model
       Optional handler and serializer classes

tool
               WSDL      Service contract

       Packaged application (war file)
JAX-RPC : Web Service Endpoint
                                  JAX-RPC
                               Service Endpoint
          WSDL<-->Java


  WSDL Document           Container


                         Server-Side
                          JAX-RPC
                           Runtime
                           System
             SOAP

             HTTP
JAX-WS




         26
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
                                                    27
JAX-WS Layered Architecture




                              28
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

                                                   29
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

                                               30
Start with a Java Class




                          31
Server-Side Programming Model: POJO

1    Write a POJO implementing the service
2    Add @WebService annotation to it
3    Build and Deploy the application
    WSDL is automatically generated at runtime
1    Point your clients at the WSDL
    e.g. http://myserver/myapp/MyService?WSDL




                                                 32
Example 1: Servlet-Based Endpoint
@WebService
public 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
                                                       33
Service Description Default Mapping
• Java mapping => WSDL




                                       34
Example 2: EJB-Based Endpoint
@WebService
@Stateless
public 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...

                                                        35
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 ...
    }
}




                                                    36
Start with a WSDL file




                         37
Generating an interface from WSDL
• WSDL => Java generation




                                      38
Implementing a Web Service from
     a Generated Interface




                                  39
Server Side Web Service




                          40
JAX-WS uses JAXB for Data Binding




                                    41
add() Parameter : Example




                            42
JAXB XML Schema to Java Mapping




                                  43
Client Side Programming




                          44
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


                                                       45
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



                                                   46
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 the
    appropriate type
•   No JNDI needed
•   Invoke any remote operations
                                                      47
Example : Java EE-Based Client

@Stateless
public class MyBean {
   // Resource injection
   @WebServiceRef(CalculatorService.class)
   Calculator proxy;

    public int mymethod() {
       return proxy.add(35, 7);
}




                                             48
Client Side




              49
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
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




                                                      59
Thank you

   thananum@gmail.com
www.facebook.com/imcinstitute
   www.imcinstitute.com



                                60

Java Web Services [4/5]: Java API for XML Web Services

  • 1.
    Topic 4 Java API for XML Web Services Assoc.Prof. Dr. Thanachart Numnonda www.imcinstitute.com August 2010
  • 2.
    Agenda  Java APIs for Web Services  JAX-RPC  JAX-WS 2
  • 3.
    Java APIs forWeb Services 3
  • 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) 4
  • 5.
    Java API forXML 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 5
  • 6.
    Java API forXML 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. 6
  • 7.
    SAAJ (SOAP withAttachments API 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)) 7
  • 8.
    JAXR • Standard JavaAPI 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 8
  • 9.
    JAX-RPC • XML datatypes 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 9
  • 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) 10
  • 11.
    JAXM • JAXM isnot 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) 11
  • 12.
    Java APIs forWeb 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) 12
  • 13.
  • 14.
  • 15.
    Remote Procedure Call(RPC) Request Response Client System Server System  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
  • 16.
    Remote Procedure Calls Client Interface Interface Servant Stub Skeleton Run Time Protocol Run Time  Common Interface between client and Server  Stub for client, Skeleton/Tie for server  On-the-wire protocol needs to be agreed upon
  • 17.
    RPC Example –Java RMI <<Interface>> Java Remote Interface rmic compiler Client Remote Object Implementation RMI Client RMI Server Stub Skeleton Java Remote Method Protocol (JRMP) is On-the-wire protocol
  • 18.
  • 19.
    Common Interface  Service is described in IDL (Interface Description Language)  IDL ofCORBA 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
  • 20.
    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
  • 21.
    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
  • 22.
    JAX-RPC Architecture JAX-RPC JAX-RPC Client WSDL Document Service Endpoint Generated JavaWSDL WSDLJava Code Container Container Client-side JAX-RPC Server-side JAX-RPC Runtime System Runtime System SOAP HTTP
  • 23.
    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
  • 24.
    Developing a WebService Interfaces (java.rmi.Remote type) Must follow JAX-RPC conventions Implementation classes Servlet-based endpoint model Optional handler and serializer classes tool WSDL Service contract Packaged application (war file)
  • 25.
    JAX-RPC : WebService Endpoint JAX-RPC Service Endpoint WSDL<-->Java WSDL Document Container Server-Side JAX-RPC Runtime System SOAP HTTP
  • 26.
  • 27.
    Quick overview ofJAX-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 27
  • 28.
  • 29.
    What Does ItMean? • 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 29
  • 30.
    Two ways tocreate 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 30
  • 31.
    Start with aJava Class 31
  • 32.
    Server-Side Programming Model:POJO 1 Write a POJO implementing the service 2 Add @WebService annotation to it 3 Build and Deploy the application WSDL is automatically generated at runtime 1 Point your clients at the WSDL e.g. http://myserver/myapp/MyService?WSDL 32
  • 33.
    Example 1: Servlet-BasedEndpoint @WebService public 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 33
  • 34.
    Service Description DefaultMapping • Java mapping => WSDL 34
  • 35.
    Example 2: EJB-BasedEndpoint @WebService @Stateless public 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... 35
  • 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 ... } } 36
  • 37.
    Start with aWSDL file 37
  • 38.
    Generating an interfacefrom WSDL • WSDL => Java generation 38
  • 39.
    Implementing a WebService from a Generated Interface 39
  • 40.
    Server Side WebService 40
  • 41.
    JAX-WS uses JAXBfor Data Binding 41
  • 42.
  • 43.
    JAXB XML Schemato Java Mapping 43
  • 44.
  • 45.
    Java SE ClientSide 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 45
  • 46.
    Example : JavaSE-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 46
  • 47.
    Java EE ClientSide 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 the appropriate type • No JNDI needed • Invoke any remote operations 47
  • 48.
    Example : JavaEE-Based Client @Stateless public class MyBean { // Resource injection @WebServiceRef(CalculatorService.class) Calculator proxy; public int mymethod() { return proxy.add(35, 7); } 48
  • 49.
  • 50.
    Annotations Used inJAX-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
  • 51.
    @WebService • Marks aJava class as implementing a Web Service, or a Java interface as defining a Web Service interface. • Attributes > endpointInterface > name > portName > serviceName > targetNamespace > wsdlLocation
  • 52.
    @WebMethod • Customizes amethod that is exposed as a Web Service operation • The method is not required to throw java.rmi.RemoteException. • Attributes > action > exclude > operationName
  • 53.
    @WebParam • Customizes themapping of an individual parameter to a Web Service message part and XML element. • Attributes > header > mode > name > partName > targetNamespace
  • 54.
    @WebResult • Customizes themapping of the return value to a WSDL part and XML element. • Attributes > header > name > partName > targetNamespace
  • 55.
    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>
  • 56.
  • 57.
    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
  • 58.
  • 59.
    Resources  Some contentsare 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 59
  • 60.
    Thank you thananum@gmail.com www.facebook.com/imcinstitute www.imcinstitute.com 60