Java Web Services using JAX-WS and JAXB - SiliconIndia

fortnecessityusefulDéveloppement de logiciels

14 déc. 2013 (il y a 3 années et 3 mois)

104 vue(s)

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


©
www.spiderlogic.com

XML schema

JAXB

Compiler

Schema derived

Classes and

interface

XML schema

JAXB

Schema

generator

Java classes


©
www.spiderlogic.com

XML document

JAXB API

Java objects

representing

XML content

unmarshel

marshel






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


©
www.spiderlogic.com

Client

Web service details


WSDL on XML

Request
-

SOAP on XML

Reposnse



SOAP on XML

Invoked initially

Invoked whenever message

exchange happens

Server


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


©
www.spiderlogic.com



`

C

L

I

E

N

T

t

1. Get WSDL

WSDL Published

On Server

Endpoint

Listener

Dispatcher

Handler

Chain

SOAP

Fault

Processing

JAXB Mapping

Web Service

Java endpoint

2. SOAP request

3

4

6

5

10

9

8

7

11. SOAP
resp


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
;


}

}



©
www.spiderlogic.com

PAYLOAD gives the body of message.

MESSAGE will give whole SOAP
Message


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

)