28
Web servisu izstrāde JAX-WS

Web servisu izstrāde JAX-WS. Ievads JAX-WS = Java API for XML Web Services JAX-WS ir fundamentāla Web servisu izstrādes tehnoloģija Java EE 5 un Java

Embed Size (px)

Citation preview

Web servisu izstrāde

JAX-WS

Ievads• JAX-WS = Java API for XML Web Services

• JAX-WS ir fundamentāla Web servisu izstrādes tehnoloģija

• Java EE 5 un Java SE 6 sastāvdaļa

• JAX-WS 2.0 aizvietoja JAX-RPC• Pāreja no RPC-style uz document-style web servisiem

• Reference Implementation – by GlassFish

Priekšvēsture: JAX-RPC• JAX-RPC = Java API for XML-based RPC

• Pirmā specifikācijas versija (JAX-RPC 1.0) bija JSR-101 un tā bija izlaista 2002.gada jūnijā

• Fundamentālais mērķis - vienkāršot sazināšanas starp Java un ne-Java platformām

• Dod iespēju no Java programmas izsaukt Java Web servisu ar zināmu aprakstu (saskaņā ar servisa WSDL)

JAX-RPC modelisJAX-RPC modelim, ir divas puses:

• Server-side programming model• Allows to develop Web service endpoints as Java

objects or Enterprise JavaBeans, which run on the J2EE platform

• Client-side programming model • Allows to access a remote Web service as if it were a

local object, using methods that represent SOAP operations

Server-Side Programming• Two server-side programming models for

creating Java EE Web service endpoints:

• POJO endpoints

• EJB3 Stateless

Session Bean

endpoints

JAX-WS Annotations• Annotations play a critical role in JAX-WS 2.0

1. Annotations are used in mapping Java to WSDL and schema

2. Annotations are used in runtime to control how the JAX-WS runtime processes and responds to web service invocations

• Annotations utilized by JAX-WS 2.0 are defined in separate JSRs:• JSR 181: Web Services Metadata for the JavaTM Platform• JSR 222: JavaTM Architecture for XML Binding (JAXB) 2.0• JSR 224: JavaTM API for XML Web Services (JAX-WS) 2.0• JSR 250: Common Annotations for the JavaTM Platform

Web Service Implementation1. Write a POJO implementing the service

2. Add @WebService annotation to it

3. Optionally, inject a WebServiceContext• WebServiceContext makes it possible for a web

service endpoint implementation class to access message context and security information relative to a request

4. Deploy the application

5. Point your clients at the WSDL• e.g. http://myserver/myapp/MyService?WSDL

Example: HelloWebService

@WebService(name = "HelloWebService")@SOAPBinding( style = SOAPBinding.Style.DOCUMENT, use = SOAPBinding.Use.LITERAL, parameterStyle = SOAPBinding.ParameterStyle.WRAPPED)

public class HelloWebService {

@WebMethodpublic String hello(@WebParam(name = "name")

String name){ return "Welcome " + name + " !!!"; }}

More Annotations• Web Services Metadata Annotations

• @WebService• @WebMethod• @OneWay• @WebParam• @WebResult

• JAX-WS Annotations• @RequestWrapper• @ResponseWrapper• @WebEndpoint• @WebFault• @WebServiceClient• @WebServiceRef

Web Service Deployment• To run Web service you’ll need to deploy it into

web server with Java EE compliant web services

• Java service endpoint usually is packaged as a web application in a WAR file

• We will consider JBoss Application Server with JBoss Web Services (JBossWS)

JBoss Web Services• JBossWS is a JAX-WS compliant web service

stack developed to be part of JBoss' Java EE 5 offering

• At deployment time JBossWS will create services endpoints from annotated classes and publish the WSDL

• At runtime SOAP requests are converted to JAVA invocations

JBossWS deploy-time & run-time

Demo• Ir sagatavots demo projekts:

http://java-eim.googlecode.com/svn/trunk/

java-eim-demo-jbossws

• Pašlaik ir izveidoti divi vienkārši Web servisi:• HelloWebService • CalculatorWebService

• Instrukcijas pagaidām failā README.txt

JBossWS Consolehttp://localhost:8080/jbossws/

Client-Side Programming• JAX-WS client programming models:

• Static Dynamic proxy client API• Dynamic Dispatch client API

• Dynamic proxy client

• Invokes a Web service based on a Service Endpoint Interface (SEI) which must be provided

• Creating web service clients usually starts from the WSDL (“WSDL first” approach)

• Special tools are used to generate client classes

Dispatch client API• Low level JAX-WS API to work at the XML

message level or without any generated artifacts

• Requires clients to construct messages or message payloads as XML

• Requires an intimate knowledge of the desired message or payload structure

Client Side Generation (JBossWS)• JBossWS provide a tool for client side generation

from WSDL

wsconsume

• From <JBOSS_HOME>/bin execute:

wsconsume -k -p <package> <path_to_wsdl>

Generated Files• HelloWebServiceService.java

• Service factory • HelloWebService.java

• Service Endpoint Interface • Hello.java

• Custom data type for request • HelloResponse.java

• Custom data type for response• ObjectFactory.java

• JAXB XML Registry • package-info.java

• Holder for JAXB package annotations

Client Codeimport xxx.generated.hello.HelloWebService;import xxx.generated.hello.HelloWebServiceService;

public class HelloWebServiceClient {public static void main(String[] args) {

HelloWebServiceService helloFactory = new HelloWebServiceService();

HelloWebService helloService = helloFactory.getPort(HelloWebService.class);

String response = helloService.hello("WebServiceClient");}

}

Web Service Invocation1. A Java program invokes a method on a stub

(local object representing the remote service)

2. The stub invokes routines in the JAX-WS runtime system

3. The runtime system converts the remote method invocation into a SOAP message

4. The runtime system transmits the message as an HTTP request

Server-Side Debugging (JBoss)1. Add or un-comment the following line in run.bat

rem JPDA options. Uncomment and modify as

rem appropriate to enable remote debugging.

set JAVA_OPTS=-Xdebug -Xrunjdwp:transport=dt_socket,

address=8787,server=y,suspend=n %JAVA_OPTS%

2. Create new “Remote Java Application” debug configuration in Eclipse:

Run Open Debug Dialog

Server-Side Debugging (JBoss)

Server-Side Debugging (JBoss)3. Start JBoss

4. Launch Debug configuration in Eclipse

Server-Side Debugging (JBoss)5. Add breakpoint, e.g. to Web service code and

run client

6. Server will stop at breakpoint

Server-Side Debugging (JBoss)

Nobeigums

Tas bija tikai īss ievads..!

Web servisu temats ir daudz plašāks...

References• JAX-WS Annotations

https://jax-ws.dev.java.net/jax-ws-ea3/docs/annotations.html

• JBossWS Homehttp://labs.jboss.com/jbossws/

• JBossWS Wikihttp://jbws.dyndns.org/mediawiki/index.php?title=JBossWS

References• JAX-WS Reference Implementation by GlassFish

https://jax-ws.dev.java.net/

• JAX-WS Specification (JSR 224) http://jcp.org/en/jsr/detail?id=224

• Presentation about JAX-WS http://gceclub.sun.com.cn/java_one_online/2006

/TS-1194/TS-1194.pdf