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 GlassFishReference Implementation
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ā JSR-101 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 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 Implementation 1.Write a POJO implementing the service 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.
Example: = style = SOAPBinding.Style.DOCUMENT, use = SOAPBinding.Use.LITERAL, parameterStyle = SOAPBinding.ParameterStyle.WRAPPED) public class HelloWebService public String = "name") String name){ return "Welcome " + name + " !!!"; }
More Annotations Web Services @WebResult
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: java-eim-demo-jbossws Pašlaik ir izveidoti divi vienkārši Web servisi: HelloWebService CalculatorWebService Instrukcijas pagaidām failā README.txt
JBossWS Console
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 /bin execute: wsconsume -k -p
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 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)
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 ea3/docs/annotations.html JBossWS Home JBossWS Wiki le=JBossWS
References JAX-WS Reference Implementation by GlassFish JAX-WS Specification (JSR 224) Presentation about JAX-WS /TS-1194/TS-1194.pdf /TS-1194/TS-1194.pdf