<!--
/***************************************************************************************************************************
 * 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 <code><del>RestServlet.getPath()</del></code> method.
	<li>New <code>SerializerContext.getJavaMethod()</code> and <code>ParserContext.getJavaMethod()</code>
			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 <code>BeanContext.addTransforms(Class[])</code>.
		Previously, adding multiple conflicting filters resulted in random behavior.  
		Now filters are overridden when multiple matching filters are applied.
	<li>Allow <code><del>HtmlDocSerializerContext</del></code> properties to be set via <code><del>Serializer.setProperty(String,Object)</del></code>.
		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>
