<?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.cgi#std-bin">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.cgi#std-bin">Standard Binary Distribution</a>.</td>
</tr>
<tr>
<td><a href=
"http://ws.apache.org/sandesha/sandesha2/index.html">Sandesha2</a></td>
<td>An implementation of WS-RM specification February 2005</td>
<td><a href="http://axis.apache.org/axis2/java/sandesha/">http://axis.apache.org/axis2/java/sandesha/</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>
