<!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" />
    <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>
    
  </body>
</html>
