<!--
/***************************************************************************************************************************
 * 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.1.0.4 (Aug 25, 2014)

<p>
	Juno 5.1.0.4 is a minor update.
</p>

<ul class='spaced-list'>
	<li>New <dc>RestServlet.getPath()</dc> method.
	<li>New <c>SerializerContext.getJavaMethod()</c> and <c>ParserContext.getJavaMethod()</c>
			to allow access to REST methods that invoked the serializers or parsers.
		For example, can be used to access additional annotations on REST methods to perform special handing
			during serialization or parsing.
	<li>Better behavior on overriding of filters in <c>BeanContext.addTransforms(Class[])</c>.
		Previously, adding multiple conflicting filters resulted in random behavior.  
		Now filters are overridden when multiple matching filters are applied.
	<li>Allow <dc>HtmlDocSerializerContext</dc> properties to be set via <dc>Serializer.setProperty(String,Object)</dc>.
		Previously, these could only be defined through override properties (e.g. through REST class and method annotations).
	<li>Fixed memory leak in XML parser.	
</ul>
