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 <[email protected]>
Authored: Thu Aug 25 12:23:14 2016 -0400
Committer: jamesbognar <[email protected]>
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 ([email protected])
  */
-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 ([email protected])
  */
-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 ([email protected])
- * @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 ([email protected])
  */
-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();) {


Reply via email to