<?xml version="1.0"?>
<!--
  ~ 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.
  -->
<document xmlns="http://maven.apache.org/XDOC/2.0"
          xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
          xsi:schemaLocation="http://maven.apache.org/XDOC/2.0 http://maven.apache.org/xsd/xdoc-2.0.xsd">
    <properties>
        <title>:: Axis2 Modules ::</title>
    </properties>
<body lang="en" xml:lang="en">
<h1>Apache Axis2 Modules</h1>
<p>Axis2 architecture is flexible enough to extend its
functionalities using modules. This page is maintained to keep
track of the relevant modules that are developed on top of
Axis2.</p>
<table>
<tbody>
<tr>
<th>Name</th>
<th>Description</th>
<th>Where to get it</th>
</tr>
<tr>
<td><a href="addressing/index.html">Addressing</a></td>
<td>This is an implementation of WS-Addressing submission version
(2004-08) and WS-Addressing 2005-08 versions.</td>
<td>Bundled with the <a href="../download.html">Standard Binary Distribution</a>.</td>
</tr>
<tr>
<td><a href="../docs/soapmonitor-module.html">SOAP Monitor</a></td>
<td>SOAP Monitor utility provides a way for Web services developers
to monitor the SOAP messages being sent/received without requiring
any special configuration or restarting of the server</td>
<td>Bundled with the <a href="../download.html">Standard Binary Distribution</a>.</td>
</tr>
<tr>
<td><a href="http://ws.apache.org/rampart/">Rampart</a></td>
<td>The WS-Security and WS-SecureConversation implementation for
axis2. Now with a new configuration model based on
WS-SecurityPolicy</td>
<td><a href="http://axis.apache.org/axis2/java/rampart/">http://axis.apache.org/axis2/java/rampart/</a></td>
</tr>
</tbody>
</table>
</body>
</document>
