5.1.0.17 (Aug 3, 2015)

Juno 5.1.0.17 is a major update.

##### Core

- {@link oaj.BeanMap#get(Object)} and {@link oaj.BeanMap#put(String,Object)} now automatically performs filtering if filters are defined on the bean property or bean property class.
  - Deleted the following methods which are now unnecessary:
    - BeanMap.getFiltered(String)
    - BeanMap.putFiltered(String,Object)
    - BeanMapEntry.getFiltered(String)
    - BeanMapEntry.putFiltered(String,Object)
    - BeanMapEntry.putFiltered(String,Object)
    - BeanPropertyMeta.getFiltered()
    - BeanPropertyMeta.setFiltered(Object)
    - BeanPropertyMeta.getTransformedClassMeta()
  - {@link oaj.BeanPropertyMeta#getClassMeta()} now returns the filtered type of the property.
- {@del StringVarResolver} now has support for chained resolvers.
- {@del StringVarResolver} now resolves variables inside resolved values. i.e. if a resolved variable value itself contains a variable, it now resolves that variable too.
- Fixed bug where inner interface classes being used in {@del RestResource#filters()} were being interpreted as surrogate classes because they have hidden 1-arg constructors due to being inner classes.
- Fixed bug in {@link oaj.internal.MultiSet} where exception was being thrown if last set was empty.
- New {@del oaj.utils.ZipFileList} class for providing efficiently zipped directories through the REST interface.
- New RdfProperties.RDF_useXmlNamespaces property.
- New {@del XmlParserContext#XML_preserveRootElement} property.
- Worked around bug in Sun VM on OS/X where XML parser was throwing an exception when trying to set a reporter.

##### Server

- New {@del ZipFileListResponseHandler} class.
- Simplified labels in servlet resource bundles:
  - "[ClassName].ResourceDescription" is now "[ClassName].label".
  - "[ClassName].MethodDescription.[methodName]" is now "[ClassName].[methodName]".
- Several changes to {@link oajr.RestRequest}:
  - Added new methods:
    - {@del RestRequest#getQueryParameterMap()}
    - {@del RestRequest#getQueryParameterNames()}
    - {@del RestRequest#getPathInfoUndecoded()}
    - {@del RestRequest#getPathRemainderUndecoded()}
    - {@del RestRequest#getTrimmedRequestURI()}
    - {@del RestRequest#getTrimmedRequestURL()}
    - {@del RestRequest#getServletTitle()}
    - {@del RestRequest#getServletDescription()}
    - {@del RestRequest#getMethodDescription()}
  - Behavior changes to {@link oajr.RestRequest#getPathInfo()} to follow Servlet specs. Returns null instead of blank for no path info.
  - {@del RestRequest#getPathRemainder()} now automatically decodes the path remainder. Use {@del RestRequest#getPathRemainderUndecoded()} to get the unencoded path remainder.
  - Bug fixes in {@del RestRequest#getRequestParentURI()} when servlet is mapped to "/*".
  - Bug fixes in {@del RestRequest#getServletURI()} when servlet is mapped to "/*".
- New string replacement variables:
  - $R{contextPath} - Returns value from {@link oajr.RestRequest#getContextPath()}
  - $R{methodDescription} - Returns value from {@del RestRequest#getMethodDescription()}
  - $R{resourceTitle} - Returns value from {@del RestRequest#getServletTitle()}
  - $R{resourceDescription} - Returns value from {@del RestRequest#getServletDescription()}
  - $R{trimmedRequestURI} - Returns value from {@del RestRequest#getTrimmedRequestURI()}
  - $E{var} - Environment variables.
- Added methods {@del RestServlet#getDescription(RestRequest)} and {@del RestServlet#getLabel(RestRequest)}.
- {@del oajr.BasicRestServlet} and {@del RestServletJenaDefault} now provide default HTML titles and descriptions:

  @Property(name=HTMLDOC_title, value="$R{resourceTitle}"), @Property(name=HTMLDOC_description, value="$R{resourceDescription}")

- Options pages on {@del oajr.BasicRestServlet} and {@del RestServletJenaDefault} now provide default descriptions and back links: and descriptions:

  @Property(name=HTMLDOC_navlinks, value="{back:'$R{servletURI}"), @Property(name=HTMLDOC_description, value="Resource options")

- New {@del oajr.BasicRestServletGroup} class.
- Removed RestServletProperties.REST_trimTrailingUriSlashes and RestServletProperties.REST_pathInfoBlankForNull.
- New annotations for providing labels and descriptions. Useful if you don't plan on having to support other languages, so you don't want to provide labels in resource bundles.
  - {@del RestResource#label()}
  - {@del @RestResource(description)}
  - {@del oajr.annotation.RestMethod#description() @RestMethod(description)}
  - {@del RestMethod#responses()}
  - {@del Attr#description()}
  - {@del Content#description()}
  - {@del HasParam#description()}
  - {@del HasQParam#description()}
  - {@del Header#description()}
  - {@del Param#description()}
  - {@del QParam#description()}
- Support for sorting resources by name in {@del ChildResourceDescriptions}.

##### Samples

- Added /tempDir/upload showing how to use ServletFileUpload with multipart form posts.