This is an automated email from the ASF dual-hosted git repository.

jamesbognar pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/juneau.git


The following commit(s) were added to refs/heads/master by this push:
     new 28a6159  JUNEAU-197
28a6159 is described below

commit 28a6159ac4032311d91cd4b48ec5a48c220b5c91
Author: JamesBognar <[email protected]>
AuthorDate: Sat Mar 7 18:45:41 2020 -0500

    JUNEAU-197
    
    @BeanConfig(bpi) does not override @Bean(bpi)
---
 .../juneau/reflection/AnnotationInfoTest.java      |  4 +-
 .../apache/juneau/reflection/ClassInfoTest.java    | 32 ++++-------
 .../java/org/apache/juneau/jena/RdfClassMeta.java  |  4 +-
 .../main/java/org/apache/juneau/BeanRegistry.java  |  2 +-
 .../src/main/java/org/apache/juneau/ClassMeta.java | 18 ++-----
 .../main/java/org/apache/juneau/ContextCache.java  |  2 +-
 .../java/org/apache/juneau/reflect/ClassInfo.java  | 63 +++++-----------------
 .../java/org/apache/juneau/reflect/ParamInfo.java  |  4 +-
 .../transform/AnnotationBeanFilterBuilder.java     |  4 +-
 .../transform/InterfaceBeanFilterBuilder.java      |  6 +--
 .../java/org/apache/juneau/xml/XmlClassMeta.java   |  4 +-
 .../rest/client/remote/RemoteMethodMeta.java       |  4 +-
 .../rest/client/remote/RemoteMethodReturn.java     |  4 +-
 .../apache/juneau/rest/BasicRestCallHandler.java   |  2 +-
 .../java/org/apache/juneau/rest/RestServlet.java   | 11 ++--
 .../org/apache/juneau/rest/SwaggerGenerator.java   |  2 +-
 16 files changed, 54 insertions(+), 112 deletions(-)

diff --git 
a/juneau-core/juneau-core-utest/src/test/java/org/apache/juneau/reflection/AnnotationInfoTest.java
 
b/juneau-core/juneau-core-utest/src/test/java/org/apache/juneau/reflection/AnnotationInfoTest.java
index 3d6bf13..725d626 100644
--- 
a/juneau-core/juneau-core-utest/src/test/java/org/apache/juneau/reflection/AnnotationInfoTest.java
+++ 
b/juneau-core/juneau-core-utest/src/test/java/org/apache/juneau/reflection/AnnotationInfoTest.java
@@ -66,11 +66,11 @@ public class AnnotationInfoTest {
 
        @Test
        public void getClassOn() {
-               check("B", b.getAnnotationInfos(A.class).get(0).getClassOn());
+               check("B", 
b.getAnnotationInfosParentFirst(A.class).get(0).getClassOn());
        }
 
        @Test
        public void getAnnotation() {
-               check("@A(1)", 
b.getAnnotationInfos(A.class).get(0).getAnnotation());
+               check("@A(1)", 
b.getAnnotationInfosParentFirst(A.class).get(0).getAnnotation());
        }
 }
\ No newline at end of file
diff --git 
a/juneau-core/juneau-core-utest/src/test/java/org/apache/juneau/reflection/ClassInfoTest.java
 
