<?xml version="1.0" encoding=""?>
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
  <meta http-equiv="content-type" content="" />
  <title>Generating a Web Service Client using Axis2 and XmlBeans</title>
  <link href="../css/axis-docs.css" rel="stylesheet" type="text/css"
  media="all" />
</head>

<body>
<h1 class="title">Generating a Web Service Client using Apache Axis2 and
XMLBeans</h1>

<p>This document explains how to generate a Web service client using Apache
Axis2 and XMLBeans data binding. The service has the following WSDL:</p>

<p><b>Code Listing 1: The WSDL file</b></p>
<pre>&lt;?xml version="1.0" encoding="UTF-8"?&gt;
&lt;wsdl:definitions
   xmlns:apachesoap="http://xml.apache.org/xml-soap"
   xmlns:impl="http://apache.org/axis2/Axis2UserGuide"
   xmlns:intf="http://apache.org/axis2/Axis2UserGuide"
   xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/"
   xmlns:wsdlsoap="http://schemas.xmlsoap.org/wsdl/soap/"
   xmlns:xsd="http://www.w3.org/2001/XMLSchema"
   targetNamespace="http://apache.org/axis2/Axis2UserGuide"&gt;

  &lt;wsdl:types&gt;
    &lt;schema
       elementFormDefault="qualified"
       targetNamespace="http://apache.org/axis2/Axis2UserGuide"
       xmlns="http://www.w3.org/2001/XMLSchema"&gt;
      
      &lt;!-- ELEMENTS --&gt;
      
      &lt;element name="DoInOnlyRequest"&gt;
        &lt;complexType&gt;
          &lt;sequence&gt;
            &lt;element name="messageString" type="xsd:string"/&gt;
          &lt;/sequence&gt;
        &lt;/complexType&gt;
      &lt;/element&gt;
      
      &lt;element name="TwoWayOneParameterEchoRequest"&gt;
        &lt;complexType&gt;
          &lt;sequence&gt;
            &lt;element name="echoString" type="xsd:string"/&gt;
          &lt;/sequence&gt;
        &lt;/complexType&gt;
      &lt;/element&gt;
      &lt;element name="TwoWayOneParameterEchoResponse"&gt;
        &lt;complexType&gt;
          &lt;sequence&gt;
            &lt;element name="echoString" type="xsd:string"/&gt;
          &lt;/sequence&gt;
        &lt;/complexType&gt;
      &lt;/element&gt;
      
      &lt;element name="NoParametersRequest"&gt;
        &lt;complexType/&gt;
      &lt;/element&gt;
      &lt;element name="NoParametersResponse"&gt;
        &lt;complexType/&gt;
      &lt;/element&gt;
      
      &lt;element name="MultipleParametersAddItemRequest"&gt;
        &lt;complexType&gt;
          &lt;sequence&gt;
            &lt;element name="itemId" type="xsd:int"/&gt;
            &lt;element name="itemName" type="xsd:string"/&gt;
            &lt;element name="price" type="xsd:float"/&gt;
            &lt;element name="description" type="xsd:string"/&gt;
          &lt;/sequence&gt;
        &lt;/complexType&gt;
      &lt;/element&gt;

      &lt;element name="MultipleParametersAddItemResponse"&gt;
        &lt;complexType&gt;
          &lt;sequence&gt;
          &lt;element name="itemId" type="xsd:int"/&gt;
          &lt;element name="successfulAdd" type="xsd:boolean"/&gt;
          &lt;/sequence&gt;
        &lt;/complexType&gt;
      &lt;/element&gt;

    &lt;/schema&gt;
  &lt;/wsdl:types&gt;

  
  &lt;!-- MESSAGES --&gt;

  &lt;wsdl:message name="DoInOnlyRequestMessage"&gt;
    &lt;wsdl:part name="input" element="impl:DoInOnlyRequest"/&gt;
  &lt;/wsdl:message&gt;

  &lt;wsdl:message name="TwoWayOneParameterEchoRequestMessage"&gt;
    &lt;wsdl:part name="input" element="impl:TwoWayOneParameterEchoRequest"/&gt;
  &lt;/wsdl:message&gt;
  &lt;wsdl:message name="TwoWayOneParameterEchoResponseMessage"&gt;
    &lt;wsdl:part name="output" element="impl:TwoWayOneParameterEchoResponse"/&gt;
  &lt;/wsdl:message&gt;

  &lt;wsdl:message name="NoParametersRequestMessage"&gt;
    &lt;wsdl:part name="input" element="impl:NoParametersRequest"/&gt;
  &lt;/wsdl:message&gt;
  &lt;wsdl:message name="NoParametersResponseMessage"&gt;
    &lt;wsdl:part name="output" element="impl:NoParametersResponse"/&gt;
  &lt;/wsdl:message&gt;

  &lt;wsdl:message name="MultipleParametersAddItemRequestMessage"&gt;
    &lt;wsdl:part name="input" element="impl:MultipleParametersAddItemRequest"/&gt;
  &lt;/wsdl:message&gt;
  &lt;wsdl:message name="MultipleParametersAddItemResponseMessage"&gt;
    &lt;wsdl:part name="output" element="impl:MultipleParametersAddItemResponse"/&gt;
  &lt;/wsdl:message&gt;


  &lt;!-- Port type (operations) --&gt;

  &lt;wsdl:portType name="Axis2UserGuidePortType"&gt;

    &lt;wsdl:operation name="DoInOnly" parameterOrder="input"&gt;
      &lt;wsdl:input name="DoInOnlyRequestMessage"
                  message="impl:DoInOnlyRequestMessage"/&gt;
    &lt;/wsdl:operation&gt;

    &lt;wsdl:operation name="TwoWayOneParameterEcho" parameterOrder="input"&gt;
      &lt;wsdl:input name="TwoWayOneParameterEchoRequestMessage"
                  message="impl:TwoWayOneParameterEchoRequestMessage"/&gt;
      &lt;wsdl:output name="TwoWayOneParameterEchoResponseMessage"
                  message="impl:TwoWayOneParameterEchoResponseMessage"/&gt;
    &lt;/wsdl:operation&gt;

    &lt;wsdl:operation name="NoParameters" parameterOrder="input"&gt;
      &lt;wsdl:input name="NoParametersRequestMessage"
                  message="impl:NoParametersRequestMessage"/&gt;
      &lt;wsdl:output name="NoParametersResponseMessage"
                   message="impl:NoParametersResponseMessage"/&gt;
    &lt;/wsdl:operation&gt;

    &lt;wsdl:operation name="MultipleParametersAddItem" parameterOrder="input"&gt;
      &lt;wsdl:input name="MultipleParametersAddItemRequestMessage"
                  message="impl:MultipleParametersAddItemRequestMessage"/&gt;
      &lt;wsdl:output name="MultipleParametersAddItemResponseMessage"
                  message="impl:MultipleParametersAddItemResponseMessage"/&gt;
    &lt;/wsdl:operation&gt;

  &lt;/wsdl:portType&gt;


  &lt;!-- BINDING (bind operations) --&gt;
  &lt;wsdl:binding
     name="Axis2UserGuideSoapBinding"
     type="impl:Axis2UserGuidePortType"&gt;
    &lt;wsdlsoap:binding style="document" transport="http://schemas.xmlsoap.org/soap/http"/&gt;

    &lt;wsdl:operation name="DoInOnly"&gt;
      &lt;wsdlsoap:operation soapAction="DoInOnly"/&gt;
      &lt;wsdl:input&gt;
        &lt;wsdlsoap:body use="literal"/&gt;
      &lt;/wsdl:input&gt;
    &lt;/wsdl:operation&gt;

    &lt;wsdl:operation name="TwoWayOneParameterEcho"&gt;
      &lt;wsdlsoap:operation soapAction="TwoWayOneParameterEcho"/&gt;
      &lt;wsdl:input&gt;
        &lt;wsdlsoap:body use="literal"/&gt;
      &lt;/wsdl:input&gt;
      &lt;wsdl:output&gt;
        &lt;wsdlsoap:body use="literal"/&gt;
      &lt;/wsdl:output&gt;
    &lt;/wsdl:operation&gt;

    &lt;wsdl:operation name="NoParameters"&gt;
      &lt;wsdlsoap:operation soapAction="NoParameters"/&gt;
      &lt;wsdl:input&gt;
        &lt;wsdlsoap:body use="literal"/&gt;
      &lt;/wsdl:input&gt;
      &lt;wsdl:output&gt;
        &lt;wsdlsoap:body use="literal"/&gt;
      &lt;/wsdl:output&gt;
    &lt;/wsdl:operation&gt;

    &lt;wsdl:operation name="MultipleParametersAddItem"&gt;
      &lt;wsdlsoap:operation soapAction="MultipleParametersAddItem"/&gt;
      &lt;wsdl:input&gt;
        &lt;wsdlsoap:body use="literal"/&gt;
      &lt;/wsdl:input&gt;
      &lt;wsdl:output&gt;
        &lt;wsdlsoap:body use="literal"/&gt;
      &lt;/wsdl:output&gt;
    &lt;/wsdl:operation&gt;
  &lt;/wsdl:binding&gt;


  &lt;!-- SERVICE --&gt;

  &lt;wsdl:service name="Axis2UserGuideService"&gt;
    &lt;wsdl:port binding="impl:Axis2UserGuideSoapBinding"
               name="Axis2UserGuide"&gt;
      &lt;wsdlsoap:address location="http://localhost:8080/axis2/services/Axis2UserGuide"/&gt;
    &lt;/wsdl:port&gt;
  &lt;/wsdl:service&gt;
