Your SlideShare is downloading. ×

Interoperable Web Services with JAX-WS

4,641

Published on

JAX-WS Java API for XML Web Services

JAX-WS Java API for XML Web Services

Published in: Technology
0 Comments
6 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total Views
4,641
On Slideshare
0
From Embeds
0
Number of Embeds
1
Actions
Shares
0
Downloads
504
Comments
0
Likes
6
Embeds 0
No embeds

Report content
Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
No notes for slide
  • Transcript

    • 1. Metro: JAX-WS, WSIT and REST
      • Carol McDonald
        • Java Architect
          • Sun Microsystems
    • 2. About the Speaker
      • Carol cDonald:
        • Java Architect at Sun Microsystems
        • Before Sun, worked on software development of:
          • Application to manage car Loans for Toyota (>10 million loans)
          • Pharmaceutical Intranet apps ( Roche Switzerland)
          • Telecom Network Mgmt ( Digital France)
          • X.400 Email Server ( IBM Germany)
    • 3. Agenda
      • Metro
        • JAX-WS
        • WSIT
      • REST:
        • JAX-RS
    • 4. Project Metro
      • Project Metro = Java.net project for GlassFish Web Services stack
        • http://metro.dev.java.net
        • Can also be used outside of Glassfish
      • key components of Metro:
        • JAX-WS and WSIT
    • 5. http://metro.dev.java.net
    • 6. http://glassfish.dev.java.net
    • 7. JAX-WS
      • In addition to Glassfish,
      • JAX_WS can be used as WS stack with JBoss, WebLogic Server 10, Apache Tomcat , Jetty , and Java SE , TmaxSoft JEUS 6, Spring
    • 8. Sun’s Web Services Stack Metro: JAX-WS , WSIT JAXB = Java Architecture for XML Binding | JAX-WS = Java APIs for XML Web Services NetBeans JAX-WS Tooling Transactions Reliable- Messaging Security Metadata WSDL Policy Core Web Services HTTP TCP SMTP JAXB, JAXP, StaX JAX-WS WSIT tools transport xml
    • 9. Agenda
      • Metro
        • JAX-WS
        • WSIT
      • REST
    • 10. JAX-WS
      • easy to use J ava A PI for X ML W eb S ervices
        • Replaces JAX-RPC
      • Just Add @ annotation to Plain Old Java Object (POJO)
        • XML Descriptor-free programming
      • Layered Architecture
      • SOAP 1.2 (document/literal)
      • Uses JAXB for data binding
      • Part of Java SE 6 and Java EE 5 platforms
    • 11. JAX-WS Standards
      • JSR 224 Expert Group:
        • ATG BEA Capgemini Developmentor IBM Intalio IONA Motorola Nokia Novell NTT Oracle Pramati Red Hat SAP SeeBeyond Sonic Software Sun Tmax Trifork WebMethods
    • 12. Developing a Web Service Starting with a Java class war or ear @WebService POJO Implementation class Servlet-based or Stateless Session EJB Optional handler classes Packaged application (war/ear file) You develop Service contract WSDL Deployment creates JAXB and JAX-WS files needed for the service
    • 13. Example: Servlet-Based Endpoint @WebService public class CalculatorWS { public int add (int a, int b) { return a+b; } }
      • All public methods become web service operations
      • WSDL/Schema generated at deploy time automatically
      • Default values for WSDL service name, etc.
    • 14. Service Description default mapping
      • Java mapping -> WSDL:
      public class CalculatorWS { public int add ( int i , int j ){ } }
      • < portType name=&quot; CalculatorWS &quot;>
      • < operation name=&quot; add &quot;>
      • < input message=&quot; tns:add &quot; />
      • < output message=&quot; tns:addResponse &quot; />
      • < /operation >
      • < /portType >
      PORT TYPE = ABSTRACT INTERFACE OPERATION = METHOD MESSAGE = PARAMETERS AND RETURN VALUES
    • 15. Customizability via Annotations @WebService( name= &quot;Calculator&quot;, portName= &quot;CalculatorPort&quot;, serviceName= &quot;CalculatorService&quot;, targetNamespace= &quot;http://calculator.org&quot; ) public class CalculatorWS { @WebMethod (operationName=”addCalc”) public int add ( @WebParam (name=”param1”) int a, int b) { return a+b; } }
    • 16. Example: EJB 3.0-Based Endpoint
      • It's a regular EJB 3.0 component so it can use EJB features
        • Transactions, security, interceptors ...
      @WebService @Stateless public class Calculator { public int add(int a, int b) { return a+b; } }
    • 17. Developing a Web Service Starting with a WSDL wsimport tool @WebService SEI Interface @WebService( endpointInterface =&quot;generated Service&quot;) Implementation class Servlet-based or Stateless Session EJB endpoint model Packaged application (war/ear file) Service contract WSDL Generates You develop
    • 18. Generating an Interface from WSDL
      • WSDL->Java generation:
      @WebService public interface BankService { @WebMethod public float getBalance (String acctID,String acctName) throws AccountException; }
      • < portType name=&quot; BankService &quot;>
      • < operation name=&quot; getBalance &quot;>
      • <input message=&quot;tns:getBalanceInput&quot; />
      • <output message=&quot;tns:getBalanceOutput&quot; />
      • <fault name=&quot;AccountException&quot;
      • message=&quot;tns:AccountException&quot;/>
      • </operation>
      • </portType>
      PORT TYPE = INTERFACE OPERATION = METHOD MESSAGE = PARAMETERS
    • 19. Implementing a Web Service for a Generated Interface @WebService( endpointInterface =&quot; generated.BankService &quot;, serviceName =&quot; BankService &quot;) public class BankServiceImpl implements BankService { ... public float getBalance (String acctID, String acctName) throws AccountException { // code to get the account balance return theAccount.getBalance(); } }
    • 20. Server Side CalculatorWS Web Service E ndpoint Listener Soap binding @Web Service Soap request publish 1 2 3 4 5 6 7 8
    • 21. Runtime:
        • Java types WSDL, XML Schema
      JAX-WS uses JAXB for data binding
          • Runtime: JAXB un/marshalls the payload
      WSDL XML Schema XML Document unmarshal marshal Generate for development Java Objects follows
    • 22. Add Parameter
      • Next slide Look at schema and JAXB class for add parameter
      public class CalculatorWS { public int add ( int i , int j ){ } }
      • < portType name=&quot; CalculatorWS &quot;>
      • < operation name=&quot; add &quot;>
      • < input message=&quot; tns:add &quot; />
      • < output message=&quot; tns:addResponse &quot; />
      • < /operation >
      • < /portType >
      PORT TYPE = ABSTRACT INTERFACE OPERATION = METHOD MESSAGE = PARAMETERS AND RETURN VALUES
    • 23. JAXB XML schema to Java mapping
      • package calculator.jaxws;
      • import javax.jws.WebService;
      • @XmlRootElement (name = &quot;add&quot; )
      • public class add {
      • @XmlElement (name = &quot; i &quot;)
      • private int i ;
      • @XmlElement (name = &quot; j &quot;)
      • private int j ;
      • public int getI () {
      • return this.i;
      • }
      • public void setI (int i){
      • this.i = i;
      • }
      • }
      • <?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot; standalone=&quot;yes&quot;? >
      • <xs: schema version=&quot;1.0&quot; >
      • <xs: element name=&quot; add &quot; type=&quot;tns:add&quot;/>
      • <xs: element name=&quot; addResponse &quot; type=&quot;tns:addResponse&quot;/>
      • <xs: complexType name=&quot; add &quot;>
      • <xs: sequence >
      • <xs: element name=&quot; i &quot;
      • type=&quot;xs: int &quot;/>
      • <xs: element name=&quot; j &quot;
      • type=&quot;xs: int &quot;/>
      • </xs:sequence>
      • </xs:complexType>
      • </xs:schema>
    • 24. demo
    • 25. Client-Side Programming wsimport tool @WebService Dynamic Proxy Service contract WSDL Generates You develop Client which calls proxy
    • 26. Example: Java SE-Based Client
      • code is fully portable
        • CalculatorService is defined by the specification
        • Internally it uses a delegation model
      CalculatorService svc = new CalculatorService() ; Calculator proxy = svc. getCalculatorPort(); int answer = proxy.add (35, 7); Factory Class Get Proxy Class Business Interface
    • 27. WSDL Java mapping
      • package calculator;
      • import javax.jws.WebService;
      • @WebService
      • public class CalculatorWS {
      • public int add ( int i, int j) {
      • return i + j;
      • }
      • }
      • < portType name=&quot; CalculatorWS &quot;>
      • < operation name=&quot; add &quot;>
      • <input message=&quot;tns:add&quot;/>
      • <output message=&quot;tns:addResponse&quot;/>
      • </operation>
      • </portType>
      • < binding name=&quot;CalculatorWSPortBinding&quot; type=&quot;tns: CalculatorWS &quot;>
      • <soap:binding transport=&quot;soap/http&quot; style=&quot;document&quot;/>
      • < operation name=&quot; add &quot;>
      • ....
      • </operation>
      • </binding>
      • < service name=&quot; CalculatorWSService &quot;>
      • < port name=&quot; CalculatorWSPort &quot; binding=&quot;tns:CalculatorWSPortBinding&quot;>
      • < soap:address location =
      • &quot;http://CalculatorWSService&quot; />
      • </port>
      • </service>
      Factory Class Proxy Class Business Interface
    • 28. WSDL to Dynamic Proxy mapping Service Port PortType Binding 1..n 1 1 1..n 1..n
        • CalculatorWSPort
        • CalculatorWS
      • Class
        • CalculatorWSService
      Add Method Parameters Business Interface Factory Class Proxy Class Operation Message
    • 29. Example: Java EE Servlet Client No Java Naming and Directory Interface™ API ! public class ClientServlet extends HttpServlet { @WebServiceRef (wsdlLocation = &quot;http://.../CalculatorWSService?wsdl&quot;) private CalculatorWSService service; protected void processRequest( HttpServletRequest req, HttpServletResponse resp) { CalculatorWS proxy = service.getCalculatorWSPort(); int i = 3; j = 4; int result = proxy.add (i, j); . . . } } Get Proxy Class Business Interface Factory Class
    • 30. demo
    • 31. Client Side CalculatorWS Web Service extends Dynamic Proxy S ervice E ndpoint I nterface Invocation Handler JAXB JAXB return value parameters getPort 1 2 3 6 Soap request Soap response 4 5
    • 32. SOAP Request
      • <?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot;?>
      • <S:Envelope xmlns:S=&quot;http://schemas.xmlsoap.org/soap/envelope/&quot;>
      • <S:Header/>
      • <S:Body>
      • <ns2: add xmlns:ns2=&quot;http://calculator.me.org/&quot;>
      • <i>4</i>
      • <j>3</j>
      • </ns2:add>
      • </S:Body>
      • </S:Envelope>
      http://localhost:8080/CalculatorWSApplication/CalculatorWSService
    • 33. SOAP Response
      • <?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot;?>
      • <S:Envelope xmlns:S=&quot;http://schemas.xmlsoap.org/soap/envelope/&quot;>
      • <S:Body>
      • <ns2: addResponse xmlns:ns2=&quot;http://calculator.me.org/&quot;>
      • <return>7</return>
      • </ns2:addResponse>
      • </S:Body>
      • </S:Envelope>
    • 34. JAX-WS Layered Architecture Calls Into Implemented on Top of Messaging Layer: Dispatch/Provider Application Code Strongly-Typed Layer: @ Annotated Classes
          • Upper layer Easy to use with annotations
          • Lower layer, API-based, more control
            • For advanced scenarios
    • 35. Lower Level
      • Lower layer, API-based, more control:
      • Client XML API: Dispatch Interface
        • one-way and asynch calls available
      • Server XML API: Provider Interface:
        • Can use JAXB, JAXP, SAAJ to get message contents
      • Message or Payload access
      • May be used to create RESTful clients/services
    • 36. Client-side Messaging API: Dispatch Interface one-way and asynch calls available: // T is the type of the message public interface Dispatch < T > { // synchronous request-response T invoke(T msg); // async request-response ( polled for completion) Response<T> invokeAsync(T msg); Future<?> invokeAsync(T msg, AsyncHandler<T> h); // one-way void invokeOneWay(T msg); }
    • 37. Client-side Example: Dispatch Using PAYLOAD import javax.xml. transform.Source ; import javax.xml. ws.Dispatch ; private void invokeAddNumbers(int a,int b) { Dispatch <Source> sourceDispatch = service.createDispatch (portQName, Source.class, Service.Mode.PAYLOAD ); StreamSource request =new StringReader(xmlString); Source result = sourceDispatch.invoke (request)); String xmlResult = sourceToXMLString(result); }
    • 38. Server-side Messaging API: Provider // T is the type of the message public interface Provider< T > { T invoke(T msg, Map<String,Object> context); }
      • Message or Payload access
      • Use @ServiceMode to select a mode for the message type
    • 39. Server-sideExample: Payload Mode, No JAXB @ServiceMode(Service.Mode. PAYLOAD ) public class MyProvider implements Provider < Source > { public Source invoke( Source request, Map<String,Object> context) { // process the request using XML APIs, e.g. DOM Source response = ... // return the response message payload return response; } }
    • 40. JAX-WS Commons https://jax-ws-commons.dev.java.net/
      • Convenient Extensions, utility code , useful Plugins :
      • Spring support
      • Stateful Web Service
      • Multiple Service Instances
        • HTTP Session-scope service
        • Thread scope service (thread local)
      • JSON Encoding
      • Server-Side Asynchrony
    • 41. JAX-WS 2.1 Performance vs Axis 2.1
    • 42. Agenda
      • Metro
      • JAX-WS Standards
      • WSIT
      • REST
    • 43. WSIT: Web Services Interoperability Technology Complete WS-* stack Enables interoperability with Microsoft .NET 3.0 WCF
    • 44. Sun’s Web Services Stack Metro: JAX-WS , WSIT JAXB = Java Architecture for XML Binding | JAX-WS = Java APIs for XML Web Services NetBeans JAX-WS Tooling Transactions Reliable- Messaging Security Metadata WSDL Policy Core Web Services HTTP TCP SMTP JAXB, JAXP, StaX JAX-WS WSIT tools transport xml
    • 45. WSIT (Web Services Interoperability Technology) Project Tango Features
      • Enables interoperability with Microsoft .NET 3.0
      • Bootstrapping communication
      • End-to-end reliability
      • Atomic transactions
      • End-to-end security
      • Trust
      • Optimized security
    • 46. Metro WSIT Reliable Messaging
    • 47. WS-ReliableMessaging JAX-WS/WCF Server Runtime JAX-WS/WCF Client Runtime Application Message Ack Protocol Message buffer buffer
          • RMSource handles sending and re-sending
          • RMDestination handles reconstructing the stream of messages
    • 48.
      • Brings reliability to SOAP (protocol) layer
      • Transparent to application
      • Delivery assurance
        • At least once
        • At most once
        • In order
      End-to-End Reliability WS-ReliableMessaging
    • 49. Configuration with NetBeans
    • 50. Reliable Transport Alternatives
      • SOAP messages are transport agnostic
        • Change the transport, change the binding
      • Metro Transports (Htttp standard):
        • JMS
        • SMTP
        • SOAP over TCP
        • For more information
        • https://jax-ws.dev.java.net/transport.html
    • 51. Metro WSIT Transactions
    • 52. Java™ Transaction Service Application Server Transaction Service Application UserTransaction interface Resource Manager XAResource interface Transactional operation TransactionManager Interface Resource EJB Transaction context
    • 53.
      • WS-AtomicTransaction defines set of transaction coordination protocols
        • Supports two phase commit for web service operations:
          • all operations invoked within an atomic transaction succeed or are all rolled back .
      • WS-Coordination protocols coordinate the actions of distributed web services
        • For Commit: Coordinator asks if each system is ready to complete
          • If all concur, coordinator tells systems to complete
          • Otherwise, coordinator tells systems to rollback
      WSIT Transaction coordination
    • 54. WSIT and WCF Co-ordinated transaction 4a: WS-AT Protocol 3: TxnCommit 2c: WS-Coor Protocol 2b: Register 4b: XA Protocol 4b: XA Protocol 2a: Invoke 1: TxnBegin
    • 55.
      • an Atomic Transaction Context is created the first time a transacted Web service operation is invoked within a JTA transaction scope
        • 01 @Resource
        • 02 javax.transaction.UserTransaction ut;
        • 03
        • 04 ut.begin();
        • 05 bankWebService.makeWithdrawl();
        • 06 ...
        • 07 ut.commit();.
      WSIT Support on Transaction
        • Transaction
        • Context
        • created
    • 56. Transactions in Action @WebService @Stateless public class Wirerer { @TransactionAttribute(REQUIRED) void wireFunds(...) throws ... { websrvc1.withdrawFromBankX(...); websrvc2.depositIntoBankY(...); } }
    • 57. Metro WSIT Security
    • 58. Digital Certificate
      • Identity data signed by a Certification Authority. Provides a Trusted source of identification.
      Version # Serial # Signature Algorithm Issuer Name Validity Period Subject Name Subject Public Key Issuer Unique ID Subject Unique ID Extensions Digital Signature X.509 Certificate
      • Digital ID
      • Electronic Proof of Identity
      • Issued and signed by Certifying Authority
      • Public, Private keys
      • Makes security protocols work
        • SSL
      CA Authorized
    • 59. Encryption Receiver Public Key Receiver Private Key
        • XML Encryption (data confidentiality)
          • Only the private key can decrypt
      Asymmetric keys Public Encryption Original Document Encrypted Document Private Decryption Original Document Sender Receiver
    • 60. Digital Signature Transform Transform Sender Sender's Private Key Sender's Public Key
        • XML Signature (data integrity)
        • Bind the sender’s identity to an XML document
      Private Encryption XML data Signature Public Decryption XML data Receiver
    • 61. SSL Key Exchange Server Client connects Browser generates symetric session key Use session key to Encrypt data
      • Browser and Server use Session Key B to encrypt all data exchanged over the Internet
    • 62. Security
        • Before WS-Security
        • Only SSL:
        • WS-Security
      • Security at SOAP (protocol) layer
      • Fine granularity possible
        • Only sign/encrypt credit card # (e.g., XML subtree)
      • Works on non-TCP/IP transports
      • Integrity, Confidentiality, Auth
      • W3C XML Signature/Encryption
      • SSL/HTTPS
      • Security at transport layer
      • Point-to-point
      • Encrypts session
    • 63. WS-Security: SOAP Message Security
      • WS-Security defines:
        • Encrypting and signing message parts:
          • XML Signature and XML Encryption in SOAP Header
        • How to pass security tokens
        • (token=security information identifies the msg sender )
          • UserName/Password token
          • X.509 certificates
          • SAML
          • Kerberos tickets
      SOAP Envelope SOAP Envelope Header SOAP Envelope Body WS-Security Header Security Token Business Payload
    • 64. request data response data authentication data SAML assertions https/ssl (optional) digital certificate Security Architecture Message Level Security (signature and encryption) web services client SOAP client signed & encrypted data web services server SOAP server SOAP service security server authentication authorization signature validation data encryption digital certificate request data data decryption/ encryption signature validation
    • 65. Security
        • Before WS-Security
        • WS-Security
      • Security at SOAP message layer
      • XML Signature/Encryption
      • Only sign/encrypt part of msg
      • Works on different transports
      • Work with intermediaries
      • SSL/HTTPS
      • Security at transport layer
      • All or nothing granularity
      • Point-to-point
    • 66.
      • WS-Trust framework for:
        • Issue, Validate, Exchange security tokens used by WS-Security
        • Establish and broker trust relationships
      Trust
    • 67.
      • WS-Trust
        • Issue
      Trust Trust Relation Identity Store WS Client WS Service Security Token Service 1) WS-Trust Issue() 2) token returned <S11:Envelope xmlns:S11=&quot;...&quot; xmlns:wsse=&quot;...&quot;> <S11:Header> <wsse:Security> .Security Token = AuthN+AuthZ+signatures </wsse:Security> </S11:Header> <S11:Body wsu:Id=&quot;MsgBody&quot;> .. App data </S11:Body> </S11:Envelope>
    • 68.
      • WS-Trust
        • Exchange
      Trust
    • 69.
      • WS-Trust
        • Validate
        • Establish and broker trust relationships
      Trust .NET service Java client
    • 70. .NET Trust Authority Trust Authority Sun Managed Microsoft Managed Project GlassFish ™ Retail Quote Service Project GlassFish Wholesale Quote Service .Net Wholesale Service Java EE Platform With Project Tango WCF Client Java Client WS-Trust WS-T Trust QOS Security Interop.
    • 71.
      • How to Establish a Secure SESSION
        • For multiple message exchanges
        • Create shared symmetric session key
        • Optimizes processing
      WS-SecureConversation Optimized Security security context token Use generated symmetric session key
    • 72. WS-Policy <wsdl…> <policy…> … </policy> … </wsdl> <wsdl…> <policy…> <security-policy> … </security-policy> <transaction-policy> … </transaction-policy> <reliability-policy> … </reliability-policy> … </policy> … </wsdl>
    • 73. Metro: Bootstrapping
    • 74. WS-Metadata Exchange Bootstrapping Communication
      • < mex >
      • < /mex >
      • < wsdl …>
      • < policy …>
      • </policy>
      • </wsdl>
      • WS-MetadataExchange supports:
            • discovery of WSDL documents
            • WS-Policy settings
      WS-MetadataExchange WS-Transfer/MEX WSDL
    • 75. Bootstrapping Communication JAX-WS wsimport WCF or WSIT-based Service Creates Client Proxy WS-Transfer/MEX WSDL WS-MetadataExchange
      • WS-MetadataExchange protocol supports:
            • discovery of WSDL documents
            • metadata exchange is handled by wsimport utility of WSIT and is transparent to developers
    • 76. Proxy Generation Bootstrapping Communication <wsdl…> <policy…> < security-policy > … </security-policy> < transaction-policy > … </transaction-policy> < reliability-policy > … </reliability-policy> … </policy> … </wsdl>
    • 77. End-to-End Messaging
    • 78.
      • No runtime APIs for WSIT
      • Use JAX-WS and EJB APIs
      • Developer/deployer supplies config file to enable/control Project Tango components
      • Config file written by hand or produced by Project Tango NetBeans software module
      WSIT (Project Tango) Programming Model
    • 79. WSIT NetBeans Module By Hand Other IDEs 109 Deployment META-INF/wsit-*.xml Service Servlet Deployment WEB-INF/wsit-*.xml WSIT Server-Side Programming Model WSIT Config File wsit-*.xml
      • No runtime APIs for WSIT
      • Use JAX-WS and EJB APIs
      • Config file written by hand or produced by NetBeans enable/control WSIT
    • 80. WSIT Client Programming Model 109 Service Wsimport Client Artifacts WSIT Config File wsit-*.xml WSIT NetBean Module By Hand Other IDEs MEX/ GET WDSL MEX/ GET
    • 81.  
    • 82. Agenda
      • Metro
      • JAX-WS Standards
      • WSIT
      • REST with JAX-RS
    • 83. API: JAX-RS
      • Standardized in the JSR 311
        • Will be included in Java EE 6
      • EG members
        • Alcatel-Lucent, BEA, Day Software, Fujitsu, innoQ, Nortel, Red Hat
        • Experts in Atom, AtomPub, WebDAV, HTTP, REST, Restlet
      • Group started in April 2007
    • 84. REpresentational State Transfer Get URI Response XML data = RE presentational S tate T ransfer
    • 85. REST Tenets
      • RE presentational S tate T ransfer
      • Resources (nouns)
        • Identified by a URI , For example:
          • http://www.parts-depot.com/parts
      • Methods (verbs)
        • Small fixed set:
          • Create, Read, Update, Delete
      • State Representations
        • data and state transferred between client and server
        • XML, JSON...
    • 86. HTTP Example Request GET /customers HTTP/1.1 Host: media.example.com Accept : application/ xml Response HTTP/1.1 200 OK Date: Tue, 08 May 2007 16:41:58 GMT Server: Apache/1.3.6 Content-Type : application/xml; charset=UTF-8 <?xml version=&quot;1.0&quot;?> <customers xmlns=&quot;…&quot;> <customer>…</customer> … </customers>
        • Resource
        • Method
        • Representation
    • 87. Verb Noun Create POST Collection URI Read GET Collection URI Read GET Entry URI Update PUT Entry URI Delete DELETE Entry URI CRUD to HTTP method mapping 4 main HTTP methods CRUD methods
    • 88. Example
      • Customers
          • /customers/
          • /customers/{id}/
      • URI Templates are URIs with variables within the URI syntax.
    • 89. Customer Resource Using Servlet API public class Artist extends HttpServlet { public enum SupportedOutputFormat {XML, JSON}; protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { String accept = request.getHeader(&quot;accept&quot;).toLowerCase(); String acceptableTypes[] = accept.split(&quot;,&quot;); SupportedOutputFormat outputType = null; for (String acceptableType: acceptableTypes) { if (acceptableType.contains(&quot;*/*&quot;) || acceptableType.contains(&quot;application/*&quot;) || acceptableType.contains(&quot;application/xml&quot;)) { outputType=SupportedOutputFormat.XML; break; } else if (acceptableType.contains(&quot;application/json&quot;)) { outputType=SupportedOutputFormat.JSON; break; } } if (outputType==null) response.sendError(415); String path = request.getPathInfo(); String pathSegments[] = path.split(&quot;/&quot;); String artist = pathSegments[1]; if (pathSegments.length < 2 && pathSegments.length > 3) response.sendError(404); else if (pathSegments.length == 3 && pathSegments[2].equals(&quot;recordings&quot;)) { if (outputType == SupportedOutputFormat.XML) writeRecordingsForArtistAsXml(response, artist); else writeRecordingsForArtistAsJson(response, artist); } else { if (outputType == SupportedOutputFormat.XML) writeArtistAsXml(response, artist); else writeArtistAsJson(response, artist); } } private void writeRecordingsForArtistAsXml(HttpServletResponse response, String artist) { ... } private void writeRecordingsForArtistAsJson(HttpServletResponse response, String artist) { ... } private void writeArtistAsXml(HttpServletResponse response, String artist) { ... } private void writeArtistAsJson(HttpServletResponse response, String artist) { ... } } Don't try to read this, this is just to show the complexity :)
    • 90. Server-side API Wish List JAX-RS = Easier REST Way
      • High level, Declarative
        • Uses @ annotation in POJOs
    • 91. Clear mapping to REST concepts
      • Resources : what are the URIs ?
        • @Path(&quot;/customers/&quot;)
        • @Path(&quot;{id}/&quot;)
      • Methods : what are the HTTP methods ?
          • @GET
          • public XXX find()
      • Representations : what are the formats ?
        • @ConsumeMime(&quot;application/xml&quot;)
        • @ProduceMime(&quot;application/json&quot;)
        • (New types can be defined)
    • 92. POJO @Path(&quot;/customers/&quot;) public class Customers { @ProduceMime(&quot;application/xml&quot;) @GET Customers get() { // return list of artists } @Path(&quot;{id}/&quot;) @GET public Customer getCustomer(@PathParam(&quot;id&quot;) Integer id) { // return artist } } responds to the URI http://host/customers/ responds with XML responds to HTTP GET URI http://host/customers/id
    • 93. Customer Service Overview Customer Database Web container (GlassFish™) + REST API Browser (Firefox) HTTP
    • 94. Summary
      • Metro Integrated with GlassFish Application Server
        • JAX-WS
          • easier to use and more powerful than JAX-RPC
          • part of the Java EE 5 and Java SE 6 platforms
          • Layered design hides the complexity
            • Extensible at the protocol and transport level
        • WSIT
          • Makes Metro interoperable with other WS-* stacks
          • No new APIs , easy with NetBeans plugin
      • JAX-RS
        • High-level declarative programming model for REST
    • 95.
        • Building a Java EE 5 Open Source
        • Application Server
      Source: Sun 2/06—See website for latest stats Project GlassFish Simplifying Java application Development with Java EE 5 technologies Includes JWSDP, EJB 3.0, JSF 1.2, JAX-WS and JAX-B 2.0 Supports > 20 frameworks and apps Basis for the Sun Java System Application Server PE 9 Free to download and free to deploy Over 1200 members and 200,000 downloads Over 1200 members and 200,000 downloads Integrated with NetBeans java.sun.com/javaee/GlassFish
    • 96. http://blogs.sun.com/theaquarium
    • 97. For More Information
      • METRO
        • http://metro.dev.java.net
      • JAX-WS
        • http://jax-ws.dev.java.net
      • WSIT
        • http://wsit.dev.java.net
      • REST
        • http://jersey.dev.java.net
      • Glassfish
        • http://glassfish.dev.java.net
    • 98.
      • Carol McDonald
        • [email_address]
      Metro: JAX-WS, WSIT and REST

    ×