Juno 5.0.0.7 is a major update.
Core API updates
- Combined previous 3 libraries into a single library.
-
New {@link oaj.parser.ParserListener} class.
Adds ability to find and process unknown bean properties during parsing.
-
Enhancements to {@link oaj.xml.XmlParser}:
- Coalescing support
- Validations support
- Support for replacing entity references
- Resolver support
- Event allocator support
- Trim-whitespace support
-
Enhanced XML support:
-
New {@link oaj.xml.annotation.Xml#format() @Xml.format} annotation.
Controls how POJOs get serialized to XML.
Also allows you to collapse collections and arrays.
-
New @Xml.namespaces annotation.
Namespaces can be defined at package, class, method, or field levels.
-
New @Xml.nsUri annotation.
Shortcut for specifying namespace URIs.
-
New @Xml.valAttr annotation.
Serializes a bean property value as an attribute.
- Ability to override XS and XSI namespaces on XML and RDF/XML serializers.
- Ability to override RDF namespace on RDF/XML serializer.
- New more-efficient namespace resolution.
-
New configurable property classes for everything are now structured better and easier to locate and identify through the following new classes:
- {@link oaj.BeanContext}
- {@del SerializerContext}
- {@del ParserContext}
-
Enhancements to {@link oaj.BeanContext}:
-
Ability to mark bean properties as hidden using {@del @BeanProperty(hidden)} so that they don't get serialized.
-
Simplified ClassType {@link oaj.ClassMeta} API.
Combined 4 classes into a single class.
-
New {@del @Bean#filter} and {@del @BeanProperty#filter} annotations.
Used for defining filters on bean classes and bean properties instead of just globally through BeanContext.addTransforms(Class[]).
-
New {@link oaj.PropertyNamer} API / {@link oaj.annotation.Bean#propertyNamer() @Bean.propertyNamer} annotation.
Used for customizing bean property names.
-
New {@del @BeanProperty#beanUri} and {@del @BeanProperty#id} annotations.
Used for associating beans with URLs and IDs.
Used by XML serializer to add a url attribute on a bean element.
Used by RDF/XML serializer to construct rdf:resource attributes.
-
New {@del BeanProperty#properties()} annotation.
Used for limiting properties on child elements.
-
Automatic support for {@link java.net.URL} and {@link java.net.URI} objects.
- Converted to hrefs in HTML.
- Converted to url attributes in XML.
- Converted to resource:about attributes in RDF/XML.
-
Improvements to Javadocs.
-
Improved {@link oaj.utils.PojoQuery} support.
REST client updates
- GZIP compression support.
- Bug fixes.
REST server updates
-
Support for overriding bean context and serializer properties in a REST method call through new {@del RestResponse#setProperty(String,Object)} method.
For example, allows you to control whitespace options on a per-request basis.
-
Several new annotations on REST servlets:
- {@del @RestResource#filters} - Associate post-formatting filters on a resource level.
- {@del @RestResource#guards} - Associate resource-level guards.
- {@del @RestResource#messages} - Associate a resource bundle with a REST servlet. Comes with several convenience methods for looking up messages for the client locale.
- {@del @RestResource#properties} - Override default bean context, serializer, and parser properties though an annotation.
-
Several new annotations on REST methods:
- @RestMethod(filters) - Associate post-formatting filters on a method level.
- {@del oajr.annotation.RestMethod#guards() @RestMethod(guards)} - Associate method-level guards.
-
New annotations on REST method parameters with automatic conversion:
- {@del @Attr} - A parameter or URL variable value as a parsed POJO.
- {@del @Param} - A query parameter value as a parsed POJO.
- {@del @PathRemainder}- The remainder after a URL pattern match as a String.
- {@del @Header} - An HTTP header value as a parsed POJO.
- {@del @Content} - The HTTP content as a parsed POJO.
- {@link oajr.annotation.Method @Method} - The HTTP method name as a String.
-
HTTP response content POJOs can now simply be returned from methods instead of calling {@del oajr.RestResponse#setOutput(Object)}.