<!--
  ~ 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 Strict//EN"
    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.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>Axis2 1.1 Release</title>
</head>
<body>
<h2>Axis2 1.1 Release</h2>
<div>
<table border="1" cellpadding="1">
<tbody>
<tr>
<th scope="col">Distribution Name</th>
<th scope="col">Description</th>
<!--<th scope="col">Items</th>-->
<th scope="col">Download</th>
</tr>
<tr>
<td><a name="std-bin" id="std-bin"></a><strong>Standard Binary
Distribution</strong></td>
<td>This is the complete version of Axis2 and will contain useful
samples as well. Useful for some one to get familiar with Axis2.
(Since WS-Addressing implementation module is engaged in to Axis2,
by default, this distribution will contain addressing.mar. But the
other modules that are being developed within Axis2 will not be
included here and are available to be downloaded separately from
<a href="../../modules/index.html">here</a>.)</td>
<td><a href=
"http://archive.apache.org/dist/ws/axis2/1_1/axis2-1.1.zip" title=
"http://archive.apache.org/dist/ws/axis2/1_1/axis2-1.1.zip">zip</a>
<a href=
"http://archive.apache.org/dist/ws/axis2/1_1/axis2-1.1.zip.md5"
title=
"http://archive.apache.org/dist/ws/axis2/1_1/axis2-1.1.zip.md5">MD5</a>
<a href=
"http://archive.apache.org/dist/ws/axis2/1_1/axis2-1.1.zip.asc"
title=
"http://archive.apache.org/dist/ws/axis2/1_1/axis2-1.1.zip.asc">PGP</a></td>
</tr>
<tr>
<td><a name="src" id="src"></a> <strong>Source
Distribution</strong></td>
<td>This will contain the sources of Axis2 standard distribution.
One can generate a binary distribution from this by typing
<span class="style1">$maven dist-standard-bin.</span> (<a href=
"http://ws.apache.org/axis2/1_1/installationguide.html#env-src">Set
up Axis2 environment</a> before running this command)</td>
<td><a href=
"http://archive.apache.org/dist/ws/axis2/1_1/axis2-1.1-src.zip"
title=
"http://archive.apache.org/dist/ws/axis2/1_1/axis2-1.1-src.zip">zip</a>
<a href=
"http://archive.apache.org/dist/ws/axis2/1_1/axis2-1.1-src.zip.md5"
title=
"http://archive.apache.org/dist/ws/axis2/1_1/axis2-1.1-src.zip.md5">
MD5</a> <a href=
"http://archive.apache.org/dist/ws/axis2/1_1/axis2-1.1-src.zip.asc"
title=
"http://archive.apache.org/dist/ws/axis2/1_1/axis2-1.1-src.zip.asc">
PGP</a></td>
</tr>
<tr>
<td><a name="war" id="war"></a><strong>WAR (Web Archive)
Distribution</strong></td>
<td>This will be the web application of Axis2 which can be deployed
in most of the servlet containers.</td>
<td><a href="http://archive.apache.org/dist/ws/axis2/1_1/axis2.war"
title=
"http://archive.apache.org/dist/ws/axis2/1_1/axis2.war">zip</a>
<a href="http://archive.apache.org/dist/ws/axis2/1_1/axis2.war.md5"
title=
"http://archive.apache.org/dist/ws/axis2/1_1/axis2.war.md5">MD5</a>
<a href="http://archive.apache.org/dist/ws/axis2/1_1/axis2.war.asc"
title=
"http://archive.apache.org/dist/ws/axis2/1_1/axis2.war.asc">PGP</a></td>
</tr>
<tr>
<td><strong>Documents Distribution</strong></td>
<td>This will contain all the documentation in one package.</td>
<td><a href=
"http://archive.apache.org/dist/ws/axis2/1_1/axis2-1.1-docs.zip"
title=
"http://archive.apache.org/dist/ws/axis2/1_1/axis2-1.1-docs.zip">zip</a>
<a href=
"http://archive.apache.org/dist/ws/axis2/1_1/axis2-1.1-docs.zip.md5"
title=
"http://archive.apache.org/dist/ws/axis2/1_1/axis2-1.1-docs.zip.md5">
MD5</a> <a href=
"http://archive.apache.org/dist/ws/axis2/1_1/axis2-1.1-docs.zip.asc"
title=
"http://archive.apache.org/dist/ws/axis2/1_1/axis2-1.1-docs.zip.asc">
PGP</a></td>
</tr>
</tbody>
</table>
</div>
<!--<div align="left">
<br/>


<p>[if-any logo] <a href="[link]"><img align="right" src="[logo]"
border="0"></a>[end] The currently selected mirror is <b>[preferred]</b>.  If
you encounter a problem with this mirror, please select another mirror.  If
all mirrors are failing, there are <i>backup</i> mirrors (at the end of the
mirrors list) that should be available.</p>

<form action="[location]" method="get" id="SelectMirror">
  Other mirrors: 
  <select name="Preferred">[if-any http][for http]
    <option value="[http]"
    selected="selected">[http]</option>[end][end][if-any ftp][for ftp]
    <option value="[ftp]">[ftp]</option>[end][end][if-any backup][for backup]
    <option value="[backup]">[backup] (backup)</option>[end][end]
  </select>
   
  <input type="submit" value="Change"></form>

<p>You may also consult the <a href="http://www.apache.org/mirrors/">complete
list of mirrors</a>.</p>

<p><strong>Note:</strong> when downloading from a mirror please check the <a
href="http://www.apache.org/dev/release-signing#md5">md5sum</a> and verify
the <a href="http://www.apache.org/dev/release-signing#openpgp">OpenPGP</a>
compatible signature from the main Apache site. These can be downloaded by
following the links above. This <a
href="http://www.apache.org/dist/ws/axis2/KEYS">KEYS</a> file contains the 
public keys that can be used for verifying signatures. It is recommended that 
(when possible)a 
<a href="http://www.apache.org/dev/release-signing#web-of-trust">Web of
trust</a> is used to confirm the identity of these keys.</p>
</div>-->
</body>
</html>
