Skip to main content

Release 5.1.0.17

Date: Aug 3, 2015

Juno 5.1.0.17 is a major update.

Core

  • BeanMap.get(Object) and 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()
    • BeanPropertyMeta.getClassMeta() now returns the filtered type of the property.
  • StringVarResolver now has support for chained resolvers.

  • 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 RestResource.filters() were being interpreted as surrogate classes because they have hidden 1-arg constructors due to being inner classes.

  • Fixed bug in MultiSet where exception was being thrown if last set was empty.

  • New ZipFileList class for providing efficiently zipped directories through the REST interface.

  • New RdfProperties.RDF_useXmlNamespaces property.

  • New 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 ZipFileListResponseHandler class.

  • Simplified labels in servlet resource bundles:

    • "[ClassName].ResourceDescription" is now "[ClassName].label".
    • "[ClassName].MethodDescription.[methodName]" is now "[ClassName].[methodName]".
  • Several changes to RestRequest:

    • Added new methods:
      • RestRequest.getQueryParameterMap()
      • RestRequest.getQueryParameterNames()
      • RestRequest.getPathInfoUndecoded()
      • RestRequest.getPathRemainderUndecoded()
      • RestRequest.getTrimmedRequestURI()
      • RestRequest.getTrimmedRequestURL()
      • RestRequest.getServletTitle()
      • RestRequest.getServletDescription()
      • RestRequest.getMethodDescription()
    • Behavior changes to RestRequest.getPathInfo() to follow Servlet specs. Returns null instead of blank for no path info.
    • RestRequest.getPathRemainder() now automatically decodes the path remainder. Use RestRequest.getPathRemainderUndecoded() to get the unencoded path remainder.
    • Bug fixes in RestRequest.getRequestParentURI() when servlet is mapped to "/*".
    • Bug fixes in RestRequest.getServletURI() when servlet is mapped to "/*".
  • New string replacement variables:

    • $R{contextPath} - Returns value from RestRequest.getContextPath()
    • $R{methodDescription} - Returns value from RestRequest.getMethodDescription()
    • $R{resourceTitle} - Returns value from RestRequest.getServletTitle()
    • $R{resourceDescription} - Returns value from RestRequest.getServletDescription()
    • $R{trimmedRequestURI} - Returns value from RestRequest.getTrimmedRequestURI()
    • $E{var} - Environment variables.
  • Added methods RestServlet.getDescription(RestRequest) and RestServlet.getLabel(RestRequest).

  • BasicRestServlet and 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 BasicRestServlet and RestServletJenaDefault now provide default descriptions and back links:

    @Property(name=HTMLDOC_navlinks, value="{back:'$R{servletURI}"),
    @Property(name=HTMLDOC_description, value="Resource options")
  • New 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.

    • RestResource.label()
    • @RestResource(description)
    • RestMethod.description() @RestMethod(description)
    • RestMethod.responses()
    • Attr.description()
    • Content.description()
    • HasParam.description()
    • HasQParam.description()
    • Header.description()
    • Param.description()
    • QParam.description()
  • Support for sorting resources by name in ChildResourceDescriptions.

Samples

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