b/juneau-core/juneau-core-utest/src/test/java/org/apache/juneau/reflection/ClassInfoTest.java
index 08b66e9..8052db0 100644
--- 
a/juneau-core/juneau-core-utest/src/test/java/org/apache/juneau/reflection/ClassInfoTest.java
+++ 
b/juneau-core/juneau-core-utest/src/test/java/org/apache/juneau/reflection/ClassInfoTest.java
@@ -831,29 +831,29 @@ public class ClassInfoTest {
 
        @Test
        public void getAnnotation() {
-               check("@A(7)", g3.getAnnotation(A.class));
-               check(null, g3.getAnnotation(B.class));
-               check(null, g3.getAnnotation(null));
+               check("@A(7)", g3.getLastAnnotation(A.class));
+               check(null, g3.getLastAnnotation(B.class));
+               check(null, g3.getLastAnnotation(null));
        }
 
        @Test
        public void getAnnotation_twice() {
-               check("@A(7)", g3.getAnnotation(A.class));
-               check("@A(7)", g3.getAnnotation(A.class));
+               check("@A(7)", g3.getLastAnnotation(A.class));
+               check("@A(7)", g3.getLastAnnotation(A.class));
        }
 
        @Test
        public void getAnnotation_onParent() {
-               check("@A(7)", g4.getAnnotation(A.class));
-               check(null, g4.getAnnotation(B.class));
-               check(null, g4.getAnnotation(null));
+               check("@A(7)", g4.getLastAnnotation(A.class));
+               check(null, g4.getLastAnnotation(B.class));
+               check(null, g4.getLastAnnotation(null));
        }
 
        @Test
        public void getAnnotation_onInterface() {
-               check("@A(3)", g5.getAnnotation(A.class));
-               check(null, g5.getAnnotation(B.class));
-               check(null, g5.getAnnotation(null));
+               check("@A(3)", g5.getLastAnnotation(A.class));
+               check(null, g5.getLastAnnotation(B.class));
+               check(null, g5.getLastAnnotation(null));
        }
 
        @Test
@@ -864,11 +864,6 @@ public class ClassInfoTest {
        }
 
        @Test
-       public void getAnnotations() {
-               check("@A(7),@A(6),@A(5),@A(3),@A(1),@A(2)", 
g3.getAnnotations(A.class));
-       }
-
-       @Test
        public void getAnnotationsParentFirst() {
                check("@A(2),@A(1),@A(3),@A(5),@A(6),@A(7)", 
g3.getAnnotationsParentFirst(A.class));
        }
@@ -908,11 +903,6 @@ public class ClassInfoTest {
        }
 
        @Test
-       public void getAnnotationInfos() {
-               check("@A(7),@A(6),@A(5),@A(3),@A(1),@A(2)", 
g3.getAnnotationInfos(A.class));
-       }
-
-       @Test
        public void getAnnotationInfosParentFirst() {
                check("@A(2),@A(1),@A(3),@A(5),@A(6),@A(7)", 
g3.getAnnotationInfosParentFirst(A.class));
        }
diff --git 
a/juneau-core/juneau-marshall-rdf/src/main/java/org/apache/juneau/jena/RdfClassMeta.java
 
b/juneau-core/juneau-marshall-rdf/src/main/java/org/apache/juneau/jena/RdfClassMeta.java
index 3d47a8e..5565c5d 100644
--- 
a/juneau-core/juneau-marshall-rdf/src/main/java/org/apache/juneau/jena/RdfClassMeta.java
+++ 
b/juneau-core/juneau-marshall-rdf/src/main/java/org/apache/juneau/jena/RdfClassMeta.java
@@ -42,8 +42,8 @@ public class RdfClassMeta extends ExtendedClassMeta {
                } else {
                        collectionFormat = RdfCollectionFormat.DEFAULT;
                }
-               List<Rdf> rdfs = cm.getAnnotations(Rdf.class);
-               List<RdfSchema> schemas = cm.getAnnotations(RdfSchema.class);
+               List<Rdf> rdfs = cm.getAnnotationsParentFirst(Rdf.class);
+               List<RdfSchema> schemas = 
cm.getAnnotationsParentFirst(RdfSchema.class);
                this.namespace = RdfUtils.findNamespace(rdfs, schemas);
        }
 
