Your SlideShare is downloading. ×
  • Like
Interoperable Web Services with JAX-WS
Upcoming SlideShare
Loading in...5
×

Thanks for flagging this SlideShare!

Oops! An error has occurred.

×

Now you can save presentations on your phone or tablet

Available for both IPhone and Android

Text the download link to your phone

Standard text messaging rates apply

Interoperable Web Services with JAX-WS

  • 4,325 views
Published

JAX-WS Java API for XML Web Services

JAX-WS Java API for XML Web Services

Published in Technology
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Be the first to comment
No Downloads

Views

Total Views
4,325
On SlideShare
0
From Embeds
0
Number of Embeds
1

Actions

Shares
Downloads
483
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