Transcript Document

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 modelis
JAX-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.
2.
•
Annotations are used in mapping Java to WSDL and
schema
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 Implementation
1. 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 {
@WebMethod
public 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 Console
http://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
•
•
HelloWebService.java
•
•
Custom data type for response
ObjectFactory.java
•
•
Custom data type for request
HelloResponse.java
•
•
Service Endpoint Interface
Hello.java
•
•
Service factory
JAXB XML Registry
package-info.java
•
Holder for JAXB package annotations
Client Code
import 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 Invocation
1. 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-wsea3/docs/annotations.html
• JBossWS Home
http://labs.jboss.com/jbossws/
• JBossWS Wiki
http://jbws.dyndns.org/mediawiki/index.php?tit
le=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