<!--
  ~ 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" />
<title>ADB Integration With Axis2</title>
<link href="../../css/axis-docs.css" rel="stylesheet" type=
"text/css" media="all" />
</head>
<body>
<h1>ADB Integration With Axis2</h1>
<p>This document will assist you in writing an extension using the
integrator in order to integrate ADB with Axis2.</p>
<h2>Content</h2>
<ul>
<li><a href="#intro">Introduction</a></li>
<li><a href="#select_modes">Selection of Generation Modes for
ADB</a></li>
<li><a href="#remember">Things to Remember</a></li>
</ul>
<h2><a name="intro" id="intro">Introduction</a></h2>
<p>ADB Integration with Axis2 is simple and straightforward. Given
the extension mechanism of the Axis2 code generator, the obvious
choice for the integrator is to write an extension. The extension
that is added to support ADB is the SimpleDBExtension
(<strong>org.apache.axis2.wsdl.codegen.extension.SimpleDBExtension</strong>)
and can be found in the extensions list of the
codegen-config.properties file.</p>
<a name="select_modes" id="select_modes"></a>
<h2>Selection of Generation Modes for ADB</h2>
<p>The extension sets the options for the code generator via the
CompilerOptions, depending on the user's settings. The following
table summarizes the use of options. Please refer to the <a href=
"adb-howto.html" target="_blank">ADB-How to document</a> for the
different generation modes and their descriptions.</p>
<table border="1">
<tbody>
<tr>
<td><strong>User parameters</strong></td>
<td><strong>Selected code generation parameters</strong></td>
</tr>
<tr>
<td>None (no parameter other than mandatory ones)</td>
<td>wrapClasses=false,writeClasses=false</td>
</tr>
<tr>
<td>-ss (server side)</td>
<td>wrapClasses=false,writeClasses=true</td>
</tr>
<tr>
<td>-u (unwrap classes)</td>
<td>wrapClasses=false,writeClasses=true</td>
</tr>
</tbody>
</table>
<p>The following parameters (prefixed with -E) can be used to
override these settings manually:</p>
<table border="1">
<tbody>
<tr>
<td><strong>Parameter Name</strong></td>
<td><strong>Allowed values</strong></td>
<td><strong>Description</strong></td>
</tr>
<tr>
<td>r</td>
<td>true, false</td>
<td>Sets the write flag. If set to true the classes will be written
by ADB</td>
</tr>
<tr>
<td>w</td>
<td>true, false</td>
<td>Sets the wrapping flag. if true the classes will be
wrapped.</td>
</tr>
</tbody>
</table>
<p>Note that these parameters have no corresponding long names and
MUST be prefixed with a -E to be processed by the code generator.
For example:</p>
<pre>
WSDL2Java .... -Er true
</pre>
<a name="remember" id="remember"></a>
<h2>Things to Remember</h2>
<ol>
<li>SimpleDBExtension is for the ADB databinding framework only and
will process requests only when this framework is specified during
code generation (using the switch -d adb). In the most recent
release, the default has been set as ADB and hence if the -d option
is missing then the databinding framework will be ADB.</li>
</ol>
<hr />
</body>
</html>
