24
Java web services using JAX- WS Speaker Name Lalit Mohan Chandra Bhatt Company Name Crayom Engineering Services

Java web services using JAX-WS

Embed Size (px)

DESCRIPTION

JAX-WS is the replacement and next generation to JAX-RPC and makes web services development much easier using annotations and much less configuration. JAX-WS is useful for people building webservices/SOA based infrastructure as JAX-WS makes the web service development much easier and is a big gain for developer productivity. The session uses a web service for temperature conversion example to build both the client side and Server side artifacts. Also on the server side both Servlet based and EJB3.0 based web service development will be demonstrated. JAXB concepts will be used to demonstrate the examples. The session uses Eclipse Ganymede and Jboss 5.0. However JAX-WS being the standard, the code will smoothly work on any JavaEE based compliant servers.

Citation preview

Page 1: Java web services using JAX-WS

Java web services using JAX-WS

Speaker Name Lalit Mohan Chandra Bhatt

Company Name Crayom Engineering Services

Page 2: Java web services using JAX-WS

Scope

• Understanding how JAX-WS can be used to implement SOAP based web services both at server and client side.

Page 3: Java web services using JAX-WS

Are webservices hard !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

Page 4: Java web services using JAX-WS

Jargons Jargons

XML XSDXSLT Xpath JAXP

SAX DOM JAXB StaXSOAP WSDL UDDI

JAX-RPC JAX-WS JAX-RSSAAJ WS* BP

Axis MetroESBSOA

Page 5: Java web services using JAX-WS

Webservice

ClientServer

Web service details – WSDL on XML

Request - SOAP on XML

Reposnse – SOAP on XML

Invoked initially

Invoked whenever message exchange happens

Page 6: Java web services using JAX-WS

Webservice – JAX-WS way●Plain old Java Object (POJO) can be easily exposed as web service.

●Annotation driven

●Data binding through JAXB

●Server Independent

Page 7: Java web services using JAX-WS

JAX-WS

Demo

Page 8: Java web services using JAX-WS

JAX-WS – Servlet Way ●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.

Page 9: Java web services using JAX-WS

JAX-WS – Servlet Way

@WebServicepublic class TemperatureConverter {

@WebMethodpublic double celsiusToFarenheit(double temp){ ...}

@WebMethodpublic double farenheitToCelsius(double temp){

...}

}

Page 10: Java web services using JAX-WS

JAX-WS – Servlet Way <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>

Page 11: Java web services using JAX-WS

JAX-WS Servlet Way

Clientt

1. Get WSDLWSDL Published

On Server

End

poin

tLi

sten

er

Dis

patc

her

HandlerChain

SOAPFault

Processing JAX

B M

appi

ng

Web

Ser

vice

Java

end

poin

t

2. SOAP request 3 4 65

10 9 8 711. SOAP resp

Page 12: Java web services using JAX-WS

JAX-WS EJB 3.0 way

●Annotate

●Deploy ejb jar

Page 13: Java web services using JAX-WS

JAX-WS – EJB 3.0 way

@Stateless@WebServicepublic class TemperatureConverter {

//Rest code remains same.

Page 14: Java web services using JAX-WS

JAX-WS – JavaSE Endpoint

●Starting Java 6

●Generate the artifact using wsgen tool.

●wsgen tool generates JAXB mapped classes

●Use embedded HttpServer to deploy the webservice

Page 15: Java web services using JAX-WS

JAX-WS – JavaSE Endpoint

public static void main(String[] args) {TemperatureConverter tc= new

TemperatureConverter();

//Java comes with an embedded Http server //which is used to host the serviceEndpoint endpoint = Endpoint.publish

("http://localhost:8080/tempConv", tc);

//Keeping commented, keeps the server running/*endpoint.stop();*/

}}

Page 16: Java web services using JAX-WS

JAX-WS – Client side

●Generate artifact using wsimport pointing to WSDL

●wsimport generates JAXB binding classes and service endpoint

●Call the web service using service end point

Page 17: Java web services using JAX-WS

JAX-WS – Client side

//Make the instance of service classTemperatureConverterService service =

new TemperatureConverterService();

//Get port to invoke webserviceTemperatureConverter port = service.getPort (TemperatureConverter.class);

//Call the web service. double fahr = port.celsiusToFarenheit(100);

Page 18: Java web services using JAX-WS

JAX-WS - start from WSDL

●JAX-WS supports start from WSDL approach

@WebService(name = "TemperatureConvertor", endpointInterface="com.crayom.ws.TemperatureConvertor", targetNamespace = "http://ws.crayom.com/", wsdlLocation = "WEB-INF/TemperatureConvertorDocStyle.wsdl")public class TemperatureConvertorService implements TemperatureConvertor {

Page 19: Java web services using JAX-WS

JAX-WS - Provider

●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>.

Page 20: Java web services using JAX-WS

JAX-WS - Provider

@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;

}

}

Provide WSDLyourself

PAYLOAD gives the body of message.MESSAGE will give whole SOAP Message

Page 21: Java web services using JAX-WS

JAX-WS - Dispatch

●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

Page 22: Java web services using JAX-WS

JAX-WS - Dispatch

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);

Page 23: Java web services using JAX-WS

JAX-WS - Apart from this

●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

Page 24: Java web services using JAX-WS

Thank you