<!--
  ~ 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 lang="en" xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
<head>
<meta name="generator" content=
"HTML Tidy for Windows (vers 14 June 2007), see www.w3.org" />
<meta http-equiv="content-type" content="" />
<title>Apache Axis2 User's Guide-For Further Study</title>
</head>
<body>
<a name="#forfurtherstudy" id="#forfurtherstudy"></a>
<h1>Apache Axis2 User's Guide - For Further Study</h1>
<!--<h2>Content</h2>
<ul>
<li><a href="userguide.html#intro">Introducing Axis2</a><br />

<ul>
<li><a href="userguide.html#whatis">What is Axis2</a></li>
<li><a href="userguide.html#underhood">What's under the
hood?</a></li>
<li><a href="userguide.html#handlessoap">How Axis2 handles SOAP
messages</a></li>
<li><a href="userguide.html#distributions">Axis2
distributions</a></li>
<li><a href="userguide.html#sbd">The Axis2 Standard Binary
Distribution</a></li>
<li><a href="userguide.html#hierarchy">Axis2.war document
hierarchy</a></li>
<li><a href="userguide.html#clients">Axis2 and clients</a></li>
</ul>
</li>
<li><a href="userguide-installingtesting.html#installingtesting">Installing
and testing client code</a></li>
<li><a href="userguide-introtoservices.html#introservices">Introduction to
Services</a><br />

<ul>
<li><a href="userguide-introtoservices.html#messageexchange">Message
Exchange Patterns</a></li>
</ul>
</li>
<li><a href="userguide-creatingclients.html#createclients">Creating
Clients</a><br />

<ul>
<li><a href="userguide-creatingclients.html#choosingclient">Choosing a
Client Generation Method</a></li>
<li><a href="userguide-creatingclients.html#generating">Generating
Clients</a></li>
<li><a href="userguide-creatingclients.html#adb">Axis Data Binding
(ADB)</a></li>
</ul>
</li>
<li><a href="userguide-buildingservices.html#buildservices">Building
Services</a><br />

<ul>
<li><a href="userguide-buildingservices.html#getcomfortable">Getting
Comfortable with Available Options</a></li>
<li><a href="userguide-buildingservices.html#createscratch">Creating a
service from scratch</a></li>
<li><a href="userguide-buildingservices.html#deploypojo">Deploying
Plain Old Java Objects</a></li>
<li><a href="userguide-buildingservices.html#deployrun">Deploying and
running an Axis2 service created from WSDL</a></li>
</ul>
</li>
<li><a href="userguide-samples.html">Samples</a>
<ul>
<li><a href="userguide-samples.html#clients">Clients</a></li>
<li><a href="userguide-samples.html#services">Services</a></li>
<li><a href="userguide-samples.html#wsdl">Sample WSDL files</a></li>
<li><a href="userguide-samples.html#others">Other Samples</a></li>
</ul>
</li>
<li><a href="userguide-forfurtherstudy.html"><strong>For Further
Study</strong></a></li>
</ul>-->
<h2>Resources</h2>
<p><a href="Axis2ArchitectureGuide.html">Axis2 Architecture</a></p>
<p><a href="http://ws.apache.org/axiom/userguide/userguide.html">Axiom User Guide</a></p>
<p><a href="rest-ws.html">RESTful Web Services</a></p>
<p><a href="http-transport.html">HTTP Transports</a></p>
<p><a href="mtom-guide.html">MTOM with Axis2</a></p>
<p><a href="http://axis.apache.org/axis2/java/rampart/">Securing SOAP Messages with Apache Rampart</a></p>
<p><a href="soapmonitor-module.html">SOAPMonitor</a></p>
<p><a href="adv-userguide.html">Apache Axis2 Advance User's Guide</a></p>
</body>
</html>