&lt;/wsdl:definitions&gt;</pre>

<p>Note that the document defines four operations, DoInOnly, NoParameters,
TwoWayOneParameterEcho, and MultipleParametersAddItem. Each client will
include methods for calling each of these operations.</p>

<p>(For more information on WSDL, refer to: <a
href="http://www.w3.org/2002/ws/desc/">http://www.w3.org/2002/ws/desc/</a>
.)</p>

<p><b>The short story:</b></p>
<ol>
  <li><a
    href="http://ws.apache.org/axis2/download/1_1/download.cgi#std-bin">Download</a>
    and unpack the Apache Axis2 Standard Distribution, if you have not done
    so already.</li>
  <li>Create the client classes with the following command:<br />

    <pre>%AXIS2_HOME%\bin\WSDL2Java -uri Axis2UserGuide.wsdl -p org.apache.axis2.axis2userguide -d xmlbeans -s</pre>
  </li>
  <li>Create the client (for example, Client.java) and save it in the
    org/apache/axis2/axis2userguide directory.</li>
  <li>Build the client by typing: <code>ant jar.client.</code></li>
  <li>Make sure all the .jar files in the Axis2 lib directory are in the
    CLASSPATH.</li>
  <li>Assuming you have a corresponding service, run the client by adding the
    generated Axis2UserGuideService-test-client.jar file in build/lib to the
    CLASSPATH and type: <code>java
    org.apache.axis2.axis2userguide.Client</code></li>
