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) {