| <!-- | |
| ~ Licensed to the Apache Software Foundation (ASF) under one | |
| ~ or more contributor license agreements. See the NOTICE file | |
| ~ distributed with this work for additional information | |
| ~ regarding copyright ownership. The ASF licenses this file | |
| ~ to you under the Apache License, Version 2.0 (the | |
| ~ "License"); you may not use this file except in compliance | |
| ~ with the License. You may obtain a copy of the License at | |
| ~ | |
| ~ http://www.apache.org/licenses/LICENSE-2.0 | |
| ~ | |
| ~ Unless required by applicable law or agreed to in writing, | |
| ~ software distributed under the License is distributed on an | |
| ~ "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY | |
| ~ KIND, either express or implied. See the License for the | |
| ~ specific language governing permissions and limitations | |
| ~ under the License. | |
| --> | |
| <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" | |
| "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> | |
| <html lang="en" xmlns="http://www.w3.org/1999/xhtml" xml:lang="en"> | |
| <head> | |
| <meta name="generator" content= | |
| "HTML Tidy for Windows (vers 14 June 2007), see www.w3.org" /> | |
| <meta http-equiv="content-type" content="" /> | |
| <title>Apache Axis2 User's Guide- Creating Clients</title> | |
| </head> | |
| <body> | |
| <a name="createclients" id="createclients"></a> | |
| <h1>Apache Axis2 User's Guide - Creating Clients</h1> | |
| <p>When it comes to creating a Web service client, you can do it | |
| manually (see <a href="userguide-buildingservices.html">Building | |
| Services</a>), but in most cases you have a Web Service Description | |
| Language (WSDL) definition that describes the messages clients | |
| should send and expect to receive. Axis2 provides several ways to | |
| use this definition to automatically generate a client.</p> | |
| <h2>Content</h2> | |
| <ul> | |
| <li><a href="userguide.html#intro">Introducing Axis2</a><br /> | |
| <ul> | |
| <li><a href="userguide.html#whatis">What is Axis2?</a></li> | |
| <li><a href="userguide.html#underhood">What's Under the | |
| hood?</a></li> | |
| <li><a href="userguide.html#handlessoap">How Axis2 Handles SOAP | |
| Messages</a></li> | |
| <li><a href="userguide.html#distributions">Axis2 | |
| Distributions</a></li> | |
| <li><a href="userguide.html#sbd">The Axis2 Standard Binary | |
| Distribution</a></li> | |
| <li><a href="userguide.html#hierarchy">Axis2.war Directory | |
| hierarchy</a></li> | |
| <li><a href="userguide.html#docs">Axis2 Documents | |
| Distribution</a></li> | |
| <li><a href="userguide.html#clients">Axis2 and Clients</a></li> | |
| </ul> | |
| </li> | |
| <li><a href= | |
| "userguide-installingtesting.html#installingtesting">Installing and | |
| Testing Client Code</a></li> | |
| <li><a href= | |
| "userguide-introtoservices.html#introservices">Introduction to | |
| Services</a><br /> | |
| <ul> | |
| <li><a href= | |
| "userguide-introtoservices.html#messageexchange">Message Exchange | |
| Patterns</a></li> | |
| </ul> | |
| </li> | |
| <li><a href= | |
| "userguide-creatingclients.html#createclients"><strong>Creating | |
| Clients</strong></a><br /> | |
| <ul> | |
| <li><a href= | |
| "userguide-creatingclients.html#choosingclient"><strong>Choosing a | |
| Client Generation Method</strong></a></li> | |
| <li><a href= | |
| "userguide-creatingclients.html#generating"><strong>Generating | |
| Clients</strong></a></li> | |
| <li><a href="userguide-creatingclients.html#adb"><strong>Axis Data | |
| Binding (ADB)</strong></a></li> | |
| </ul> | |
| </li> | |
| <li><a href= | |
| "userguide-buildingservices.html#buildservices">Building | |
| Services</a><br /> | |
| <ul> | |
| <li><a href= | |
| "userguide-buildingservices.html#getcomfortable">Getting | |
| Comfortable with Available Options</a></li> | |
| <li><a href= | |
| "userguide-buildingservices.html#createscratch">Creating a service | |
| from Scratch</a></li> | |
| <li><a href="userguide-buildingservices.html#deploypojo">Deploying | |
| Plain Old Java Objects</a></li> | |
| <li><a href="userguide-buildingservices.html#deployrun">Deploying | |
| and Running an Axis2 Service Created from WSDL</a></li> | |
| </ul> | |
| </li> | |
| <li><a href="userguide-samples.html">Samples</a></li> | |
| <li><a href="userguide-forfurtherstudy.html">For Further | |
| Study</a></li> | |
| </ul> | |
| <a name="choosingclient" id="choosingclient"></a> | |
| <h2>Choosing a Client Generation Method</h2> | |
| <p>Axis2 gives you several options when it comes to mapping WSDL to | |
| objects when generating clients. Three of these options are Axis2 | |
| DataBinding Framework, XMLBeans, and JiBX databinding. All of these | |
| methods involve using databinding to create Java objects out of the | |
| XML structures used by the service, and each has its pros and cons. | |
| You can also generate XML in-out stubs that are not based on | |
| databinding.</p> | |
| <p>Axis2 Databinding Framework (ADB): ADB is probably the simplest | |
| method of generating an Axis2 client. In most cases, all of the | |
| pertinent classes are created as inner classes of a main stub | |
| class. ADB is very easy to use, but it does have limitations. It is | |
| not meant to be a full schema binding application, and has | |
| difficulty with structures such as XML Schema element extensions | |
| and restrictions.</p> | |
| <p>XMLBeans: Unlike ADB, XMLBeans is a fully functional schema | |
| compiler, so it doesn't carry the same limitations as ADB. It is, | |
| however, a bit more complicated to use than ADB. It generates a | |
| huge number of files, and the programming model, while being | |
| certainly usable, is not as straightforward as ADB.</p> | |
| <p>JiBX: JiBX is a complete databinding framework that actually | |
| provides not only WSDL-to-Java conversion, as covered in this | |
| document, but also Java-to-XML conversion. In some ways, JiBX | |
| provides the best of both worlds. JiBX is extremely flexible, | |
| enabling you to choose the classes that represent your entities, | |
| but it can be complicated to set up. On the other hand, once it is | |
| set up, actually using the generated code is as easy as using | |
| ADB.</p> | |
| <p>In the end, for simple structures, ADB will likely be enough for | |
| you. If, on the other hand you need more power or flexibility, | |
| whether you choose XMLBeans or JiBX depends on how much power or | |
| flexibility you need and your tolerance for complexity.</p> | |
| <a name="generating" id="generating"></a> | |
| <h2>Generating Clients</h2> | |
| <p>The process for generating and using a client varies slightly | |
| depending on the method of generation you choose. In all three | |
| cases in this document, clients are generated from the same WSDL | |
| file (see <a href="userguide-codelisting5.html">Code Listing | |
| 5</a>).</p> | |
| <p>Note that the document defines four operations, DoInOnly, | |
| NoParameters, TwoWayOneParameterEcho, and | |
| MultipleParametersAddItem. Each of the clients will include methods | |
| for calling each of these operations.</p> | |
| <p>(You can get more information on WSDL at <a href= | |
| "http://www.w3.org/2002/ws/desc/">http://www.w3.org/2002/ws/desc/</a> | |
| .)</p> | |
| <a name="adb" id="adb"></a> | |
| <h2>Axis Data Binding (ADB)</h2> | |
| <p>To create a client using ADB, execute the following steps:</p> | |
| <p><b>The short story:</b></p> | |
| <ol> | |
| <li> | |
| <a href="../download.cgi">Download</a> and unpack the Apache Axis2 Standard | |
| Distribution, if you have not done it already.</li> | |
| <li>Create the client stub with the following command (Assuming that you have Axis2UserGuide.wsdl file on your current working directory): | |
| <pre> | |
| %AXIS2_HOME%\bin\WSDL2Java -uri Axis2UserGuide.wsdl -p org.apache.axis2.axis2userguide -d adb -s | |
| </pre></li> | |
| <li>Create the client (for example, Client.java), a Java | |
| application that uses the generated stub, and save it in the | |
| org/apache/axis2/axis2userguide directory.</li> | |
| <li>Build the client by typing: ant jar.client.</li> | |
| <li>Assuming you have a corresponding service, run the client by | |
| adding the generated Axis2UserGuideService-test-client.jar file | |
| located in build/lib to the classpath and type: java | |
| org.apache.axis2.axis2userguide.Client</li> | |
| </ol> | |
| <p><b>The long story:</b></p> | |
| <p>If you have not done it already, <a href="../download.cgi"> | |
| download</a> and unpack the Apache Axis2 Standard Distribution. The | |
| Axis2 WAR Distribution does not include the necessary utilities for | |
| generating code, such as WSDL2Java.</p> | |
| <p>In the ADB method of generating clients, all the functionalities | |
| of the services are contained in a single class called a stub. The | |
| stub contains inner classes corresponding to all the necessary | |
| objects defined in the WSDL file, such as, in the case of this | |
| WSDL, DoInOnlyRequestMessage. Once you have the stub, you will be | |
| able to create a client by simply referring to these classes and | |
| their methods. To generate the client, issue the following command | |
| in Code Listing 6.</p> | |
| <h3><b>Code Listing 6 - Generating the Client</b></h3> | |
| <pre> | |
| %AXIS2_HOME%\bin\WSDL2Java -uri Axis2UserGuide.wsdl -p org.apache.axis2.axis2userguide -d adb -s | |
| </pre> | |
| <p>This command analyzes the WSDL file and creates the stub in the | |
| package org.apache.axis2.axis2userguide. The options specify that | |
| you want the ADB data binding method (-d), and synchronous or | |
| blocking, methods (-s). In other words, when the client makes an | |
| In-Out call to the service, it will wait for a response before | |
| continuing.</p> | |
| <p>Once you run this command, you will see two new items in the | |
| directory. The first is the build.xml file, which contains the | |
| instructions for <a href="http://ant.apache.org/">Ant</a> to | |
| compile the generated classes. The second is the src directory, | |
| which contains the actual Axis2UserGuideServiceStub.java file. If | |
| you open this file, you will see a collection of inner classes for | |
| each of the items in the WSDL file. You'll also see a number of | |
| calls to the Axis2 client API, including those that use AXIOM to | |
| build and analyze the incoming and outgoing messages.</p> | |
| <p>Now you need a client to make use of this code. To create a | |
| client, create a new class and save it as Client.java in the | |
| org/apache/axis2/axis2userguide directory. It should contain the | |
| following code in <a href="userguide-codelisting7.html">Code | |
| Listing 7</a>.</p> | |
| <p>Note that using the service is simply a matter of creating and | |
| populating the appropriate type of request using the names defined | |
| in the WSDL file, and then using the stub to actually send the | |
| request to the appropriate method. For example, to call the | |
| DoInOnly operation, you create a DoInOnlyRequest, use its | |
| setMessageString() method to set the contents of its messageString | |
| element, and pass it as an argument to stub.DoInOnly().</p> | |
| <p>To build the client, type: ant jar.client</p> | |
| <p>This action creates two new directories, build and test. The | |
| test directory will be empty, but the build directory contains two | |
| versions of the client. The first version, in the lib directory, is | |
| a .jar file that contains the client class and the stub. The | |
| second, in the classes directory, is just raw classes.</p> | |
| <p>Make sure all the jar files in the Axis2 lib directory are in | |
| the classpath.</p> | |
| <p>If you have a service corresponding to this client you can run | |
| the client by adding the jar file to your classpath and typing: | |
| java org.apache.axis2.axis2userguide.Client</p> | |
| <p>(If you don't have such a service,, refer to the <a href= | |
| "userguide-buildingservices.html">Building services</a> | |
| document.)</p> | |
| <p>You should see the response in the console window of your | |
| servlet container. It should look something like this:</p> | |
| <p><img alt= | |
| "Response in a console window of your servlet container" src= | |
| "images/fig03.jpg" /><br clear="all" /></p> | |
| <p>ADB is not your only option for generating Web service clients. | |
| Other options include <a href= | |
| "userguide-creatingclients-xmlbeans.html">XmlBeans</a>, <a href= | |
| "userguide-creatingclients-jibx.html">JiBX</a> and | |
| JAXBRI.</p> | |
| <p><strong>See the Next Section</strong> -<a href= | |
| "userguide-buildingservices.html#buildservices">Building | |
| Services</a></p> | |
| </body> | |
| </html> |