<!--
/***************************************************************************************************************************
 * 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 <c>ObjectMaps</c> directly to beans.</li>
</ul>
<h5 class='topic w800'>REST server API changes</h5>
<ul class='spaced-list'>
	<li>Build-in default <c>OPTIONS</c> pages.</li>
	<li>New <dc>@RestResource.defaultRequestHeaders</dc> and <dc>@RestResource.defaultResponseHeaders</dc> 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 <dc>@RestMethod(defaultRequestHeaders)</dc> annotation.</li>
	<li>New {@link oajr.annotation.RestMethod#matchers() @RestMethod(matchers)} annotation and {@link oajr.RestMatcher} class.</li>
	<li><c>Readers</c> and <c>InputStreams</c> can be specified on <dc>@Content</dc> annotated parameters.</li>
	<li>New <dc>@HasParam</dc> annotation.</li>
	<li>Full RFC2616 support for matching <c>Accept</c> headers to serializers.</li>		
</ul>
<h5 class='topic w800'>Other notes</h5>
<ul class='spaced-list'>
	<li>Smaller library size (460kB).</li>
</ul>