diff --git 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/BeanRegistry.java 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/BeanRegistry.java
index f39ba23..9fc8667 100644
--- 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/BeanRegistry.java
+++ 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/BeanRegistry.java
@@ -89,7 +89,7 @@ public class BeanRegistry {
                                                addToMap(typeName, val);
                                        }
                                } else {
-                                       Bean b = ci.getAnnotation(Bean.class, 
beanContext);
+                                       Bean b = 
ci.getLastAnnotation(Bean.class, beanContext);
                                        if (b == null || b.typeName().isEmpty())
                                                throw new 
BeanRuntimeException("Class ''{0}'' was passed to BeanRegistry but it doesn't 
have a @Bean(typeName) annotation defined.", c.getName());
                                        addToMap(b.typeName(), 
beanContext.getClassMeta(c));
diff --git 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/ClassMeta.java 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/ClassMeta.java
index d2d4245..b911584 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/ClassMeta.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/ClassMeta.java
@@ -685,7 +685,7 @@ public final class ClassMeta<T> implements Type {
 
                private BeanFilter findBeanFilter(BeanContext bc) {
                        try {
-                               List<Bean> ba = info.getAnnotations(Bean.class, 
bc);
+                               List<Bean> ba = 
info.getAnnotationsParentFirst(Bean.class, bc);
                                if (! ba.isEmpty())
                                        return new 
AnnotationBeanFilterBuilder(innerClass, ba).build();
                        } catch (Exception e) {
@@ -2048,7 +2048,7 @@ public final class ClassMeta<T> implements Type {
         * @return The specified annotation, or <jk>null</jk> if the class does 
not have the specified annotation.
         */
        public <A extends Annotation> A getAnnotation(Class<A> a) {
-               return info.getAnnotation(a, beanContext == null ? 
BeanContext.DEFAULT : beanContext);
+               return info.getLastAnnotation(a, beanContext == null ? 
BeanContext.DEFAULT : beanContext);
        }
 
        /**
@@ -2062,19 +2062,7 @@ public final class ClassMeta<T> implements Type {
        }
 
        /**
-        * Returns all annotations of the specified type defined on the 
specified class or parent classes/interfaces.
-        *
-        * @param a
-        *      The annotation to search for.
-        * @return
-        *      A list of all matching annotations found in child-to-parent 
order, or an empty list if none found.
-        */
-       public <A extends Annotation> List<A> getAnnotations(Class<A> a) {
-               return info.getAnnotations(a, beanContext == null ? 
BeanContext.DEFAULT : beanContext);
-       }
-
-       /**
-        * Identical to {@link #getAnnotations(Class)} but optionally returns 
the list in reverse (parent-to-child) order.
+        * Returns all annotations of the specified type defined on the 
specified class or parent classes/interfaces in parent-to-child order.
         *
         * @param a
         *      The annotation to search for.
diff --git 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/ContextCache.java 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/ContextCache.java
index e7455cb..18856aa 100644
--- 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/ContextCache.java
+++ 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/ContextCache.java
@@ -147,7 +147,7 @@ public class ContextCache {
                if (prefixes == null) {
                        Set<String> ps = new HashSet<>();
                        for (ClassInfo c2 : ClassInfo.of(c).getAllParents()) {
-                               ConfigurableContext cc = 
c2.getAnnotation(ConfigurableContext.class);
+                               ConfigurableContext cc = 
c2.getLastAnnotation(ConfigurableContext.class);
                                if (cc != null) {
                                        if (cc.nocache()) {
                                                prefixes = new String[0];
diff --git 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/reflect/ClassInfo.java
 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/reflect/ClassInfo.java
index 0aced5d..3dfc99b 100644
--- 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/reflect/ClassInfo.java
+++ 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/reflect/ClassInfo.java
@@ -917,8 +917,8 @@ public final class ClassInfo {
         * @return
         *      The annotation if found, or <jk>null</jk> if not.
         */
-       public <T extends Annotation> T getAnnotation(Class<T> a) {
-               return getAnnotation(a, MetaProvider.DEFAULT);
+       public <T extends Annotation> T getLastAnnotation(Class<T> a) {
+               return getLastAnnotation(a, MetaProvider.DEFAULT);
        }
 
        /**
@@ -935,7 +935,7 @@ public final class ClassInfo {
         * @return
         *      The annotation if found, or <jk>null</jk> if not.
         */
-       public <T extends Annotation> T getAnnotation(Class<T> a, MetaProvider 
mp) {
+       public <T extends Annotation> T getLastAnnotation(Class<T> a, 
MetaProvider mp) {
                return findAnnotation(a, mp);
        }
 
@@ -948,7 +948,7 @@ public final class ClassInfo {
         *      The <jk>true</jk> if annotation if found.
         */
        public boolean hasAnnotation(Class<? extends Annotation> a) {
-               return getAnnotation(a) != null;
+               return getLastAnnotation(a) != null;
        }
 
        /**
@@ -1017,32 +1017,7 @@ public final class ClassInfo {
        }
 
        /**
-        * Returns all annotations of the specified type defined on the 
specified class or parent classes/interfaces.
-        *
-        * @param a
-        *      The annotation to search for.
-        * @return
-        *      A list of all matching annotations found in child-to-parent 
order, or an empty list if none found.
-        */
-       public <T extends Annotation> List<T> getAnnotations(Class<T> a) {
-               return appendAnnotations(new ArrayList<>(), a);
-       }
-
-       /**
-        * Returns all annotations of the specified type defined on the 
specified class or parent classes/interfaces.
-        *
-        * @param <T> The annotation to search for.
-        * @param a The annotation to search for.
-        * @param mp The meta provider for looking up annotations on reflection 
objects (classes, methods, fields, constructors).
-        * @return
-        *      A list of all matching annotations found in child-to-parent 
order, or an empty list if none found.
-        */
-       public <T extends Annotation> List<T> getAnnotations(Class<T> a, 
MetaProvider mp) {
-               return appendAnnotations(new ArrayList<>(), a, mp);
-       }
-
-       /**
-        * Identical to {@link #getAnnotations(Class)} but optionally returns 
the list in reverse (parent-to-child) order.
+        * Returns all annotations of the specified type defined on the 
specified class or parent classes/interfaces in parent-to-child order.
         *
         * @param a
         *      The annotation to search for.
@@ -1054,7 +1029,10 @@ public final class ClassInfo {
        }
 
        /**
-        * Identical to {@link #getAnnotations(Class,MetaProvider)} but 
optionally returns the list in reverse (parent-to-child) order.
+        * Returns all annotations of the specified type defined on the 
specified class or parent classes/interfaces.
+        *
+        * <p>
+        * Returns the list in reverse (parent-to-child) order.
         *
         * @param a
         *      The annotation to search for.
@@ -1070,20 +1048,6 @@ public final class ClassInfo {
         * Same as getAnnotations(Class) except returns the annotations with 
the accompanying class.
         *
         * <p>
-        * Results are ordered child-to-parent.
-        *
-        * @param <T> The annotation class type.
-        * @param a The annotation class type.
-        * @return The found matches, or an empty list if annotation was not 
found.
-        */
-       public <T extends Annotation> List<AnnotationInfo<T>> 
getAnnotationInfos(Class<T> a) {
-               return appendAnnotationInfos(new ArrayList<>(), a);
-       }
-
-       /**
-        * Same as getAnnotations(Class) except returns the annotations with 
the accompanying class.
-        *
-        * <p>
         * Results are ordered parent-to-child.
         *
         * @param <T> The annotation class type.
@@ -1112,6 +1076,7 @@ public final class ClassInfo {
         * @return A new {@link AnnotationList} object on every call.
         */
        public AnnotationList getAnnotationList(Predicate<AnnotationInfo<?>> 
filter) {
+//             return getAnnotationListParentFirst(filter);
                return appendAnnotationList(new AnnotationList(filter));
        }
 
@@ -1295,13 +1260,13 @@ public final class ClassInfo {
        @SafeVarargs
        public final Annotation findFirstAnnotation(MetaProvider mp, Class<? 
extends Annotation>...annotations) {
                for (Class<? extends Annotation> ca : annotations) {
-                       Annotation x = getAnnotation(ca, mp);
+                       Annotation x = getLastAnnotation(ca, mp);
                        if (x != null)
                                return x;
                }
                for (ClassInfo ci : getInterfaces()) {
                        for (Class<? extends Annotation> ca : annotations) {
-                               Annotation x = ci.getAnnotation(ca, mp);
+                               Annotation x = ci.getLastAnnotation(ca, mp);
                                if (x != null)
                                        return x;
                        }
@@ -1349,13 +1314,13 @@ public final class ClassInfo {
 
                ClassInfo sci = getParent();
                if (sci != null) {
-                       t2 = sci.getAnnotation(a, mp);
+                       t2 = sci.getLastAnnotation(a, mp);
                        if (t2 != null)
                                return t2;
                }
 
                for (ClassInfo c2 : getInterfaces()) {
-                       t2 = c2.getAnnotation(a, mp);
+                       t2 = c2.getLastAnnotation(a, mp);
                        if (t2 != null)
                                return t2;
                }
diff --git 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/reflect/ParamInfo.java
 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/reflect/ParamInfo.java
index 9de79af..9c126b6 100644
--- 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/reflect/ParamInfo.java
+++ 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/reflect/ParamInfo.java
@@ -158,14 +158,14 @@ public final class ParamInfo {
                        for (Annotation a2 : 
eInfo.getParameterAnnotations(index))
                                if (a.isInstance(a2))
                                        return (T)a2;
-                       return 
eInfo.getParamType(index).resolved().getAnnotation(a);
+                       return 
eInfo.getParamType(index).resolved().getLastAnnotation(a);
                }
                MethodInfo mi = (MethodInfo)eInfo;
                for (Method m2 : mi.getMatching())
                        for (Annotation a2 :  
m2.getParameterAnnotations()[index])
                                if (a.isInstance(a2))
                                        return (T)a2;
-               return eInfo.getParamType(index).resolved().getAnnotation(a);
+               return 
eInfo.getParamType(index).resolved().getLastAnnotation(a);
        }
 
        /**
diff --git 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/transform/AnnotationBeanFilterBuilder.java
 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/transform/AnnotationBeanFilterBuilder.java
index c713998..69dfbf4 100644
--- 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/transform/AnnotationBeanFilterBuilder.java
+++ 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/transform/AnnotationBeanFilterBuilder.java
@@ -41,9 +41,7 @@ public final class AnnotationBeanFilterBuilder<T> extends 
BeanFilterBuilder<T> {
        public AnnotationBeanFilterBuilder(Class<T> annotatedClass, List<Bean> 
annotations) throws Exception {
                super(annotatedClass);
 
-               ListIterator<Bean> li = 
annotations.listIterator(annotations.size());
-               while (li.hasPrevious()) {
-                       Bean b = li.previous();
+               for (Bean b : annotations) {
 
                        if (! b.properties().isEmpty())
                                bpi(split(b.properties()));
diff --git 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/transform/InterfaceBeanFilterBuilder.java
 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/transform/InterfaceBeanFilterBuilder.java
index ec923a9..46f997a 100644
--- 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/transform/InterfaceBeanFilterBuilder.java
+++ 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/transform/InterfaceBeanFilterBuilder.java
@@ -55,11 +55,9 @@ public class InterfaceBeanFilterBuilder<T> extends 
BeanFilterBuilder<T> {
        @SuppressWarnings("deprecation")
        private void init(Class<?> interfaceClass, BeanContext bc) {
                interfaceClass(interfaceClass);
-               List<Bean> annotations = 
ClassInfo.of(interfaceClass).getAnnotations(Bean.class, bc);
+               List<Bean> annotations = 
ClassInfo.of(interfaceClass).getAnnotationsParentFirst(Bean.class, bc);
 
-               ListIterator<Bean> li = 
annotations.listIterator(annotations.size());
-               while (li.hasPrevious()) {
-                       Bean b = li.previous();
+               for (Bean b : annotations) {
 
                        if (! b.properties().isEmpty())
                                bpi(split(b.properties()));
diff --git 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/xml/XmlClassMeta.java
 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/xml/XmlClassMeta.java
index c183e8a..bf1e0af 100644
--- 
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/xml/XmlClassMeta.java
+++ 
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/xml/XmlClassMeta.java
@@ -101,8 +101,8 @@ public class XmlClassMeta extends ExtendedClassMeta {
        private static Namespace findNamespace(ClassMeta<?> cm, MetaProvider 
mp) {
                if (cm == null)
                        return null;
-               List<Xml> xmls = cm.getAnnotations(Xml.class);
-               List<XmlSchema> schemas = cm.getAnnotations(XmlSchema.class);
+               List<Xml> xmls = cm.getAnnotationsParentFirst(Xml.class);
+               List<XmlSchema> schemas = 
cm.getAnnotationsParentFirst(XmlSchema.class);
                return XmlUtils.findNamespace(xmls, schemas);
        }
 }
diff --git 
a/juneau-rest/juneau-rest-client/src/main/java/org/apache/juneau/rest/client/remote/RemoteMethodMeta.java
 
b/juneau-rest/juneau-rest-client/src/main/java/org/apache/juneau/rest/client/remote/RemoteMethodMeta.java
index 667655c..61116db 100644
--- 
a/juneau-rest/juneau-rest-client/src/main/java/org/apache/juneau/rest/client/remote/RemoteMethodMeta.java
+++ 
b/juneau-rest/juneau-rest-client/src/main/java/org/apache/juneau/rest/client/remote/RemoteMethodMeta.java
@@ -92,10 +92,10 @@ public class RemoteMethodMeta {
 
                        org.apache.juneau.rest.client.remote.RemoteMethod orm = 
mi.getAnnotation(org.apache.juneau.rest.client.remote.RemoteMethod.class);
                        if (orm == null)
-                               orm = 
mi.getResolvedReturnType().getAnnotation(org.apache.juneau.rest.client.remote.RemoteMethod.class);
+                               orm = 
mi.getResolvedReturnType().getLastAnnotation(org.apache.juneau.rest.client.remote.RemoteMethod.class);
                        RemoteMethod rm = mi.getAnnotation(RemoteMethod.class);
                        if (rm == null)
-                               rm = 
mi.getResolvedReturnType().getAnnotation(RemoteMethod.class);
+                               rm = 
mi.getResolvedReturnType().getLastAnnotation(RemoteMethod.class);
 
                        httpMethod = rm == null ? (orm == null ? "" : 
orm.method()) : rm.method();
                        path = rm == null ? (orm == null ? "" : orm.path()) : 
rm.path();
diff --git 
a/juneau-rest/juneau-rest-client/src/main/java/org/apache/juneau/rest/client/remote/RemoteMethodReturn.java
 
b/juneau-rest/juneau-rest-client/src/main/java/org/apache/juneau/rest/client/remote/RemoteMethodReturn.java
index 650c3f1..8e8a02c 100644
--- 
a/juneau-rest/juneau-rest-client/src/main/java/org/apache/juneau/rest/client/remote/RemoteMethodReturn.java
+++ 
b/juneau-rest/juneau-rest-client/src/main/java/org/apache/juneau/rest/client/remote/RemoteMethodReturn.java
@@ -40,10 +40,10 @@ public final class RemoteMethodReturn {
 
                org.apache.juneau.rest.client.remote.RemoteMethod orm = 
m.getAnnotation(org.apache.juneau.rest.client.remote.RemoteMethod.class);
                if (orm == null)
-                       orm = 
m.getResolvedReturnType().getAnnotation(org.apache.juneau.rest.client.remote.RemoteMethod.class);
+                       orm = 
m.getResolvedReturnType().getLastAnnotation(org.apache.juneau.rest.client.remote.RemoteMethod.class);
                RemoteMethod rm = m.getAnnotation(RemoteMethod.class);
                if (rm == null)
-                       rm = 
m.getResolvedReturnType().getAnnotation(RemoteMethod.class);
+                       rm = 
m.getResolvedReturnType().getLastAnnotation(RemoteMethod.class);
 
                RemoteReturn rv = null;
                if (rt.is(void.class))
diff --git 
a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/BasicRestCallHandler.java
 
b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/BasicRestCallHandler.java
index 78d952d..9c6e4a1 100644
--- 
a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/BasicRestCallHandler.java
+++ 
b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/BasicRestCallHandler.java
@@ -341,7 +341,7 @@ public class BasicRestCallHandler implements 
RestCallHandler {
                int code = 500;
 
                ClassInfo ci = ClassInfo.ofc(e);
-               Response r = ci.getAnnotation(Response.class);
+               Response r = ci.getLastAnnotation(Response.class);
                if (r != null)
                        if (r.code().length > 0)
                                code = r.code()[0];
diff --git 
a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/RestServlet.java
 
b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/RestServlet.java
index 7a15ba8..d166645 100644
--- 
a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/RestServlet.java
+++ 
b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/RestServlet.java
@@ -116,12 +116,15 @@ public abstract class RestServlet extends HttpServlet {
                if (context != null)
                        return context.getPath();
                ClassInfo ci = ClassInfo.of(getClass());
-               for (Rest rr : ci.getAnnotations(Rest.class))
+               String path = "";
+               for (Rest rr : ci.getAnnotationsParentFirst(Rest.class))
                        if (! rr.path().isEmpty())
-                               return trimSlashes(rr.path());
-               for (RestResource rr : ci.getAnnotations(RestResource.class))
+                               path = trimSlashes(rr.path());
+               if (! path.isEmpty())
+                       return path;
+               for (RestResource rr : 
ci.getAnnotationsParentFirst(RestResource.class))
                        if (! rr.path().isEmpty())
-                               return trimSlashes(rr.path());
+                               path = trimSlashes(rr.path());
                return "";
        }
 
diff --git 
a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/SwaggerGenerator.java
 
b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/SwaggerGenerator.java
index 1d2f4fb..6217889 100644
--- 
a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/SwaggerGenerator.java
+++ 
b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/SwaggerGenerator.java
@@ -446,7 +446,7 @@ final class SwaggerGenerator {
                                        for (MethodInfo ecmi : 
eci.getAllMethodsParentFirst()) {
                                                ResponseHeader a = 
ecmi.getAnnotation(ResponseHeader.class);
                                                if (a == null)
-                                                       a = 
ecmi.getResolvedReturnType().getAnnotation(ResponseHeader.class);
+                                                       a = 
ecmi.getResolvedReturnType().getLastAnnotation(ResponseHeader.class);
                                                if (a != null) {
                                                        String ha = a.name();
                                                        for (Integer code : 
codes) {

Reply via email to