<!DOCTYPE html>
<!--
 | Generated by Apache Maven Doxia Site Renderer 1.9.2 at 2021-08-01 
 | Rendered using Apache Maven Fluido Skin 1.6
-->
<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="20210801" />
    <meta http-equiv="Content-Language" content="en" />
    <title>Apache Axis2 &#x2013; Code Generator Tool Guide for Command Line and Ant
Task</title>
    <link rel="stylesheet" href="../css/apache-maven-fluido-1.6.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.6.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: 2021-08-01<span class="divider">|</span>
</li>
          <li id="projectVersion">Version: 1.8.0<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 ">Code Generator Tool Guide for Command Line and Ant
Task</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.8.0.html" title="1.8.0"><span class="none"></span>1.8.0</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="../git.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="https://github.com/apache/axis-axis2-java-core/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" >
<html xmlns="http://www.w3.org/1999/xhtml">


<h1>Code Generator Tool Guide for Command Line and Ant Task</h1>

<p>The Code Generator tool consists of a command line version and
an Ant Task. This document will list the command line references
and Ant task references. Also in detail, this document shows how to
build file using custom Ant task and invoking the Code Generator
from Ant.</p>

<p>This tool is bundled with the <a href="../download.cgi#std-bin">Axis2 Binary
Distribution</a>.</p>
<section>
<h2><a name="Content"></a>Content</h2>

<ul>

<li><a href="#intro">Introduction</a></li>

<li><a href="#cmdline">Command Line Version</a>

<ul>

<li><a href="#cmdref">Option Reference</a></li>
</ul>
</li>

<li><a href="#ant">Ant Task</a>

<ul>

<li><a href="#antref">Ant Task Reference</a></li>

<li><a href="#example">Example Build File Using the Custom Ant
Task</a></li>

<li><a href="#invoking">Invoking the Code Generator From
Ant</a></li>
</ul>
</li>

<li><a href="#appendix">Appendix</a></li>
</ul>
<a name="intro" id="intro"></a>
<section>
<h2><a name="Introduction"></a>Introduction</h2>

<p>This basic tool is implemented by the WSDL2Code class and just
for the convenience in the case of Java (which would be the
majority) there is another WSDL2Java class. One can choose to run
the main classes directly or use one of the scripts to run the
WSDL2Code and WSDL2Java appropriately. (the scripts are found in
the bin directory of the <a href="../download.cgi#std-bin">Standard Binary
Distribution</a>)</p>
<a name="cmdline" id="cmdline"></a>
<section>
<h2><a name="Command_Line_Version"></a>Command Line Version</h2>

<p>For those users who wish to use the command line version of the
tool, this section will be of value.</p>
<a name="cmdref" id="cmdref"></a>
<section>
<h3><a name="Option_Reference"></a>Option Reference</h3>

<p>Usage WSDL2Code &lt;option_reference&gt;</p>

<p><b>E.g. :- WSDL2Code -uri &lt;Location of WSDL&gt;</b></p>

<table border="0" class="table table-striped">
<tbody>

<tr class="a">

<td width="20%"><b>Short Option</b></td>

<td width="20%"><b>Long Option</b></td>

<td width="60%"><b>Description</b></td>

<td></td>
</tr>

<tr class="b">

<td width="20%">-uri &lt;Location of WSDL&gt;</td>

<td width="20%">None</td>

<td width="60%">WSDL file location. This should point to a WSDL
file in the local file system.</td>

<td></td>
</tr>

<tr class="a">

<td width="20%">-o &lt;output Location&gt;</td>

<td width="20%">--output &lt;output Location&gt;</td>

<td width="60%">Output file location. This is where the files would
be copied once the code generation is done. If this option is
omitted the generated files would be copied to the working
directory.</td>

<td></td>
</tr>

<tr class="b">

<td width="20%">-l &lt;language&gt;</td>

<td width="20%">--language &lt;language&gt;</td>

<td width="60%">Output language. Currently the code generator can
generate code in Java but it has the ability to be extended to
support other languages.</td>

<td></td>
</tr>

<tr class="a">

<td width="20%">-p &lt;package name&gt;</td>

<td width="20%">--package &lt;package name&gt;</td>

<td width="60%">The target package name. If omitted, a default
package (formed using the target namespace of the WSDL) will be
used.</td>

<td></td>
</tr>

<tr class="b">

<td width="20%">-a</td>

<td width="20%">--async</td>

<td width="60%">Generate code only for async style. When this
option is used the generated stubs will have only the asynchronous
invocation methods. Switched off by default.</td>

<td></td>
</tr>

<tr class="a">

<td width="20%">-s</td>

<td width="20%">--sync</td>

<td width="60%">Generate code only for sync style . When this
option is used the generated stubs will have only the synchronous
invocation methods. Switched off by default. When used with the -a
option, this takes precedence.</td>

<td></td>
</tr>

<tr class="b">

<td width="20%">-t</td>

<td width="20%">--test-case</td>

<td width="60%">Generates a test case. In the case of Java it would
be a JUnit test case.</td>

<td></td>
</tr>

<tr class="a">

<td width="20%">-ss</td>

