<!--
/***************************************************************************************************************************
 * 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.21 (Apr 9, 2013)

<p>
	Juno 5.0.0.21 is a minor update.
</p>
<h5 class='topic w800'>Core API changes</h5>
<ul class='spaced-list'>
	<li>
		New <code><del>HtmlDocSerializerContext.HTMLDOC_navlinks</del></code> annotation for addint links to HTML page views.
	</li>
	<li>
		Renamed the properties in <code><del>HtmlDocSerializerContext</del></code> for clarity.
	</li>
</ul>		
<h5 class='topic w800'>Servlet API changes</h5>
<ul class='spaced-list'>
	<li>
		Added new <code>RestServlet.addDefaultProperties(ObjectMap,RestRequest)</code> method for programatically adding properties to the property map per request.
	</li>
	<li>
		Added the following new properties in the properties map to make them easily available to serializers and parsers (since they don't have access to the HTTP request object).<br>  
		Note that the <code>SerializerContext.SERIALIZER_uriAuthority</code> and <code>SerializerContext.SERIALIZER_uriContext</code> properties were previously available.
		<ul>
			<li><code>RestServletProperties.REST_servletPath</code></li>
			<li><code>RestServletProperties.REST_pathInfo</code></li>
			<li><code>RestServletProperties.REST_method</code></li>
		</ul>
	</li>
	<li>
		Path variables annotated with <code><del>@Attr</del></code> are now automatically URL-decoded.
	</li>
</ul>		
