<!DOCTYPE html>
<!--
 | Generated by Apache Maven Doxia at 2016-05-30 
 | Rendered using Apache Maven Fluido Skin 1.4
-->
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
  <head>
    <meta charset="UTF-8" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <meta name="Date-Revision-yyyymmdd" content="20160530" />
    <meta http-equiv="Content-Language" content="en" />
    <title>Apache Axis2 &#x2013; Generating a Web Service Client using Axis2 and
XmlBeans</title>
    <link rel="stylesheet" href="../css/apache-maven-fluido-1.4.min.css" />
    <link rel="stylesheet" href="../css/site.css" />
    <link rel="stylesheet" href="../css/print.css" media="print" />

      
    <script type="text/javascript" src="../js/apache-maven-fluido-1.4.min.js"></script>

    
    <meta name="generator" content="HTML Tidy for Windows (vers 14 June 2007), see www.w3.org" /><meta http-equiv="content-type" content="" />              </head>
        <body class="topBarDisabled">
          
        
    
        <div class="container-fluid">
          <div id="banner">
        <div class="pull-left">
                                    <a href="http://www.apache.org/" id="bannerLeft">
                                                                                        <img src="http://www.apache.org/images/asf_logo_wide.png"  alt="Apache Axis2"/>
                </a>
                      </div>
        <div class="pull-right">                                <a href=".././" id="bannerRight">
                                                                                                <img src="../images/axis.jpg" />
                </a>
      </div>
        <div class="clear"><hr/></div>
      </div>

      <div id="breadcrumbs">
        <ul class="breadcrumb">
                
                    
                  <li id="publishDate">Last Published: 2016-05-30
                      <span class="divider">|</span>
                   </li>
                  <li id="projectVersion">Version: 1.7.3
                          <span class="divider">|</span>
                      </li>
                                      <li class="">
                    <a href="http://www.apache.org" class="externalLink" title="Apache">
        Apache</a>
                    <span class="divider">/</span>
      </li>
            <li class="">
                    <a href="../index.html" title="Axis2/Java">
        Axis2/Java</a>
                    <span class="divider">/</span>
      </li>
        <li class="active ">Generating a Web Service Client using Axis2 and
