<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<!-- 
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. 
-->
<html lang="en">
  <head>
    <meta charset="utf-8">
    <title>Documentation</title>
    <meta name="description" content="Apache Wink -- Documentation">
    <meta name="author" content="dev@wink.apache.org">

    <META http-equiv="Content-Type" content="text/html;charset=UTF-8" />
    <META name="Keywords" content="Apache Wink JSR-237 REST JavaEE6 JAX-RS" />
    <META name="Owner" content="dev@wink.apache.org" />
    <META name="Robots" content="index, follow" />
    <META name="Security" content="Public" />
    <META name="DC.Rights" content="Copyright &copy; 2009-2013, The Apache Software Foundation" />

    <!-- Le HTML5 shim, for IE6-8 support of HTML elements -->
    <!--[if lt IE 9]>
      <script src="http://html5shim.googlecode.com/svn/trunk/html5.js"></script>
    <![endif]-->

    <!-- Le styles -->
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <link href="assets/bootstrap/css/bootstrap.min.css" rel="stylesheet">
    <link href="assets/bootstrap/css/bootstrap-responsive.min.css" rel="stylesheet">
    <style type="text/css">
      body {
        padding-top: 60px;
        padding-bottom: 40px;
      }
    </style>

    <!-- Le fav and touch icons -->
    <link rel="shortcut icon" href="images/wink.png">
    <link rel="shortcut icon" href="images/favicon.ico">
    <link rel="apple-touch-icon" href="images/apple-touch-icon-iphone.png" />
    <link rel="apple-touch-icon" sizes="72x72" href="images/apple-touch-icon-ipad.png" />
    <link rel="apple-touch-icon" sizes="114x114" href="images/apple-touch-icon-iphone-retina.png" />
    <link rel="apple-touch-icon" sizes="144x144" href="images/apple-touch-icon-ipad-retina.png" />
  </head>

  <body>
    <div class="navbar navbar-inverse navbar-fixed-top">
      <div class="navbar-inner fill">
          <div class="container">
            <!--<a class="brand" href="index.html"><img src="images/favicon.ico" width="15%" height="15%"/></a>-->

            <ul class="nav">
              <li class="active"><a href="index.html">Home</a></li>
              <li class="active"><a href="news.html">News</a></li>
              <li class="active"><a href="downloads.html">Downloads</a></li>
              <li class="active"><a href="documentation.html">Documentation</a></li>
              <li class="active"><a href="community.html">Community</a></li>
              <li class="active"><a href="source.html">Source</a></li>
              <li class="active"><a href="faq.html">FAQ</a></li>
              <li class="active"><a href="http://www.apache.org/foundation/sponsorship.html">Sponsorship</a></li>
              <li class="active"><a href="http://www.apache.org/foundation/thanks.html">Thanks</a></li>
              <li class="active"><a href="privacy.html">Privacy</a></li>
            </ul>


            <!-- Google CSE Search Box Begins  -->
              <FORM class="navbar-form pull-right" id="searchbox_007756850371322559056:un2ixevjhis" action="http://www.google.com/cse">
                <INPUT type="hidden" name="cx" value="007756850371322559056:un2ixevjhis">
                <INPUT type="hidden" name="cof" value="FORID:0">
                <INPUT name="q" type="text" placeholder="Search">
              </FORM>
              <!--<SCRIPT type="text/javascript" src="http://www.google.com/coop/cse/brand?form=searchbox_007756850371322559056:un2ixevjhis"></SCRIPT>-->
              <!-- Google CSE Search Box Ends -->
        </div><!--/container -->
      </div><!--/navbar-inner -->
    </div><!--/navbar -->
    

    
    <div class="container" id="content">
      <h1>Apache Wink Documentation</h1>

<hr>

