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

7.2.1 (Sept 25, 2018)

<p>
	7.2.1 is a major release that introduces several significant new features:
</p>
<ul class='spaced-list'>
	<li>OpenAPI part serializing and parsing with full support for OpenAPI validation of input and output in the REST servlet and client APIs.
	<li>Swagger UI.
	<li>New HTTP-Part annotations that are applicable to both the servlet and client APIs.
	<li>Serverless servlet and client unit testing.
	<li>Simplified UI customization.
	<li>Marshalls that combines serializers and parsers into a single API.
</ul>

<h5 class='topic w800'>juneau-marshall</h5>
<ul class='spaced-list'>
	<li>
		The REST client <ja>@Remoteable</ja> annotations and REST server <ja>@RemoteMethod</ja> annotations which used to be
		in separate packages in the client and server projects have been combined into a single set of annotations in 
		the {@link oaj.http.annotation} package.
		<br>This fixes a long-standing problem where it was easy to mix up using client-side annotations in server-side code, and vis-versa.
		<br>Additionally, much work has been done on these annotations to add support for Swagger-style validations and documentation.
		<ul class='doctree'>
			<li class='ja'>{@link oaj.http.annotation.Body}
			<li class='ja'>{@link oaj.http.annotation.FormData}
			<li class='ja'>{@link oaj.http.annotation.Header}
			<li class='ja'>{@link oaj.http.annotation.Path}
			<li class='ja'>{@link oaj.http.annotation.Query}
			<li class='ja'>{@link oaj.http.annotation.HasFormData}
			<li class='ja'>{@link oaj.http.annotation.HasQuery}
			<li class='ja'>{@link oaj.http.annotation.Request}
		</ul>
		<br>These are used with new Swagger schema/documentation annotations to produce schema-based serialization/parsing/validation 
			and auto-generated Swagger documentation:
		<ul class='doctree'>
			<li class='ja'>{@link oaj.http.annotation.Contact}
			<li class='ja'><dc>ExternalDocs</dc>
			<li class='ja'><dc>Items</dc>
			<li class='ja'>{@link oaj.http.annotation.License}
			<li class='ja'><dc>Schema</dc>
			<li class='ja'><dc>SubItems</dc>
			<li class='ja'>{@link oaj.http.annotation.Tag}
		</ul>
		<br>Additionally, the <ja>@Remoteable</ja> annotation has been split into the following two annotations:
		<ul class='doctree'>
			<li class='ja'>{@link oaj.remote.RemoteInterface} 
				- Used for remote proxy interfaces served up through 
				<dc>RemoteInterfaceServlet</dc> or REST <js>"PROXY"</js> methods.
				<br>Defaults to <js>"POST"</js> with method signatures as paths.
			<li class='ja'><dc>RemoteResource</dc> 
				- Used for 3rd-party REST interfaces.
				<br>Defaults to <js>"GET"</js> with standardized naming conventions for paths.
		</ul>
	<li>
		Support for multi-valued parameters as maps or beans on server-side annotations (it was previously supported on client-side):
		<c><ja>@Query</ja>(<js>"*"</js>)</c>, <c><ja>@FormData</ja>(<js>"*"</js>)</c>, <c><ja>@Header</ja>(<js>"*"</js>)</c>, <c><ja>@Path</ja>(<js>"*"</js>)</c>
	<li>
		Support for server-side use of <ja>@Request</ja> annotation on <ja>@RestMethod</ja> annotations and new {@link oajr.RestRequest#getRequest(RequestBeanMeta)} method.
	<li>
		Fixed bug where <c><ja>@Bean</ja>(typeName)</c> was not being detected on non-bean POJO classes.
	<li>
		Fixed bug where HTML-Schema was not being rendered correctly.
	<li>
		Support for POJO examples:
		<ul class='doctree'>
			<li class='jf'>{@link oaj.BeanContext#BEAN_examples}
			<li class='ja'>{@link oaj.annotation.Example}
		</ul>
	<li>
		Fixed bug where parsers could report the wrong line number when an error occurred.
	<li>
		A runtime exception is now thrown if you define a <dc>@BeanProperty(name)</dc> but forget to
		add it to your <c><ja>@Bean</ja>(properties)</c> annotation.
	<li>
		<c><ja>@Html</ja>(asXml)</c> and <c><ja>@Html</ja>(asPlainText)</c> replaced with
		{@link oaj.html.annotation.Html#format() @Html(format)}.
	<li>
		HTML serializer will now serializers beans and maps as HTML even when those objects are embedded
		within an object with <c><ja>@Html</ja>(format=<jsf>XML</jsf>)</c>.
		<br>The previous behavior was to serialize it as XML.
	<li>
		New settings for binary-based serializers and parsers:
		<ul class='doctree'>
			<li class='jf'>{@link oaj.serializer.OutputStreamSerializer#OSSERIALIZER_binaryFormat}
			<li class='jf'>{@link oaj.parser.InputStreamParser#ISPARSER_binaryFormat}
		</ul>
	<li>
		Added support for auto-detection of fluent-style setters:
		<ul class='doctree'>
			<li class='jf'>{@link oaj.BeanContext#BEAN_fluentSetters}
			<li class='ja'>{@link oaj.annotation.Bean#fluentSetters()}
		</ul>
	<li>
		The <jsf>SERIALIZER_abridged</jsf> setting has been replaced with {@link oaj.serializer.Serializer#SERIALIZER_addRootType SERIALIZER_addRootType}
	<li>
		The <jsf>SERIALIZER_addBeanTypeProperties</jsf> setting has been replaced with {@link oaj.serializer.Serializer#SERIALIZER_addBeanTypes SERIALIZER_addBeanTypes}
		and is disabled by default.
	<li>
		Parse exception messages are now clearer and include code snippets of where a parse exception occurred:
		<p class='bcode w800' style='color:red'>
	org.apache.juneau.parser.ParseException: Expected '[' at beginning of JSON array.
		At line 80, column 20.
		While parsing into: 
			currentClass: List&lt;String&gt;
			currentProperty: required: java.util.List, field=[null], getter=[public java.util.List org.apache.juneau.dto.swagger.SchemaInfo.getRequired()], setter=[public org.apache.juneau.dto.swagger.SchemaInfo org.apache.juneau.dto.swagger.SchemaInfo.setRequired(java.util.Collection)]
	---start--
	0075: 						"name": "body",
	0076: 						"description": "Pet object that needs to be added to the store",
	0077: 						"required": true,
	0078: 						"schema": {
	0079: 							"required": true,
	0080: 						}
	0081: 					}
	0082: 				],
	0083: 				"responses": {
	0084: 					"405": {
	0085: 						"description": "Invalid input"
	---end---
		</p>
	<li>
		New property {@link oaj.parser.Parser#PARSER_debugOutputLines} for controlling how many input lines are added to the exception message above.
	<li>
		New property {@link oaj.BeanContext#BEAN_useEnumNames} for controlling whether enums are serialized
		using their name or the <c>toString()</c> method.
	<li>
		New property {@link oaj.BeanContext#BEAN_examples} for defining examples of POJOs.
	<li>
		New {@link oaj.annotation.Example @Example} annotation for defining examples of POJOs.
		<br>Used heavily in JSON-Schema support.
	<li>
		If a bean has both a <c>getX()</c> and <c>isX()</c> method, the <c>getX()</c> method takes precedence.
		<br>The previous behavior was arbitrary.
	<li>
		Significant improvements to JSON-Schema serialization support.
		<ul>
			<li>New <dc>@JsonSchema</dc> annotation.
		</ul>
	<li>
		Fixed <c>NullPointerException</c> when serializing beans with a dyna-property (i.e. <c><ja>@Bean</ja>(<js>"*"</js>)</c>)
		which returns a <jk>null</jk> value.
	<li>
		New option for dyna-property (i.e. <c><ja>@Bean</ja>(<js>"*"</js>)</c>) using a method that returns a collection of extra keys.
		<br>See new options #4 on {@link oaj.annotation.BeanProperty#name()}
	<li>
		New formats for the {@link oaj.html.annotation.Html#format() @Html(format)} annotation:
		<ul class='doctree'>
			<li class='jf'>{@link oaj.html.annotation.HtmlFormat#HTML_CDC} - Format collections as comma-delimited lists.
			<li class='jf'>{@link oaj.html.annotation.HtmlFormat#HTML_SDC} - Format collections as space-delimited lists.
		</ul> 
	<li>
		Serializers now allow for q-values on the media types they handle.
		<br>For example, the accept media type on <c>JsonSerializer.Simple</c> is <js>"application/json+simple,application/json;q=0.9"</js>.
		<br>This means the serializer CAN handle requests for <js>"application/json"</js> if no other serializers provide a better match.
	<li>
		New methods for creating unmodifiable {@link oaj.ObjectMap ObjectMaps} and {@link oaj.ObjectList ObjectLists}.
		<ul class='doctree'>
			<li class='jc'>{@link oaj.ObjectMap}
			<ul>
				<li class='jm'>{@link oaj.ObjectMap#isUnmodifiable() isUnmodifable()}
				<li class='jm'>{@link oaj.ObjectMap#unmodifiable() unmodifiable()}
				<li class='jm'>{@link oaj.ObjectMap#modifiable() modifiable()}
			</ul>
			<li class='jp'>{@link oaj.ObjectList}
			<ul>
				<li class='jm'>{@link oaj.ObjectList#isUnmodifiable() isUnmodifable()}
				<li class='jm'>{@link oaj.ObjectList#unmodifiable() unmodifiable()}
				<li class='jm'>{@link oaj.ObjectList#modifiable() modifiable()}
			</ul>
		</ul>
	<li>
		The <c>JsonSerializer.Simple</c> class has been moved into the top-level {@link oaj.json.SimpleJsonSerializer} class.
	<li>
		RDF serializer subclasses have been moved into top-level classes:
		<ul>
			<li><c>RdfSerializer.Xml</c> -&gt; {@link oaj.jena.RdfXmlSerializer}
			<li><c>RdfSerializer.XmlAbbrev</c> -&gt; {@link oaj.jena.RdfXmlAbbrevSerializer}
			<li><c>RdfSerializer.N3</c> -&gt; {@link oaj.jena.N3Serializer}
			<li><c>RdfSerializer.NTriple</c> -&gt; {@link oaj.jena.NTripleSerializer}
			<li><c>RdfSerializer.Turtle</c> -&gt; {@link oaj.jena.TurtleSerializer}
			<li><c>RdfParser.Xml</c> -&gt; {@link oaj.jena.RdfXmlParser}
			<li><c>RdfParser.N3</c> -&gt; {@link oaj.jena.N3Parser}
			<li><c>RdfParser.NTriple</c> -&gt; {@link oaj.jena.NTripleParser}
			<li><c>RdfParser.Turtle</c> -&gt; {@link oaj.jena.TurtleParser}
		</ul>
	<li>
		New API for pairing serializers and parsers for simplified syntax:
		<h5 class='figure'>Examples:</h5>
		<p class='bpcode w800'>
	<jc>// Using instance.</jc>
	Json json = <jk>new</jk> Json();
	MyPojo myPojo = json.read(string, MyPojo.<jk>class</jk>);
	String string = json.write(myPojo);
		</p>
		<p class='bpcode w800'>
	<jc>// Using DEFAULT instance.</jc>
	MyPojo myPojo = Json.<jsf>DEFAULT</jsf>.read(string, MyPojo.<jk>class</jk>);
	String string = Json.<jsf>DEFAULT</jsf>.write(myPojo);
		</p>
		<ul class='doctree'>
			<li class='jac'>{@link oaj.marshall.Marshall}
			<ul>
				<li class='jac'>{@link oaj.marshall.CharMarshall}
				<ul>
					<li class='jc'>{@link oaj.marshall.Html}
					<li class='jc'>{@link oaj.marshall.Json}
					<li class='jc'>{@link oaj.marshall.PlainText}
					<li class='jc'>{@link oaj.marshall.SimpleJson}
					<li class='jc'>{@link oaj.marshall.Uon}
					<li class='jc'>{@link oaj.marshall.UrlEncoding}
					<li class='jc'>{@link oaj.marshall.Xml}
					<li class='jc'>{@link oaj.marshall.N3}
					<li class='jc'>{@link oaj.marshall.NTriple}
					<li class='jc'>{@link oaj.marshall.RdfXml}
					<li class='jc'>{@link oaj.marshall.RdfXmlAbbrev}
					<li class='jc'>{@link oaj.marshall.Turtle}	
				</ul>
				<li class='jac'>{@link oaj.marshall.StreamMarshall}
				<ul>
					<li class='jc'>{@link oaj.marshall.Jso}
					<li class='jc'>{@link oaj.marshall.MsgPack}
				</ul>
			</ul>
		</ul>
	<li>
		New/updated documentation:
		<ul>
			<li><a href='#juneau-marshall.JsonDetails.SimplifiedJson'>2.15.3 - Simplified JSON</a>
		</ul>
</ul>

<h5 class='topic w800'>juneau-dto</h5>
<ul class='spaced-list'>
	<li>
		Fixed bug where Swagger {@link oaj.dto.swagger.SchemaInfo#required(Object...)} was defined as a boolean
		instead of a list of strings.
	<li>
		Boolean attributes are now handled correctly for HTML5.
		<br>For example, calling <c><jk>new</jk> Select().disabled(<jk>true</jk>)</c> will produce <c>&lt;select disabled='disabled'&gt;</c>
</ul>

<h5 class='topic w800'>juneau-rest-server</h5>
<ul class='spaced-list'>
	<li>
		Auto-generated {@doc juneau-rest-server.Swagger Swagger UI}.
	<li>
		Simplified <dc>@RestResource(swagger)</dc>
		and {@link oajr.annotation.RestMethod#swagger() @RestMethod(swagger)} annotations.
	<li>
		Fixed bug in <c>UriResolver</c> when request path info had special characters.
	<li>
		Fixed bug where incorrect media type was being set on responses (e.g. <c>text/html+schema</c> instead of <c>text/html</c> for schema documents).
	<li>
		The <c>RemoteableServlet</c> class has been moved and renamed to <dc>RemoteInterfaceServlet</dc>.
	<li>
		<dc>RemoteInterfaceServlet</dc> now provides a form page for invoking remote interface methods in a browser.
	<li>
		Newlines were being stripped from <c><ja>@HtmlDoc</ja>(script)</c> when serialized which could cause script lines to become commented out.
	<li>
		New {@link oaj.http.annotation.Response @Response} annotation that can be applied to
		throwables thrown from REST methods and POJOs returned by REST methods to specify non-200 status return codes and descriptions in Swagger documentation.
	<li>
		Swagger fields added to the following annotations:
		<ul class='doctree'>
			<li class='ja'>{@link oaj.http.annotation.Body}
			<li class='ja'>{@link oaj.http.annotation.FormData}
			<li class='ja'>{@link oaj.http.annotation.Header}
			<li class='ja'>{@link oaj.http.annotation.Path}
			<li class='ja'>{@link oaj.http.annotation.Query}
		</ul>
	<li>
		The <ja>@PathRemainder</ja> annotation has been removed entirely.  
		<br>Use <c><ja>@Path</ja>(<js>"/*"</js>)</c> to access the path remainder which includes all the new OpenAPI parsing support.
	<li>
		"Helper" classes (i.e. reusable beans that can be returned by REST methods) have been moved to the following package with some new additions:
		<ul class='doctree'>
			<li class='jp'>{@link oajr.helper}
			<ul>
				<li class='jc'>{@link oajr.helper.BeanDescription}
				<li class='jc'>{@link oajr.helper.ChildResourceDescriptions}
				<li class='jc'><dc>ReaderResource</dc>
				<li class='jc'><dc>ReaderResourceBuilder</dc>
				<li class='jc'>{@link oajr.helper.SeeOtherRoot}
				<li class='jc'>{@link oajr.helper.ResourceDescription}
				<li class='jc'><dc>StreamResource</dc>
				<li class='jc'><dc>StreamResourceBuilder</dc>
			</ul>
		</ul>
	<li>
		Predefined HTTP responses.
		<ul class='doctree'>
			<li class='jp'>{@link oajr.response}
			<ul>
				<li class='jc'>{@link oajr.response.Accepted}
				<li class='jc'>{@link oajr.response.AlreadyReported}
				<li class='jc'>{@link oajr.response.Continue}
				<li class='jc'>{@link oajr.response.Created}
				<li class='jc'>{@link oajr.response.EarlyHints}
				<li class='jc'>{@link oajr.response.Found}
				<li class='jc'>{@link oajr.response.IMUsed}
				<li class='jc'>{@link oajr.response.MovedPermanently}
				<li class='jc'>{@link oajr.response.MultipleChoices}
				<li class='jc'>{@link oajr.response.MultiStatus}
				<li class='jc'>{@link oajr.response.NoContent}
				<li class='jc'>{@link oajr.response.NonAuthoritiveInformation}
				<li class='jc'>{@link oajr.response.NotModified}
				<li class='jc'>{@link oajr.response.Ok}
				<li class='jc'>{@link oajr.response.PartialContent}
				<li class='jc'>{@link oajr.response.PermanentRedirect}
				<li class='jc'>{@link oajr.response.Processing}
				<li class='jc'>{@link oajr.response.ResetContent}
				<li class='jc'>{@link oajr.response.SeeOther}
				<li class='jc'>{@link oajr.response.SwitchingProtocols}
				<li class='jc'>{@link oajr.response.TemporaryRedirect}
				<li class='jc'>{@link oajr.response.UseProxy}			
			</ul>
		</ul>
	<li>
		Predefined HTTP error throwables.
		<br>When added to REST Java methods, reflected in generated Swagger documentation.
		<ul class='doctree'>
			<li class='jp'>{@link oajr.exception}
			<ul>
				<li class='jc'>{@link oajr.exception.BadRequest}
				<li class='jc'>{@link oajr.exception.Conflict}
				<li class='jc'>{@link oajr.exception.ExpectationFailed}
				<li class='jc'>{@link oajr.exception.FailedDependency}
				<li class='jc'>{@link oajr.exception.Forbidden}
				<li class='jc'>{@link oajr.exception.Gone}
				<li class='jc'>{@link oajr.exception.HttpVersionNotSupported}
				<li class='jc'>{@link oajr.exception.InsufficientStorage}
				<li class='jc'>{@link oajr.exception.InternalServerError}
				<li class='jc'>{@link oajr.exception.LengthRequired}
				<li class='jc'>{@link oajr.exception.Locked}
				<li class='jc'>{@link oajr.exception.LoopDetected}
				<li class='jc'>{@link oajr.exception.MethodNotAllowed}
				<li class='jc'>{@link oajr.exception.MisdirectedRequest}
				<li class='jc'>{@link oajr.exception.NetworkAuthenticationRequired}
				<li class='jc'>{@link oajr.exception.NotAcceptable}
				<li class='jc'>{@link oajr.exception.NotExtended}
				<li class='jc'>{@link oajr.exception.NotFound}
				<li class='jc'>{@link oajr.exception.NotImplemented}
				<li class='jc'>{@link oajr.exception.PayloadTooLarge}
				<li class='jc'>{@link oajr.exception.PreconditionFailed}
				<li class='jc'>{@link oajr.exception.PreconditionRequired}
				<li class='jc'>{@link oajr.exception.RangeNotSatisfiable}
				<li class='jc'>{@link oajr.exception.RequestHeaderFieldsTooLarge}
				<li class='jc'>{@link oajr.exception.ServiceUnavailable}
				<li class='jc'>{@link oajr.exception.TooManyRequests}
				<li class='jc'>{@link oajr.exception.Unauthorized}
				<li class='jc'>{@link oajr.exception.UnavailableForLegalReasons}
				<li class='jc'>{@link oajr.exception.UnprocessableEntity}
				<li class='jc'>{@link oajr.exception.UnsupportedMediaType}
				<li class='jc'>{@link oajr.exception.UpgradeRequired}
				<li class='jc'>{@link oajr.exception.UriTooLong}
				<li class='jc'>{@link oajr.exception.VariantAlsoNegotiates}
			</ul>
		</ul>	
	<li>
		The {@link oajr.annotation.HtmlDoc#nav() @HtmlDoc(nav)} and {@link oajr.annotation.HtmlDoc#navlinks() @HtmlDoc(navlinks)}
		can now both be used on the same annotation.
		<br>The contents of <c>nav()</c> are free-form HTML that gets rendered immediately after the navigation links.
	<li>
		The following new parameter types can be used on REST methods:
		<ul class='doctree'>
			<li class='jc'>{@link oaj.parser.ReaderParser} - The reader parser matching the request content type.
			<li class='jc'>{@link oaj.parser.InputStreamParser} - The input stream parser matching the request content type.
		</ul>
	<li>
		The <c>$F</c> variable can now be used as a initialization time variable.
		<br>For example, the <c>AtomFeedResource</c> example pulls a bean example from a file on the classpath:
		<p class='bcode w800'>
	<ja>@RestResource</ja>(
		path=<js>"/atom"</js>,
		title=<js>"Sample ATOM feed resource"</js>,
		properties={
			<ja>@Property</ja>(name=<jsf>BEAN_examples</jsf>, value=<js>"{'org.apache.juneau.dto.atom.Feed': $F{AtomFeedResource_example.json}}"</js>)
		},
		...
	)
		</p>
		<br>It should be noted that you cannot use the <c>$F</c> variable to retrieve localized versions of files (since you're not within
		the scope of a client request.
	<li>
		The <dc>RestResource.nowrap()</dc> annotation has been changed to a string with a default value of <js>"true"</js>.
		<br>Having it as a string allows us to differentiate between a set and unset value so that it can be overridden in subclasses.
	<li>
		The {@link oaj.http.annotation.Path#name()} annotation parameter is now required.
	<li>
		New class for mock unit testing of REST resources:
		<ul class='doctree'>
			<li class='jc'><dc>MockRest</dc>
		</ul>
	<li>
		<c><ja>@RestMethod</ja>(inherit)</c> annotation has been removed and replaced with the following classes:
		<ul class='doctree'>
			<li class='jc'>{@link oajr.Inherit}
			<li class='jc'>{@link oajr.None}
		</ul>
		<br>These can be used in the following locations:
		<ul class='doctree'>
			<li class='ja'><dc>RestResource.serializers()</dc>
			<li class='ja'><dc>RestResource.parsers()</dc>
			<li class='ja'><dc>RestResource.beanFilters()</dc>
			<li class='ja'><dc>RestResource.pojoSwaps()</dc>
			<li class='ja'>{@link oajr.annotation.RestMethod#serializers()}
			<li class='ja'>{@link oajr.annotation.RestMethod#parsers()}
			<li class='ja'>{@link oajr.annotation.RestMethod#beanFilters()}
			<li class='ja'>{@link oajr.annotation.RestMethod#pojoSwaps()}
		</ul>
		<br>One advantage is that you now have control over the precedence of serializers and parsers by where you insert the <c>Inherit</c> class. 
	<li>
		<c>RequestPathMatch</c> class has been renamed to {@link oajr.RequestPath}.
	<li>
		{@link oaj.http.annotation.Request @Request} objects can now be used as parameters in <ja>@RestMethod</ja> methods.
		<br>Includes new methods on {@link oajr.RestRequest}:
		<ul class='doctree'>
			<li class='jm'>{@link oajr.RestRequest#getRequest(Class) getRequest(Class)}
			<li class='jm'>{@link oajr.RestRequest#getRequest(RequestBeanMeta) getRequest(RequestBeanMeta)}
		</ul>
	<li>
		New methods added to {@link oajr.widget.MenuItemWidget} to allow population of menu item content using Javascript and Ajax calls:
		<ul class='doctree'>
			<li class='jc'>{@link oajr.widget.MenuItemWidget}
			<ul>
				<li class='jm'><dc>getBeforeShowScript(RestRequest)</dc>
				<li class='jm'><dc>getAfterShowScript(RestRequest)</dc>
			</ul>
		</ul>
	<li>
		New methods added to {@link oajr.widget.Widget} to allow retrieving classpath resources with embedded SVL variables:
		<ul class='doctree'>
			<li class='jc'>{@link oajr.widget.Widget}
			<ul>
				<li class='jm'><dc>loadHtmlWithVars(RestRequest,String)</dc>
				<li class='jm'><dc>loadScriptWithVars(RestRequest,String)</dc>
				<li class='jm'><dc>loadStyleWithVars(RestRequest,String)</dc>
			</ul>
		</ul>
	<li>
		New/updated documentation: 
		<br><dc>juneau-rest-server.UnitTesting</dc>
	<li>
		The behavior of the default values for {@link oajr.annotation.RestMethod#name()} and {@link oajr.annotation.RestMethod#path()}
		have changed.
		<br>If not specified, the values are inferred from the Java method name.
		<br>See Also: {@doc juneau-rest-server.RestMethod}
	<li>
		<c>RedirectToServletRoot</c> class has been renamed to {@link oajr.helper.SeeOtherRoot}.
	<li>
		New REST context settings:
		<ul class='doctree'>
			<li class='jc'>{@link oajr.RestContext}
			<ul>
				<li class='jf'>{@link oajr.RestContext#REST_uriAuthority REST_uriAuthority}
				<li class='jf'>{@link oajr.RestContext#REST_uriContext REST_uriContext}
				<li class='jf'>{@link oajr.RestContext#REST_uriRelativity REST_uriRelativity}
				<li class='jf'>{@link oajr.RestContext#REST_uriResolution REST_uriResolution}
			</ul>
		</ul>
	<li>
		New convenience annotations for specifying default <c>Accept</c> and <c>Content-Type</c> headers:
		<ul class='doctree'>	
			<li class='jc'><dc>RestResource</dc>
			<ul>
				<li class='jf'><dc>defaultAccept</dc>
				<li class='jf'><dc>defaultContentType</dc>
			</ul>	
			<li class='jc'>{@link oajr.annotation.RestMethod}
			<ul>
				<li class='jf'>{@link oajr.annotation.RestMethod#defaultAccept defaultAccept}
				<li class='jf'>{@link oajr.annotation.RestMethod#defaultContentType defaultContentType}
			</ul>	
		</ul>
</ul>

<h5 class='topic w800'>juneau-rest-client</h5>
<ul class='spaced-list'>
	<li>
		Remote Resource interfaces support OpenAPI annotations.
	<li>
		Made improvements to the builder API for defining SSL support.
		<br>New methods added:
		<ul class='doctree'>
			<li class='jc'>{@link oajrc.RestClientBuilder}
			<ul>
				<li class='jf'>{@link oajrc.RestClientBuilder#sslProtocols(String...) sslProtocols(String...)}
				<li class='jf'>{@link oajrc.RestClientBuilder#cipherSuites(String...) cipherSuites(String...)}
				<li class='jf'>{@link oajrc.RestClientBuilder#hostnameVerifier(HostnameVerifier) hostnameVerifier(HostnameVerifier)}
				<li class='jf'>{@link oajrc.RestClientBuilder#keyManagers(KeyManager...) keyManagers(KeyManager...)}
				<li class='jf'>{@link oajrc.RestClientBuilder#trustManagers(TrustManager...)}
				<li class='jf'>{@link oajrc.RestClientBuilder#secureRandom(SecureRandom)}
				<li class='jf'>{@link oajrc.RestClientBuilder#httpClientConnectionManager(HttpClientConnectionManager)}
			</ul>
		</ul>
	<li>
		Clients no longer have JSON defined as the default serializer and parser.
		<br>Instead, the clients can now be used with no serializer/parser if you're working with InputStreams/Readers or
		POJOs that can be converted to Strings and converted from Strings/InputStreams/Readers.
	<li>
		Methods added to client builder to make it easy to define the transport language:
		<ul class='doctree'>
			<li class='jc'>{@link oajrc.RestClientBuilder}
			<ul>
				<li class='jf'>{@link oajrc.RestClientBuilder#json() json()}
				<li class='jf'>{@link oajrc.RestClientBuilder#xml() xml()}
				<li class='jf'>{@link oajrc.RestClientBuilder#html() html()}
				<li class='jf'>{@link oajrc.RestClientBuilder#uon() uon()}
				<li class='jf'>{@link oajrc.RestClientBuilder#urlEnc() urlEnc()}
				<li class='jf'>{@link oajrc.RestClientBuilder#msgpack() msgpack()}
				<li class='jf'>{@link oajrc.RestClientBuilder#plainText() plainText()}
			</ul>
		</ul>
	<li>
		New method added for allowing serverless client testing against REST interfaces.
		<ul class='doctree'>
			<li class='jc'>{@link oajrc.RestClientBuilder}
			<ul>
				<li class='jf'><dc>mockHttpConnection(MockHttpConnection)</dc>
			</ul>
		</ul>
	<li>
		Removed the deprecated <c>RestCall.execute()</c> method.
		<br>Use {@link oajrc.RestCall#run()}.
	<li>
		<c>RestCall.input(Object)</c> method renamed to {@link oajrc.RestCall#body(Object)} to match OpenAPI terminology.
	<li>
		Made constructors on <c>RestClient</c> and <c>RestClientBuilder</c> protected so that they can be subclassed.
	<li>
		The <c>RestClient.getRemoteableProxy()</c> methods have been split into separate methods for Remote Interfaces and Remote Resources:
		<ul class='doctree'>
			<li class='jc'>{@link oajrc.RestClient}
			<ul>
				<li class='jm'><dc>RestClient.getRemoteInterface(Class)</dc>
				<li class='jm'><dc>RestClient.getRemoteInterface(Class,Object)</dc>
				<li class='jm'><dc>RestClient.getRemoteInterface(Class,Object,Serializer,Parser)</dc>
				<li class='jm'>{@link oajrc.RestClient#getRemoteResource(Class)}
				<li class='jm'>{@link oajrc.RestClient#getRemoteResource(Class,Object)}
				<li class='jm'>{@link oajrc.RestClient#getRemoteResource(Class,Object,Serializer,Parser)}
			</ul>
		</ul>
</ul>

<h5 class='topic w800'>juneau-rest-microservice</h5>
<ul class='spaced-list'>
	<li>
		The look-and-feel of an application is now controlled through the external configuration file and access to
		CSS stylesheets in the working directory in a new folder called <c>files</c>:
		<br><img class='bordered' style='width:170px' src='doc-files/ReleaseNotes.711.1.png'>
		<br><br>
		The default configuration is this: 
		<p class='bcode w800'>
	<cc>#=======================================================================================================================
	# REST settings
	#=======================================================================================================================</cc>
	<cs>[REST]</cs>
	
	<ck>staticFiles</ck> = <cv>htdocs:files/htdocs</cv>
	
	<cc># Stylesheet to use for HTML views.</cc>
	<ck>theme</ck> = <cv>servlet:/htdocs/themes/devops.css</cv>
	
	<ck>headerIcon</ck> = <cv>servlet:/htdocs/images/juneau.png</cv>
	<ck>headerLink</ck> = <cv>http://juneau.apache.org</cv>
	<ck>footerIcon</ck> = <cv>servlet:/htdocs/images/asf.png</cv>
	<ck>footerLink</ck> = <cv>http://www.apache.org</cv>
	
	<ck>icon</ck> = <cv>$C{REST/headerIcon}</cv>
	<ck>header</ck> = <cv>&lt;a href='$U{$C{REST/headerLink}}'&gt;&lt;img src='$U{$C{REST/headerIcon}}' style='position:absolute;top:5;right:5;background-color:transparent;height:30px'/&gt;&lt;/a&gt;</cv>
	<ck>footer</ck> = <cv>&lt;a href='$U{$C{REST/footerLink}}'&gt;&lt;img style='float:right;padding-right:20px;height:32px' src='$U{$C{REST/footerIcon}}'&gt;</cv>	
		</p>				
		<br><br>
		Note that static files can now be served up from the <c>files</c> directory in the working directory, 
		and you have access to modify the CSS theme files.
		<br>The <c>SwaggerUI.css</c> file controls the look-and-feel of the Swagger UI, so you can make
		modification there as well.
		<br><br>
		The <c>BasicRestConfig</c> interface (which defines the default settings for the <c>BasicRestServlet</c> class)
		now looks like this...
		<p class='bcode w800'>
	<ja>@RestResource</ja>(
		...
		htmldoc=<ja>@HtmlDoc</ja>(
			header={
				<js>"&lt;h1&gt;$R{resourceTitle}&lt;/h1&gt;"</js>,
				<js>"&lt;h2&gt;$R{methodSummary,resourceDescription}&lt;/h2&gt;"</js>,
				<js>"$C{REST/header}"</js>
			},
			navlinks={
				<js>"up: request:/.."</js>
			},
			stylesheet=<js>"$C{REST/theme,servlet:/htdocs/themes/devops.css}"</js>,
			head={
				<js>"&lt;link rel='icon' href='$U{$C{REST/icon}}'/&gt;"</js>
			},
			footer=<js>"$C{REST/footer}"</js>
		),
	
		<jc>// These are static files that are served up by the servlet under the specified sub-paths.
		// For example, "/servletPath/htdocs/javadoc.css" resolves to the file "[servlet-package]/htdocs/javadoc.css"</jc>
		staticFiles={<js>"$C{REST/staticFiles}"</js>}
	)
	<jk>public interface</jk> BasicRestConfig {}			
			</p>	
			<br><br>
			The <c>PoweredByApache</c> widget which used to serve as a page footer has been eliminated.
			<br><br>
			If you're testing out changes in the theme stylesheets, you may want to set the following system property
			that prevents caching of those files so that you don't need to restart the microservice each time a change is made:
			<p class='bcode w800'>
	<cc>#=======================================================================================================================
	# System properties
	#=======================================================================================================================</cc>
	<cs>[SystemProperties]</cs>
	
	<cc># Disable classpath resource caching.
	# Useful if you're attached using a debugger and you're modifying classpath resources while running.</cc>
	<ck>RestContext.useClasspathResourceCaching.b</ck> = <cv>false</cv>
			</p>
		<li>
			Upgraded to Jetty 9.4.12.
</ul>