</ol>

<p><b>The long story:</b></p>

<p><a
href="http://ws.apache.org/axis2/download/1_1/download.cgi#std-bin">Download</a>
and unpack the Apache Axis2 Standard Distribution, if you have not done so
already. The <a
href="http://ws.apache.org/axis2/download/1_1/download.cgi#war">WAR
distribution</a> does not include the necessary utilities for generating
code, such as WSDL2Java.</p>

<p>The XMLBeans method of generating clients, unlike ADB, creates individual
classes for each object it must model. For example, generating a client for
this WSDL file created 642 files and folders. A small number of these files
are directly related to the actual client you're creating. The rest are
related to the processing of XML, and include data bound objects for schemas,
encodings, and other objects needed to process messages.</p>

<p>To generate the client, issue the following command in Listing 2.</p>

<p><b>Code Listing 2. Generating the client</b></p>
<pre>%AXIS2_HOME%\bin\WSDL2Java -uri Axis2UserGuide.wsdl -p org.apache.axis2.axis2userguide -d xmlbeans -s</pre>

<p>This command analyzes the WSDL file and creates the stubs in the package
org.apache.axis2.axis2userguide. The options specify that you want the
XMLBeans 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 several 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 all the generated
classes. The third is the resources directory, which includes files related
to the actual data binding process.</p>

<p>Now you need a client. 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 Listing 3.</p>

<p><b>Code Listing 3: Client.java</b></p>
<pre>package org.apache.axis2.axis2userguide;

