Survey
* Your assessment is very important for improving the workof artificial intelligence, which forms the content of this project
* Your assessment is very important for improving the workof artificial intelligence, which forms the content of this project
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