You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@juneau.apache.org by ja...@apache.org on 2016/08/25 16:28:12 UTC

incubator-juneau git commit: Eliminate references to language-specific metadata in the core metadata classes.

Repository: incubator-juneau
Updated Branches:
  refs/heads/master 3f09988b4 -> 69d11dbb7


Eliminate references to language-specific metadata in the core metadata
classes.

Project: http://git-wip-us.apache.org/repos/asf/incubator-juneau/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-juneau/commit/69d11dbb
Tree: http://git-wip-us.apache.org/repos/asf/incubator-juneau/tree/69d11dbb
Diff: http://git-wip-us.apache.org/repos/asf/incubator-juneau/diff/69d11dbb

Branch: refs/heads/master
Commit: 69d11dbb7f7821992d6de44684a0a47c396bd84a
Parents: 3f09988
Author: jamesbognar <ja...@gmail.com>
Authored: Thu Aug 25 12:23:14 2016 -0400
Committer: jamesbognar <ja...@gmail.com>
Committed: Thu Aug 25 12:28:07 2016 -0400

----------------------------------------------------------------------
 .../main/java/org/apache/juneau/BeanMeta.java   | 21 +++-----
 .../org/apache/juneau/BeanMetaFiltered.java     |  7 ++-
 .../org/apache/juneau/BeanPropertyMeta.java     | 44 +++--------------
 .../juneau/html/HtmlBeanPropertyMeta.java       | 19 ++++----
 .../org/apache/juneau/html/HtmlSerializer.java  | 18 +++----
 .../apache/juneau/internal/DelegateBeanMap.java | 15 +-----
 .../apache/juneau/jena/RdfBeanPropertyMeta.java | 11 +++--
 .../java/org/apache/juneau/jena/RdfParser.java  |  4 +-
 .../org/apache/juneau/json/JsonSerializer.java  |  2 +-
 .../urlencoding/UrlEncodingParserSession.java   |  2 +-
 .../UrlEncodingSerializerSession.java           |  2 +-
 .../java/org/apache/juneau/xml/XmlBeanMeta.java | 29 +++++------
 .../apache/juneau/xml/XmlBeanPropertyMeta.java  | 51 ++++++++------------
 .../apache/juneau/xml/XmlSchemaSerializer.java  | 22 ++++-----
 .../org/apache/juneau/xml/XmlSerializer.java    | 46 +++++++++---------
 15 files changed, 121 insertions(+), 172 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/69d11dbb/juneau-core/src/main/java/org/apache/juneau/BeanMeta.java
----------------------------------------------------------------------
diff --git a/juneau-core/src/main/java/org/apache/juneau/BeanMeta.java b/juneau-core/src/main/java/org/apache/juneau/BeanMeta.java
index 5ea06a8..1eb9123 100644
--- a/juneau-core/src/main/java/org/apache/juneau/BeanMeta.java
+++ b/juneau-core/src/main/java/org/apache/juneau/BeanMeta.java
@@ -22,11 +22,9 @@ import java.util.*;
 import java.util.Map.*;
 
 import org.apache.juneau.annotation.*;
-import org.apache.juneau.html.*;
 import org.apache.juneau.internal.*;
-import org.apache.juneau.jena.*;
 import org.apache.juneau.transform.*;
-import org.apache.juneau.xml.*;
+import org.apache.juneau.utils.*;
 
 
 /**
@@ -93,8 +91,7 @@ public class BeanMeta<T> {
 	/** For beans with constructors with BeanConstructor annotation, this is the list of constructor arg properties. */
 	protected String[] constructorArgs = new String[0];
 
-	/** XML-related metadata */
-	protected XmlBeanMeta<T> xmlMeta;
+	private MetadataMap extMeta = new MetadataMap();  // Extended metadata
 
 	// Other fields
 	BeanPropertyMeta uriProperty;                                 // The property identified as the URI for this bean (annotated with @BeanProperty.beanUri).
@@ -347,8 +344,6 @@ public class BeanMeta<T> {
 				}
 			}
 
-			xmlMeta = new XmlBeanMeta<T>(this, null);
-
 			// We return this through the Bean.keySet() interface, so make sure it's not modifiable.
 			properties = Collections.unmodifiableMap(properties);
 
@@ -577,12 +572,13 @@ public class BeanMeta<T> {
 	}
 
 	/**
-	 * Returns XML related metadata for this bean type.
+	 * Returns the language-specified extended metadata on this bean class.
 	 *
-	 * @return The XML metadata for this bean type.
+	 * @param metaDataClass The name of the metadata class to create.
+	 * @return Extended metadata on this bean class.  Never <jk>null</jk>.
 	 */
