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)