<?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.
-->
<!--
 +======================================================================+
 |****                                                              ****|
 |****      THIS FILE IS GENERATED BY THE COMMONS BUILD PLUGIN      ****|
 |****                    DO NOT EDIT DIRECTLY                      ****|
 |****                                                              ****|
 +======================================================================+
 | TEMPLATE FILE: download-page-template.xml                            |
 | commons-build-plugin/trunk/src/main/resources/commons-xdoc-templates |
 +======================================================================+
 |                                                                      |
 | 1) Re-generate using: mvn commons-build:download-page                |
 |                                                                      |
 | 2) Set the following properties in the component's pom:              |
 |    - commons.componentid     (required, alphabetic, lower case)      |
 |    - commons.release.version (required)                              |
 |    - commons.release.name    (required)                              |
 |    - commons.binary.suffix   (optional)                              |
 |      (defaults to "-bin", set to "" for pre-maven2 releases)         |
 |    - commons.release.desc    (optional)                              |
 |    - commons.release.subdir  (optional)                              |
 |    - commons.release.hash    (optional, lowercase, default sha512)   |
 |                                                                      |
 |    - commons.release.[234].version       (conditional)               |
 |    - commons.release.[234].name          (conditional)               |
 |    - commons.release.[234].binary.suffix (optional)                  |
 |    - commons.release.[234].desc          (optional)                  |
 |    - commons.release.[234].subdir        (optional)                  |
 |    - commons.release.[234].hash       (optional, lowercase, [sha512])|
 |                                                                      |
 | 3) Example Properties                                                |
 |    (commons.release.name inherited by parent:                        |
 |     ${project.artifactId}-${commons.release.version}                 |
 |                                                                      |
 |  <properties>                                                        |
 |    <commons.componentid>math</commons.componentid>                   |
 |    <commons.release.version>1.2</commons.release.version>            |
 |  </properties>                                                       |
 |                                                                      |
 +======================================================================+
-->
<document>
  <properties>
    <title>Download Apache Commons BeanUtils</title>
    <author email="dev@commons.apache.org">Apache Commons Documentation Team</author>
  </properties>
  <body>
    <section name="Download Apache Commons BeanUtils">
    <subsection name="Using a Mirror">
      <p>
        We recommend you use a mirror to download our release
        builds, but you <strong>must</strong> <a href="http://www.apache.org/info/verification.html">verify the integrity</a> of
        the downloaded files using signatures downloaded from our main
        distribution directories. Recent releases (48 hours) may not yet
        be available from all the mirrors.
      </p>

      <p>
        You are currently using <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.
        <br></br>
        [if-any logo]<a href="[link]"><img align="right" src="[logo]" border="0"></img></a>[end]
      </p>

      <form action="[location]" method="get" id="SelectMirror">
        <p>
          Other mirrors:
          <select name="Preferred">
          [if-any http]
            [for http]<option value="[http]">[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"></input>
        </p>
      </form>

      <p>
        It is essential that you
        <a href="https://www.apache.org/info/verification.html">verify the integrity</a>
        of downloaded files, preferably using the <code>PGP</code> signature (<code>*.asc</code> files);
        failing that using the <code>SHA256</code> hash (<code>*.sha256</code> checksum files).
      </p>
      <p>
        The <a href="https://www.apache.org/dist/commons/KEYS">KEYS</a>
        file contains the public PGP keys used by Apache Commons developers
        to sign releases.
      </p>
    </subsection>
    </section>
    <section name="Apache Commons BeanUtils 1.9.4 ">
      <subsection name="Binaries">
        <table>
          <tr>
              <td><a href="[preferred]/commons/beanutils/binaries/commons-beanutils-1.9.4-bin.tar.gz">commons-beanutils-1.9.4-bin.tar.gz</a></td>
              <td><a href="https://www.apache.org/dist/commons/beanutils/binaries/commons-beanutils-1.9.4-bin.tar.gz.sha256">sha256</a></td>
              <td><a href="https://www.apache.org/dist/commons/beanutils/binaries/commons-beanutils-1.9.4-bin.tar.gz.asc">pgp</a></td>
          </tr>
          <tr>
              <td><a href="[preferred]/commons/beanutils/binaries/commons-beanutils-1.9.4-bin.zip">commons-beanutils-1.9.4-bin.zip</a></td>
              <td><a href="https://www.apache.org/dist/commons/beanutils/binaries/commons-beanutils-1.9.4-bin.zip.sha256">sha256</a></td>
              <td><a href="https://www.apache.org/dist/commons/beanutils/binaries/commons-beanutils-1.9.4-bin.zip.asc">pgp</a></td>
          </tr>
        </table>
      </subsection>
      <subsection name="Source">
        <table>
          <tr>
              <td><a href="[preferred]/commons/beanutils/source/commons-beanutils-1.9.4-src.tar.gz">commons-beanutils-1.9.4-src.tar.gz</a></td>
              <td><a href="https://www.apache.org/dist/commons/beanutils/source/commons-beanutils-1.9.4-src.tar.gz.sha256">sha256</a></td>
              <td><a href="https://www.apache.org/dist/commons/beanutils/source/commons-beanutils-1.9.4-src.tar.gz.asc">pgp</a></td>
          </tr>
          <tr>
              <td><a href="[preferred]/commons/beanutils/source/commons-beanutils-1.9.4-src.zip">commons-beanutils-1.9.4-src.zip</a></td>
              <td><a href="https://www.apache.org/dist/commons/beanutils/source/commons-beanutils-1.9.4-src.zip.sha256">sha256</a></td>
              <td><a href="https://www.apache.org/dist/commons/beanutils/source/commons-beanutils-1.9.4-src.zip.asc">pgp</a></td>
          </tr>
        </table>
      </subsection>
    </section>
    <section name="Archives">
        <p>
          Older releases can be obtained from the archives.
        </p>
        <ul>
          <li class="download"><a href="[preferred]/commons/beanutils/">browse download area</a></li>
          <li><a href="https://archive.apache.org/dist/commons/beanutils/">archives...</a></li>
        </ul>
    </section>
  </body>
</document>
