SAGE Computing Services Customised Oracle Training Workshops and Consulting JDeveloper 11g JAX-WS web services:...as easy as 1-2-3: XSD, WSDL, Generate! Chris Muir Oracle Consultant and Trainer http://one-size-doesnt-fit-all.blogspot.com Oracle ACE Director - Fusion Middleware
Agenda Part I: Web Services Part II: JAX-WS & JAXB Part III: Demo time!
Photo thanks to Lexnger@ Flickr.com under CC 3/15 Part I: Web Services
Photo thanks to vernhart@ Flickr.com under CC 4/15 Why web services? System to system data integration Consumer (client) & Publisher Key Benefits Share data System interoperability Standardized Low cost internet delivery Loosely coupled
SOAP vs REST Web Services Photo thanks to B.G. - Oodwin & Andrea Fregnani @ Flickr.com under CC
SOAP RPC vs Document Style Photo thanks to redjar and ARS @ Flickr.com under CC
SOAP Web Services Defined Host: http://www.sagecomputing.com.au Web Server Web Service /bookings Web Service /departments Supports many operations Web Service /timesheets
SOAP Web Services Defined Service: http://www.sagecomputing.com.au/departments Web Service Depts? Operation getname Operation getdetails Internet (Client) Operation updatename
SOAP Web Services Defined WSDL: http://www.sagecomputing.com.au/departments?wsdl Web Service Depts HTTP Request WSDL Please! Operation getname Operation getdetails Internet (Client) Operation updatename
SOAP Web Services Defined WSDL: http://www.sagecomputing.com.au/departments?wsdl Web Service Depts Operation HTTP Response getname Ah huh! API Style Operations XML Schemas Operation getdetails Internet (Client) Operation updatename
SOAP Web Services Defined Service: http://www.sagecomputing.com.au/departments Web Service Depts HTTP Request XML Payload Operation getname Operation getdetails Internet (Client) Operation updatename
SOAP Web Services Defined Thinking thinking Service: http://www.sagecomputing.com.au/departments thinking Web Service Depts HTTP Response XML Payload Thank you! Operation getname Operation getdetails Internet (Client) Operation updatename
SOAP Core Concepts HTTP URL Web Services (aka. endpoints) Operations»Parameters Based on XML Schemas XML Payloads WSDL
Photo thanks to Lexnger@ Flickr.com under CC 3/15 Part II: JAX-WS & JAXB
WS Framework Challenges Obscure underlying implementation detail from programmer: HTTP request/responses SOAP envelope XML to native language datatype mapping WSDL/SOAP mapping to code
JAX-WS Java API for Web Services JAX-WS 2.x replaces JAX-RPC in JEE5 Standards based Apart of the Glassfish "Metro" web service stack of technologies Simplified POJOs Uses annotation Easy to understand No code for HTTP No code for transport layer Focus on the data rather than mechanics
JAX-WS Implementation Can create both the publisher (aka. provider or web service) and client (aka. consumer) Publisher = JEE5.0 + Client = JSE6.0 Primarily SOAP based web services Also supports RESTful based web services Support for SOAP 1.1/1.2 Support for binary attachments (MTOM) RI includes command line tools for generating artefacts - WSImport - top down - create service from WSDL - WSGen - bottom up - create service from Java code JDeveloper IDE provides an easier wizard driven interface
JAX-WS XML 2 Java binding Incoming request - XML "unmarshalled" into Java objects Outgoing response - Java objects are "marshalled" into XML JAX-WS supports multiple XML 2 Java binding technologies map XML to Java equivalent provide Java the ability to consume/create XML data JAX-WS support multiple binding types: XML Source (DOM) SAAJ (SOAPMessage) Activation data sources (Streams - raw text - similar i/o) Java Architecture for XML Binding (JAXB) JAXB object structure is familiar to Java programmers No more XML
Photo thanks to philippe leroyer @ Flickr.com under CC 3/15 Part III: JDeveloper Demonstration
...as easy as 1-2-3: XSD, WSDL, Generate!
Create your XML Schema
Create the web service WSDL
Generate the code
Ah, test it
Bottoms up!
But I'm a PL/SQL programmer! Photo thanks to A National Acrobat @ Flickr.com under CC
01 CREATE TABLE dept (deptno NUMBER(2,0), dname VARCHAR2(14)); 02 03 CREATE TYPE dept_type AS OBJECT 04 (deptno NUMBER 05,dname VARCHAR2(14) 06 07 CREATE TYPE dept_list_table IS TABLE OF dept_type; 08 09 CREATE OR REPLACE PACKAGE ws_package AS 10 FUNCTION test_dept_table RETURN dept_list_table; 11 END ws_package; 12 13 CREATE OR REPLACE PACKAGE BODY ws_package AS 14 FUNCTION test_dept_table RETURN dept_list_table IS 15 all_depts dept_list_table := dept_list_table(); 16 drectype dept_type; 17 i NUMBER := 0; 18 BEGIN 19 FOR r_list IN (SELECT * FROM dept) LOOP 20 i := i + 1; 21 drectype := dept_type(null, null, null, null); 22 drectype.deptno := r_list.deptno; 23 drectype.dname := r_list.dname; 24 all_depts.extend; 25 all_depts(i) := drectype; 26 END LOOP; 27 28 RETURN all_depts; 29 END test_dept_table; 30 END ws_package;
Photo thanks to Romy Schneider @ Flickr.com under CC
Photo thanks to badjonni & massdistraction @ Flickr.com under CC
SAGE Computing Services Customised Oracle Training Workshops and Consulting Questions and Answers? Presentations are available from our website: www.sagecomputing.com.au enquiries@sagecomputing.com.au chris.muir@sagecomputing.com.au http://one-size-doesnt-fit-all.blogspot.com
JDeveloper Web Services References Pas Apicella blog http://theblasfrompas.blogspot.com (Many thanks to Pas for the PL/SQL example: http://theblasfrompas.blogspot.com/2009/08/jdeveloper-11gplsql-web-service.html) Edwin Biemond's blog http://biemond.blogspot.com Gerard Davison blog http://kingsfleet.blogspot.com