<td width="20%">--server-side</td>

<td width="60%">Generates server side code (i.e. skeletons).
Default is off.</td>

<td></td>
</tr>

<tr class="b">

<td width="20%">-sd</td>

<td width="20%">--service-description</td>

<td width="60%">Generates the service descriptor (i.e. server.xml).
Default is off. Only valid with -ss, the server side code
generation option.</td>

<td></td>
</tr>

<tr class="a">

<td width="20%">-d &lt;databinding&gt;</td>

<td width="20%">--databinding-method &lt;databinding&gt;</td>

<td width="60%">Specifies the Databinding framework. Valid values
are xmlbeans, adb, jibx, and none. Default is adb.</td>

<td></td>
</tr>

<tr class="b">

<td width="20%">-g</td>

<td width="20%">--generate-all</td>

<td width="60%">Generates all the classes. This option is valid
only with the -ss (server side code generation) option. When on,
the client code (stubs) will also be generated along with the
skeleton.</td>

<td></td>
</tr>

<tr class="a">

<td width="20%">-u</td>

<td width="20%">--unpack-classes</td>

<td width="60%">Unpack classes. This option specifies whether to
unpack the classes and generate separate classes for the
databinders.</td>

<td></td>
</tr>

<tr class="b">

<td width="20%">-sn &lt;service name&gt;</td>

<td width="20%">--service-name &lt;service name&gt;</td>

<td width="60%">Specifies the service name to be code generated. If
the service name is not specified, then the first service will be
picked.</td>

<td></td>
</tr>

<tr class="a">

<td width="20%">-pn &lt;port name&gt;</td>

<td width="20%">--port-name &lt;port name&gt;</td>

<td width="60%">Specifies the port name to be code generated. If
the port name is not specified, then the first port (of the
selected service) will be picked.</td>

<td></td>
</tr>

<tr class="b">

<td width="20%">-ns2p</td>

<td width="20%">--namespace2package</td>

<td width="60%">Specifies a comma separated list of namespaces and
packages where the given package will be used in the place of the
auto generated package for the relevant namespace. The list will be
the format of ns1=pkg1,ns2=pkg2.</td>

<td></td>
</tr>

<tr class="a">

<td width="20%">-ssi</td>

<td width="20%">--serverside-interface</td>

<td width="60%">Generate an interface for the service
skeleton.</td>

<td></td>
</tr>

<tr class="b">

<td width="20%">-wv</td>

<td width="20%">--wsdl-version</td>

<td width="60%">WSDL Version. Valid Options : 2, 2.0, 1.1</td>

<td></td>
</tr>

<tr class="a">

<td width="20%">-S</td>

<td width="20%">--source-folder</td>

<td width="60%">Specify a directory path for generated source</td>

<td></td>
</tr>

<tr class="b">

<td width="20%">-R</td>

<td width="20%">--resource-folder</td>

<td width="60%">Specify a directory path for generated resources</td>

<td></td>
</tr>

<tr class="a">

<td width="20%">-em</td>

<td width="20%">--external-mapping</td>

<td width="60%">Specify an external mapping file</td>

<td></td>
</tr>

<tr class="b">

<td width="20%">-f</td>

<td width="20%">--flatten-files</td>

<td width="60%">Flattens the generated files</td>

<td></td>
</tr>

<tr class="a">

<td width="20%">-uw</td>

<td width="20%">--unwrap-params</td>

<td width="60%">Switch on un-wrapping</td>

<td></td>
</tr>

<tr class="b">

<td width="20%">-xsdconfig</td>

<td width="20%"></td>

<td width="60%">Use XMLBeans .xsdconfig file. Valid only with -d xmlbeans</td>

<td></td>
</tr>

<tr class="a">

<td width="20%">-ap</td>

<td width="20%">--all-ports</td>

<td width="60%">Generate code for all ports</td>

<td></td>
</tr>

<tr class="b">

<td width="20%">-or</td>

<td width="20%">--over-ride</td>

<td width="60%">Overwrite the existing classes</td>

<td></td>
</tr>

<tr class="a">

<td width="20%">-b</td>

<td width="20%">--backword-compatible</td>

<td width="60%">Generate Axis 1.x backword compatible code</td>

<td></td>
</tr>

<tr class="b">

<td width="20%">-sp</td>

<td width="20%">--suppress-prefixes</td>

<td width="60%">Suppress namespace prefixes (Optimzation that reduces size of soap request/response)</td>

<td></td>
</tr>

<tr class="a">

<td width="20%"></td>

<td width="20%">--noBuildXML</td>

<td width="60%">Don't generate the build.xml in the output directory</td>

<td></td>
</tr>

<tr class="b">

<td width="20%"></td>

<td width="20%">--noWSDL</td>

<td width="60%">Don't generate WSDL's in the resources directory</td>

<td></td>
</tr>

<tr class="a">

<td width="20%"></td>

<td width="20%">--noMessageReceiver</td>

<td width="60%">Don't generate a MessageReceiver in the generated sources</td>

<td></td>
</tr>
</tbody>
</table>