XmlBeans</li>
                
                
                    
      
                            </ul>
      </div>

            
      <div class="row-fluid">
        <div id="leftColumn" class="span2">
          <div class="well sidebar-nav">
                
                    
                <ul class="nav nav-list">
                    <li class="nav-header">Axis2/Java</li>
                              
      <li>
  
                          <a href="../index.html" title="Home">
          <span class="none"></span>
        Home</a>
            </li>
                
      <li>
  
                          <a href="../download.html" title="Downloads">
          <span class="none"></span>
        Downloads</a>
            </li>
                                                                                                                                                                                          
      <li>
  
                          <a href="javascript:void(0)" title="Release Notes">
          <span class="icon-chevron-down"></span>
        Release Notes</a>
                    <ul class="nav nav-list">
                    
      <li>
  
                          <a href="../release-notes/1.6.1.html" title="1.6.1">
          <span class="none"></span>
        1.6.1</a>
            </li>
                    
      <li>
  
                          <a href="../release-notes/1.6.2.html" title="1.6.2">
          <span class="none"></span>
        1.6.2</a>
            </li>
                    
      <li>
  
                          <a href="../release-notes/1.6.3.html" title="1.6.3">
          <span class="none"></span>
        1.6.3</a>
            </li>
                    
      <li>
  
                          <a href="../release-notes/1.6.4.html" title="1.6.4">
          <span class="none"></span>
        1.6.4</a>
            </li>
                    
      <li>
  
                          <a href="../release-notes/1.7.0.html" title="1.7.0">
          <span class="none"></span>
        1.7.0</a>
            </li>
                    
      <li>
  
                          <a href="../release-notes/1.7.1.html" title="1.7.1">
          <span class="none"></span>
        1.7.1</a>
            </li>
                    
      <li>
  
                          <a href="../release-notes/1.7.2.html" title="1.7.2">
          <span class="none"></span>
        1.7.2</a>
            </li>
                    
      <li>
  
                          <a href="../release-notes/1.7.3.html" title="1.7.3">
          <span class="none"></span>
        1.7.3</a>
            </li>
              </ul>
        </li>
                
      <li>
  
                          <a href="../modules/index.html" title="Modules">
          <span class="none"></span>
        Modules</a>
            </li>
                
      <li>
  
                          <a href="../tools/index.html" title="Tools">
          <span class="none"></span>
        Tools</a>
            </li>
                              <li class="nav-header">Documentation</li>
                              
      <li>
  
                          <a href="../docs/toc.html" title="Table of Contents">
          <span class="none"></span>
        Table of Contents</a>
            </li>
                
      <li>
  
                          <a href="../docs/installationguide.html" title="Installation Guide">
          <span class="none"></span>
        Installation Guide</a>
            </li>
                
      <li>
  
                          <a href="../docs/quickstartguide.html" title="QuickStart Guide">
          <span class="none"></span>
        QuickStart Guide</a>
            </li>
                
      <li>
  
                          <a href="../docs/userguide.html" title="User Guide">
          <span class="none"></span>
        User Guide</a>
            </li>
                
      <li>
  
                          <a href="../docs/jaxws-guide.html" title="JAXWS Guide">
          <span class="none"></span>
        JAXWS Guide</a>
            </li>
                
      <li>
  
                          <a href="../docs/pojoguide.html" title="POJO Guide">
          <span class="none"></span>
        POJO Guide</a>
            </li>
                
      <li>
  
                          <a href="../docs/spring.html" title="Spring Guide">
          <span class="none"></span>
        Spring Guide</a>
            </li>
                
      <li>
  
                          <a href="../docs/webadminguide.html" title="Web Administrator's Guide">
          <span class="none"></span>
        Web Administrator's Guide</a>
            </li>
                
      <li>
  
                          <a href="../docs/migration.html" title="Migration Guide (from Axis1)">
          <span class="none"></span>
        Migration Guide (from Axis1)</a>
            </li>
                              <li class="nav-header">Resources</li>
                              
      <li>
  
                          <a href="../faq.html" title="FAQ">
          <span class="none"></span>
        FAQ</a>
            </li>
                
      <li>
  
                          <a href="../articles.html" title="Articles">
          <span class="none"></span>
        Articles</a>
            </li>
                
      <li>
  
                          <a href="http://wiki.apache.org/ws/FrontPage/Axis2/" class="externalLink" title="Wiki">
          <span class="none"></span>
        Wiki</a>
            </li>
                
      <li>
  
                          <a href="../refLib.html" title="Reference Library">
          <span class="none"></span>
        Reference Library</a>
            </li>
                
      <li>
  
                          <a href="../apidocs/index.html" title="Online Java Docs">
          <span class="none"></span>
        Online Java Docs</a>
            </li>
                              <li class="nav-header">Get Involved</li>
                              
      <li>
  
                          <a href="../overview.html" title="Overview">
          <span class="none"></span>
        Overview</a>
            </li>
                
      <li>
  
                          <a href="../svn.html" title="Checkout the Source">
          <span class="none"></span>
        Checkout the Source</a>
            </li>
                
      <li>
  
                          <a href="../mail-lists.html" title="Mailing Lists">
          <span class="none"></span>
        Mailing Lists</a>
            </li>
                
      <li>
  
                          <a href="../release-process.html" title="Release Process">
          <span class="none"></span>
        Release Process</a>
            </li>
                
      <li>
  
                          <a href="../guidelines.html" title="Developer Guidelines">
          <span class="none"></span>
        Developer Guidelines</a>
            </li>
                
      <li>
  
                          <a href="../siteHowTo.html" title="Build the Site">
          <span class="none"></span>
        Build the Site</a>
            </li>
                              <li class="nav-header">Project Information</li>
                              
      <li>
  
                          <a href="../team-list.html" title="Project Team">
          <span class="none"></span>
        Project Team</a>
            </li>
                
      <li>
  
                          <a href="../issue-tracking.html" title="Issue Tracking">
          <span class="none"></span>
        Issue Tracking</a>
            </li>
                
      <li>
  
                          <a href="http://svn.apache.org/viewvc/axis/axis2/java/core/trunk/" class="externalLink" title="Source Code">
          <span class="none"></span>
        Source Code</a>
            </li>
                
      <li>
  
                          <a href="../thanks.html" title="Acknowledgements">
          <span class="none"></span>
        Acknowledgements</a>
            </li>
                              <li class="nav-header">Apache</li>
                              
      <li>
  
                          <a href="http://www.apache.org/licenses/LICENSE-2.0.html" class="externalLink" title="License">
          <span class="none"></span>
        License</a>
            </li>
                
      <li>
  
                          <a href="http://www.apache.org/foundation/sponsorship.html" class="externalLink" title="Sponsorship">
          <span class="none"></span>
        Sponsorship</a>
            </li>
                
      <li>
  
                          <a href="http://www.apache.org/foundation/thanks.html" class="externalLink" title="Thanks">
          <span class="none"></span>
        Thanks</a>
            </li>
                
      <li>
  
                          <a href="http://www.apache.org/security/" class="externalLink" title="Security">
          <span class="none"></span>
        Security</a>
            </li>
            </ul>
                
                    
                
          <hr />

           <div id="poweredBy">
                            <div class="clear"></div>
                            <div class="clear"></div>
                            <div class="clear"></div>
                            <div class="clear"></div>
                             <a href="http://maven.apache.org/" title="Built by Maven" class="poweredBy">
        <img class="builtBy" alt="Built by Maven" src="../images/logos/maven-feather.png" />
      </a>
                  </div>
          </div>
        </div>
        
                
        <div id="bodyColumn"  class="span10" >
                                  
            <!-- ~ 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. --><html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">


