<!--
  ~ 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></title>
<style type="text/css" media="screen">
/*<![CDATA[*/
<!--
ul { list-style-type: none; margin: 0 0 0 5px; padding: 0; border-width: 0; list-style-position: outside; }
-->






/*]]>*/
</style>
</head>
<body lang="en-US" dir="ltr" xml:lang="en-US">
<h1>Table of Contents</h1>
<ol>
<li><a href="contents.html">Introduction</a></li>
<li><a href="installationguide.html">Installation Guide</a></li>
<li><a href="../modules/index.html">Add-on
Modules</a></li>
<li><a href="app_server.html">Application Server
Specific Configuration Guide</a></li>
<li><a href="quickstartguide.html">Quick Start
Guide</a></li>
<li><a href="userguide.html">User's
Guide</a></li>
<li><a href="adv-userguide.html">Advanced User's
Guide</a></li>
<li><a href="axis2config.html">Configuration
Guide</a></li>
<li><a href="webadminguide.html">Web
Administrator's Guide</a></li>
<li><a href="Axis2ArchitectureGuide.html">Architecture Guide</a></li>
<li><a href="jaxws-guide.html">JAXWS Guide</a></li>
<li><a href="pojoguide.html">POJO Guide</a></li>
<li><a href="spring.html">Spring Guide</a></li>
<li><a href="modules.html">ModulesGuide</a></li>
<li><a href="clustering-guide.html">Clustering Guide</a></li>
<li>ADB Data Binding
<ul>
<li>14.1 <a href="adb/adb-howto.html">Architecture</a></li>
<li>14.2 <a href="adb/adb-advanced.html">Advanced Features</a></li>
<li>14.3 <a href="adb/adb-codegen-integration.html">Code Generation Integration</a></li>
<li>14.4 <a href="adb/adb-tweaking.html">Tweaking</a></li>
</ul>
</li>
<li>JiBX Data Binding
<ul>
<li>15.1 <a href="jibx/jibx-codegen-integration.html">Code Generation Integration</a></li>
<li>15.2 <a href="jibx/jibx-doclit-example.html">doc/lit Example</a></li>
<li>15.3 <a href="jibx/jibx-unwrapped-example.html">unwrapped Example</a></li>
</ul>
</li>
<li>Advanced
<ul>
<li>16.1 <a href="xmlbased-server.html">AXIOM
Based Service</a></li>
<li>16.2 <a href="dii.html">AXIOM Based
Client</a></li>
</ul>
</li>
<li><a href="mtom-guide.html">Attachments/MTOM
Guide</a></li>
<li>Transports
<ul>
<li>18.1 <a href="http-transport.html">HTTP
Transport sender</a></li>
<li>18.2 <a href="servlet-transport.html">HTTP
servlet transport</a></li>
<li>18.3 <a href="transport_howto.html">Custom
Transport</a></li>
</ul>
</li>
<li><a href="WS_policy.html">WS-Policy
Support</a></li>
<li><a href="rest-ws.html">REST Support</a></li>
<li><a href="json_support.html">JSON
Support</a></li>
<li><a href="corba-deployer.html">Exposing CORBA Services as Web Services</a></li>
<li><a href="ejb-provider.html">Guide to using
EJB Provider in Axis2</a></li>
<li><a href="soapmonitor-module.html">SOAP
Monitor</a></li>
<li><a href="reference.html">Command Line
Tools</a></li>
<li><a href="../tools/index.html">Tools/Plug-ins</a>
<ul>
<li>25.1 <a href=
"../tools/CodegenToolReference.html">Code Generator Tool - Command Line and Ant
Task</a></li>
<li>25.2 <a href="../tools/idea/Idea_plug-in_userguide.html">Axis2 Plug-in for IntelliJ IDEA</a></li>
<li>25.3 <a href="../tools/eclipse/servicearchiver-plugin.html">Service Archive Generator Wizard - Eclipse
Plug-in</a></li>
<li>25.4 <a href="../tools/eclipse/wsdl2java-plugin.html">Code Generator Wizard - Eclipse Plug-in</a></li>
<li>25.5 <a href="../tools/maven-plugins/maven-aar-plugin.html">AAR Maven2 Plug-in</a></li>
<li>25.6 <a href="../tools/maven-plugins/maven-java2wsdl-plugin.html">Java2WSDL Maven2 Plug-in</a></li>
<li>25.7 <a href="../tools/maven-plugins/maven-wsdl2code-plugin.html">WSDL2Code Maven2 Plug-in</a></li>
</ul>
</li>
<li><a href="migration.html">Migration Guide
(from Axis1)</a></li>
<li>Design Notes
<ul>
<li>27.1 <a href="Axis2-rpc-support.html">RPC
Support</a></li>
</ul>
</li>
</ol>
</body>
</html>