<p>Apart from these mentioned options one can pass extra options by
prefixing them with -E (uppercase). These extra options will be
processed by the extensions. The extra options that can be passed
are documented separately with the extensions documentation (For
example with ADB).</p>
<a name="ant" id="ant"></a>
</section><section>
<h2><a name="Ant_Task"></a>Ant Task</h2>

<p>The code generator also comes bundled with an Ant task. The ant
task is implemented by the org.apache.axis2.tool.ant.AntCodegenTask
class. Following are the ant task attributes.</p>
<a name="antref" id="antref"></a>
<section>
<h3><a name="Ant_Task_Reference"></a>Ant Task Reference</h3>

<table border="0" class="table table-striped">
<tbody>

<tr class="a">

<td>wsdlfilename</td>

<td>WSDL file location. Maps to the -uri option of the command line
tool.</td>
</tr>

<tr class="b">

<td>output</td>

<td>Output file location. This is where the files would be copied
once the code generation is done. If this option is omitted the
generated files would be copied to the working directory. Maps to
the -o option of the command line tool.</td>
</tr>

<tr class="a">

<td>language</td>

<td>Output language. Currently the code generator can generate code
in Java. Maps to the -l option of the command line tool.</td>
</tr>

<tr class="b">

<td>packageName</td>

<td>The target package name. If omitted, a default package (formed
using the target namespace of the WSDL) will be used. Maps to the
-p option of the command line tool.</td>
</tr>

<tr class="a">

<td>databindingName</td>

<td>Data binding framework name. Maps to the -d option of the
command line tool. Possible values include &quot;adb&quot;, &quot;xmlbeans&quot;,
&quot;jibx&quot;,&quot;jaxbri&quot;.</td>
</tr>

<tr class="b">

<td>serviceName</td>

<td>The name of the service in the case of multiple services. Maps
to -sn options of the command line tool.</td>
</tr>

<tr class="a">

<td>portName</td>

<td>The name of the port in the presence of multiple ports. Maps to
-pn options of the command line tool.</td>
</tr>

<tr class="b">

<td>asyncOnly</td>

<td>Generate code only for async style. When this option is used
the generated stubs will have only the asynchronous invocation
methods. Defaults to false if omitted. Only true and false are
applicable as values. Maps to the -a option of the command line
tool.</td>
</tr>

<tr class="a">

<td>syncOnly</td>

<td>Generate code only for sync style. When this option is used the
generated stubs will have only the synchronous invocation methods.
Defaults to false if omitted. Only true and false are applicable as
values. Maps to the -s option of the command line tool.</td>
</tr>

<tr class="b">

<td>serverSide</td>

<td>Generates server side code (i.e. skeletons). Only true and
false are applicable as values. Default is false. Maps to the -ss
option of the command line tool.</td>
</tr>

<tr class="a">

<td>testcase</td>

<td>Generates a test case. Possible values are true and false. Maps
to the -t options of the command line tool.</td>
</tr>

<tr class="b">

<td>generateServiceXml</td>

<td>Generates server side code (i.e. skeletons). Only true and
false are applicable as values. Default is false. Maps to the -sd
option of the command line tool.</td>
</tr>

<tr class="a">

<td>unpackClasses</td>

<td>Unpacks the generated classes. This forces the databinding
classes to be generated separately, which otherwise would have been
generated as inner classes.</td>
</tr>

<tr class="b">

<td>generateAllClasses</td>

<td>Generates all the classes including client and server side
code. Maps to the -g option of the command line tool.</td>
</tr>

<tr class="a">

<td>namespaceToPackages</td>

<td>A list of namespace to package mappings.</td>
</tr>

<tr class="b">

<td>serverSideInterface</td>

<td>Flag stating whether to generate an interface for the server
side skeleton.</td>
</tr>

<tr class="a">

<td>repositoryPath</td>

<td>Sets the repository path to be used. Maps to the -r option of
the command line tool.</td>
</tr>

<tr class="b">

<td>wsdlVersion</td>

<td>Sets the version of the wsdl that is being used during
codegeneration. This deafults to 1.1 and one can set this to 2,
when trying to work with a WSDL 2.0 document. Maps to the -wv
option of the command line tool.</td>
</tr>

<tr class="a">

<td>externalMapping</td>

<td>Location of the external mapping file to be used. Maps to the
-em option of the command line tool.</td>
</tr>

<tr class="b">

<td>targetSourceFolderLocation</td>

<td>Rather than dumping all the code in the same location, one has
the option to make the sources to be generated in a different
location, given using this option. Maps to the -S option of the
command line tool.</td>
</tr>

<tr class="a">

<td>targetResourcesFolderLocation</td>

<td>Rather than dumping all the code in the same location, one has
the option to make the resources to be generated in a different
location, given using this option. Maps to the -R option of the
command line tool.</td>
</tr>

<tr class="b">

<td>unwrap</td>

<td>This will select between wrapped and unwrapped during code
generation. Default is set to false. Maps to the -uw option of the
command line tool.</td>
</tr>
</tbody>
</table>
<a name="example" id="example"></a>
</section><section>
<h3><a name="Example_Build_File_Using_the_Custom_Ant_Task"></a>Example Build File Using the Custom Ant Task</h3>

