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

Release Notes - Juneau - Version 6.2.0

** Bug
    * [JUNEAU-37] - REST Testcases can fail with ports 10000. 10001 in use.
    * [JUNEAU-39] - Add "Incubator" to NOTICE file.

** Improvement
    * [JUNEAU-32] - Improvements to BeanMeta class
    * [JUNEAU-41] - Prerequisites usage is deprecated for non maven-plugin projects
    * [JUNEAU-42] - More powerful RetryOn interface
    * [JUNEAU-43] - Removed superfluous property encoding
    * [JUNEAU-44] - Simplify the configuration for apache-rat-plugin


Release Notes - Juneau - Version 6.1.0

** Bug
    * [JUNEAU-25] - Minor release issues in 6.0.1 RC3
    * [JUNEAU-28] - Separate out RDF-code into separate juneau.core.rdf project.

** Improvement
    * [JUNEAU-26] - Add support for date localization.
    * [JUNEAU-27] - Rename projects.
    * [JUNEAU-31] - Separate out JAX-RS support from server/rest component
    * [JUNEAU-34] - Remove <string> tags from HTML serialization.
    * [JUNEAU-35] - Add StringSwap and MapSwap convenience classes.
    * [JUNEAU-36] - Examples improvements

** New Feature
    * [JUNEAU-33] - HTML5 DOM objects.
    

Release Notes - Juneau - Version 6.0.1

** Bug
    * [JUNEAU-17] - Resolve various small issues pointed out during release of 6.0.0
    * [JUNEAU-19] - Fix various JSON parser edge cases
    * [JUNEAU-21] - Scrub references to IBM from code.
    * [JUNEAU-22] - Localization bugs in CalendarSwap JUnits
    * [JUNEAU-23] - Fix various maven build warnings.
    * [JUNEAU-24] - Fix release issues discovered by Stian

** Improvement
    * [JUNEAU-18] - Add HtmlDocSerializer.DEFAULT field.

** Task
    * [JUNEAU-20] - Remove references to ibm.com from website


Release Notes - Juneau - Version 6.0.0

** Bug
    * [JUNEAU-1] - Cannot run org.apache.juneau.samples unit tests.
    * [JUNEAU-2] - org.apache.juneau.jena.CT_Rdf.testLooseCollectionsOfBeans()
    * [JUNEAU-4] - Testcase failure: CT_Visibility.testClassDefault

** Improvement
    * [JUNEAU-13] - Rename PojoTransform to PojoSwap

** Task
    * [JUNEAU-5] - Update root README.md file.
    * [JUNEAU-6] - Complete work on Juneau website (http://juneau.incubator.apache.org/)
    * [JUNEAU-7] - Complete work on setting up Confluence workspace (https://cwiki.apache.org/confluence/display/JUNEAU/Juneau+Home)
    * [JUNEAU-8] - Update contents of incubator status page (http://incubator.apache.org/projects/juneau.html)
    * [JUNEAU-9] - Set up Jenkins builds for Juneau artifacts.
    * [JUNEAU-10] - Figure out hosting options for generated Javadocs.
    * [JUNEAU-11] - Create root pom.xml
    * [JUNEAU-12] - Add Maven instructions to Dev setup guide.
    * [JUNEAU-14] - Add SerializerGroup and ParserGroup info to web site about page.
