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

** Bug
    * [JUNEAU-143] - Static files mapping doesn't properly handle override scenarios.
    * [JUNEAU-147] - Error in Swagger generator when @Example used on bean class.

** Improvement
    * [JUNEAU-144] - Add support for absolute paths on @RestResource(staticFiles)
    * [JUNEAU-145] - @RestResource(staticFiles) should handle multiple mappings.
    * [JUNEAU-146] - Add ranks to @Config annotations.

** Task
    * [JUNEAU-132] - Various HTTP parameter annotations should support Optional.
    * [JUNEAU-133] - Serializers/parsers should support Optional objects and properties.
    * [JUNEAU-134] - Parsers not correctly finding generic types on complex types involving arrays.
    * [JUNEAU-135] - @RestMethod(debug=true) is not causing requests to be logged.
    * [JUNEAU-136] - Juneau cannot reflect parameterized types on Spring bean methods.
    * [JUNEAU-137] - Juneau cannot reflect parameterized types on Spring bean methods.
    * [JUNEAU-138] - Move REST response/exception beans into juneau-marshall.
    * [JUNEAU-139] - juneau-rest-client should not have dependency on juneau-rest-server.
    * [JUNEAU-140] - Provide initial contents of PetStore modules.
    * [JUNEAU-141] - Move @RemoteResource/@RemoteMethod annotations into juneau-marshall.
    * [JUNEAU-142] - BasicRest subclasses need programmatic access to RestRequest/RestResponse


Release Notes - Juneau - Version 8.1.0

** Bug
    * [JUNEAU-29] - Replace @BeanConstructor with @BeanParameter annotations.
    * [JUNEAU-94] - Fix build warnings on Java 11
    * [JUNEAU-105] - UrlPathPattern should use a state machine.
    * [JUNEAU-107] - IllegalArgumentException in DefaultHandler.handle()
    * [JUNEAU-124] - Serializers and parsers should throw specific exceptions.
    * [JUNEAU-129] - LocalizedDatesTest failures during build

** New Feature
    * [JUNEAU-96] - Add Automatic-Module-Name metadata
    * [JUNEAU-98] - Add @RestMethod(allowMethodParam/allowMethodHead) annotations
    * [JUNEAU-99] - @RestMethod(roleGuard="xxx") annotation.
    * [JUNEAU-100] - REST_allowedMethodHeaders / @RestResource(allowedMethodHeaders) / @RestMethod(allowedMethodHeaders)
    * [JUNEAU-101] - Update handling of dates to use new Java 8 libraries.
    * [JUNEAU-102] - Expanded REST annotations
    * [JUNEAU-103] - Add POJO diff tool
    * [JUNEAU-104] - Support for using named method parameters.

** Improvement
    * [JUNEAU-50] - Publish a contributors guide
    * [JUNEAU-56] - Build microservices with Maven
    * [JUNEAU-93] - Use constructor argument names as bean property names.
    * [JUNEAU-97] - Path Parameter in Parent RestResource
    * [JUNEAU-106] - Improved REST debugging.
    * [JUNEAU-108] - AccessDeniedException should cause HTTP 401 response.
    * [JUNEAU-109] - BasicRestLogger should take in servlet class so that logging can be based on that class.

** Task
    * [JUNEAU-126] - Serializers should serialize Iterators and Enumerations by default.
    * [JUNEAU-127] - Clean up usage of PojoSwaps in ClassMeta
    * [JUNEAU-128] - Code improvements around DynamicSwaps
    

Release Notes - Juneau - Version 8.0.0

** Improvement
    * [JUNEAU-91] - Update Jetty to jetty-9.4.13.v20181111


Release Notes - Juneau - Version 7.2.2

** Bug
    * [JUNEAU-88] - AddressBookResourceTest fails with org.apache.juneau.rest.client.RestCallException: Software caused connection abort: recv failed
    * [JUNEAU-89] - errors in juneau-examples-rest
    * [JUNEAU-90] - Could not instantiate class  org.apache.juneau.svl.Var
    

Release Notes - Juneau - Version 7.2.1

** Bug
    * [JUNEAU-85] - Don't break compatibility with 7.1.0
    * [JUNEAU-86] - Avoid NPE stopping RestMicroservice
    * [JUNEAU-87] - Tests should not use hard-wired line-endings.


Release Notes - Juneau - Version 7.2.0

** Bug
    * [JUNEAU-83] - Cannot subclass RestClient and RestClientBuilder
    * [JUNEAU-82] - Config and Logs resource pages should have configurable look-and-feel.

** New Feature
    * [JUNEAU-60] - @RestMethod paramater annotation to populate a pojo using RequestBean format

** Improvement
    * [JUNEAU-81] - Update Jetty to 9.4.9
    * [JUNEAU-84] - Upgrade to Jetty 9.4.12


Release Notes - Juneau - Version 7.1.0

** Bug
    * [JUNEAU-75] - Documentation not clear on how to customize htdocs folder
    * [JUNEAU-78] - Is org.apache.juneau.dto.swagger.SchemaInfo missing a $ref field?
    * [JUNEAU-79] - org.apache.juneau.microservice.RestMicroservice.stop() should not dump stack traces on the console
    * [JUNEAU-80] - RestCallHandlerDefault service method calls handleResponse which seems to close output stream right before it runs res.flushbuffer which throws an IO exception because the stream is closed.

** Improvement
    * [JUNEAU-76] - Improvements to Context/Builder APIs
    * [JUNEAU-77] - Document how to customize the favicon


Release Notes - Juneau - Version 7.0.1

** Bug
    * [JUNEAU-68] - Add BoundedReader to REST input
    * [JUNEAU-69] - XML parser should ignore comments.
    * [JUNEAU-71] - No git tag for release 7.0.0

** Improvement
    * [JUNEAU-72] - Offer an option to disable console IO from org.apache.juneau.microservice.Microservice.start()
    * [JUNEAU-73] - Update Jetty from 9.4.7.v20170914 to 9.4.8.v20171121
    * [JUNEAU-74] - Update Apache HttpClient from 4.5.3 to 4.5.4


Release Notes - Juneau - Version 7.0.0

** Improvement

** New Feature


Release Notes - Juneau - Version 6.4.0

** Improvement
    * [JUNEAU-46] - Remove references to wink
    * [JUNEAU-64] - Support advanced annotated variables on methods implementing onPreCall and onPostCall

** New Feature
    * [JUNEAU-62] - Support complete customization of jetty runtime
    * [JUNEAU-65] - utility for merging two like POJOs
    
    
Release Notes - Juneau - Version 6.3.1

** Bug
    * [JUNEAU-59] - Fix "Copyright (c) 2016, Apache Foundation" year in documentation.

** Improvement
    * [JUNEAU-58] - Embed HTML in @HtmlDoc.description


Release Notes - Juneau - Version 6.3.0

** Bug
    * [JUNEAU-38] - Testcase failure in UK
    * [JUNEAU-45] - Rebrand web pages with new incubator logo.
    * [JUNEAU-47] - Fix RAT check failure with logs generated during build
    * [JUNEAU-51] - properties added to rest client, serializer, and parser are not available during pojo swap and unswap methods

** Improvement
    * [JUNEAU-57] - seamless serialization and parsing of string fields to/from enum


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.
