Download presentation
Presentation is loading. Please wait.
Published byAdam Bell Modified over 8 years ago
1
Presentation: Advanced AXIS: Deployment Descriptors and Advanced Types
2
Ingeniørhøjskolen i Århus Slide 2 af 23 Outline So far with AXIS –Installation of Apache Tomcat and AXIS –Easy deployment of.java with.jws –Using Dynamic Call Interface for the Client to.jws Rather tedious work – and pretty error-prone –WSDL2Java Client generation This time –Use of.wsdd deployment files in AXIS (server specific) –Types allowed in Java/WSDL mappings (client/server) –Use of Arrays and Objects (client/server) –Custom Objets (client/server) –Use of the WSDL2Java stubgeneration tool (client) –Scope (client/server)
3
Ingeniørhøjskolen i Århus Slide 3 af 23 Using Axis Web Service Deployment Descriptor Easy to use.jws –But not nice deployment –Only source code (.java) no bytecode (.class) –How to undeploy? –Problems with accessing outside classes (no suppot for packages) –Not possible to use custom objects Alternative: Using the deployment tool in Axis with Web Service Deployment Descriptor (.wsdd) files –% java org.apache.axis.client.AdminClient deploy.wsdd
4
Ingeniørhøjskolen i Århus Slide 4 af 23 Use of AdminClient AdminClient may be used as console application taking a deployment file as argument (as shown on the previous slide) Or may be adopted into a deployment program or software-tool if needed for better deployment control:
5
Ingeniørhøjskolen i Århus Slide 5 af 23 List of deployed services with AdminClient Results in a complete list of deployed services Using the “list” argument with AdminClient
6
Ingeniørhøjskolen i Århus Slide 6 af 23 Using Axis Web Service Deployment Descriptor II – into the.wsdd Web Service Deployment Descriptor (.wsdd) is XML for defining characteristics of a Web service –The service name and the provider –The (packaged) class that provides the service –Which of the class methods are to be exposed (all or limited)
7
Ingeniørhøjskolen i Århus Slide 7 af 23 Using Axis Web Service Deployment Descriptor III – provider style Much higher degree of deployment control Also needed when dealing with non RPC java:RPC = ”object-oriented middleware style” - others include: - Document services - Wrapped services & - Message services - these are not an integral part of the curriculum java:RPC = ”object-oriented middleware style” - others include: - Document services - Wrapped services & - Message services - these are not an integral part of the curriculum
8
Ingeniørhøjskolen i Århus Slide 8 af 23 Using Axis Web Service Deployment Descriptor IIII Web service scope specifies the lifetime/management of the service class. –Specify scope of the Web service (request, application or session) in wsdd –request - is the default scope; each request causes a new service object to be created to handle the request –session - conceptually, all requests by a single client are handled by a single object (implemented with cookies) –application - a singleton web service. A single object serves all clients. More on scope later
9
Ingeniørhøjskolen i Århus Slide 9 af 23 Parameter Types for Web Services and Clients in AXIS The primitive types are mapped as shown below: These types can be used as either parameter or return types
10
Ingeniørhøjskolen i Århus Slide 10 af 23 Value Objects Allowed objects are: –Objects listed in the preceding slide –Objects that conforms to the Java Bean Standard Custom objects – rolling your own –Normally one would like to use ones own objects as parameters and return values –This may be done using the BeanSerializer –Beans MUST conform to the Java Bean Standard This means empty constructor and accessor (getter/setter) methods –More on this later Collections SHOULD NOT BE USED if interoperability is needed (e.g. with C# og C++) as this is under-specified –Instead use regular Arrays (Object[] and typecast) –At least until next version of the specification
11
Ingeniørhøjskolen i Århus Slide 11 af 23 Using Custom Objects Axis supports passing user-defined class objects that are Java Beans –get and set methods are defined for every class attribute –no-argument constructor –the class is Serializable Marshalling and Unmarshalling parameters and return-values Suppose a Web Service returns a user-defined SomeClass object. –On the server, deploy with a.wsdd element associating the user-defined class (SomeClass ) with the Axis provided BeanService as: – On the client side, WSDL2Java creates a BeanService. SomeObject class –The wsdl for the corresponding Web Service includes xml for SomeClass. –The proxy unmarshals a returned Message object to a BeanService. SomeClass object. This is integral for the support of the Data Transfer Object pattern (also known as Replicating Objects pattern)
12
Ingeniørhøjskolen i Århus Slide 12 af 23 Example WSDD TV-Program Web service (TVPSService.class): Java Server C# Client (Pocket PC.NET CF) Java Client (UNIX, LINUX, Windows) Key elements: Package of service = tvps Class of service = tvps.TVPSService Allowed methods = all (*) Custom class (return parameter) = tvps.Programme
13
Ingeniørhøjskolen i Århus Slide 13 af 23 Client side – using WSDL2Java The deployment is purely server side Lets now take a look at the client side We have already seen dynamic clients If we would like to generate static Client proxy stubs for a WSDL service – we could use: –C:\dev-axis\java org.apache.axis.wsdl.WSDL2Java http://localhost:8080/axis/Calculator.jws?wsdl -p calc Which would generate a package ”calc” containing all the Proxy code needed for building a Client
14
Ingeniørhøjskolen i Århus Slide 14 af 23 Result of WSDL2Java WSDL clauseJava class(es) generated For each entry in the type sectionA java class (as in Java RMI & CORBA) A holder if this type is used as an inout/out parameter (as in CORBA) For each portTypeA java interface (as in Java RMI & CORBA) For each bindingA stub class (as in Java RMI & CORBA) For each serviceA service interface A service implementation (the locator)
15
Ingeniørhøjskolen i Århus Slide 15 af 23 Building a Client package hello; public class HelloWorldClient { public static void main (String args[]) throws Exception { // Make a service locator HelloWorldService service = new HelloWorldServiceLocator(); //Now use the service locator to get a stub which implements the SDI HelloWorld stub = (HelloWorld) service.getHelloWorld(); String text = stub.getHelloWorldMessage("Test af OO indpakning"); System.out.println(”Recieved from server: "+text); } Lets start by generating the Clients stub given the WSDL (-p = destination package = hello): java org.apache.axis.wsdl.WSDL2Java http://localhost:8080/axis/HelloWorld.jws?wsdl –p hello
16
Ingeniørhøjskolen i Århus Slide 16 af 23 HelloWorld.java – the interface Generated by the WSDL2Java tool
17
Ingeniørhøjskolen i Århus Slide 17 af 23 HelloWorldService.java – service interface Generated by the WSDL2Java tool
18
Ingeniørhøjskolen i Århus Slide 18 af 23 HelloWorldServiceLocator.java part 1 implementation of the interface More code to follow Hot wired address – from where? standard getHelloWorld impl takes hot wired address Calls the getHelloWorld(endpoint)
19
Ingeniørhøjskolen i Århus Slide 19 af 23 HelloWorldServiceLocator.java part 2 If you want to implement a naming service a different accessor is provided It returns a proxy stub – which is also generated – the HelloWorldSoapBindingStub More code is generated – but not shown here The remaining code is not commented further – take a closer look for yourself
20
Ingeniørhøjskolen i Århus Slide 20 af 23 HelloWorldSoapBindingStub.java – the stub part 1 Extending stub and implementing the interface Only excerpts of the code have been shown on these slides
21
Ingeniørhøjskolen i Århus Slide 21 af 23 HelloWorldSoapBindingStub.java – the stub part 2 Implementing the marshalling – compare this to the dynamic client we made earlier on, or your UDP assignment! We are using the call object Only excerpts of the code have been shown on these slides To invoke the method on the server
22
Ingeniørhøjskolen i Århus Slide 22 af 23 Axis Life-Cycle Management for Web Services Web service scope specifies the lifetime/management of the service class. –request - has the same effect as if a new service object is created to handle each method call. –Request is the default scope - provides scalability in high- capacity load-balanced applications. Connections and/or server objects can be pooled. –session - conceptually, all requests from a single client are handled by a single object. Implemented with cookies, and requires client support. –application - a singleton web service. A single object serves all clients. Using application scope for a Java Web Service and Client –The deploy.wsdd specifies application scope for the Web Service
23
Ingeniørhøjskolen i Århus Slide 23 af 23 Using Session Scope with Axis Using the session scope for a Java Web Service and Client –For example, count all calls made to a service by a single client. –Each client has its own call count -- in effect, has its own service object. –The deploy.wsdd specifies session scope for the Web Service For session scope to work, the web service client must also specify a session mechanism –In C# as: tcs.CookieContainer = new System.Net.CookieContainer(); –Java Proxy as: ((MyWSServiceLocator)tcs).setMaintainSession(true);
Similar presentations
© 2025 SlidePlayer.com. Inc.
All rights reserved.