<p>Following is an example ant build file that uses the custom Ant
task. You can use any wsdl file to test the example. Replace the
&quot;CombinedService.wsdl&quot; with the name of your wsdl file in the
following script.</p>

<div>
<pre>
1 &lt;?xml version=&quot;1.0&quot;?&gt;
    2 &lt;project name=&quot;CodegenExample&quot; default=&quot;main&quot; basedir=&quot;.&quot;&gt;
    3
    4 &lt;path id=&quot;example.classpath&quot;&gt;
    5 &lt;fileset dir=&quot;classes&quot;&gt;
    6 &lt;include name=&quot;**/*.jar&quot; /&gt;
    7 &lt;/fileset&gt;
    8 &lt;/path&gt;
    9
    10 &lt;target name=&quot;declare&quot; &gt;
    11 &lt;taskdef name=&quot;codegen&quot;
    12 classname=&quot;org.apache.axis2.tool.ant.AntCodegenTask&quot;
    13 classpathref=&quot;example.classpath&quot;/&gt;
    15 &lt;/target&gt;
    16
    17 &lt;target name=&quot;main&quot; depends=&quot;declare&quot;&gt;
    18 &lt;codegen
    19 wsdlfilename=&quot;C:\test\wsdl\CombinedService.wsdl&quot;
    20 output=&quot;C:\output&quot;
    21 serverside=&quot;true&quot;
    22 generateservicexml=&quot;true&quot;/&gt;
    23 &lt;/target&gt;
    24
    25 &lt;/project&gt;
</pre></div>

<p>In the above build script, from line 4 to 8 it sets the
classpath and includes all the .jar files (which are listed below)
into the classpath. From line 10 to 15 it creates a target to
declare a task called &quot;codegen&quot; and sets the appropriate class
(org.apache.axis2.tool.ant.AntCodegenTask) within the classpath in
line 12. From line 17 to 23 it creates the &quot;main&quot; target to
generate the code from the given wsdl. There are some arguments set
form line 19 to 22. Here in line 19 it sets the location of the
wsdl. In line 20 it sets the output directory in which the code is
generated. Line 21 indicates that this build generates the server
side code(skeleton) and line 22 indicates that the services.xml is
also generated.</p>

<p>Notice the main target that uses the &quot;codegen&quot; task which will
use the org.apache.axis2.tool.ant.AntCodegenTask class and run the
code generation tool internally while passing the relevant
arguments and do the proper generation. If a user types</p>

<p><code>&gt;ant</code> or <code>&gt;ant main</code></p>

<p>it will generate the server side code and services.xml for the
given WSDL file (C:\test\wsdl\CombinedService.wsdl -in the above
instance) and the generated code will be written to the specified
output path (C:\output - in the above instance).</p>

<p>For this Ant task to work the following jars need to be in the
class path.</p>

<ul>

<li>axis2-*.jar (from the Axis2 distribution)</li>

<li>wsdl4j-1.6.2.jar or higher (The WSDL4J implementation jar.
Bundled with the Axis2 distribution)</li>

<li>stax-api-1.0.1.jar (The StAX API's that contain the
javax.xml.namespace.QName class. This jar may be replaced by any
other jar that contains the javax.xml.namespace.QName
implementation. However Axis2 uses this class from the
stax-api-1.0.1.jar which comes bundled with the Axis2
distribution)</li>

<li>commons-logging-1.1.jar, neethi-2.0.jar and XmlSchema-1.2.jar
(from the Axis2 distribution)</li>

<li>axiom-api-1.2.1.jar and axiom-impl-1.2.1.jar (from the Axis2
distribution)</li>

<li>activation-1.1.jar (from the Axis2 distribution)</li>

<li>wstx-asl-3.1.0.jar (from the Axis2 distribution)</li>
</ul>
<a name="invoking" id="invoking"></a>
</section><section>
<h3><a name="Invoking_the_Code_Generator_From_Ant"></a>Invoking the Code Generator From Ant</h3>

<p>Since the users may find altering their ant class path a bit
daunting they can also follow an easier technique. The code
generator main class can be invoked directly through the build
file.</p>

<p>Below is an example of a full build.xml needed to run WSDL2Java
and generate the Java source files, compile the sources, and build
an AAR file ready for deployment (These are done one by one, by
calling the targets in the build file separately):</p>

<div>
<pre class="code">
&lt;!DOCTYPE project&gt;

&lt;project name=&quot;wsdl2java-example&quot; default=&quot;usage&quot; basedir=&quot;.&quot;&gt;

&lt;property name=&quot;project-name&quot; value=&quot;wsdl2java-example&quot;/&gt;
&lt;property file=&quot;build.properties&quot;/&gt;

&lt;property name=&quot;build&quot; value=&quot;build&quot;/&gt;
&lt;property name=&quot;src&quot; value=&quot;src&quot;/&gt;
&lt;property name=&quot;build.classes&quot; value=&quot;build/classes&quot; /&gt;

&lt;path id=&quot;axis.classpath&quot;&gt;
&lt;pathelement location=&quot;build/classes&quot; /&gt;
&lt;fileset dir=&quot;${axis.home}/lib&quot;&gt;
&lt;include name=&quot;**/*.jar&quot; /&gt;
&lt;/fileset&gt;
&lt;pathelement location=&quot;${build.classes}&quot; /&gt;
&lt;/path&gt;

