Download JAX-WS - Webkursi

Survey
yes no Was this document useful for you?
   Thank you for your participation!

* Your assessment is very important for improving the work of artificial intelligence, which forms the content of this project

Document related concepts
no text concepts found
Transcript
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