Java Web Services using JAX-WS and JAXB

Download Report

Transcript Java Web Services using JAX-WS and JAXB

Webservices using JAXB and JAX-WS
Lalit Bhatt
SpiderLogic
http://www.spiderlogic.com


JAXB
JAX-WS
© www.spiderlogic.com

Provides binding between XML and Java
To provide a higher level of abstraction to work with.
Associates a set of Java classes with XML.
Think of Java class as representing the XML instances.

Reference site: https://jaxb.dev.java.net



© www.spiderlogic.com
XML schema
XML schema
JAXB
Compiler
JAXB
Schema
generator
Schema derived
Classes and
interface
Java classes
© www.spiderlogic.com
unmarshel
XML document
JAXB API
marshel
Java objects
representing
XML content
© www.spiderlogic.com
Demo
© www.spiderlogic.com
 Advantages
 Ease of Use.
 Object oriented way of doing things.
 Disadvantages
 Abstraction has a cost
© www.spiderlogic.com
 Understanding how JAX-WS can be used to
implement SOAP based web services both at
server and client side.
© www.spiderlogic.com
Dave Podnar's Five Stages of Dealing with Web
Services
Denial - It's Simple Object Access Protocol, right?
Over Involvement - OK, I'll read the SOAP, WSDL,
WS-I BP, JAX-RPC, SAAJ, JAX-P... specs. next, I'll
check the Wiki and finally follow an example showing
service and client sides.
Anger - I can't believe those #$%&*@s made it so
difficult!
Guilt - Everyone is using Web Services, it must be
me, I must be missing something.
Acceptance - It is what it is, Web Services aren't
simple or easy
© www.spiderlogic.com



Web service is about SOAP, WSDL and UDDI –
Web service is higher level concept than this. SOAP,
WSDL and UDDI are actually implementation
details.
Web services are based on RPC paradigm – Web
services are document driven also.
Web services are based on HTTP – Web services
can work on many other protocols like SMTP.
Web services can cure cancer
© www.spiderlogic.com
XML XSD
XSLT Xpath JAXP
SAX DOM JAXB StaX
SOAP WSDL UDDI Rest
JAX-RPC JAX-WS JAX-RS
SAAJ WS* BP
Axis Metro
ESB
SOA
© www.spiderlogic.com
Invoked initially
Web service details – WSDL on XML
Client
Request - SOAP on XML
Server
Reposnse – SOAP on XML
Invoked whenever message
exchange happens
© www.spiderlogic.com
Plain old Java Object (POJO) can be easily exposed
as web service.
Annotation driven
Data binding through JAXB
Server Independent
© www.spiderlogic.com
Write the class
Annotate
Register in web.xml
Deploy – The server runtime will
Generate and publish WSDL.
Map SOAP request to a Java method invocation.
Translate method return into a SOAP response
© www.spiderlogic.com
@WebService
public class TemperatureConverter {
@WebMethod
public double celsiusToFarenheit(double temp){
...
}
@WebMethod
public double farenheitToCelsius(double temp){
...
}
}
© www.spiderlogic.com
<servlet>
<servlet-name>tempConv</servlet-name>
<servlet-class>
com.lalit.TemperatureConverter
</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>tempConv</servlet-name>
<url-pattern>/tempConv</url-pattern>
</servlet-mapping>
© www.spiderlogic.com
Handler
Chain
9
SOAP
Fault
Processing
5
8
© www.spiderlogic.com
6
7
Web Service
Java endpoint
10
4
JAXB Mapping
3
Dispatcher
C
L 2. SOAP request
I
`
E
N
T
t 11. SOAP resp
WSDL Published
On Server
Endpoint
Listener
1. Get WSDL
Annotate
Deploy ejb jar
© www.spiderlogic.com
@Stateless
@WebService
public class TemperatureConverter {
//Rest code remains same.
© www.spiderlogic.com
Starting Java 6
Generate the artifact using wsgen tool.
wsgen tool generates JAXB mapped classes
Use embedded HttpServer to deploy the webservice
© www.spiderlogic.com
public static void main(String[] args) {
TemperatureConverter tc= new
TemperatureConverter();
//Java comes with an embedded Http server
//which is used to host the service
Endpoint endpoint = Endpoint.publish
("http://localhost:8080/tempConv", tc);
//Keeping commented, keeps the server running
/*endpoint.stop();*/
}
© www.spiderlogic.com
Generate artifact using wsimport pointing to WSDL
wsimport generates JAXB binding classes and
service endpoint
Call the web service using service end point
© www.spiderlogic.com
//Make the instance of service class
TemperatureConverterService service =
new TemperatureConverterService();
//Get port to invoke webservice
TemperatureConverter port =
service.getPort
(TemperatureConverter.class);
//Call the web service.
double fahr = port.celsiusToFarenheit(100);
© www.spiderlogic.com
JAX-WS supports start from WSDL approach
@WebService
(name = "TemperatureConvertor",
endpointInterface=
"com.lalit.ws.TemperatureConvertor",
targetNamespace = "http://ws.crayom.com/",
wsdlLocation =
"WEB-INF/TemperatureConvertorDocStyle.wsdl")
public class TemperatureConvertorService implements
TemperatureConvertor {
© www.spiderlogic.com
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>.
© www.spiderlogic.com
@WebServiceProvider
( serviceName = "TempConvProvider",
portName="TempConvPort",
targetNamespace = "http://www.crayom.com/om",
wsdlLocation=
"WEB-INF/wsdl/TempConvProvider.wsdl")
@ServiceMode(value=Service.Mode.PAYLOAD)
public class TempConvProvider
implements Provider<Source>{
public Source invoke(Source request) {
…
return resp;
}
}
PAYLOAD gives the body of message.
MESSAGE will give whole SOAP
Message
© www.spiderlogic.com
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
© www.spiderlogic.com
Service service = Service.create(url, serviceName);
Dispatch<Source> sourceDispatch =
service.createDispatch(portQName,
Source.class,
Service.Mode.PAYLOAD);
//request is a XML which is put into SOAP payload
StreamSource streamSource =
new StreamSource
(new StringReader(request));
Source result = sourceDispatch.invoke(streamSource);
© www.spiderlogic.com
JAX-WS provides support for SOAP fault handling in
terms of exceptions.
JAX-WS supports handlers both on client and server
side , which can process SOAP headers. SOAP
headers are used to build Quality of services (QOS).
JAX-WS supports asynchronous communication
© www.spiderlogic.com
Thanks
Lalit Bhatt (http://www.lalitbhatt.com)
SpiderLogic (http://www.spiderlogic.com )