| <!-- |
| /*************************************************************************************************************************** |
| * 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> |