| <!-- |
| /*************************************************************************************************************************** |
| * 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><code>BeanMap.getFiltered(String)</code> |
| <li><code>BeanMap.putFiltered(String,Object)</code> |
| <li><code>BeanMapEntry.getFiltered(String)</code> |
| <li><code>BeanMapEntry.putFiltered(String,Object)</code> |
| <li><code>BeanMapEntry.putFiltered(String,Object)</code> |
| <li><code>BeanPropertyMeta.getFiltered()</code> |
| <li><code>BeanPropertyMeta.setFiltered(Object)</code> |
| <li><code>BeanPropertyMeta.getTransformedClassMeta()</code> |
| </ul> |
| <li>{@link oaj.BeanPropertyMeta#getClassMeta()} now returns the filtered type of the property. |
| </ul> |
| <li><code><del>StringVarResolver</del></code> now has support for chained resolvers. |
| <li><code><del>StringVarResolver</del></code> 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 <code>RestResource.filters()</code> 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 <code>RdfProperties.RDF_useXmlNamespaces</code> property. |
| <li>New <code><del>XmlParserContext.XML_preserveRootElement</del></code> 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 <code><del>ZipFileListResponseHandler</del></code> class. |
| <li>Simplified labels in servlet resource bundles: |
| <ul> |
| <li><code>"[ClassName].ResourceDescription"</code> is now <code>"[ClassName].label"</code>. |
| <li><code>"[ClassName].MethodDescription.[methodName]"</code> is now <code>"[ClassName].[methodName]"</code>. |
| </ul> |
| <li>Several changes to {@link oajr.RestRequest}: |
| <ul> |
| <li>Added new methods: |
| <ul> |
| <li><code><del>RestRequest.getQueryParameterMap()</del></code> |
| <li><code><del>RestRequest.getQueryParameterNames()</del></code> |
| <li><code><del>RestRequest.getPathInfoUndecoded()</del></code> |
| <li><code><del>RestRequest.getPathRemainderUndecoded()</del></code> |
| <li><code><del>RestRequest.getTrimmedRequestURI()</del></code> |
| <li><code><del>RestRequest.getTrimmedRequestURL()</del></code> |
| <li><code><del>RestRequest.getServletTitle()</del></code> |
| <li><code><del>RestRequest.getServletDescription()</del></code> |
| <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><code><del>RestRequest.getPathRemainder()</del></code> now automatically decodes the path remainder. |
| Use <code><del>RestRequest.getPathRemainderUndecoded()</del></code> to get the unencoded path remainder. |
| <li>Bug fixes in <code><del>RestRequest.getRequestParentURI()</del></code> when servlet is mapped to <js>"/*"</js>. |
| <li>Bug fixes in <code><del>RestRequest.getServletURI()</del></code> when servlet is mapped to <js>"/*"</js>. |
| </ul> |
| <li>New string replacement variables: |
| <ul> |
| <li><code>$R{contextPath}</code> - Returns value from {@link oajr.RestRequest#getContextPath()} |
| <li><code>$R{methodDescription}</code> - Returns value from {@link oajr.RestRequest#getMethodDescription()} |
| <li><code>$R{resourceTitle}</code> - Returns value from <code><del>RestRequest.getServletTitle()</del></code> |
| <li><code>$R{resourceDescription}</code> - Returns value from <code><del>RestRequest.getServletDescription()</del></code> |
| <li><code>$R{trimmedRequestURI}</code> - Returns value from <code><del>RestRequest.getTrimmedRequestURI()</del></code> |
| <li><code>$E{var}</code> - Environment variables. |
| </ul> |
| <li>Added methods <code><del>RestServlet.getDescription(RestRequest)</del></code> and <code><del>RestServlet.getLabel(RestRequest)</del></code>. |
| <li>{@link oajr.BasicRestServlet} and <code><del>RestServletJenaDefault</del></code> 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 <code><del>RestServletJenaDefault</del></code> 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 <code>RestServletProperties.REST_trimTrailingUriSlashes</code> and <code>RestServletProperties.REST_pathInfoBlankForNull</code>. |
| <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><code><del>RestResource.label()</del></code> |
| <li>{@link oajr.annotation.RestResource#description() @RestResource(description)} |
| <li>{@link oajr.annotation.RestMethod#description() @RestMethod(description)} |
| <li><code><del>RestMethod#responses()</del></code> |
| <li><code><del>Attr.description()</del></code> |
| <li><code><del>Content.description()</del></code> |
| <li><code><del>HasParam.description()</del></code> |
| <li><code><del>HasQParam.description()</del></code> |
| <li><code><del>Header.description()</del></code> |
| <li><code><del>Param.description()</del></code> |
| <li><code><del>QParam.description()</del></code> |
| </ul> |
| <li>Support for sorting resources by name in <code><del>ChildResourceDescriptions</del></code>. |
| </ul> |
| |
| <h5 class='topic w800'>Samples</h5> |
| <ul class='spaced-list'> |
| <li>Added <code>/tempDir/upload</code> showing how to use <code>ServletFileUpload</code> with multipart form posts. |
| </ul> |