JUNEAU-169 Dynamic annotations.
diff --git a/juneau-core/juneau-marshall-rdf/src/main/java/org/apache/juneau/jena/RdfBeanPropertyMeta.java b/juneau-core/juneau-marshall-rdf/src/main/java/org/apache/juneau/jena/RdfBeanPropertyMeta.java
index 108b339..9ba7428 100644
--- a/juneau-core/juneau-marshall-rdf/src/main/java/org/apache/juneau/jena/RdfBeanPropertyMeta.java
+++ b/juneau-core/juneau-marshall-rdf/src/main/java/org/apache/juneau/jena/RdfBeanPropertyMeta.java
@@ -43,8 +43,8 @@
public RdfBeanPropertyMeta(BeanPropertyMeta bpm, RdfMetaProvider mp) {
super(bpm);
- List<Rdf> rdfs = bpm.findAnnotations(Rdf.class, mp);
- List<RdfSchema> schemas = bpm.findAnnotations(RdfSchema.class, mp);
+ List<Rdf> rdfs = bpm.getAllAnnotations(Rdf.class, mp);
+ List<RdfSchema> schemas = bpm.getAllAnnotations(RdfSchema.class, mp);
for (Rdf rdf : rdfs) {
if (collectionFormat == RdfCollectionFormat.DEFAULT)
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/BeanPropertyMeta.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/BeanPropertyMeta.java
index f174f09..50c8fe0 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/BeanPropertyMeta.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/BeanPropertyMeta.java
@@ -1128,8 +1128,10 @@
* @param mp The metadata provider for finding annotations.
* @return A list of annotations ordered in child-to-parent order. Never <jk>null</jk>.
*/
- public <A extends Annotation> List<A> findAnnotations(Class<A> a, MetaProvider mp) {
+ public <A extends Annotation> List<A> getAllAnnotations(Class<A> a, MetaProvider mp) {
List<A> l = new LinkedList<>();
+ if (a == null)
+ return l;
if (field != null) {
addIfNotNull(l, mp.getAnnotation(a, field));
ClassInfo.of(field.getType()).appendAnnotations(l, a, mp);
@@ -1151,31 +1153,24 @@
return l;
}
-// /**
-// * Returns the specified annotation on the field or methods that define this property.
-// *
-// * <p>
-// * This method will search up the parent class/interface hierarchy chain to search for the annotation on
-// * overridden getters and setters.
-// *
-// * @param a The annotation to search for.
-// * @return The annotation, or <jk>null</jk> if it wasn't found.
-// */
-// public <A extends Annotation> A findAnnotation(Class<A> a) {
-// A t = null;
-// if (field != null)
-// t = field.getAnnotation(a);
-// if (t == null && getter != null)
-// t = getterInfo.getAnnotation(a);
-// if (t == null && setter != null)
-// t = setterInfo.getAnnotation(a);
-// if (t == null && extraKeys != null)
-// t = extraKeysInfo.getAnnotation(a);
-// if (t == null)
-// t = typeMeta.getInfo().getAnnotation(a);
-// return t;
-// }
-//
+ /**
+ * Returns all instances of the specified annotation on the getter/setter/field of the property.
+ *
+ * @param <A> The class to find annotations for.
+ * @param a The class to find annotations for.
+ * @param mp The metadata provider for finding annotations.
+ * @return A list of annotations ordered in child-to-parent order. Never <jk>null</jk>.
+ */
+ public <A extends Annotation> List<A> getAnnotations(Class<A> a, MetaProvider mp) {
+ List<A> l = new LinkedList<>();
+ if (a == null)
+ return l;
+ addIfNotNull(l, mp.getAnnotation(a, field));
+ addIfNotNull(l, mp.getAnnotation(a, getter));
+ addIfNotNull(l, mp.getAnnotation(a, setter));
+ return l;
+ }
+
private Object transform(BeanSession session, Object o) throws SerializeException {
try {
// First use swap defined via @Beanp.
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/jsonschema/JsonSchemaBeanPropertyMeta.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/jsonschema/JsonSchemaBeanPropertyMeta.java
index 6a2de0a..f365f01 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/jsonschema/JsonSchemaBeanPropertyMeta.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/jsonschema/JsonSchemaBeanPropertyMeta.java
@@ -12,8 +12,6 @@
// ***************************************************************************************************************************
package org.apache.juneau.jsonschema;
-import java.lang.reflect.*;
-
import org.apache.juneau.*;
import org.apache.juneau.jsonschema.annotation.*;
import org.apache.juneau.parser.*;
@@ -42,16 +40,9 @@
this.schema = new ObjectMap();
- Field field = bpm.getInnerField();
- Method getter = bpm.getGetter(), setter = bpm.getSetter();
-
try {
- if (field != null)
- schema.appendAll(SchemaUtils.asMap(mp.getAnnotation(Schema.class, field)));
- if (getter != null)
- schema.appendAll(SchemaUtils.asMap(mp.getAnnotation(Schema.class, getter)));
- if (setter != null)
- schema.appendAll(SchemaUtils.asMap(mp.getAnnotation(Schema.class, setter)));
+ for (Schema s : bpm.getAnnotations(Schema.class, mp))
+ schema.appendAll(SchemaUtils.asMap(s));
} catch (ParseException e) {
throw new RuntimeException(e);
}
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/xml/XmlBeanPropertyMeta.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/xml/XmlBeanPropertyMeta.java
index 87185bc..6687e96 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/xml/XmlBeanPropertyMeta.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/xml/XmlBeanPropertyMeta.java
@@ -43,12 +43,8 @@
super(bpm);
this.xmlMetaProvider = mp;
- if (bpm.getInnerField() != null)
- findXmlInfo(mp.getAnnotation(Xml.class, bpm.getInnerField()), mp);
- if (bpm.getGetter() != null)
- findXmlInfo(mp.getAnnotation(Xml.class, bpm.getGetter()), mp);
- if (bpm.getSetter() != null)
- findXmlInfo(mp.getAnnotation(Xml.class, bpm.getSetter()), mp);
+ for (Xml xml : bpm.getAnnotations(Xml.class, mp))
+ findXmlInfo(xml, mp);
if (namespace == null)
namespace = mp.getXmlClassMeta(bpm.getBeanMeta().getClassMeta()).getNamespace();
@@ -108,8 +104,8 @@
ClassMeta<?> cmBean = bpm.getBeanMeta().getClassMeta();
String name = bpm.getName();
- List<Xml> xmls = bpm.findAnnotations(Xml.class, mp);
- List<XmlSchema> schemas = bpm.findAnnotations(XmlSchema.class, mp);
+ List<Xml> xmls = bpm.getAllAnnotations(Xml.class, mp);
+ List<XmlSchema> schemas = bpm.getAllAnnotations(XmlSchema.class, mp);
namespace = XmlUtils.findNamespace(xmls, schemas);
if (xmlFormat == XmlFormat.DEFAULT)