<!--
  ~ 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="jms-transport.html">JMS Transport</a></li>
<li>18.4 <a href="tcp-transport.html">TCP Transport</a></li>
<li>18.5 <a href="mail-transport.html">Mail Transport</a></li>
<li>18.6 <a href="udp-transport.html">UDP Transport</a></li>
<li>18.7 <a href="xmpp-transport.html">XMPP Transport</a></li>
<li>18.8 <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>JSON support
    <ul>
    <li>23.1<a href="json_support.html">JSON support with Mapped/Badgerfish formats</a></li>
    <li>23.2<a href="json_support_gson.html">Pure JSON Support</a>
    <ul>
        <li><a href="json_support_gson.html#native_approach">Native Approach</a></li>
        <li><a href="json_support_gson.html#xml_stream_api_base_approach">XML Stream API Base Approach</a></li>
        <li><a href="json_gson_user_guide.html">User Guide</a></li>
        <li><a href="json-springboot-userguide.html">JSON and REST with Spring Boot User's Guide</a></li>
    </ul>
    </li>
</ul>
</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/axis2-wsdl2code-maven-plugin/index.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>
