| <!-- |
| /*************************************************************************************************************************** |
| * 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. |
| ***************************************************************************************************************************/ |
| --> |
| |
| Annotation Inheritance |
| |
| <p> |
| The {@link oajr.annotation.Rest @Rest} annotation can also be used on parents and interfaces of resource classes. |
| When multiple annotations are defined at different levels, the annotation values are combined. |
| </p> |
| <p> |
| This is a particularly useful feature because it allows you to define your own configured parent |
| resource classes that can be extended by all your child resources so that they all share common |
| settings. |
| </p> |
| <h5 class='figure'>Inheritance rules</h5> |
| <table class='styled w800'> |
| <tr> |
| <th><l>Annotation</l></th> |
| <th><l>Inheritence Rules</l></th> |
| </tr> |
| <tr> |
| <td>{@link oajr.annotation.Rest#guards() guards()}</td> |
| <td> |
| Guards on child are combined with those on parent class. |
| <br>Guards are executed child-to-parent in the order they appear in the annotation. |
| <br>Guards on methods are executed before those on classes. |
| </td> |
| </tr> |
| <tr> |
| <td>{@link oajr.annotation.Rest#converters() converters()}</td> |
| <td> |
| Converters on child are combined with those on parent class. |
| <br>Converters are executed child-to-parent in the order they appear in the annotation. |
| <br>Converters on methods are executed before those on classes. |
| </td> |
| </tr> |
| <tr> |
| <td>{@link oajr.annotation.Rest#properties() properties()}</td> |
| <td> |
| Properties on child are combined with those on parent class. |
| <br>Properties are applied parent-to-child in the order they appear in the annotation. |
| <br>Properties on methods take precedence over those on classes. |
| </td> |
| </tr> |
| <tr> |
| <td>{@link oajr.annotation.Rest#serializers() serializers()}</td> |
| <td> |
| Serializers on child override those on parent class. |
| <br>{@link oajr.Inherit} class can be used to inherit and augment values from parent. |
| <br>{@link oajr.None} class can be used to suppress inheriting from parent. |
| <br>Serializers on methods take precedence over those on classes. |
| </td> |
| </tr> |
| <tr> |
| <td>{@link oajr.annotation.Rest#parsers() parsers()}</td> |
| <td> |
| Parsers on child override those on parent class. |
| <br>{@link oajr.Inherit} class can be used to inherit and augment values from parent. |
| <br>{@link oajr.None} class can be used to suppress inheriting from parent. |
| <br>Parsers on methods take precedence over those on classes. |
| </td> |
| </tr> |
| <tr> |
| <td>{@link oajr.annotation.Rest#responseHandlers() responseHandlers()}</td> |
| <td> |
| Response handlers on child are combined with those on parent class. |
| </td> |
| </tr> |
| <tr> |
| <td>{@link oajr.annotation.Rest#encoders() encoders()}</td> |
| <td> |
| Encoders on child are combined with those on parent class. |
| </td> |
| </tr> |
| <tr> |
| <td>{@link oajr.annotation.Rest#reqHeaders() reqHeaders()}</td> |
| <td> |
| Headers on child are combined with those on parent class. |
| <br>Headers are applied parent-to-child in the order they appear in the annotation. |
| <br>Headers on methods take precedence over those on classes. |
| </td> |
| </tr> |
| <tr> |
| <td>{@link oajr.annotation.Rest#resHeaders() resHeaders()}</td> |
| <td> |
| Headers on child are combined with those on parent class. |
| <br>Headers are applied parent-to-child in the order they appear in the annotation. |
| </td> |
| </tr> |
| <tr> |
| <td>{@link oajr.annotation.Rest#children() children()}</td> |
| <td> |
| Children on child are combined with those on parent class. |
| <br>Children are list parent-to-child in the order they appear in the annotation. |
| </td> |
| </tr> |
| <tr> |
| <td>{@link oajr.annotation.Rest#path() path()}</td> |
| <td> |
| Path is searched for in child-to-parent order. |
| </td> |
| </tr> |
| <tr> |
| <td>{@link oajr.annotation.Rest#title() title()}</td> |
| <td> |
| Label is searched for in child-to-parent order. |
| </td> |
| </tr> |
| <tr> |
| <td>{@link oajr.annotation.Rest#description() description()}</td> |
| <td> |
| Description is searched for in child-to-parent order. |
| </td> |
| </tr> |
| <tr> |
| <td>{@link oajr.annotation.Rest#config() config()}</td> |
| <td> |
| Config file is searched for in child-to-parent order. |
| </td> |
| </tr> |
| <tr> |
| <td>{@link oajr.annotation.Rest#staticFiles() staticFiles()}</td> |
| <td> |
| Static files on child are combined with those on parent class. |
| <br>Static files are are executed child-to-parent in the order they appear in the annotation. |
| </td> |
| </tr> |
| </table> |