5.0.0.7 (Jan 20, 2013)

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}
  - `SerializerContext`
  - `ParserContext`
- Enhancements to {@link oaj.BeanContext}:
  - Ability to mark bean properties as hidden using `@BeanProperty(hidden)` so that they don't get serialized.
  - Simplified `ClassType` {@link oaj.ClassMeta} API.
    Combined 4 classes into a single class.
  - New `@Bean.filter` and `@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 `@BeanProperty.beanUri` and `@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 {@link oaj.annotation.BeanProperty#properties() @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 `RestResponse.setProperty(String,Object)` method.
  For example, allows you to control whitespace options on a per-request basis.
- Several new annotations on REST servlets:
  - `@RestResource(filters)` - Associate post-formatting filters on a resource level.
  - {@link oajr.annotation.RestResource#guards() @RestResource.guards} - Associate resource-level guards.
  - {@link oajr.annotation.RestResource#messages() @RestResource.messages} - Associate a resource bundle with a REST servlet. Comes with several convenience methods for looking up messages for the client locale.
  - {@link oajr.annotation.RestResource#properties() @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.
  - {@link oajr.annotation.RestMethod#guards() @RestMethod(guards)} - Associate method-level guards.
- New annotations on REST method parameters with automatic conversion:
  - `@Attr` - A parameter or URL variable value as a parsed POJO.
  - `@Param` - A query parameter value as a parsed POJO.
  - `@PathRemainder`- The remainder after a URL pattern match as a String.
  - `@Header` - An HTTP header value as a parsed POJO.
  - `@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 {@link oajr.RestResponse#setOutput(Object)}.