<html>
<head>
  <meta http-equiv="content-type" content="">
  <title>Maven2 WSDL2Code Plug-in Guide</title>
  <link href="../../../css/axis-docs.css" rel="stylesheet" type="text/css"
  media="all">
</head>

<body>
<h1>Maven2 WSDL2Code Plug-in Guide</h1>

<h2>Introduction</h2>

<p>This plugin takes as input a WSDL and generates client and server stubs
for calling or implementing a Web service matching the WSDL.</p>

<p><a href="http://ws.apache.org/axis2/tools/index.html"
target="_blank">[Download Plugin Tool]</a></p>

<h2>Goals</h2>

<p>The WSDl2Code offers a single goal:</p>
<ul>
  <li>wsdl2code (default): Reads the WSDL and generates code.</li>
</ul>

<p>To run the plugin, add the following section to your <a
href="http://maven.apache.org/guides/introduction/introduction-to-the-pom.html">POM</a>
(Project Object Model):</p>
<pre>    &lt;build&gt;
    &lt;plugins&gt;
    &lt;plugin&gt;
    &lt;groupId&gt;org.apache.axis2.maven2&lt;/groupId&gt;
    &lt;artifactId&gt;axis2-wsdl2code-maven-plugin&lt;/artifactId&gt;
    &lt;executions&gt;
    &lt;execution&gt;
    &lt;goals&gt;
    &lt;goal&gt;wsdl2code&lt;/goal&gt;
    &lt;/goals&gt;
    &lt;/execution&gt;
    &lt;configuration&gt;
    &lt;packageName&gt;com.foo.myservice&lt;/packageName&gt;
    &lt;/configuration&gt;
    &lt;/executions&gt;
    &lt;/plugin&gt;
    &lt;/plugins&gt;
    &lt;/build&gt;</pre>

<p>The plugin will be invoked automatically in the generate-sources phase.
You can also invoke it directly from the command line by running the
command</p>
<pre>mvn wsdl2code:wsdl2code</pre>

<h3>The WSDL2Code Goal</h3>

<p>By default, the plugin reads the file
<strong>src/main/axis2/service.wsdl</strong>. Sources for the Java
programming language and the ADB data binding are generated into
<strong>target/generated-sources/axis2/wsdl2code</strong>. Note the
configuration element <strong>packageName</strong> above, which sets the
package name, thus a subdirectory.</p>

<h2>Configuration</h2>

<p>The WSDL2Code goal takes the following parameters as input. All parameters
can be set from the command line by using properties. For example, the
parameter "generateServerSide" may be set using the property
"axis2.wsdl2code.generateServerSide". If the parameter isn't set via property
or in the POM, then a default value applies.</p>

<table border="2">
  <tbody>
    <tr align="center">
      <td><strong>Parameter Name</strong></td>
      <td><strong>Command Line Property</strong></td>
      <td><strong>Description</strong></td>
      <td><strong>Default Value</strong></td>
    </tr>
    <tr>
      <td>databindingName</td>
      <td>${axis2.wsdl2code.databindingName}</td>
      <td>Data binding framework, which is being used by the generated
        sources.</td>
      <td>adb</td>
    </tr>
    <tr>
      <td>generateAllClasses</td>
      <td>${axis2.wsdl2code.generateAllClasses}</td>
      <td>Whether to generate simply all classes. This is only valid in
        conjunction with "generateServerSide".</td>
      <td>false</td>
    </tr>
    <tr>
      <td>generateServerSide</td>
      <td>${axis2.wsdl2code.generateServerSide}</td>
      <td>Whether server side sources are being generated.</td>
      <td>false</td>
    </tr>
    <tr>
      <td>generateServerSideInterface</td>
      <td>${axis2.wsdl2code.generateServerSideInterface}</td>
      <td>Whether to generate the server side interface.</td>
      <td>false</td>
    </tr>
    <tr>
      <td>generateServicesXml</td>
      <td>${axis2.wsdl2code.generateServicesXml}</td>
      <td>Whether a "services.xml" file is being generated.</td>
      <td>false</td>
    </tr>
    <tr>
      <td>generateTestcase</td>
      <td>${axis2.wsdl2code.generateTestCase}</td>
      <td>Whether a test case is being generated.</td>
      <td>false</td>
    </tr>
    <tr>
      <td>language</td>
      <td>${axis2.wsdl2code.language}</td>
      <td>Programming language of the generated sources.</td>
      <td>java</td>
    </tr>
    <tr>
      <td>namespaceToPackages</td>
      <td>${axis2.wsdl2code.namespaceToPackages}</td>
      <td>Map of namespace URI to packages in the format
        uri1=package1,uri2=package2,... Using this parameter is discouraged.
        In general, you should use the namespaceUris parameter. However, the
        latter cannot be set on the command line.</td>
      <td></td>
    </tr>
    <tr>
      <td>namespaceURIs</td>
      <td></td>
      <td>Map of namespace URI to packages. Example: &lt;namespaceURIs&gt;
        &lt;namespaceURI&gt; &lt;uri&gt;uri1&lt;/uri&gt;
        &lt;package&gt;package1&lt;/package&gt; &lt;/namespaceURI&gt;
        ........ &lt;/namespaceURI&gt;</td>
      <td></td>
    </tr>
    <tr>
      <td>outputDirectory</td>
      <td>${axis2.wsdl2code.target}</td>
      <td>Target directory, where sources are being
        target/generated-sources/axis2/wsdl2code generated.</td>
      <td></td>
    </tr>
    <tr>
      <td>packageName</td>
      <td>${axis2.wsdl2code.package}</td>
      <td>Package name of the generated sources.</td>
      <td></td>
    </tr>
    <tr>
      <td>portName</td>
      <td>${axis2.wsdl2code.portName}</td>
      <td>Port name, for which sources are being generated. By default,
        sources are generated for all ports.</td>
      <td></td>
    </tr>
    <tr>
      <td>serviceName</td>
      <td>${axis2.wsdl2code.serviceName}</td>
      <td>Service name, for which sources are being generated. By default,
        sources are generated for all services.</td>
      <td></td>
    </tr>
    <tr>
      <td>syncMode</td>
      <td>${axis2.wsdl2code.syncMode}</td>
      <td>Sync mode, for which sources are being generated; either of "sync",
        "async", or "both" (default).</td>
      <td>both</td>
    </tr>
    <tr>
      <td>unpackClasses</td>
      <td>${axis2.wsdl2code.unpackClasses}</td>
      <td>Whether to unpack classes.</td>
      <td></td>
    </tr>
    <tr>
      <td>wsdlFile</td>
      <td>${axis2.wsdl2code.wsdl}</td>
      <td>Location of the WSDL file, which is read as input</td>
      <td>src/main/axis2/service.wsdl</td>
    </tr>
  </tbody>
</table>
</body>
</html>
