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