&lt;path id=&quot;axis_client.classpath&quot;&gt;
&lt;pathelement location=&quot;build/classes&quot; /&gt;
&lt;fileset dir=&quot;${axis.home}&quot;&gt;
&lt;include name=&quot;**/*.jar&quot; /&gt;
&lt;/fileset&gt;
&lt;fileset dir=&quot;lib&quot;&gt;
&lt;include name=&quot;*.jar&quot; /&gt;
&lt;/fileset&gt;
&lt;pathelement location=&quot;${build.classes}&quot; /&gt;
&lt;/path&gt;

&lt;target name=&quot;usage&quot; description=&quot;Build file usage info (default task)&quot;&gt;
&lt;echo message=&quot; &quot; /&gt;
&lt;echo message=&quot;${project-name} &quot; /&gt;
&lt;echo message=&quot;-------------------------------------------------------&quot; /&gt;
&lt;echo message=&quot; &quot; /&gt;
&lt;echo message=&quot;Available Targets:&quot; /&gt;
&lt;echo message=&quot; &quot; /&gt;
&lt;echo message=&quot; Compiling:&quot; /&gt;
&lt;echo message=&quot; compile - Compiles the WSDL2Java source code&quot; /&gt;
&lt;echo message=&quot; &quot; /&gt;
&lt;echo message=&quot; Compiling client:&quot; /&gt;
&lt;echo message=&quot; compile_client - Compiles the client source code&quot; /&gt;
&lt;echo message=&quot; &quot; /&gt;
&lt;echo message=&quot; Cleaning up:&quot; /&gt;
&lt;echo message=&quot; clean - Delete class files&quot; /&gt;
&lt;echo message=&quot; &quot; /&gt;
&lt;echo message=&quot; WSDL:&quot; /&gt;
&lt;echo message=&quot; wsdl2java - Generate source from WSDL&quot; /&gt;
&lt;echo message=&quot; &quot; /&gt;
&lt;echo message=&quot; AAR:&quot; /&gt;
&lt;echo message=&quot; aar - Generate an .aar for deployment into WEB-INF/services&quot; /&gt;
&lt;echo message=&quot; &quot; /&gt;
&lt;echo message=&quot; Executing:&quot; /&gt;
&lt;echo message=&quot; runLogin - Execute the runLogin client&quot; /&gt;
&lt;/target&gt;

&lt;target name=&quot;prepare&quot; &gt;
&lt;mkdir dir=&quot;${build.classes}&quot; /&gt;
&lt;/target&gt;

&lt;target name=&quot;clean&quot; &gt;
&lt;delete dir=&quot;${build}&quot; /&gt;
&lt;delete dir=&quot;${dist}&quot; /&gt;
&lt;/target&gt;

&lt;target name=&quot;compile&quot;&gt;
&lt;echo message=&quot;Compiling wsdl2 files&quot;/&gt;

&lt;javac
srcdir=&quot;output&quot;
destdir=&quot;${build.classes}&quot;
deprecation=&quot;true&quot;
failonerror=&quot;true&quot; debug=&quot;true&quot;&gt;

&lt;classpath refid=&quot;axis.classpath&quot;/&gt;
&lt;/javac&gt;

&lt;/target&gt;

&lt;target name=&quot;wsdl2java&quot; depends=&quot;clean,prepare&quot;&gt;
&lt;delete dir=&quot;output&quot; /&gt;
&lt;java classname=&quot;org.apache.axis2.wsdl.WSDL2Java&quot; fork=&quot;true&quot;&gt;
&lt;classpath refid=&quot;axis.classpath&quot;/&gt;
&lt;arg value=&quot;-d&quot;/&gt;
&lt;arg value=&quot;xmlbeans&quot;/&gt;
&lt;arg value=&quot;-uri&quot;/&gt;
&lt;arg file=&quot;wsdl/LoginEndpoint.wsdl&quot;/&gt;
&lt;arg value=&quot;-ss&quot;/&gt;
&lt;arg value=&quot;-g&quot;/&gt;
&lt;arg value=&quot;-sd&quot;/&gt;
&lt;arg value=&quot;-o&quot;/&gt;
&lt;arg file=&quot;output&quot;/&gt;
&lt;arg value=&quot;-p&quot;/&gt;
&lt;arg value=&quot;org.example.types&quot;/&gt;
&lt;/java&gt;

&lt;!-- Move the schema folder to classpath--&gt;
&lt;move todir=&quot;${build.classes}&quot;&gt;
&lt;fileset dir=&quot;output/resources&quot;&gt;
&lt;include name=&quot;**/*schema*/**/*.class&quot;/&gt;
&lt;include name=&quot;**/*schema*/**/*.xsb&quot;/&gt;
&lt;/fileset&gt;
&lt;/move&gt;

&lt;/target&gt;

&lt;target name=&quot;jar_wsdl&quot; depends=&quot;compile&quot;&gt;
&lt;jar jarfile=&quot;lib/axis2_example_wsdl.jar&quot; &gt;
&lt;fileset dir=&quot;${build.classes}&quot; /&gt;
&lt;/jar&gt;
&lt;/target&gt;

&lt;!-- build an .aar file for axis2 web services --&gt;
&lt;target name=&quot;aar&quot; depends=&quot;compile&quot;&gt;
&lt;delete dir=&quot;${build.classes}/META-INF&quot; /&gt;
&lt;mkdir dir=&quot;${build.classes}/META-INF&quot; /&gt;
&lt;copy todir=&quot;${build.classes}/META-INF&quot; &gt;
&lt;fileset dir=&quot;output/resources&quot; &gt;
&lt;!-- axis2 web services definitions file --&gt;
&lt;include name=&quot;services.xml&quot;/&gt;
&lt;/fileset&gt;
&lt;fileset dir=&quot;wsdl&quot; &gt;
&lt;include name=&quot;LoginEndpoint.wsdl&quot;/&gt;
&lt;/fileset&gt;
&lt;/copy&gt;
&lt;jar jarfile=&quot;dist/LoginEndpoint.aar&quot; &gt;
&lt;fileset dir=&quot;${build.classes}&quot; /&gt;
&lt;/jar&gt;
&lt;/target&gt;

&lt;target name=&quot;compile_client&quot;&gt;
&lt;echo message=&quot;Compiling client files&quot;/&gt;

&lt;javac
srcdir=&quot;src&quot;
destdir=&quot;${build.classes}&quot;
deprecation=&quot;true&quot;
failonerror=&quot;true&quot; debug=&quot;true&quot;&gt;

&lt;classpath refid=&quot;axis.classpath&quot;/&gt;
&lt;/javac&gt;

&lt;/target&gt;

&lt;target name=&quot;runLogin&quot; depends=&quot;prepare,compile_client&quot; description=&quot;run simple Login client&quot;&gt;
&lt;java classname=&quot;org.client.LoginClient&quot; &gt;
&lt;classpath refid=&quot;axis_client.classpath&quot;/&gt;
&lt;/java&gt;
&lt;/target&gt;

&lt;/project&gt;
</pre></div>

<p>Place the above build.xml file in the 'bin' directory of the
axis2 binary distribution. Then create a build.properties file in
the same directory and specify the axis.home path pointing to the
axis2 binary distribution</p>

<p>E.g. :- axis.home=C://Axis2//axis2-1.1-bin</p>

<p>The above build.xml example also assumes three empty directories
exist, 'dist', 'lib', and 'src'.</p>

<p>Below is a validated WSDL Document following the
Document/Literal Style. The name of this file matches the name used
in the WSDL2Java ant task above, LoginEndpoint.wsdl.</p>

<div>
<pre class="code">
&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot;?&gt;

    &lt;definitions name=&quot;LoginService&quot; targetNamespace=&quot;http://login&quot; xmlns:tns=&quot;http://login&quot;
    xmlns=&quot;http://schemas.xmlsoap.org/wsdl/&quot; xmlns:xsd=&quot;http://www.w3.org/2001/XMLSchema&quot;
    xmlns:soap=&quot;http://schemas.xmlsoap.org/wsdl/soap/&quot; xmlns:ns2=&quot;http://login/types&quot;&gt;

    &lt;types&gt;
    &lt;schema targetNamespace=&quot;http://login/types&quot; xmlns:tns=&quot;http://login/types&quot;
    xmlns:soap11-enc=&quot;http://schemas.xmlsoap.org/soap/encoding/&quot;
    xmlns:xsi=&quot;http://www.w3.org/2001/XMLSchema-instance&quot;
    xmlns:wsdl=&quot;http://schemas.xmlsoap.org/wsdl/&quot;
    xmlns=&quot;http://www.w3.org/2001/XMLSchema&quot;&gt;
    &lt;import namespace=&quot;http://schemas.xmlsoap.org/soap/encoding/&quot;/&gt;
    &lt;element name=&quot;returnWebLoginElement&quot;&gt;
    &lt;complexType&gt;
    &lt;sequence&gt;

    &lt;element ref=&quot;tns:soap_session_idElement&quot;/&gt;
    &lt;element ref=&quot;tns:web_user_nameElement&quot;/&gt;
    &lt;/sequence&gt;
    &lt;/complexType&gt;
    &lt;/element&gt;
    &lt;element name=&quot;webLoginElement&quot;&gt;

    &lt;complexType&gt;
    &lt;sequence&gt;
    &lt;element ref=&quot;tns:user_nameElement&quot;/&gt;
    &lt;element ref=&quot;tns:user_passwordElement&quot;/&gt;
    &lt;/sequence&gt;
    &lt;/complexType&gt;

    &lt;/element&gt;
    &lt;element name=&quot;user_nameElement&quot; type=&quot;xsd:string&quot;/&gt;
    &lt;element name=&quot;user_passwordElement&quot; type=&quot;xsd:string&quot;/&gt;
    &lt;element name=&quot;soap_session_idElement&quot; type=&quot;xsd:string&quot;/&gt;
    &lt;element name=&quot;web_user_nameElement&quot; type=&quot;xsd:string&quot;/&gt;
    &lt;/schema&gt;&lt;/types&gt;

    &lt;message name=&quot;LoginEndpoint_webLogin&quot;&gt;
    &lt;part name=&quot;parameters&quot; element=&quot;ns2:webLoginElement&quot;/&gt;
    &lt;/message&gt;
    &lt;message name=&quot;LoginEndpoint_webLoginResponse&quot;&gt;
    &lt;part name=&quot;result&quot; element=&quot;ns2:returnWebLoginElement&quot;/&gt;
    &lt;/message&gt;

    &lt;portType name=&quot;LoginEndpoint&quot;&gt;
    &lt;operation name=&quot;webLogin&quot;&gt;
    &lt;input message=&quot;tns:LoginEndpoint_webLogin&quot; name=&quot;LoginEndpoint_webLogin&quot;/&gt;
    &lt;output message=&quot;tns:LoginEndpoint_webLoginResponse&quot; name=&quot;LoginEndpoint_webLoginResponse&quot;/&gt;
    &lt;/operation&gt;
    &lt;/portType&gt;

    &lt;binding name=&quot;LoginEndpointBinding&quot; type=&quot;tns:LoginEndpoint&quot;&gt;
    &lt;soap:binding transport=&quot;http://schemas.xmlsoap.org/soap/http&quot; style=&quot;document&quot;/&gt;
    &lt;operation name=&quot;webLogin&quot;&gt;
    &lt;soap:operation soapAction=&quot;webLogin&quot;/&gt;
    &lt;input name=&quot;LoginEndpoint_webLogin&quot;&gt;
    &lt;soap:body use=&quot;literal&quot;/&gt;

    &lt;/input&gt;
    &lt;output name=&quot;LoginEndpoint_webLoginResponse&quot;&gt;
    &lt;soap:body use=&quot;literal&quot;/&gt;
    &lt;/output&gt;
    &lt;/operation&gt;
    &lt;/binding&gt;

    &lt;service name=&quot;LoginService&quot;&gt;
    &lt;port name=&quot;LoginEndpointPort&quot; binding=&quot;tns:LoginEndpointBinding&quot;&gt;
    &lt;soap:address location=&quot;http://localhost:8080/axis2/services/LoginService&quot;/&gt;&lt;/port&gt;
    &lt;/service&gt;&lt;/definitions&gt;
</pre></div>

<p>Place the above file, named LoginEndpoint.wsdl, in the directory
'wsdl' which is also inside the 'bin' directory. Run the wsdl2java
command via the ant task defined above (&gt;ant wsdl2java), and
there will be a directory called 'output' created. This directory
contains the WSDL2Java generated source.</p>

<p>An important detail is that an XMLBean class file is also
generated by WSDL2Java, TypeSystemHolder.class. That file is placed
into build/classes by the above ant task and will be needed to
compile the generated sources. A frequent problem is users get an
error such as:</p>

<p><i><b>ClassNotFoundException : Cannot load SchemaTypeSystem.
Unable to load class with name
schemaorg_apache_xmlbeans.system.s68C41DB812F52C975439BA10FE4FEE54.TypeSystemHolder.
Make sure the generated binary files are on the
classpath.</b></i></p>

<p>The TypeSystemHolder.class generated by WSDL2Java must be placed
in your classpath in order to avoid this error.</p>

<p>The next step is to modify the generated Skeleton Java Source
file - the Web service. This file as generated returns null and
needs to be updated to contain the business logic.</p>

<p>After the WSDL2Java command runs the file LoginEndpoint.wsdl,
edit the following file:</p>

<p>output/src/org/example/types/LoginServiceSkeleton.java. You
should see the following code:</p>

<div>
<pre class="code">
/**
    * LoginServiceSkeleton.java
    *
    * This file was auto-generated from WSDL
    * by the Apache Axis2 version: 1.0-RC4 Apr 28, 2006 (05:23:23 IST)
    */
    package org.example.types;
    /**
    * LoginServiceSkeleton java skeleton for the axisService
    */
    public class LoginServiceSkeleton {


    /**
    * Auto generated method signature

    * @param param0

    */
    public login.types.ReturnWebLoginElementDocument webLogin
    (login.types.WebLoginElementDocument param0 )

    {
    //Todo fill this with the necessary business logic
    throw new java.lang.UnsupportedOperationException();
    }

    }
