<!--
  ~ 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>Axis2 1.0 Release</title>
</head>
<body>
<h2>Axis2 1.0 Release</h2>
<div align="left">
<p>See <a href=
"http://ws.apache.org/axis2/1_0/installationguide.html#Download_Axis2">
Installation Guide</a> to see description on different
downloadables of this release.</p>
</div>
<div>
<h3>Standard Distribution</h3>
Binary Distribution <a href=
"http://archive.apache.org/dist/ws/axis2/1_0/axis2-std-1.0-bin.zip"
title=
"http://archive.apache.org/dist/ws/axis2/1_0/axis2-std-1.0-bin.zip">
zip</a> <a href=
"http://archive.apache.org/dist/ws/axis2/1_0/axis2-std-1.0-bin.zip.md5"
title=
"http://archive.apache.org/dist/ws/axis2/1_0/axis2-std-1.0-bin.zip.md5">
MD5</a> <a href=
"http://archive.apache.org/dist/ws/axis2/1_0/axis2-std-1.0-bin.zip.asc"
title=
"http://archive.apache.org/dist/ws/axis2/1_0/axis2-std-1.0-bin.zip.asc">
PGP</a><br />
Source Distribution <a href=
"http://archive.apache.org/dist/ws/axis2/1_0/axis2-std-1.0-src.zip"
title=
"http://archive.apache.org/dist/ws/axis2/1_0/axis2-std-1.0-src.zip">
zip</a> <a href=
"http://archive.apache.org/dist/ws/axis2/1_0/axis2-std-1.0-src.zip.md5"
title=
"http://archive.apache.org/dist/ws/axis2/1_0/axis2-std-1.0-src.zip.md5">
MD5</a> <a href=
"http://archive.apache.org/dist/ws/axis2/1_0/axis2-std-1.0-src.zip.asc"
title=
"http://archive.apache.org/dist/ws/axis2/1_0/axis2-std-1.0-src.zip.asc">
PGP</a><br />
<h3>Minimal Distribution</h3>
Binary Distribution <a href=
"http://archive.apache.org/dist/ws/axis2/1_0/axis2-min-1.0-bin.zip"
title=
"http://archive.apache.org/dist/ws/axis2/1_0/axis2-min-1.0-bin.zip">
zip</a> <a href=
"http://archive.apache.org/dist/ws/axis2/1_0/axis2-min-1.0-bin.zip.md5"
title=
"http://archive.apache.org/dist/ws/axis2/1_0/axis2-min-1.0-bin.zip.md5">
MD5</a> <a href=
"http://archive.apache.org/dist/ws/axis2/1_0/axis2-min-1.0-bin.zip.asc"
title=
"http://archive.apache.org/dist/ws/axis2/1_0/axis2-min-1.0-bin.zip.asc">
PGP</a><br />
Source Distribution <a href=
"http://archive.apache.org/dist/ws/axis2/1_0/axis2-min-1.0-src.zip"
title=
"http://archive.apache.org/dist/ws/axis2/1_0/axis2-min-1.0-src.zip">
zip</a> <a href=
"http://archive.apache.org/dist/ws/axis2/1_0/axis2-min-1.0-src.zip.md5"
title=
"http://archive.apache.org/dist/ws/axis2/1_0/axis2-min-1.0-src.zip.md5">
MD5</a> <a href=
"http://archive.apache.org/dist/ws/axis2/1_0/axis2-min-1.0-src.zip.asc"
title=
"http://archive.apache.org/dist/ws/axis2/1_0/axis2-min-1.0-src.zip.asc">
PGP</a><br />
<h3>War Distribution</h3>
<a href="http://archive.apache.org/dist/ws/axis2/1_0/axis2.war"
title=
"http://archive.apache.org/dist/ws/axis2/1_0/axis2.war">zip</a>
<a href="http://archive.apache.org/dist/ws/axis2/1_0/axis2.war.md5"
title=
"http://archive.apache.org/dist/ws/axis2/1_0/axis2.war.md5">MD5</a>
<a href="http://archive.apache.org/dist/ws/axis2/1_0/axis2.war.asc"
title=
"http://archive.apache.org/dist/ws/axis2/1_0/axis2.war.asc">PGP</a><br />

<h3>Documents Distribution</h3>
<a href=
"http://archive.apache.org/dist/ws/axis2/1_0/axis2-1.0-docs.zip"
title=
"http://archive.apache.org/dist/ws/axis2/1_0/axis2-1.0-docs.zip">zip</a>
<a href=
"http://archive.apache.org/dist/ws/axis2/1_0/axis2-1.0-docs.zip.md5"
title=
"http://archive.apache.org/dist/ws/axis2/1_0/axis2-1.0-docs.zip.md5">
MD5</a> <a href=
"http://archive.apache.org/dist/ws/axis2/1_0/axis2-1.0-docs.zip.asc"
title=
"http://archive.apache.org/dist/ws/axis2/1_0/axis2-1.0-docs.zip.asc">
PGP</a><br /></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 used for signing release. 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>