public class Client{
    public static void main(java.lang.String args[]){
        try{
            Axis2UserGuideServiceStub stub =
                new Axis2UserGuideServiceStub
                ("http://localhost:8080/axis2/services/Axis2UserGuideService");

            doInOnly(stub);
            twoWayOneParameterEcho(stub);
            noParameters(stub);
            multipleParameters(stub);

        } catch(Exception e){
            e.printStackTrace();
            System.out.println("\n\n\n");
        }
    }

    /* fire and forget */
    public static void doInOnly(Axis2UserGuideServiceStub stub){
        try{
            DoInOnlyRequestDocument req =
                DoInOnlyRequestDocument.Factory.newInstance();
            DoInOnlyRequestDocument.DoInOnlyRequest data =
                req.addNewDoInOnlyRequest();

            data.setMessageString("fire and forget it!");

            stub.DoInOnly(req);
            System.out.println("done");
        } catch(Exception e){
            e.printStackTrace();
            System.out.println("\n\n\n");
        }
    }

    /* two way call/receive */
    public static void twoWayOneParameterEcho(Axis2UserGuideServiceStub stub){
        try{
            TwoWayOneParameterEchoRequestDocument req =
                TwoWayOneParameterEchoRequestDocument.Factory.newInstance();
            TwoWayOneParameterEchoRequestDocument.TwoWayOneParameterEchoRequest data =
                req.addNewTwoWayOneParameterEchoRequest();

            data.setEchoString("echo! ... echo!");

            TwoWayOneParameterEchoResponseDocument res =
                stub.TwoWayOneParameterEcho(req);

            System.out.println(res.getTwoWayOneParameterEchoResponse().getEchoString());
        } catch(Exception e){
            e.printStackTrace();
            System.out.println("\n\n\n");
        }
    }

    /* No parameters */
    public static void noParameters(Axis2UserGuideServiceStub stub){
        try{
            NoParametersRequestDocument req =
                NoParametersRequestDocument.Factory.newInstance();
            NoParametersRequestDocument.NoParametersRequest data =
                req.addNewNoParametersRequest();

            System.out.println(stub.NoParameters(req));
        } catch(Exception e){
            e.printStackTrace();
            System.out.println("\n\n\n");
        }
    }

    /* multiple parameters */
    public static void multipleParameters(Axis2UserGuideServiceStub stub){
        try{
            MultipleParametersAddItemRequestDocument req =
                MultipleParametersAddItemRequestDocument.Factory.newInstance();
            MultipleParametersAddItemRequestDocument.
                MultipleParametersAddItemRequest data =
                req.addNewMultipleParametersAddItemRequest();

            data.setPrice((float)1.99);
            data.setItemId((int)23872983);
            data.setDescription("Must have for cooking");
            data.setItemName("flour");

            MultipleParametersAddItemResponseDocument res =
                stub.MultipleParametersAddItem(req);
            MultipleParametersAddItemResponseDocument.
                MultipleParametersAddItemResponse dataRes =
                res.getMultipleParametersAddItemResponse();

            System.out.println(dataRes.getSuccessfulAdd());
            System.out.println(dataRes.getItemId());
        } catch(Exception e){
            e.printStackTrace();
            System.out.println("\n\n\n");
        }
    }
}</pre>

<p>XMLBeans uses a different architecture from ADB. In XMLBeans, processing
centers around documents, which are created through the use of factories, and
which include inner classes for the objects they contain. The process is
still the same -- you create a request, and send it using the stub -- the
code is just a bit more complex.</p>

<p>To build the client, type: <code>ant jar.client</code></p>

<p>This action creates two new directories, build and test. The test
directory will be empty, but the build directory will contain two versions of
the client. The first version in the lib directory consists of two .jar
files, one containing the Client class and the stub implementations, and the
other containing the XMLBeans-related classes. The second version in the
classes directory consists of just the raw classes.</p>

<p>Make sure all the .jar files in the Axis2 lib directory are on the
classpath.</p>

<p>If you have a service corresponding to this client (if you don't, check
out the <a href="userguide-buildingservices.html">Building Services</a>
document) you can run the client by adding the two .jar files to your
classpath and typing:
<code>java.org.apache.axis2.axis2userguide.Client</code></p>

<p>You should see the response in a 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/fig04.jpg" /><br clear="all" />
</p>
</body>
</html>
