blob: a84583a06a83592a5d8106121d1e45c47874dfca [file] [log] [blame]
<!--
/***************************************************************************************************************************
* 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.
***************************************************************************************************************************/
-->
9.0.0 (TBD)
<div class='topic'>
<p>
Juneau 9.0.0 is a major release. Deprecated APIs that have been accumulating over time have been removed.
</p>
<p>
Major changes include:
</p>
<ul class='spaced-list'>
<li>
The code has undergone significant refactoring to ease maintainability and improve overall performance.
Configuration properties have been removed entirely. They have been replaced with a standard builder-based
architecture. In addition to making the code more maintainable, it also improves performance when
creating new serializers/parsers/rest clients (and others).
<li>
REST servlets now seemlessly integrate with Spring Boot.
</ul>
<h5 class='topic w800'>juneau-marshall</h5>
<ul class='spaced-list'>
<li>
Eliminated the various <c><ja>@XConfig</ja>(applyX={...})</c> annotations and replaced them with the ability
to apply targeted annotations directly to configuration classes and methods (such as REST classes/methods).
<p class='bcode'>
| <ja>@Rest</ja>(...)
| <ja>@Bean</ja>(on=<js>"MyBean1,MyBean2"</js>,sort=<jk>true</jk>)
| <ja>@UrlEncoding</ja>(onClass=MyList.<jk>class</jk>,expandedParams=<jk>true</jk>)
| <jk>public class</jk> MyRestClass {
|
| <ja>@RestOp</ja>(...)
| <ja>@Bean</ja>(on=<js>"MyBean1,MyBean2"</js>,sort=<jk>false</jk>)
| <ja>@UrlEncoding</ja>(onClass=MyList.<jk>class</jk>,expandedParams=<jk>false</jk>)
| <jk>public</jk> Object myRestMethod() { ... }
| }
</p>
<li>
{@link oaj.marshaller.Json5 JSON 5} support.
<li>
New {@link oaj.annotation.Marshalled @Marshalled} annotation for non-bean classes.
<li>
New {@link oaj.annotation.BeanConfig#ignoreUnknownEnumValues() @BeanConfig(ignoreUnknownEnumValues)} annotation and support for ignoring
unknown enum values during parsing.
<li>
Java Serialized Object marshalling support has been removed entirely due to security risks with usage (better safe than sorry).
</ul>
<h5 class='topic w800'>juneau-rest-common</h5>
<p>
New module containing the common REST classes/annotations uses by both the client and server APIs.
These were previously contained within <c>juneau-marshall</c>.
</p>
<ul class='spaced-list'>
<li>
Significant refactoring of the classes in the {@link oaj.http} package and subpackages. Attempts were made to make classes as natural
extensions to the Apache HttpComponents APIs. Significant new functionality here.
<li>
<c>@RemoteMethod</c> annotation has been replaced with the following:
<ul class='javatreec'>
<li class='ja'>{@link oaj.http.remote.RemoteOp}
<li class='ja'>{@link oaj.http.remote.RemoteGet}
<li class='ja'>{@link oaj.http.remote.RemotePut}
<li class='ja'>{@link oaj.http.remote.RemotePatch}
<li class='ja'>{@link oaj.http.remote.RemotePost}
<li class='ja'>{@link oaj.http.remote.RemoteDelete}
</ul>
</li>
</ul>
<h5 class='topic w800'>juneau-rest-server</h5>
<ul class='spaced-list'>
<li>
Significant refactoring done to allow for many extensible aspects of the API to be performed through injected beans
in Spring. These include logging, debugging, REST method arg types, static files, file finders, swagger creators, thrown stores, response
processors, serializers/parsers, JSON schema generators, statistics gathering stores, and default request attributes/headers and response
headers.
<li>
<c>@RestMethod</c> annotation has been replaced with the following:
<ul class='javatreec'>
<li class='ja'>{@link oaj.rest.annotation.RestOp}
<li class='ja'>{@link oaj.rest.annotation.RestGet}
<li class='ja'>{@link oaj.rest.annotation.RestPut}
<li class='ja'>{@link oaj.rest.annotation.RestPatch}
<li class='ja'>{@link oaj.rest.annotation.RestPost}
<li class='ja'>{@link oaj.rest.annotation.RestDelete}
</ul>
</li>
<li>
Defining REST resources with predefined marshalling support is now much simpler. You can now extend from a basic REST servlet/object.
<p class='bcode'>
| <jc>// A root resource that supports JSON/HTML marshalling.</jc>
| <jk>public class</jk> MyRootResources <jk>extends</jk> BasicRestServletGroup { ... }
|
| <jc>// A child resource that supports all available marshalling.</jc>
| <jk>public class</jk> MyChildResource <jk>extends</jk> BasicRestObject { ... }
</p>
<ul class='javatreec'>
<li class='jc'>{@link oajr.servlet.BasicRestServlet}
<li class='jc'>{@link oajr.servlet.BasicRestServletGroup}
<li class='jc'>{@link oajr.servlet.BasicRestObject}
<li class='jc'>{@link oajr.servlet.BasicRestObjectGroup}
</ul>
</li>
</ul>
<h5 class='topic w800'>juneau-dto</h5>
<ul class='spaced-list'>
<li>
Addition of OpenAPI 3.0 ({@link oaj.dto.openapi3} package).
</ul>
<h5 class='topic w800'>juneau-rest-server-springboot</h5>
<ul class='spaced-list'>
<li>
The requirement for using <c>JuneauRestInitializer</c> during App initialization to use bean injection has been eliminated.
Instead, root resources should simply extend from {@link oajr.springboot.BasicSpringRestServlet} and {@link oajr.springboot.BasicSpringRestServletGroup}.
These will automatically hook into the Spring Boot framework for resolution of REST children and various extension beans added
to the REST API framework.
</ul>
<h5 class='topic w800'>juneau-rest-client</h5>
<ul class='spaced-list'>
<li>
While the general usage pattern stays the same, the REST client code has undergone significant rewriting. It is now more inline
as an extension of the Apache HttpClient library. Much new functionality such as support for fluent assertions has been added.
<p class='bjava'>
| <jc>// Create a basic REST client with JSON support and download a bean.</jc>
| MyBean <jv>bean</jv> = RestClient.<jsm>create</jsm>()
| .json5()
| .build()
| .get(<jsf>URI</jsf>)
| .run()
| .assertStatus().asCode().is(200)
| .assertHeader(<js>"Content-Type"</js>).matchesSimple(<js>"application/json*"</js>)
| .getContent().as(MyBean.<jk>class</jk>);
</p>
</ul>
<h5 class='topic w800'>juneau-rest-mock</h5>
<ul class='spaced-list'>
<li>
Entirely rewritten. Changes too many to list.
</ul>
</div>