blob: 98184a543e3561168608add13f2f060be96c944e [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.
***************************************************************************************************************************/
-->
6.0.0 (Oct 3, 2016)
<p>
Juneau 6.0.0 is a major update.
</p>
<p>
The major change is rebranding from "Juno" to "Juneau" in preparation for donation to the Apache Foundation.
</p>
<h5 class='topic w800'>org.apache.juneau</h5>
<ul class='spaced-list'>
<li>Major changes around how serializer and parser class properties are defined to improve performance
and concurrency.
<ul>
<li>New {@link oaj.PropertyStore} class - Used for creating context objects.
<li>New {@link oaj.Context} class - Read-only configurations for serializers and parsers.
<li>New {@link oaj.Session} class - One-time use objects used by serializers and parsers.
<li>All context context properties can now also be specified via system properties.
</ul>
</li>
<li>Refactored serializer and parser APIs for more consistency between stream-based and character-based serializers
and parsers.
<ul>
<li>More consistent handling of exceptions.
<li>More consistent method declarations.
</ul>
<li>Refactored var resolver API and added them to a new package - <c>org.apache.juneau.svl</c>.
<ul>
<li>Support for stream-based variables - {@link oaj.svl.StreamedVar}.
<li>Added support for context and session objects.
</ul>
<li>Eliminated <js>"_class"</js> properties and replaced them with <js>"_type"</js> properties.
The class properties were a little-used feature where we would serialize fully-qualified class names when the class type could not be inferred through reflection.
It's been replaced with bean type names and bean dictionaries.
Instead of class names, we serialize <js>"_type"</js> properties whose name is the type name defined on the bean being serialized.
The parsers use a 'dictionary' of bean classes to resolve those names to actual bean classes.
The following features were added to enable this support:
<ul>
<li>{@link oaj.annotation.Bean#typeName() @Bean(typeName)} - Annotation that defines an identifying name for a bean class.
<li>{@link oaj.transform.BeanFilterBuilder#typeName(String)} - Programmatic equivalent to annotation above.
<li>{@link oaj.BeanContext#BEAN_beanDictionary} - List of bean classes that make up the bean dictionary for lookup
during parsing.
<li>{@link oaj.BeanContext#BEAN_beanTypePropertyName} - The overridable type property name. Default is <js>"_type"</js>.
<li><dc>@BeanProperty(beanDictionary)</dc> - Define a type dictionary
for a particular bean property value. This overrides the value specified using {@link oaj.BeanContext#BEAN_beanDictionary}.
<li><dc>SerializerContext.SERIALIZER_addBeanTypeProperties</dc> - Controls whether type properties are serialized.
</ul>
In addition, the {@link oaj.annotation.Bean#typeName() @Bean(typeName)} value replaces the <c>@Xml(name)</c> annotation, and the
<js>"type"</js> and <js>"_class"</js> attributes in the XML and HTML serializers have been standardized on a single <js>"_type"</js> attribute.
<li>Refactor bean filter support to use {@link oaj.transform.BeanFilterBuilder} class.
Allows the <c>BeanFilter</c> class to use final fields.
<li>{@link oaj.msgpack MessagePack} support.
<li>Serializers can now serialize directly to {@link java.io.File Files}.
See {@link oaj.serializer.Serializer#serialize(Object,Object)}
<li>Parsers can now parse directly from {@link java.io.File Files} and other types.
See {@link oaj.parser.Parser#parse(Object,ClassMeta)}
<li>Parsers will automatically covert numeric input to POJOs that have numeric constructors (e.g. <c>java.util.Date</c>).
<li>Renamed 'Filters' to 'BeanFilters' and 'PojoSwaps'. Filters is just too overloaded a term.
<li>Internal utility classes moved to a new <c>org.apache.juneau.internal</c> package.
These internal utility classes are not meant for consumption outside the Juneau codebase.
<li>New methods on {@link oaj.parser.Parser}:
<ul>
<li><c>org.apache.juneau.parser.Parser.createSession(ObjectMap,Method,Object)</c>
<li><dc>Parser.getMediaRanges()</dc>
</ul>
</li>
<li>New methods on {@link oaj.serializer.Serializer}:
<ul>
<li><c>org.apache.juneau.serializer.Serializer.createSession(ObjectMap,Method)</c>
<li><dc>Serializer.getMediaRanges()</dc>
</ul>
</li>
<li>New {@link oaj.annotation.Bean#sort() @Bean(sort)} annotation.
<li>Added <ja>@Bean.properties</ja> annotations on various DTO beans to make the ordering consistent
between IBM and Oracle JVMs.<br>
IBM JVMs maintain the order of methods in a class, whereas Oracle JVMs do not.
<li>Serializers and parsers now automatically convert {@link java.lang.Class} objects to readable names via <dc>ClassUtils.getReadableClassName(Class)</dc>.
<li>Eliminated the <c>ClassFilter</c> class since it's no longer needed.
<li>Code and concurrency improvements to {@link oaj.serializer.SerializerGroup} and {@link oaj.parser.ParserGroup}.
<li>Various enhancements to <dc>BeanContext.convertToType(Object,Class)</dc>.
<li>New properties on {@link oaj.html.HtmlSerializer}:
<ul>
<li><dc>HtmlSerializerContext.HTML_detectLinksInStrings</dc> - Automatically detect hyperlinks in strings.
<li><dc>HtmlSerializerContext.HTML_lookForLabelParameters</dc> - Specify anchor text by appending <c>&amp;label=MyLabel</c> to URL.
<li><dc>HtmlSerializerContext.HTML_labelParameter</dc> - Specify what URL parameter to use as the anchor text label.
<li><dc>HtmlSerializerContext.URI_ANCHOR</dc> option for <dc>HtmlSerializerContext.HTML_uriAnchorText</dc>.
</ul>
</li>
<li>Removed generics from {@link oaj.BeanPropertyMeta}.
<li>Introduced new classes to eliminate the references to language-specific metadata in the core metadata classes:
<ul>
<li><dc>ClassMetaExtended</dc> / <dc>ClassMeta.getExtendedMeta(Class)</dc>
<li><dc>BeanMetaExtended</dc> /<dc>BeanMeta.getExtendedMeta(Class)</dc>
<li><dc>BeanPropertyMetaExtended</dc> / <dc>BeanPropertyMeta.getExtendedMeta(Class)</dc>
</ul>
</li>
<li>Renamed <c>@Transform</c> annotation to <dc>@Pojo</dc> so that it can be used for various POJO-related behavior, not just associating transforms.
<li>Introduced {@link oaj.dto.swagger Swagger DTOs}.
</ul>
<h5 class='topic w800'>org.apache.juneau.rest</h5>
<ul class='spaced-list'>
<li>OPTIONS pages replaced with Swagger documents.
Lots of changes related to supporting Swagger.
<ul>
<li>Annotation name changes to conform to Swagger specs: <ja>@Attr</ja>-&gt;<ja>@Path</ja>, <ja>@QParam</ja>-&gt;<ja>@Query</ja>, <ja>@Param</ja>-&gt;<ja>@FormData</ja>, <ja>@Content</ja>-&gt;<ja>@Body</ja>
<li>Eliminated <c>ResourceOptions</c> and related code.
<li>New annotations and related methods:
<ul>
<li><dc>@RestResource(title)</dc> / {@link oajr.RestInfoProvider#getTitle(RestRequest)}
<li><dc>@RestResource(description)</dc> / {@link oajr.RestInfoProvider#getDescription(RestRequest)}
<li><dc>@RestResource(termsOfService)</dc> / <dc>RestInfoProvider.getTermsOfService(RestRequest)</dc>
<li><dc>@RestResource(contact)</dc> / <dc>RestInfoProvider.getContact(RestRequest)</dc>
<li><dc>@RestResource(license)</dc> / <dc>RestInfoProvider.getLicense(RestRequest)</dc>
<li><dc>@RestResource(version)</dc> / <dc>RestInfoProvider.getVersion(RestRequest)</dc>
<li><dc>@RestResource(tags)</dc> / <dc>RestInfoProvider.getTags(RestRequest)</dc>
<li><dc>@RestResource(externalDocs)</dc> / <dc>RestInfoProvidergetExternalDocs(RestRequest)</dc>
<li>{@link oajr.annotation.RestMethod#summary() @RestMethod(summary)} / <dc>RestInfoProvider.getMethodSummary(String,RestRequest)</dc>
<li>{@link oajr.annotation.RestMethod#description() @RestMethod(description)} /<dc>RestInfoProvider.getMethodDescription(String,RestRequest)</dc>
<li><dc>@RestMethod(externalDocs)</dc>
<li><dc>@RestMethod(tags)</dc>
<li><dc>@RestMethod(deprecated)</dc>
<li><dc>@RestMethod(parameters)</dc>
<li><dc>@RestMethod(responses)</dc>
</ul>
</li>
</ul>
<li>New <dc>RestServletContext.paramFormat</dc> context property.
<li>New/updated methods on {@link oajr.RestServlet}:
<ul>
<li><dc>RestServlet.createProperties()</dc>
<li><dc>RestServlet.createBeanContext(ObjectMap,Class[],Class[])</dc>
<li><dc>RestServlet.createBeanFilters()</dc>
<li><dc>RestServlet.createPojoSwaps()</dc>
<li><dc>RestServlet.createParsers(ObjectMap,Class[],Class[])</dc>
<li><dc>RestServlet.createUrlEncodingSerializer(ObjectMap,Class[],Class[])</dc>
<li><dc>RestServlet.createUrlEncodingParser(ObjectMap,Class[],Class[])</dc>
<li><dc>RestServlet.createConverters(ObjectMap)</dc>
<li><dc>RestServlet.createDefaultRequestHeaders(ObjectMap)</dc>
<li><dc>RestServlet.createDefaultResponseHeaders(ObjectMap)</dc>
<li><dc>RestServlet.createEncoders(ObjectMap)</dc>
<li><dc>RestServlet.createGuards(ObjectMap)</dc>
<li><dc>RestServlet.createMimetypesFileTypeMap(ObjectMap)</dc>
<li><dc>RestServlet.createResponseHandlers(ObjectMap)</dc>
</ul>
</li>
<li>New client-version annotations:
<ul>
<li><dc>RestResource.clientVersionHeader</dc> - The name of the header used to identify the client version.
<li>{@link oajr.annotation.RestMethod#clientVersion} - The client version range applied to a Java method.
</ul>
</li>
</ul>
<h5 class='topic w800'>org.apache.juneau.rest.client</h5>
<ul class='spaced-list'>
<li>Removed the <c>JazzRestClient</c> class.
<li>New method <dc>RestClient.setClientVersion(String)</dc>.
</ul>