blob: dca2cc19898c77e8ca4d76bffc362bd96d9e6b16 [file] [log] [blame]
<!--
/***************************************************************************************************************************
* Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information regarding copyright ownership. The ASF licenses this file
* to you under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
* specific language governing permissions and limitations under the License.
***************************************************************************************************************************/
-->
5.1.0.17 (Aug 3, 2015)
<p>
Juno 5.1.0.17 is a major update.
</p>
<h5 class='topic w800'>Core</h5>
<ul class='spaced-list'>
<li>{@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.
<ul>
<li>Deleted the following methods which are now unnecessary:
<ul>
<li><c>BeanMap.getFiltered(String)</c>
<li><c>BeanMap.putFiltered(String,Object)</c>
<li><c>BeanMapEntry.getFiltered(String)</c>
<li><c>BeanMapEntry.putFiltered(String,Object)</c>
<li><c>BeanMapEntry.putFiltered(String,Object)</c>
<li><c>BeanPropertyMeta.getFiltered()</c>
<li><c>BeanPropertyMeta.setFiltered(Object)</c>
<li><c>BeanPropertyMeta.getTransformedClassMeta()</c>
</ul>
<li>{@link oaj.BeanPropertyMeta#getClassMeta()} now returns the filtered type of the property.
</ul>
<li><dc>StringVarResolver</dc> now has support for chained resolvers.
<li><dc>StringVarResolver</dc> now resolves variables inside resolved values.
i.e. if a resolved variable value itself contains a variable, it now resolves that variable too.
<li>Fixed bug where inner interface classes being used in <dc>RestResource.filters()</dc> were being
interpreted as surrogate classes because they have hidden 1-arg constructors due to being inner classes.
<li>Fixed bug in {@link oaj.internal.MultiSet} where exception was being thrown if last set was empty.
<li>New {@link oaj.utils.ZipFileList} class for providing efficiently zipped directories through the REST interface.
<li>New <c>RdfProperties.RDF_useXmlNamespaces</c> property.
<li>New <dc>XmlParserContext.XML_preserveRootElement</dc> property.
<li>Worked around bug in Sun VM on OS/X where XML parser was throwing an exception when trying to set a reporter.
</ul>
<h5 class='topic w800'>Server</h5>
<ul class='spaced-list'>
<li>New <dc>ZipFileListResponseHandler</dc> class.
<li>Simplified labels in servlet resource bundles:
<ul>
<li><c>"[ClassName].ResourceDescription"</c> is now <c>"[ClassName].label"</c>.
<li><c>"[ClassName].MethodDescription.[methodName]"</c> is now <c>"[ClassName].[methodName]"</c>.
</ul>
<li>Several changes to {@link oajr.RestRequest}:
<ul>
<li>Added new methods:
<ul>
<li><dc>RestRequest.getQueryParameterMap()</dc>
<li><dc>RestRequest.getQueryParameterNames()</dc>
<li><dc>RestRequest.getPathInfoUndecoded()</dc>
<li><dc>RestRequest.getPathRemainderUndecoded()</dc>
<li><dc>RestRequest.getTrimmedRequestURI()</dc>
<li><dc>RestRequest.getTrimmedRequestURL()</dc>
<li><dc>RestRequest.getServletTitle()</dc>
<li><dc>RestRequest.getServletDescription()</dc>
<li>{@link oajr.RestRequest#getMethodDescription()}
</ul>
<li>Behavior changes to {@link oajr.RestRequest#getPathInfo()} to follow Servlet specs.
Returns <jk>null</jk> instead of blank for no path info.
<li><dc>RestRequest.getPathRemainder()</dc> now automatically decodes the path remainder.
Use <dc>RestRequest.getPathRemainderUndecoded()</dc> to get the unencoded path remainder.
<li>Bug fixes in <dc>RestRequest.getRequestParentURI()</dc> when servlet is mapped to <js>"/*"</js>.
<li>Bug fixes in <dc>RestRequest.getServletURI()</dc> when servlet is mapped to <js>"/*"</js>.
</ul>
<li>New string replacement variables:
<ul>
<li><c>$R{contextPath}</c> - Returns value from {@link oajr.RestRequest#getContextPath()}
<li><c>$R{methodDescription}</c> - Returns value from {@link oajr.RestRequest#getMethodDescription()}
<li><c>$R{resourceTitle}</c> - Returns value from <dc>RestRequest.getServletTitle()</dc>
<li><c>$R{resourceDescription}</c> - Returns value from <dc>RestRequest.getServletDescription()</dc>
<li><c>$R{trimmedRequestURI}</c> - Returns value from <dc>RestRequest.getTrimmedRequestURI()</dc>
<li><c>$E{var}</c> - Environment variables.
</ul>
<li>Added methods <dc>RestServlet.getDescription(RestRequest)</dc> and <dc>RestServlet.getLabel(RestRequest)</dc>.
<li>{@link oajr.BasicRestServlet} and <dc>RestServletJenaDefault</dc> now provide default HTML titles
and descriptions:
<p class='bcode w800'>
<ja>@Property</ja>(name=<jsf>HTMLDOC_title</jsf>, value=<js>"$R{resourceTitle}"</js>),
<ja>@Property</ja>(name=<jsf>HTMLDOC_description</jsf>, value=<js>"$R{resourceDescription}"</js>)
</p>
<li>Options pages on {@link oajr.BasicRestServlet} and <dc>RestServletJenaDefault</dc> now provide default descriptions and back links:
and descriptions:
<p class='bcode w800'>
<ja>@Property</ja>(name=<jsf>HTMLDOC_navlinks</jsf>, value=<js>"{back:'$R{servletURI}"</js>),
<ja>@Property</ja>(name=<jsf>HTMLDOC_description</jsf>, value=<js>"Resource options"</js>)
</p>
<li>New {@link oajr.BasicRestServletGroup} class.
<li>Removed <c>RestServletProperties.REST_trimTrailingUriSlashes</c> and <c>RestServletProperties.REST_pathInfoBlankForNull</c>.
<li>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.
<ul>
<li><dc>RestResource.label()</dc>
<li><dc>@RestResource(description)</dc>
<li>{@link oajr.annotation.RestMethod#description() @RestMethod(description)}
<li><dc>RestMethod#responses()</dc>
<li><dc>Attr.description()</dc>
<li><dc>Content.description()</dc>
<li><dc>HasParam.description()</dc>
<li><dc>HasQParam.description()</dc>
<li><dc>Header.description()</dc>
<li><dc>Param.description()</dc>
<li><dc>QParam.description()</dc>
</ul>
<li>Support for sorting resources by name in <dc>ChildResourceDescriptions</dc>.
</ul>
<h5 class='topic w800'>Samples</h5>
<ul class='spaced-list'>
<li>Added <c>/tempDir/upload</c> showing how to use <c>ServletFileUpload</c> with multipart form posts.
</ul>