<!--
/***************************************************************************************************************************
 * 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.
 ***************************************************************************************************************************/
 -->

5.0.0.9 (Feb 26, 2013)

<p>
	Juno 5.0.0.9 is a moderate update.
</p>
<h5 class='topic w800'>Core API changes</h5>
<ul class='spaced-list'>
	<li>
		{@link oaj.config INI config file support}:
		<ul>
			<li>A convenient API for reading, writing, and manipulating INI files.</li>
			<li>Ability to convert INI files to batch and shell environment variables.</li>
			<li>Command-line interface for updating INI files.</li>
			<li>Support for encoded INI file values.</li>
		</ul>
	</li>
	<li>Support for fluent-style bean setters (setters that return the bean itself).</li>
	<li>Ability to use {@link oaj.annotation.Bean @Bean} annotation to override bean identification settings.</li>
	<li>New {@link oaj.ObjectMap#cast(Class)} method to convert <code>ObjectMaps</code> directly to beans.</li>
</ul>
<h5 class='topic w800'>REST server API changes</h5>
<ul class='spaced-list'>
	<li>Build-in default <code>OPTIONS</code> pages.</li>
	<li>New {@link oajr.annotation.RestResource#defaultRequestHeaders() @RestResource.defaultRequestHeaders} and {@link oajr.annotation.RestResource#defaultResponseHeaders() @RestResource.defaultResponseHeaders} annotations.</li>
	<li>New {@link oajr.annotation.RestMethod#serializers() @RestMethod(serializers)} and {@link oajr.annotation.RestMethod#parsers() @RestMethod(parsers)} annotations.</li>
	<li>New {@link oajr.annotation.RestMethod#properties() @RestMethod(properties)} annotation.</li>
	<li>New {@link oajr.annotation.RestMethod#defaultRequestHeaders() @RestMethod(defaultRequestHeaders)} annotation.</li>
	<li>New {@link oajr.annotation.RestMethod#matchers() @RestMethod(matchers)} annotation and {@link oajr.RestMatcher} class.</li>
	<li><code>Readers</code> and <code>InputStreams</code> can be specified on <code><del>@Content</del></code> annotated parameters.</li>
	<li>New <code><del>@HasParam</del></code> annotation.</li>
	<li>Full RFC2616 support for matching <code>Accept</code> headers to serializers.</li>		
</ul>
<h5 class='topic w800'>Other notes</h5>
<ul class='spaced-list'>
	<li>Smaller library size (460kB).</li>
</ul>