</pre></div>

<p>Replace the contents of this file with the following, which uses
the complex types generated by WSDL2Java and the example wsdl
file:</p>

<div>
<pre class="code">
/**
    * LoginServiceSkeleton.java
    *
    * This file was auto-generated from WSDL
    * by the Apache Axis2 version: 1.0-RC4 Apr 28, 2006 (05:23:23 IST)
    */
    package org.example.types;
    import login.types.ReturnWebLoginElementDocument;
    import login.types.ReturnWebLoginElementDocument.*;
    import login.types.WebLoginElementDocument;
    import login.types.WebLoginElementDocument.*;

    /**
    * Auto generated java skeleton for the service by the Axis code generator
    */
    public class LoginServiceSkeleton {

    /**
    * Auto generated method signature

    * @param webLoginElementDocument changed from param0

    */
    public ReturnWebLoginElementDocument webLogin
    (WebLoginElementDocument webLoginElementDocument ){

    //Todo fill this with the necessary business logic
    System.out.println(&quot;LoginServiceSkeleton.webLogin reached successfully!&quot;);

    // Get parameters passed in
    WebLoginElement webLoginElement = webLoginElementDocument.getWebLoginElement();
    String userName = webLoginElement.getUserNameElement();
    String password = webLoginElement.getUserPasswordElement();
    System.out.println(&quot;LoginServiceSkeleton.webLogin userName: &quot; + userName);
    System.out.println(&quot;LoginServiceSkeleton.webLogin password: &quot; + password);

    // input paramaters would be used here

    // prepare output
    ReturnWebLoginElementDocument retDoc =
    ReturnWebLoginElementDocument.Factory.newInstance();

    ReturnWebLoginElement retElement = ReturnWebLoginElement.Factory.newInstance();

    retElement.setWebUserNameElement(&quot;joe sixpack&quot;);
    retElement.setSoapSessionIdElement(&quot;some_random_string&quot;);
    System.out.println(&quot;validate retElement: &quot; + retElement.validate());

    retDoc.setReturnWebLoginElement(retElement);
    System.out.println(&quot;validate retDoc: &quot; + retDoc.validate());

    System.out.println(&quot;LoginServiceSkeleton.webLogin returning...&quot;);

    return retDoc;

    }
    }
