| <!-- |
| /*************************************************************************************************************************** |
| * 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>{@link oaj.annotation.BeanProperty#beanDictionary() @BeanProperty(beanDictionary)} - 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>&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>{@link oaj.ClassMetaExtended} / {@link oaj.ClassMeta#getExtendedMeta(Class)} |
| <li>{@link oaj.BeanMetaExtended} / {@link oaj.BeanMeta#getExtendedMeta(Class)} |
| <li>{@link oaj.BeanPropertyMetaExtended} / {@link oaj.BeanPropertyMeta#getExtendedMeta(Class)} |
| </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>-><ja>@Path</ja>, <ja>@QParam</ja>-><ja>@Query</ja>, <ja>@Param</ja>-><ja>@FormData</ja>, <ja>@Content</ja>-><ja>@Body</ja> |
| <li>Eliminated <c>ResourceOptions</c> and related code. |
| <li>New annotations and related methods: |
| <ul> |
| <li>{@link oajr.annotation.RestResource#title() @RestResource(title)} / {@link oajr.RestInfoProvider#getTitle(RestRequest)} |
| <li>{@link oajr.annotation.RestResource#description() @RestResource(description)} / {@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>{@link oajr.annotation.RestResource#clientVersionHeader} - 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> |