<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>

<div>
<pre>
&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot;?&gt;
&lt;wsdl:definitions
   xmlns:apachesoap=&quot;http://xml.apache.org/xml-soap&quot;
   xmlns:impl=&quot;http://apache.org/axis2/Axis2UserGuide&quot;
   xmlns:intf=&quot;http://apache.org/axis2/Axis2UserGuide&quot;
   xmlns:wsdl=&quot;http://schemas.xmlsoap.org/wsdl/&quot;
   xmlns:wsdlsoap=&quot;http://schemas.xmlsoap.org/wsdl/soap/&quot;
   xmlns:xsd=&quot;http://www.w3.org/2001/XMLSchema&quot;
   targetNamespace=&quot;http://apache.org/axis2/Axis2UserGuide&quot;&gt;

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

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

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

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

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

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

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

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


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

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

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

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

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

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

  &lt;/wsdl:portType&gt;


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

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

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

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

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


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

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

<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 class="externalLink" 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 style="list-style-type: decimal">

<li><a href="../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 />

<div>
<pre>
%AXIS2_HOME%\bin\WSDL2Java -uri Axis2UserGuide.wsdl -p org.apache.axis2.axis2userguide -d xmlbeans -s
</pre></div></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: <tt>ant jar.client.</tt></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: <tt>java
org.apache.axis2.axis2userguide.Client</tt></li>
</ol>

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

<p><a href="../download.cgi#std-bin">Download</a>
and unpack the Apache Axis2 Standard Distribution, if you have not
done so already. The <a href="../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>

<div>
<pre>
%AXIS2_HOME%\bin\WSDL2Java -uri Axis2UserGuide.wsdl -p org.apache.axis2.axis2userguide -d xmlbeans -s
</pre></div>

<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 class="externalLink" 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>

<div>
<pre>
package org.apache.axis2.axis2userguide;

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

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

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

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

            data.setMessageString(&quot;fire and forget it!&quot;);

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

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

            data.setEchoString(&quot;echo! ... echo!&quot;);

            TwoWayOneParameterEchoResponseDocument res =
                stub.TwoWayOneParameterEcho(req);

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

    /* 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(&quot;\n\n\n&quot;);
        }
    }

    /* 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(&quot;Must have for cooking&quot;);
            data.setItemName(&quot;flour&quot;);

            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(&quot;\n\n\n&quot;);
        }
    }
}
</pre></div>

<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: <tt>ant jar.client</tt></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:
<tt>java.org.apache.axis2.axis2userguide.Client</tt></p>

<p>You should see the response in a console window of your servlet
container. It should look something like this:</p>

<p><img src="images/fig04.jpg" alt="Response in a console window of your servlet container" /><br /></p>

</html>
                  </div>
            </div>
          </div>

    <hr/>

    <footer>
            <div class="container-fluid">
                      <div class="row-fluid">
                                      <p >Copyright &copy;                    2004&#x2013;2016
                        <a href="http://www.apache.org/">The Apache Software Foundation</a>.
            All rights reserved.      
                    
      </p>
                </div>

        
                </div>
    </footer>
        </body>
</html>