</pre></div>

<p>The next steps assume the axis2.war has been deployed and has
expanded in a servlet container.</p>

<p>Run the 'jar_wsdl' ant task from the example build.xml (&gt;ant
jar_wsdl), which generates a jar file axis2_example_wsdl.jar in the
'bin/lib' directory. This jar will be used to compile the client,
and also will be placed in the servlet container.</p>

<p>Next, run the 'aar' ant task from the example build.xml (&gt;ant
aar), which generates the deployable axis2 Web service. Place
dist/LoginEndpoint.aar into axis2/WEB-INF/services . Place
lib/axis2_example_wsdl.jar into axis2/WEB-INF/lib . Verify the
happy axis page loaded the services correctly - there should be the
service 'LoginEndpoint' with the available operation 'webLogin'
displayed.</p>

<p>The last step is to create and run the client. In the src
directory create the file org.client.LoginClient.java, with the
contents below:</p>

<div>
<pre class="code">
package org.client;

    import org.apache.axis2.AxisFault;

    import login.types.ReturnWebLoginElementDocument;
    import login.types.ReturnWebLoginElementDocument.*;
    import login.types.WebLoginElementDocument;
    import login.types.WebLoginElementDocument.*;
    import org.example.types.LoginServiceStub;

    /**
    * Login.
    *
    */
    public class LoginClient {

    public static void main(String[] args) {
    try {

    System.out.println(&quot;webLogin, firing...&quot;);
    LoginServiceStub stub = new LoginServiceStub();

    WebLoginElementDocument webLoginElementDocument
    = WebLoginElementDocument.Factory.newInstance();
    WebLoginElement webLoginElement =
    WebLoginElement.Factory.newInstance();
    webLoginElement.setUserNameElement(&quot;joe&quot;);
    webLoginElement.setUserPasswordElement(&quot;sixpack&quot;);

    webLoginElementDocument.setWebLoginElement(webLoginElement);

    System.out.println(&quot;validate: &quot; + webLoginElement.validate());
    stub.webLogin(webLoginElementDocument);

    ReturnWebLoginElementDocument returnWebLoginElementDocument =
    stub.webLogin(webLoginElementDocument);

    System.out.println(&quot;Client returned&quot;);

    ReturnWebLoginElementDocument.ReturnWebLoginElement
    retElement = returnWebLoginElementDocument.getReturnWebLoginElement();

    System.out.println(&quot;WebUserName: &quot; + retElement.getWebUserNameElement());
    System.out.println(&quot;SOAPSessionId: &quot; + retElement.getSoapSessionIdElement());
    System.out.println(&quot;webLogin, completed!!!&quot;);

    } catch (AxisFault axisFault) {
    axisFault.printStackTrace();
    } catch (Exception ex) {
    ex.printStackTrace();
    }
    }
    }
</pre></div>

<p>Now run the ant task 'runLogin' (&gt;ant runLogin). The
following output should appear:</p>

<div>
<pre class="code">
runLogin:
    [echo] running the webLogin client
    [java] webLogin, firing...
    [java] validate: true
    [java] Client returned
    [java] WebUserName: joe sixpack
    [java] SOAPSessionId: some_random_string
    [java] webLogin, completed!!!
</pre></div>
<a name="appendix" id="appendix"></a>
</section><section>
<h2><a name="Appendix"></a>Appendix</h2>

<ul>

<li>Eclipse reference - <a class="externalLink" href="http://www.eclipse.org/">http://www.eclipse.org/</a></li>

<li>Custom Ant Tasks - <a class="externalLink" href="http://ant.apache.org/manual/develop.html">http://ant.apache.org/manual/develop.html</a></li>
</ul>

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