-	public XmlBeanMeta<T> getXmlMeta() {
-		return xmlMeta;
+	public <M extends BeanMetaExtended> M getExtendedMeta(Class<M> metaDataClass) {
+		return extMeta.get(metaDataClass, this);
 	}
 
 	/**
@@ -712,9 +708,6 @@ public class BeanMeta<T> {
 			super(BeanMeta.this, subTypeAttr, ctx.string());
 			this.subTypes = subTypes;
 			this.realProperty = realProperty;
-			this.htmlMeta = new HtmlBeanPropertyMeta(this);
-			this.xmlMeta = new XmlBeanPropertyMeta(this);
-			this.rdfMeta = new RdfBeanPropertyMeta(this);
 		}
 
 		/*

http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/69d11dbb/juneau-core/src/main/java/org/apache/juneau/BeanMetaFiltered.java
----------------------------------------------------------------------
diff --git a/juneau-core/src/main/java/org/apache/juneau/BeanMetaFiltered.java b/juneau-core/src/main/java/org/apache/juneau/BeanMetaFiltered.java
index cbffeaa..b9d1d9e 100644
--- a/juneau-core/src/main/java/org/apache/juneau/BeanMetaFiltered.java
+++ b/juneau-core/src/main/java/org/apache/juneau/BeanMetaFiltered.java
@@ -15,7 +15,6 @@ package org.apache.juneau;
 import java.util.*;
 
 import org.apache.juneau.annotation.*;
-import org.apache.juneau.xml.*;
 
 /**
  * Sames as {@link BeanMeta}, except the list of bean properties are limited
@@ -39,7 +38,6 @@ public final class BeanMetaFiltered<T> extends BeanMeta<T> {
 		this.properties = new LinkedHashMap<String,BeanPropertyMeta>();
 		for (String p : pNames)
 			properties.put(p, innerMeta.getPropertyMeta(p));
-		this.xmlMeta = new XmlBeanMeta<T>(innerMeta, pNames);
 	}
 
 	/**
@@ -57,6 +55,11 @@ public final class BeanMetaFiltered<T> extends BeanMeta<T> {
 		return innerMeta.classMeta;
 	}
 
+	@Override /* Delagate */
+	public <M extends BeanMetaExtended> M getExtendedMeta(Class<M> m) {
+		return innerMeta.getExtendedMeta(m);
+	}
+
 	@Override /* BeanMeta */
 	public Collection<BeanPropertyMeta> getPropertyMetas() {
 		return properties.values();

http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/69d11dbb/juneau-core/src/main/java/org/apache/juneau/BeanPropertyMeta.java
----------------------------------------------------------------------
diff --git a/juneau-core/src/main/java/org/apache/juneau/BeanPropertyMeta.java b/juneau-core/src/main/java/org/apache/juneau/BeanPropertyMeta.java
index 3813e8a..1cdd8ea 100644
--- a/juneau-core/src/main/java/org/apache/juneau/BeanPropertyMeta.java
+++ b/juneau-core/src/main/java/org/apache/juneau/BeanPropertyMeta.java
@@ -24,13 +24,11 @@ import java.net.URI;
 import java.util.*;
 
 import org.apache.juneau.annotation.*;
-import org.apache.juneau.html.*;
 import org.apache.juneau.internal.*;
-import org.apache.juneau.jena.*;
 import org.apache.juneau.parser.*;
 import org.apache.juneau.serializer.*;
 import org.apache.juneau.transform.*;
-import org.apache.juneau.xml.*;
+import org.apache.juneau.utils.*;
 
 /**
  * Contains metadata about a bean property.
@@ -59,14 +57,7 @@ public class BeanPropertyMeta {
 	private String[] properties;
 	private PojoTransform transform;      // PojoTransform defined only via @BeanProperty annotation.
 
-	/** HTML related metadata on this bean property. */
-	protected HtmlBeanPropertyMeta htmlMeta;
-
-	/** XML related metadata on this bean property. */
-	protected XmlBeanPropertyMeta xmlMeta;
-
-	/** RDF related metadata on this bean property. */
-	protected RdfBeanPropertyMeta rdfMeta;  //
+	private MetadataMap extMeta = new MetadataMap();  // Extended metadata
 
 	/**
 	 * Constructor.
@@ -233,30 +224,13 @@ public class BeanPropertyMeta {
 	}
 
 	/**
-	 * Returns the HTML-related metadata on this bean property.
-	 *
-	 * @return The HTML-related metadata on this bean property.  Never <jk>null</jk>/.
-	 */
-	public HtmlBeanPropertyMeta getHtmlMeta() {
-		return htmlMeta;
-	}
-
-	/**
-	 * Returns the XML-related metadata on this bean property.
+	 * Returns the language-specified extended metadata on this bean property.
 	 *
-	 * @return The XML-related metadata on this bean property.  Never <jk>null</jk>/.
+	 * @param c The name of the metadata class to create.
+	 * @return Extended metadata on this bean property.  Never <jk>null</jk>.
 	 */
-	public XmlBeanPropertyMeta getXmlMeta() {
-		return xmlMeta;
-	}
-
-	/**
-	 * Returns the RDF-related metadata on this bean property.
-	 *
-	 * @return The RDF-related metadata on this bean property.  Never <jk>null</jk>/.
-	 */
-	public RdfBeanPropertyMeta getRdfMeta() {
-		return rdfMeta;
+	public <M extends BeanPropertyMetaExtended> M getExtendedMeta(Class<M> c) {
+		return extMeta.get(c, this);
 	}
 
 	boolean validate() throws Exception {
@@ -322,10 +296,6 @@ public class BeanPropertyMeta {
 		if (field != null && ! isParentClass(field.getType(), c))
 			return false;
 
-		htmlMeta = new HtmlBeanPropertyMeta(this);
-		xmlMeta = new XmlBeanPropertyMeta(this);
-		rdfMeta = new RdfBeanPropertyMeta(this);
-
 		return true;
 	}
 

http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/69d11dbb/juneau-core/src/main/java/org/apache/juneau/html/HtmlBeanPropertyMeta.java
----------------------------------------------------------------------
diff --git a/juneau-core/src/main/java/org/apache/juneau/html/HtmlBeanPropertyMeta.java b/juneau-core/src/main/java/org/apache/juneau/html/HtmlBeanPropertyMeta.java
index 79538ce..7ac8f66 100644
--- a/juneau-core/src/main/java/org/apache/juneau/html/HtmlBeanPropertyMeta.java
+++ b/juneau-core/src/main/java/org/apache/juneau/html/HtmlBeanPropertyMeta.java
@@ -20,22 +20,23 @@ import org.apache.juneau.html.annotation.*;
  *
  * @author James Bognar (james.bognar@salesforce.com)
  */
-public class HtmlBeanPropertyMeta {
+public class HtmlBeanPropertyMeta extends BeanPropertyMetaExtended {
 
 	private boolean asXml, noTables, noTableHeaders, asPlainText;
 
 	/**
 	 * Constructor.
 	 *
-	 * @param beanPropertyMeta The metadata of the bean property of this additional metadata.
+	 * @param bpm The metadata of the bean property of this additional metadata.
 	 */
-	public HtmlBeanPropertyMeta(BeanPropertyMeta beanPropertyMeta) {
-		if (beanPropertyMeta.getField() != null)
-			findHtmlInfo(beanPropertyMeta.getField().getAnnotation(Html.class));
-		if (beanPropertyMeta.getGetter() != null)
-			findHtmlInfo(beanPropertyMeta.getGetter().getAnnotation(Html.class));
-		if (beanPropertyMeta.getSetter() != null)
-			findHtmlInfo(beanPropertyMeta.getSetter().getAnnotation(Html.class));
+	public HtmlBeanPropertyMeta(BeanPropertyMeta bpm) {
+		super(bpm);
+		if (bpm.getField() != null)
+			findHtmlInfo(bpm.getField().getAnnotation(Html.class));
+		if (bpm.getGetter() != null)
+			findHtmlInfo(bpm.getGetter().getAnnotation(Html.class));
+		if (bpm.getSetter() != null)
+			findHtmlInfo(bpm.getSetter().getAnnotation(Html.class));
 	}
 
 	private void findHtmlInfo(Html html) {

http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/69d11dbb/juneau-core/src/main/java/org/apache/juneau/html/HtmlSerializer.java
----------------------------------------------------------------------
diff --git a/juneau-core/src/main/java/org/apache/juneau/html/HtmlSerializer.java b/juneau-core/src/main/java/org/apache/juneau/html/HtmlSerializer.java
index dc98972..47e40cc 100644
--- a/juneau-core/src/main/java/org/apache/juneau/html/HtmlSerializer.java
+++ b/juneau-core/src/main/java/org/apache/juneau/html/HtmlSerializer.java
@@ -232,11 +232,11 @@ public class HtmlSerializer extends XmlSerializer {
 					gType = bc.getClassMetaForObject(o);
 			}
 
-			HtmlClassMeta html = gType.getHtmlMeta();
+			HtmlClassMeta html = gType.getExtendedMeta(HtmlClassMeta.class);
 
-			if (html.isAsXml() || (pMeta != null && pMeta.getHtmlMeta().isAsXml()))
+			if (html.isAsXml() || (pMeta != null && pMeta.getExtendedMeta(HtmlBeanPropertyMeta.class).isAsXml()))
 				super.serializeAnything(session, out, o, null, null, null, false, XmlFormat.NORMAL, null);
-			else if (html.isAsPlainText() || (pMeta != null && pMeta.getHtmlMeta().isAsPlainText()))
+			else if (html.isAsPlainText() || (pMeta != null && pMeta.getExtendedMeta(HtmlBeanPropertyMeta.class).isAsPlainText()))
 				out.write(o == null ? "null" : o.toString());
 			else if (o == null || (gType.isChar() && ((Character)o).charValue() == 0))
 				out.tag(i, "null").nl();
@@ -289,7 +289,7 @@ public class HtmlSerializer extends XmlSerializer {
 		if (classAttr != null)
 			out.attr("class", classAttr);
 		out.appendln(">");
-		if (! (aType.getHtmlMeta().isNoTableHeaders() || (ppMeta != null && ppMeta.getHtmlMeta().isNoTableHeaders()))) {
+		if (! (aType.getExtendedMeta(HtmlClassMeta.class).isNoTableHeaders() || (ppMeta != null && ppMeta.getExtendedMeta(HtmlBeanPropertyMeta.class).isNoTableHeaders()))) {
 			out.sTag(i+1, "tr").nl();
 			out.sTag(i+2, "th").nl().appendln(i+3, "<string>key</string>").eTag(i+2, "th").nl();
 			out.sTag(i+2, "th").nl().appendln(i+3, "<string>value</string>").eTag(i+2, "th").nl();
@@ -337,7 +337,7 @@ public class HtmlSerializer extends XmlSerializer {
 		if (classAttr != null)
 			out.attr("_class", classAttr);
 		out.append('>').nl();
-		if (! (m.getClassMeta().getHtmlMeta().isNoTableHeaders() || (ppMeta != null && ppMeta.getHtmlMeta().isNoTableHeaders()))) {
+		if (! (m.getClassMeta().getExtendedMeta(HtmlClassMeta.class).isNoTableHeaders() || (ppMeta != null && ppMeta.getExtendedMeta(HtmlBeanPropertyMeta.class).isNoTableHeaders()))) {
 			out.sTag(i+1, "tr").nl();
 			out.sTag(i+2, "th").nl().appendln(i+3, "<string>key</string>").eTag(i+2, "th").nl();
 			out.sTag(i+2, "th").nl().appendln(i+3, "<string>value</string>").eTag(i+2, "th").nl();
@@ -486,7 +486,7 @@ public class HtmlSerializer extends XmlSerializer {
 			}
 		if (o1 == null)
 			return null;
-		ClassMeta cm = bc.getClassMetaForObject(o1);
+		ClassMeta<?> cm = bc.getClassMetaForObject(o1);
 		if (cm.getPojoTransform() != null) {
 			PojoTransform f = cm.getPojoTransform();
 			o1 = f.transform(o1);
@@ -496,10 +496,10 @@ public class HtmlSerializer extends XmlSerializer {
 			return null;
 		if (cm.getInnerClass().isAnnotationPresent(HtmlLink.class))
 			return null;
-		HtmlClassMeta h = cm.getHtmlMeta();
-		if (h.isNoTables() || (pMeta != null && pMeta.getHtmlMeta().isNoTables()))
+		HtmlClassMeta h = cm.getExtendedMeta(HtmlClassMeta.class);
+		if (h.isNoTables() || (pMeta != null && pMeta.getExtendedMeta(HtmlBeanPropertyMeta.class).isNoTables()))
 			return null;
-		if (h.isNoTableHeaders() || (pMeta != null && pMeta.getHtmlMeta().isNoTableHeaders()))
+		if (h.isNoTableHeaders() || (pMeta != null && pMeta.getExtendedMeta(HtmlBeanPropertyMeta.class).isNoTableHeaders()))
 			return new String[0];
 		if (session.canIgnoreValue(cm, null, o1))
 			return null;

http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/69d11dbb/juneau-core/src/main/java/org/apache/juneau/internal/DelegateBeanMap.java
----------------------------------------------------------------------
diff --git a/juneau-core/src/main/java/org/apache/juneau/internal/DelegateBeanMap.java b/juneau-core/src/main/java/org/apache/juneau/internal/DelegateBeanMap.java
index 81c2fc5..ab64d59 100644
--- a/juneau-core/src/main/java/org/apache/juneau/internal/DelegateBeanMap.java
+++ b/juneau-core/src/main/java/org/apache/juneau/internal/DelegateBeanMap.java
@@ -15,9 +15,6 @@ package org.apache.juneau.internal;
 import java.util.*;
 
 import org.apache.juneau.*;
-import org.apache.juneau.html.*;
-import org.apache.juneau.jena.*;
-import org.apache.juneau.xml.*;
 
 /**
  * Represents a wrapped {@link BeanMap} where property values can be overridden, removed, or reordered
@@ -127,16 +124,8 @@ public class DelegateBeanMap<T> extends BeanMap<T> {
 						return overrideValues.get(key);
 					}
 					@Override /* BeanPropertyMeta */
-					public RdfBeanPropertyMeta getRdfMeta() {
-						return p2.getRdfMeta();
-					}
-					@Override /* BeanPropertyMeta */
-					public HtmlBeanPropertyMeta getHtmlMeta() {
-						return p2.getHtmlMeta();
-					}
-					@Override /* BeanPropertyMeta */
-					public XmlBeanPropertyMeta getXmlMeta() {
-						return p2.getXmlMeta();
+					public <M extends BeanPropertyMetaExtended> M getExtendedMeta(Class<M> c) {
+						return p2.getExtendedMeta(c);
 					}
 				};
 			}

http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/69d11dbb/juneau-core/src/main/java/org/apache/juneau/jena/RdfBeanPropertyMeta.java
----------------------------------------------------------------------
diff --git a/juneau-core/src/main/java/org/apache/juneau/jena/RdfBeanPropertyMeta.java b/juneau-core/src/main/java/org/apache/juneau/jena/RdfBeanPropertyMeta.java
index 48d0547..f03c285 100644
--- a/juneau-core/src/main/java/org/apache/juneau/jena/RdfBeanPropertyMeta.java
+++ b/juneau-core/src/main/java/org/apache/juneau/jena/RdfBeanPropertyMeta.java
@@ -25,7 +25,7 @@ import org.apache.juneau.xml.*;
  *
  * @author James Bognar (james.bognar@salesforce.com)
  */
-public class RdfBeanPropertyMeta {
+public class RdfBeanPropertyMeta extends BeanPropertyMetaExtended {
 
 	private RdfCollectionFormat collectionFormat = DEFAULT;
 	private Namespace namespace = null;
@@ -33,12 +33,13 @@ public class RdfBeanPropertyMeta {
 	/**
 	 * Constructor.
 	 *
-	 * @param bpMeta The metadata of the bean property of this additional metadata.
+	 * @param bpm The metadata of the bean property of this additional metadata.
 	 */
-	public RdfBeanPropertyMeta(BeanPropertyMeta bpMeta) {
+	public RdfBeanPropertyMeta(BeanPropertyMeta bpm) {
+		super(bpm);
 
-		List<Rdf> rdfs = bpMeta.findAnnotations(Rdf.class);
-		List<RdfSchema> schemas = bpMeta.findAnnotations(RdfSchema.class);
+		List<Rdf> rdfs = bpm.findAnnotations(Rdf.class);
+		List<RdfSchema> schemas = bpm.findAnnotations(RdfSchema.class);
 
 		for (Rdf rdf : rdfs)
 			if (collectionFormat == DEFAULT)

http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/69d11dbb/juneau-core/src/main/java/org/apache/juneau/jena/RdfParser.java
----------------------------------------------------------------------
diff --git a/juneau-core/src/main/java/org/apache/juneau/jena/RdfParser.java b/juneau-core/src/main/java/org/apache/juneau/jena/RdfParser.java
index 9125969..6695b0b 100644
--- a/juneau-core/src/main/java/org/apache/juneau/jena/RdfParser.java
+++ b/juneau-core/src/main/java/org/apache/juneau/jena/RdfParser.java
@@ -231,8 +231,8 @@ public class RdfParser extends ReaderParser {
 	}
 
 	private boolean isMultiValuedCollections(RdfParserSession session, BeanPropertyMeta pMeta) {
-		if (pMeta != null && pMeta.getRdfMeta().getCollectionFormat() != RdfCollectionFormat.DEFAULT)
-			return pMeta.getRdfMeta().getCollectionFormat() == RdfCollectionFormat.MULTI_VALUED;
+		if (pMeta != null && pMeta.getExtendedMeta(RdfBeanPropertyMeta.class).getCollectionFormat() != RdfCollectionFormat.DEFAULT)
+			return pMeta.getExtendedMeta(RdfBeanPropertyMeta.class).getCollectionFormat() == RdfCollectionFormat.MULTI_VALUED;
 		return session.getCollectionFormat() == RdfCollectionFormat.MULTI_VALUED;
 	}
 

http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/69d11dbb/juneau-core/src/main/java/org/apache/juneau/json/JsonSerializer.java
----------------------------------------------------------------------
diff --git a/juneau-core/src/main/java/org/apache/juneau/json/JsonSerializer.java b/juneau-core/src/main/java/org/apache/juneau/json/JsonSerializer.java
index d8265e6..2be051e 100644
--- a/juneau-core/src/main/java/org/apache/juneau/json/JsonSerializer.java
+++ b/juneau-core/src/main/java/org/apache/juneau/json/JsonSerializer.java
@@ -198,7 +198,7 @@ public class JsonSerializer extends WriterSerializer {
 				gType = bc.getClassMetaForObject(o);
 		}
 
-		String wrapperAttr = gType.getJsonMeta().getWrapperAttr();
+		String wrapperAttr = gType.getExtendedMeta(JsonClassMeta.class).getWrapperAttr();
 		if (wrapperAttr != null) {
 			out.append('{').cr(session.indent).attr(wrapperAttr).append(':').s();
 			session.indent++;

http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/69d11dbb/juneau-core/src/main/java/org/apache/juneau/urlencoding/UrlEncodingParserSession.java
----------------------------------------------------------------------
diff --git a/juneau-core/src/main/java/org/apache/juneau/urlencoding/UrlEncodingParserSession.java b/juneau-core/src/main/java/org/apache/juneau/urlencoding/UrlEncodingParserSession.java
index 23fcdbb..591a442 100644
--- a/juneau-core/src/main/java/org/apache/juneau/urlencoding/UrlEncodingParserSession.java
+++ b/juneau-core/src/main/java/org/apache/juneau/urlencoding/UrlEncodingParserSession.java
@@ -69,7 +69,7 @@ public class UrlEncodingParserSession extends UonParserSession {
 		if (cm.isArray() || cm.isCollection()) {
 			if (expandedParams)
 				return true;
-			if (pMeta.getBeanMeta().getClassMeta().getUrlEncodingMeta().isExpandedParams())
+			if (pMeta.getBeanMeta().getClassMeta().getExtendedMeta(UrlEncodingClassMeta.class).isExpandedParams())
 				return true;
 		}
 		return false;

http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/69d11dbb/juneau-core/src/main/java/org/apache/juneau/urlencoding/UrlEncodingSerializerSession.java
----------------------------------------------------------------------
diff --git a/juneau-core/src/main/java/org/apache/juneau/urlencoding/UrlEncodingSerializerSession.java b/juneau-core/src/main/java/org/apache/juneau/urlencoding/UrlEncodingSerializerSession.java
index 768d196..ea6378a 100644
--- a/juneau-core/src/main/java/org/apache/juneau/urlencoding/UrlEncodingSerializerSession.java
+++ b/juneau-core/src/main/java/org/apache/juneau/urlencoding/UrlEncodingSerializerSession.java
@@ -61,7 +61,7 @@ public class UrlEncodingSerializerSession extends UonSerializerSession {
 		if (cm.isArray() || cm.isCollection()) {
 			if (expandedParams)
 				return true;
-			if (pMeta.getBeanMeta().getClassMeta().getUrlEncodingMeta().isExpandedParams())
+			if (pMeta.getBeanMeta().getClassMeta().getExtendedMeta(UrlEncodingClassMeta.class).isExpandedParams())
 				return true;
 		}
 		return false;

http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/69d11dbb/juneau-core/src/main/java/org/apache/juneau/xml/XmlBeanMeta.java
----------------------------------------------------------------------
diff --git a/juneau-core/src/main/java/org/apache/juneau/xml/XmlBeanMeta.java b/juneau-core/src/main/java/org/apache/juneau/xml/XmlBeanMeta.java
index d0f066c..abb424a 100644
--- a/juneau-core/src/main/java/org/apache/juneau/xml/XmlBeanMeta.java
+++ b/juneau-core/src/main/java/org/apache/juneau/xml/XmlBeanMeta.java
@@ -21,16 +21,18 @@ import org.apache.juneau.xml.annotation.*;
  * Metadata on beans specific to the XML serializers and parsers pulled from the {@link Xml @Xml} annotation on the class.
  *
  * @author James Bognar (james.bognar@salesforce.com)
- * @param <T> The bean class type.
  */
-public class XmlBeanMeta<T> {
+public class XmlBeanMeta extends BeanMetaExtended {
 
 	// XML related fields
 	private final Map<String,BeanPropertyMeta> xmlAttrs;                        // Map of bean properties that are represented as XML attributes.
 	private final BeanPropertyMeta xmlContent;                                  // Bean property that is represented as XML content within the bean element.
-	private final XmlContentHandler<T> xmlContentHandler;                       // Class used to convert bean to XML content.
+	private final XmlContentHandler<?> xmlContentHandler;                       // Class used to convert bean to XML content.
 	private final Map<String,BeanPropertyMeta> childElementProperties;          // Properties defined with @Xml.childName annotation.
-	private final BeanMeta<T> beanMeta;
+
+	public XmlBeanMeta(BeanMeta<?> beanMeta) {
+		this(beanMeta, null);
+	}
 
 	/**
 	 * Constructor.
@@ -38,28 +40,27 @@ public class XmlBeanMeta<T> {
 	 * @param beanMeta The metadata on the bean that this metadata applies to.
 	 * @param pNames Only look at these property names.  If <jk>null</jk>, apply to all bean properties.
 	 */
-	@SuppressWarnings("unchecked")
-	public XmlBeanMeta(BeanMeta<T> beanMeta, String[] pNames) {
-		this.beanMeta = beanMeta;
-		Class<T> c = beanMeta.getClassMeta().getInnerClass();
+	public XmlBeanMeta(BeanMeta<?> beanMeta, String[] pNames) {
+		super(beanMeta);
+		Class<?> c = beanMeta.getClassMeta().getInnerClass();
 
 		Map<String,BeanPropertyMeta> tXmlAttrs = new LinkedHashMap<String,BeanPropertyMeta>();
 		BeanPropertyMeta tXmlContent = null;
-		XmlContentHandler<T> tXmlContentHandler = null;
+		XmlContentHandler<?> tXmlContentHandler = null;
 		Map<String,BeanPropertyMeta> tChildElementProperties = new LinkedHashMap<String,BeanPropertyMeta>();
 
 		for (BeanPropertyMeta p : beanMeta.getPropertyMetas(pNames)) {
-			XmlFormat xf = p.getXmlMeta().getXmlFormat();
+			XmlFormat xf = p.getExtendedMeta(XmlBeanPropertyMeta.class).getXmlFormat();
 			if (xf == XmlFormat.ATTR)
 				tXmlAttrs.put(p.getName(), p);
 			else if (xf == XmlFormat.CONTENT) {
 				if (tXmlContent != null)
 					throw new BeanRuntimeException(c, "Multiple instances of CONTENT properties defined on class.  Only one property can be designated as such.");
 				tXmlContent = p;
-				tXmlContentHandler = (XmlContentHandler<T>) p.getXmlMeta().getXmlContentHandler();
+				tXmlContentHandler = p.getExtendedMeta(XmlBeanPropertyMeta.class).getXmlContentHandler();
 			}
 			// Look for any properties that are collections with @Xml.childName specified.
-			String n = p.getXmlMeta().getChildName();
+			String n = p.getExtendedMeta(XmlBeanPropertyMeta.class).getChildName();
 			if (n != null) {
 				if (tChildElementProperties.containsKey(n))
 					throw new BeanRuntimeException(c, "Multiple properties found with the name ''{0}''.", n);
@@ -97,7 +98,7 @@ public class XmlBeanMeta<T> {
 	 *
 	 * @return The XML content handler for this bean, or <jk>null</jk> if no content handler is defined.
 	 */
-	protected XmlContentHandler<T> getXmlContentHandler() {
+	protected XmlContentHandler<?> getXmlContentHandler() {
 		return xmlContentHandler;
 	}
 
@@ -125,6 +126,6 @@ public class XmlBeanMeta<T> {
 			if (bpm != null)
 				return bpm;
 		}
-		return beanMeta.getPropertyMeta(fieldName);
+		return getBeanMeta().getPropertyMeta(fieldName);
 	}
 }

http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/69d11dbb/juneau-core/src/main/java/org/apache/juneau/xml/XmlBeanPropertyMeta.java
----------------------------------------------------------------------
diff --git a/juneau-core/src/main/java/org/apache/juneau/xml/XmlBeanPropertyMeta.java b/juneau-core/src/main/java/org/apache/juneau/xml/XmlBeanPropertyMeta.java
index 00aa151..21ed6ea 100644
--- a/juneau-core/src/main/java/org/apache/juneau/xml/XmlBeanPropertyMeta.java
+++ b/juneau-core/src/main/java/org/apache/juneau/xml/XmlBeanPropertyMeta.java
@@ -22,33 +22,32 @@ import org.apache.juneau.xml.annotation.*;
  *
  * @author James Bognar (james.bognar@salesforce.com)
  */
-public class XmlBeanPropertyMeta {
+public class XmlBeanPropertyMeta extends BeanPropertyMetaExtended {
 
 	private Namespace namespace = null;
 	private XmlFormat xmlFormat = XmlFormat.NORMAL;
 	private XmlContentHandler<?> xmlContentHandler = null;
 	private String childName;
-	private final BeanPropertyMeta beanPropertyMeta;
 
 	/**
 	 * Constructor.
 	 *
-	 * @param beanPropertyMeta The metadata of the bean property of this additional metadata.
+	 * @param bpm The metadata of the bean property of this additional metadata.
 	 */
-	public XmlBeanPropertyMeta(BeanPropertyMeta beanPropertyMeta) {
-		this.beanPropertyMeta = beanPropertyMeta;
+	public XmlBeanPropertyMeta(BeanPropertyMeta bpm) {
+		super(bpm);
 
-		if (beanPropertyMeta.getField() != null)
-			findXmlInfo(beanPropertyMeta.getField().getAnnotation(Xml.class));
-		if (beanPropertyMeta.getGetter() != null)
-			findXmlInfo(beanPropertyMeta.getGetter().getAnnotation(Xml.class));
-		if (beanPropertyMeta.getSetter() != null)
-			findXmlInfo(beanPropertyMeta.getSetter().getAnnotation(Xml.class));
+		if (bpm.getField() != null)
+			findXmlInfo(bpm.getField().getAnnotation(Xml.class));
+		if (bpm.getGetter() != null)
+			findXmlInfo(bpm.getGetter().getAnnotation(Xml.class));
+		if (bpm.getSetter() != null)
+			findXmlInfo(bpm.getSetter().getAnnotation(Xml.class));
 
 		if (namespace == null)
-			namespace = beanPropertyMeta.getBeanMeta().getClassMeta().getXmlMeta().getNamespace();
+			namespace = bpm.getBeanMeta().getClassMeta().getExtendedMeta(XmlClassMeta.class).getNamespace();
 
-		if (beanPropertyMeta.isBeanUri() && xmlFormat != XmlFormat.ELEMENT)
+		if (bpm.isBeanUri() && xmlFormat != XmlFormat.ELEMENT)
 			xmlFormat = XmlFormat.ATTR;
 	}
 
@@ -102,26 +101,18 @@ public class XmlBeanPropertyMeta {
 		return childName;
 	}
 
-	/**
-	 * Returns the bean property metadata that this metadata belongs to.
-	 *
-	 * @return The bean property metadata.  Never <jk>null</jk>.
-	 */
-	protected BeanPropertyMeta getBeanPropertyMeta() {
-		return beanPropertyMeta;
-	}
-
 	private void findXmlInfo(Xml xml) {
 		if (xml == null)
 			return;
-		ClassMeta<?> cmProperty = beanPropertyMeta.getClassMeta();
-		ClassMeta<?> cmBean = beanPropertyMeta.getBeanMeta().getClassMeta();
-		String name = beanPropertyMeta.getName();
+		BeanPropertyMeta bpm = getBeanPropertyMeta();
+		ClassMeta<?> cmProperty = bpm.getClassMeta();
+		ClassMeta<?> cmBean = bpm.getBeanMeta().getClassMeta();
+		String name = bpm.getName();
 		if (! xml.name().isEmpty())
 			throw new BeanRuntimeException(cmBean.getInnerClass(), "Annotation error on property ''{0}''.  Found @Xml.name annotation can only be specified on types.", name);
 
-		List<Xml> xmls = beanPropertyMeta.findAnnotations(Xml.class);
-		List<XmlSchema> schemas = beanPropertyMeta.findAnnotations(XmlSchema.class);
+		List<Xml> xmls = bpm.findAnnotations(Xml.class);
+		List<XmlSchema> schemas = bpm.findAnnotations(XmlSchema.class);
 		namespace = XmlUtils.findNamespace(xmls, schemas);
 
 		if (xmlFormat == XmlFormat.NORMAL)
@@ -136,16 +127,16 @@ public class XmlBeanPropertyMeta {
 		if (xmlFormat == XmlFormat.COLLAPSED) {
 			if (isCollection) {
 				if (cen.isEmpty())
-					cen = cmProperty.getXmlMeta().getChildName();
+					cen = cmProperty.getExtendedMeta(XmlClassMeta.class).getChildName();
 				if (cen == null || cen.isEmpty())
-					cen = cmProperty.getElementType().getXmlMeta().getElementName();
+					cen = cmProperty.getElementType().getExtendedMeta(XmlClassMeta.class).getElementName();
 				if (cen == null || cen.isEmpty())
 					cen = name;
 			} else {
 				throw new BeanRuntimeException(cmBean.getInnerClass(), "Annotation error on property ''{0}''.  @Xml.format=COLLAPSED can only be specified on collections and arrays.", name);
 			}
 			if (cen.isEmpty() && isCollection)
-				cen = cmProperty.getXmlMeta().getElementName();
+				cen = cmProperty.getExtendedMeta(XmlClassMeta.class).getElementName();
 		}
 
 		try {

http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/69d11dbb/juneau-core/src/main/java/org/apache/juneau/xml/XmlSchemaSerializer.java
----------------------------------------------------------------------
diff --git a/juneau-core/src/main/java/org/apache/juneau/xml/XmlSchemaSerializer.java b/juneau-core/src/main/java/org/apache/juneau/xml/XmlSchemaSerializer.java
index 0e5b0be..dc74bba 100644
--- a/juneau-core/src/main/java/org/apache/juneau/xml/XmlSchemaSerializer.java
+++ b/juneau-core/src/main/java/org/apache/juneau/xml/XmlSchemaSerializer.java
@@ -196,7 +196,7 @@ public class XmlSchemaSerializer extends XmlSerializer {
 			if (cm == null)
 				queueElement(ns, "null", object());
 			else {
-				XmlClassMeta xmlMeta = cm.getXmlMeta();
+				XmlClassMeta xmlMeta = cm.getExtendedMeta(XmlClassMeta.class);
 				if (xmlMeta.getElementName() != null && xmlMeta.getNamespace() != null)
 					ns = xmlMeta.getNamespace();
 				queueElement(ns, xmlMeta.getElementName(), cm);
@@ -296,7 +296,7 @@ public class XmlSchemaSerializer extends XmlSerializer {
 			int i = session.getIndent() + 1;
 			if (name == null)
 				name = getElementName(ft);
-			Namespace ns = first(ft.getXmlMeta().getNamespace(), defaultNs);
+			Namespace ns = first(ft.getExtendedMeta(XmlClassMeta.class).getNamespace(), defaultNs);
 			String type = getXmlType(ns, ft);
 
 			w.oTag(i, "element")
@@ -340,7 +340,7 @@ public class XmlSchemaSerializer extends XmlSerializer {
 			// This element can have mixed content if:
 			// 	1) It's a generic Object (so it can theoretically be anything)
 			//		2) The bean has a property defined with @XmlFormat.CONTENT.
-			if ((cm.isBean() && cm.getBeanMeta().getXmlMeta().getXmlContentProperty() != null) || cm.isObject())
+			if ((cm.isBean() && cm.getBeanMeta().getExtendedMeta(XmlBeanMeta.class).getXmlContentProperty() != null) || cm.isObject())
 				w.attr("mixed", "true");
 
 			w.cTag().nl();
@@ -371,10 +371,10 @@ public class XmlSchemaSerializer extends XmlSerializer {
 					boolean hasChildElements = false;
 
 					for (BeanPropertyMeta pMeta : bm.getPropertyMetas())
-						if (pMeta.getXmlMeta().getXmlFormat() != XmlFormat.ATTR && pMeta.getXmlMeta().getXmlFormat() != XmlFormat.CONTENT)
+						if (pMeta.getExtendedMeta(XmlBeanPropertyMeta.class).getXmlFormat() != XmlFormat.ATTR && pMeta.getExtendedMeta(XmlBeanPropertyMeta.class).getXmlFormat() != XmlFormat.CONTENT)
 							hasChildElements = true;
 
-					if (bm.getXmlMeta().getXmlContentProperty() != null) {
+					if (bm.getExtendedMeta(XmlBeanMeta.class).getXmlContentProperty() != null) {
 						w.sTag(i+1, "sequence").nl();
 						w.oTag(i+2, "any")
 							.attr("processContents", "skip")
@@ -388,7 +388,7 @@ public class XmlSchemaSerializer extends XmlSerializer {
 						boolean hasOtherNsElement = false;
 
 						for (BeanPropertyMeta pMeta : bm.getPropertyMetas()) {
-							XmlBeanPropertyMeta xmlMeta = pMeta.getXmlMeta();
+							XmlBeanPropertyMeta xmlMeta = pMeta.getExtendedMeta(XmlBeanPropertyMeta.class);
 							if (xmlMeta.getXmlFormat() != XmlFormat.ATTR) {
 								boolean isCollapsed = xmlMeta.getXmlFormat() == COLLAPSED;
 								ClassMeta<?> ct2 = pMeta.getClassMeta();
@@ -398,7 +398,7 @@ public class XmlSchemaSerializer extends XmlSerializer {
 										childName = xmlMeta.getChildName();
 									ct2 = pMeta.getClassMeta().getElementType();
 								}
-								Namespace cNs = first(xmlMeta.getNamespace(), ct2.getXmlMeta().getNamespace(), cm.getXmlMeta().getNamespace(), defaultNs);
+								Namespace cNs = first(xmlMeta.getNamespace(), ct2.getExtendedMeta(XmlClassMeta.class).getNamespace(), cm.getExtendedMeta(XmlClassMeta.class).getNamespace(), defaultNs);
 								if (xmlMeta.getNamespace() == null) {
 									w.oTag(i+2, "element")
 										.attr("name", XmlUtils.encodeElementName(childName), true)
@@ -433,8 +433,8 @@ public class XmlSchemaSerializer extends XmlSerializer {
 						w.eTag(i+1, "sequence").nl();
 					}
 
-					for (BeanPropertyMeta pMeta : bm.getXmlMeta().getXmlAttrProperties().values()) {
-						Namespace pNs = pMeta.getXmlMeta().getNamespace();
+					for (BeanPropertyMeta pMeta : bm.getExtendedMeta(XmlBeanMeta.class).getXmlAttrProperties().values()) {
+						Namespace pNs = pMeta.getExtendedMeta(XmlBeanPropertyMeta.class).getNamespace();
 						if (pNs == null)
 							pNs = defaultNs;
 
@@ -469,7 +469,7 @@ public class XmlSchemaSerializer extends XmlSerializer {
 							.ceTag().nl();
 						w.eTag(i+1, "sequence").nl();
 					} else {
-						Namespace cNs = first(elementType.getXmlMeta().getNamespace(), cm.getXmlMeta().getNamespace(), defaultNs);
+						Namespace cNs = first(elementType.getExtendedMeta(XmlClassMeta.class).getNamespace(), cm.getExtendedMeta(XmlClassMeta.class).getNamespace(), defaultNs);
 						schemas.queueType(cNs, null, elementType);
 						w.sTag(i+1, "sequence").nl();
 						w.oTag(i+2, "choice")
@@ -521,7 +521,7 @@ public class XmlSchemaSerializer extends XmlSerializer {
 
 		private String getElementName(ClassMeta<?> cm) {
 			cm = cm.getTransformedClassMeta();
-			String name = cm.getXmlMeta().getElementName();
+			String name = cm.getExtendedMeta(XmlClassMeta.class).getElementName();
 
 			if (name == null) {
 				if (cm.isBoolean())

http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/69d11dbb/juneau-core/src/main/java/org/apache/juneau/xml/XmlSerializer.java
----------------------------------------------------------------------
diff --git a/juneau-core/src/main/java/org/apache/juneau/xml/XmlSerializer.java b/juneau-core/src/main/java/org/apache/juneau/xml/XmlSerializer.java
index e51aff4..ee75f5a 100644
--- a/juneau-core/src/main/java/org/apache/juneau/xml/XmlSerializer.java
+++ b/juneau-core/src/main/java/org/apache/juneau/xml/XmlSerializer.java
@@ -209,7 +209,7 @@ public class XmlSerializer extends WriterSerializer {
 		aType = session.push(null, o, null);
 
 		if (aType != null) {
-			Namespace ns = aType.getXmlMeta().getNamespace();
+			Namespace ns = aType.getExtendedMeta(XmlClassMeta.class).getNamespace();
 			if (ns != null) {
 				if (ns.uri != null)
 					session.addNamespace(ns);
@@ -227,8 +227,8 @@ public class XmlSerializer extends WriterSerializer {
 			} else if (aType.isBean()) {
 				bm = bc.forBean(o);
 			} else if (aType.isDelegate()) {
-				ClassMeta innerType = ((Delegate)o).getClassMeta();
-				Namespace ns = innerType.getXmlMeta().getNamespace();
+				ClassMeta<?> innerType = ((Delegate)o).getClassMeta();
+				Namespace ns = innerType.getExtendedMeta(XmlClassMeta.class).getNamespace();
 				if (ns != null) {
 					if (ns.uri != null)
 						session.addNamespace(ns);
@@ -237,8 +237,8 @@ public class XmlSerializer extends WriterSerializer {
 				}
 
 				if (innerType.isBean()) {
-					for (BeanPropertyMeta bpm : (Collection<BeanPropertyMeta>)innerType.getBeanMeta().getPropertyMetas()) {
-						ns = bpm.getXmlMeta().getNamespace();
+					for (BeanPropertyMeta bpm : innerType.getBeanMeta().getPropertyMetas()) {
+						ns = bpm.getExtendedMeta(XmlBeanPropertyMeta.class).getNamespace();
 						if (ns != null && ns.uri != null)
 							session.addNamespace(ns);
 					}
@@ -264,7 +264,7 @@ public class XmlSerializer extends WriterSerializer {
 			if (bm != null) {
 				for (BeanPropertyValue p : bm.getValues(false, session.isTrimNulls())) {
 
-					Namespace ns = p.getMeta().getXmlMeta().getNamespace();
+					Namespace ns = p.getMeta().getExtendedMeta(XmlBeanPropertyMeta.class).getNamespace();
 					if (ns != null && ns.uri != null)
 						session.addNamespace(ns);
 
@@ -362,7 +362,7 @@ public class XmlSerializer extends WriterSerializer {
 		else if (gType.isBoolean())
 			ts = "boolean";
 		else if (gType.isMap() || gType.isBean() || gType.hasToObjectMapMethod()) {
-			isCollapsed = gType.getXmlMeta().getFormat() == XmlFormat.COLLAPSED;
+			isCollapsed = gType.getExtendedMeta(XmlClassMeta.class).getFormat() == XmlFormat.COLLAPSED;
 			ts = "object";
 		}
 		else if (gType.isCollection() || gType.isArray()) {
@@ -375,9 +375,9 @@ public class XmlSerializer extends WriterSerializer {
 
 		// Is there a name associated with this bean?
 		if (elementName == null)
-			elementName = gType.getXmlMeta().getElementName();
+			elementName = gType.getExtendedMeta(XmlClassMeta.class).getElementName();
 		if (elementName == null)
-			elementName = aType.getXmlMeta().getElementName();
+			elementName = aType.getExtendedMeta(XmlClassMeta.class).getElementName();
 
 		// If the value is null then it's either going to be <null/> or <XmlSerializer nil='true'/>
 		// depending on whether the element has a name.
@@ -388,9 +388,9 @@ public class XmlSerializer extends WriterSerializer {
 
 		if (session.isEnableNamespaces()) {
 			if (elementNamespace == null)
-				elementNamespace = gType.getXmlMeta().getNamespace();
+				elementNamespace = gType.getExtendedMeta(XmlClassMeta.class).getNamespace();
 			if (elementNamespace == null)
-				elementNamespace = aType.getXmlMeta().getNamespace();
+				elementNamespace = aType.getExtendedMeta(XmlClassMeta.class).getNamespace();
 			if (elementNamespace != null && elementNamespace.uri == null)
 				elementNamespace = null;
 			if (elementNamespace == null)
@@ -528,11 +528,11 @@ public class XmlSerializer extends WriterSerializer {
 
 	private boolean serializeBeanMap(XmlSerializerSession session, XmlWriter out, BeanMap<?> m, Namespace elementNs, boolean isCollapsed) throws Exception {
 		boolean hasChildren = false;
-		BeanMeta bm = m.getMeta();
+		BeanMeta<?> bm = m.getMeta();
 
 		List<BeanPropertyValue> lp = m.getValues(false, session.isTrimNulls());
 
-		Map<String,BeanPropertyMeta> xmlAttrs = bm.getXmlMeta().getXmlAttrProperties();
+		Map<String,BeanPropertyMeta> xmlAttrs = bm.getExtendedMeta(XmlBeanMeta.class).getXmlAttrProperties();
 		Object content = null;
 		for (BeanPropertyValue p : lp) {
 			if (xmlAttrs.containsKey(p.getName())) {
@@ -546,7 +546,7 @@ public class XmlSerializer extends WriterSerializer {
 				if (session.canIgnoreValue(pMeta.getClassMeta(), key, value))
 					continue;
 
-				Namespace ns = (session.isEnableNamespaces() && pMeta.getXmlMeta().getNamespace() != elementNs ? pMeta.getXmlMeta().getNamespace() : null);
+				Namespace ns = (session.isEnableNamespaces() && pMeta.getExtendedMeta(XmlBeanPropertyMeta.class).getNamespace() != elementNs ? pMeta.getExtendedMeta(XmlBeanPropertyMeta.class).getNamespace() : null);
 
 				if (pMeta.isBeanUri() || pMeta.isUri())
 					out.attrUri(ns, key, value);
@@ -559,7 +559,7 @@ public class XmlSerializer extends WriterSerializer {
 
 		for (BeanPropertyValue p : lp) {
 			BeanPropertyMeta pMeta = p.getMeta();
-			XmlFormat xf = pMeta.getXmlMeta().getXmlFormat();
+			XmlFormat xf = pMeta.getExtendedMeta(XmlBeanPropertyMeta.class).getXmlFormat();
 
 			if (xf == CONTENT) {
 				content = p.getValue();
@@ -580,7 +580,7 @@ public class XmlSerializer extends WriterSerializer {
 					hasChildren = true;
 					out.appendIf(! isCollapsed, '>').nl();
 				}
-				serializeAnything(session, out, value, pMeta.getClassMeta(), key, pMeta.getXmlMeta().getNamespace(), false, pMeta.getXmlMeta().getXmlFormat(), pMeta);
+				serializeAnything(session, out, value, pMeta.getClassMeta(), key, pMeta.getExtendedMeta(XmlBeanPropertyMeta.class).getNamespace(), false, pMeta.getExtendedMeta(XmlBeanPropertyMeta.class).getXmlFormat(), pMeta);
 			}
 		}
 		if ((! hasContent) || session.canIgnoreValue(string(), null, content))
@@ -588,7 +588,7 @@ public class XmlSerializer extends WriterSerializer {
 		out.append('>').cr(session.indent);
 
 		// Serialize XML content.
-		XmlContentHandler h = bm.getXmlMeta().getXmlContentHandler();
+		XmlContentHandler h = bm.getExtendedMeta(XmlBeanMeta.class).getXmlContentHandler();
 		if (h != null)
 			h.serialize(out, m.getBean());
 		else
@@ -607,18 +607,18 @@ public class XmlSerializer extends WriterSerializer {
 		Namespace eNs = null;
 
 		if (ppMeta != null) {
-			eName = ppMeta.getXmlMeta().getChildName();
-			eNs = ppMeta.getXmlMeta().getNamespace();
+			eName = ppMeta.getExtendedMeta(XmlBeanPropertyMeta.class).getChildName();
+			eNs = ppMeta.getExtendedMeta(XmlBeanPropertyMeta.class).getNamespace();
 		}
 
 		if (eName == null) {
-			eName = type.getXmlMeta().getChildName();
-			eNs = type.getXmlMeta().getNamespace();
+			eName = type.getExtendedMeta(XmlClassMeta.class).getChildName();
+			eNs = type.getExtendedMeta(XmlClassMeta.class).getNamespace();
 		}
 
 		if (eName == null && ! elementType.isObject()) {
-			eName = elementType.getXmlMeta().getElementName();
-			eNs = elementType.getXmlMeta().getNamespace();
+			eName = elementType.getExtendedMeta(XmlClassMeta.class).getElementName();
+			eNs = elementType.getExtendedMeta(XmlClassMeta.class).getNamespace();
 		}
 
 		for (Iterator i = c.iterator(); i.hasNext();) {