Repository: incubator-juneau Updated Branches: refs/heads/master 69d11dbb7 -> 51bb3c48f
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/9c6eec75 Tree: http://git-wip-us.apache.org/repos/asf/incubator-juneau/tree/9c6eec75 Diff: http://git-wip-us.apache.org/repos/asf/incubator-juneau/diff/9c6eec75 Branch: refs/heads/master Commit: 9c6eec755b04b07f9b1e3f5ba4253950879184e9 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:36 2016 -0400 ---------------------------------------------------------------------- .../main/java/org/apache/juneau/BeanMeta.java | 21 ++--- .../org/apache/juneau/BeanMetaExtended.java | 43 ++++++++++ .../org/apache/juneau/BeanMetaFiltered.java | 7 +- .../org/apache/juneau/BeanPropertyMeta.java | 44 ++-------- .../apache/juneau/BeanPropertyMetaExtended.java | 43 ++++++++++ .../org/apache/juneau/ClassMetaExtended.java | 51 ++++++++++++ .../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 +- .../org/apache/juneau/utils/MetadataMap.java | 84 ++++++++++++++++++++ .../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 +++++------ 19 files changed, 342 insertions(+), 172 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/9c6eec75/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/9c6eec75/juneau-core/src/main/java/org/apache/juneau/BeanMetaExtended.java ---------------------------------------------------------------------- diff --git a/juneau-core/src/main/java/org/apache/juneau/BeanMetaExtended.java b/juneau-core/src/main/java/org/apache/juneau/BeanMetaExtended.java new file mode 100644 index 0000000..45fbc06 --- /dev/null +++ b/juneau-core/src/main/java/org/apache/juneau/BeanMetaExtended.java @@ -0,0 +1,43 @@ +/*************************************************************************************************************************** + * Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + ***************************************************************************************************************************/ + +package org.apache.juneau; + +/** + * Defines extended language-specific metadata associated with a bean. + * <p> + * Serializers and parsers can implement their own language-specific metadata on a bean and retrieve + * the metadata using the {@link BeanMeta#getExtendedMeta(Class)} method. + * + */ +public class BeanMetaExtended { + + private final BeanMeta<?> bm; + + /** + * Constructor. + * @param bm The metadata of the bean we're extending. + * @throws BeanRuntimeException If any error occurred trying to construct the metadata. + */ + public BeanMetaExtended(BeanMeta<?> bm) throws BeanRuntimeException { + this.bm = bm; + } + + /** + * Returns the bean metadata that was passed into the constructor. + * @return The bean metadata that was passed into the constructor. + */ + protected BeanMeta<?> getBeanMeta() { + return bm; + } +} http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/9c6eec75/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/9c6eec75/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/9c6eec75/juneau-core/src/main/java/org/apache/juneau/BeanPropertyMetaExtended.java ---------------------------------------------------------------------- diff --git a/juneau-core/src/main/java/org/apache/juneau/BeanPropertyMetaExtended.java b/juneau-core/src/main/java/org/apache/juneau/BeanPropertyMetaExtended.java new file mode 100644 index 0000000..68ea149 --- /dev/null +++ b/juneau-core/src/main/java/org/apache/juneau/BeanPropertyMetaExtended.java @@ -0,0 +1,43 @@ +/*************************************************************************************************************************** + * Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + ***************************************************************************************************************************/ + +package org.apache.juneau; + +/** + * Defines extended language-specific metadata associated with a bean property. + * <p> + * Serializers and parsers can implement their own language-specific metadata on a bean property and retrieve + * the metadata using the {@link BeanPropertyMeta#getExtendedMeta(Class)} method. + * + */ +public class BeanPropertyMetaExtended { + + private final BeanPropertyMeta bpm; + + /** + * Constructor. + * @param bpm The metadata of the bean property we're extending. + * @throws BeanRuntimeException If any error occurred trying to construct the metadata. + */ + public BeanPropertyMetaExtended(BeanPropertyMeta bpm) throws BeanRuntimeException { + this.bpm = bpm; + } + + /** + * Returns the bean property metadata that was passed into the constructor. + * @return The bean property metadata that was passed into the constructor. + */ + protected BeanPropertyMeta getBeanPropertyMeta() { + return bpm; + } +} http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/9c6eec75/juneau-core/src/main/java/org/apache/juneau/ClassMetaExtended.java ---------------------------------------------------------------------- diff --git a/juneau-core/src/main/java/org/apache/juneau/ClassMetaExtended.java b/juneau-core/src/main/java/org/apache/juneau/ClassMetaExtended.java new file mode 100644 index 0000000..12ab579 --- /dev/null +++ b/juneau-core/src/main/java/org/apache/juneau/ClassMetaExtended.java @@ -0,0 +1,51 @@ +/*************************************************************************************************************************** + * Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + ***************************************************************************************************************************/ + +package org.apache.juneau; + +/** + * Defines extended language-specific metadata associated with a class. + * <p> + * Serializers and parsers can implement their own language-specific metadata on a class and retrieve + * the metadata using the {@link ClassMeta#getExtendedMeta(Class)} method. + * + */ +public class ClassMetaExtended { + + private final ClassMeta<?> cm; + + /** + * Constructor. + * @param cm The metadata of the class we're extending. + * @throws BeanRuntimeException If any error occurred trying to construct the metadata. + */ + public ClassMetaExtended(ClassMeta<?> cm) throws BeanRuntimeException { + this.cm = cm; + } + + /** + * Returns the class metadata that was passed into the constructor. + * @return The class metadata that was passed into the constructor. + */ + protected ClassMeta<?> getClassMeta() { + return cm; + } + + /** + * Convenience method for calling {@link ClassMeta#getInnerClass()} on the metadata passed to the constructor. + * @return The class wrapped by this metadata. + */ + protected Class<?> getInnerClass() { + return cm.getInnerClass(); + } +} http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/9c6eec75/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/9c6eec75/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/9c6eec75/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/9c6eec75/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/9c6eec75/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/9c6eec75/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/9c6eec75/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/9c6eec75/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/9c6eec75/juneau-core/src/main/java/org/apache/juneau/utils/MetadataMap.java ---------------------------------------------------------------------- diff --git a/juneau-core/src/main/java/org/apache/juneau/utils/MetadataMap.java b/juneau-core/src/main/java/org/apache/juneau/utils/MetadataMap.java new file mode 100644 index 0000000..0b7682e --- /dev/null +++ b/juneau-core/src/main/java/org/apache/juneau/utils/MetadataMap.java @@ -0,0 +1,84 @@ +/*************************************************************************************************************************** + * Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + ***************************************************************************************************************************/ + +package org.apache.juneau.utils; + +import java.lang.reflect.*; + +import org.apache.juneau.*; +import org.apache.juneau.internal.*; + +/** + * Utility class for quick lookup of class metadata instances. + * <p> + * Class instances are created once and then cached. + * <p> + * Classes must have a constructor that takes in a single argument. + * + * @author james.bognar + */ +public class MetadataMap { + + private Class<?>[] classes = new Class<?>[0]; + private Object[] metadata = new Object[0]; + + + /** + * Constructor. + * + * @param c The metadata class to create. + * @param constructorArg The argument needed to construct the metadata. + * @return The cached metadata object. + */ + @SuppressWarnings("unchecked") + public <T> T get(Class<T> c, Object constructorArg) { + for (int i = 0; i < classes.length; i++) + if (classes[i] == c) + return (T)metadata[i]; + synchronized(this) { + for (int i = 0; i < classes.length; i++) + if (classes[i] == c) + return (T)metadata[i]; + Class<?>[] classes2 = new Class<?>[classes.length + 1]; + Object[] metadata2 = new Object[classes.length + 1]; + for (int i = 0; i < classes.length; i++) { + classes2[i] = classes[i]; + metadata2[i] = metadata[i]; + } + Object o = null; + try { + for (Constructor<?> con : c.getConstructors()) { + Class<?>[] params = con.getParameterTypes(); + if (params.length == 1 && ClassUtils.isParentClass(params[0], constructorArg.getClass())) { + o = con.newInstance(constructorArg); + break; + } + } + } catch (InvocationTargetException e) { + Throwable t = e.getTargetException(); + if (t instanceof RuntimeException) + throw (RuntimeException)t; + throw new RuntimeException(t); + } catch (Exception e) { + throw new RuntimeException(e); + } + if (o == null) + throw new BeanRuntimeException(c, "Could not find a constructor on class with a parameter to handle type {0}", constructorArg.getClass()); + classes2[classes.length] = c; + metadata2[classes.length] = o; + classes = classes2; + metadata = metadata2; + return (T)o; + } + } +} http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/9c6eec75/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/9c6eec75/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/9c6eec75/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/9c6eec75/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();) {