<div class="row">
    <div class="span10">
        <h3>Apache Wink 1.3.0 <a name="Wink_1.3.0"></a></h3>
        <ul>
            <li>User Guide <a href="./1.3.0/Apache_Wink_User_Guide.pdf">PDF</a> </li>
            <li><a href="./1.3.0/api/index.html">API</a> (Javadoc)</li>
        </ul>

        <h3>Wiki<a name="Wiki"></a></h3>
        <ul>
            <li><a class="externalLink" href="http://cwiki.apache.org/WINK/">Apache Wink Wiki</a></li>
            <li><a class="externalLink" href="http://cwiki.apache.org/WINK/apache-wink-developer-guide.html">User Guide in Wiki</a></li>
        </ul>

        <h3>JAX-RS Specifications<a name="JAX-RS"></a></h3>
        <ul>
            <li><a class="externalLink" href="https://jsr311.dev.java.net/nonav/releases/1.0/index.html">JSR-311 API</a> </li>
            <li><a class="externalLink" href="http://cwiki.apache.org/confluence/display/WINK/JAX-RS">JAX-RS Guide</a></li>
            <li><a class="externalLink" href="https://jsr311.dev.java.net">JSR 311 Development</a></li>
            <li><a class="externalLink" href="http://jcp.org/en/jsr/detail?id=311">JSR 311 Specification</a></li>
        </ul>
    </div>

</div>

<hr>

<h1>Documentation for previous releases<a name="Previous_Releases"></a></h1>

<div class="row">
    <div class="span10">
        <table class="table table-hover">
        <tr>
            <th><b>Release</b></th><th><b>User Guide</b></th><th><b>API</b></th>
        </tr>
        <tr>
            <td>Wink 1.2.1</td>
            <td><a href="./documentation/1.2.1/Apache_Wink_User_Guide.pdf">PDF</a></td>
            <td><a href="./documentation/1.2.1/api/index.html">API Javadoc</a></td>
        </tr>
        <tr>
            <td>Wink 1.2.0</td>
            <td><a href="./documentation/1.2.0/Apache_Wink_User_Guide.pdf">PDF</a></td>
            <td><a href="./documentation/1.2.0/api/index.html">API Javadoc</a></td>
        </tr>
        <tr>
            <td>Wink 1.1.2</td>
            <td><a href="./documentation/1.1.2/Apache_Wink_User_Guide.pdf">PDF</a></td>
            <td><a href="./documentation/1.1.2/api/index.html">API Javadoc</a></td>
        </tr>
        <tr>
            <td>Wink 1.1.1</td>
            <td><a href="./documentation/1.1.1/html/Apache Wink Developer Guide.html">HTML</a> | <a href="./1.1/Apache_Wink_User_Guide.pdf">PDF</a></td>
            <td><a href="./documentation/1.1.1/api/index.html">API Javadoc</a></td>
        </tr>
        <tr>
            <td>Wink 1.1</td>
            <td><a href="./documentation/1.1/html/Apache Wink Developer Guide.html">HTML</a> | <a href="./1.1/Apache_Wink_User_Guide.pdf">PDF</a></td>
            <td><a href="./documentation/1.1/api/index.html">API Javadoc</a></td>
        </tr>       
        <tr>
            <td>Wink 1.0</td>
            <td><a href="./documentation/1.0/html/Apache Wink Developer Guide.html">HTML</a> | <a href="./1.0/Apache_Wink_User_Guide.pdf">PDF</a></td>
            <td><a href="./documentation/1.0/api/index.html">API Javadoc</a></td>
        </tr>       
        <tr>
            <td>Wink 0.1</td>
            <td><a href="./documentation/0.1/Apache_Wink_User_Guide.htm">HTML</a> | <a href="./0.1/Apache_Wink_User_Guide.pdf">PDF</a></td>
            <td><a href="./documentation/0.1/api/index.html">API Javadoc</a></td>
        </tr>       
        </table>

    </div>

</div>

<p></div>
</div>
</div></p>
    </div> <!-- /container/content -->
    


    <hr>

    <div class="container">
      <footer>
        <div class="xright">
        Copyright &copy; 2009-2013 <a href="http://www.apache.org/">The Apache Software Foundation</a>. All Rights Reserved.Licensed under <a href="http://www.apache.org/licenses/LICENSE-2.0">Apache License 2.0</a>.</br>
        Apache and the Apache feather logo are trademarks of The Apache Software Foundation. Other names may be trademarks of their respective owners.</br>
        </p>
    </footer>
  </div> <!-- /container/footer -->


  <!-- Le javascript
    ================================================== -->
    <!-- Placed at the end of the document so the pages load faster -->
    <script src="assets/jquery/jquery-1.9.1.min.js"></script>
    <script src="assets/bootstrap/js/bootstrap.min.js"></script>

    <script type="text/javascript">
      var _gaq = _gaq || [];
      _gaq.push(['_setAccount', 'UA-1174707-10']);
      _gaq.push(['_trackPageview']);

      (function() {
        var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
        ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
      })();
    </script>
    
  </body>
</html>
