<!--
  ~ Licensed to the Apache Software Foundation (ASF) under one
  ~ or more contributor license agreements. See the NOTICE file
  ~ distributed with this work for additional information
  ~ regarding copyright ownership. The ASF licenses this file
  ~ to you under the Apache License, Version 2.0 (the
  ~ "License"); you may not use this file except in compliance
  ~ with the License. You may obtain a copy of the License at
  ~
  ~ http://www.apache.org/licenses/LICENSE-2.0
  ~
  ~ Unless required by applicable law or agreed to in writing,
  ~ software distributed under the License is distributed on an
  ~ "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
  ~ KIND, either express or implied. See the License for the
  ~ specific language governing permissions and limitations
  ~ under the License.
  -->

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta name="generator" content=
"HTML Tidy for Windows (vers 14 June 2007), see www.w3.org" />
<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&lt;/groupId&gt;
    			&lt;artifactId&gt;axis2-wsdl2code-maven-plugin&lt;/artifactId&gt;
				&lt;version&gt;1.4&lt;/version&gt;
    			&lt;executions&gt;
    				&lt;execution&gt;
    					&lt;goals&gt;
    						&lt;goal&gt;wsdl2code&lt;/goal&gt;
    					&lt;/goals&gt;
    				&lt;configuration&gt;
					&lt;packageName&gt;com.foo.myservice&lt;/packageName&gt;
					&lt;wsdlFile&gt;src/main/wsdl/myservice.wsdl&lt;/wsdlFile&gt;
					&lt;databindingName&gt;xmlbeans&lt;/databindingName&gt;
				&lt;/configuration&gt;
				&lt;/execution&gt;
			&lt;/executions&gt;
    		&lt;/plugin&gt;
    	&lt;/plugins&gt;
    &lt;/build&gt;
</pre>
Also please add axis2 jars as a dependency 
<pre xml:space="preserve">
    &lt;dependency&gt;
          &lt;groupId&gt;org.apache.axis2&lt;/groupId&gt;
          &lt;artifactId&gt;axis2&lt;/artifactId&gt;
          &lt;version&gt;1.4&lt;/version&gt;
    &lt;/dependency&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 axis2-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;packageName&gt;package1&lt;/packageName&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 a randomly picked port.</td>
<td></td>
</tr>
    <tr>
    <td>allPorts</td>
    <td>${axis2.wsdl2code.allPorts}</td>
    <td>Set this to true to generate code for all ports.</td>
    <td>false</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>
