Repository: incubator-juneau Updated Branches: refs/heads/master 7b4384b02 -> daa17605a
Ongoing work for lexicon support. Project: http://git-wip-us.apache.org/repos/asf/incubator-juneau/repo Commit: http://git-wip-us.apache.org/repos/asf/incubator-juneau/commit/daa17605 Tree: http://git-wip-us.apache.org/repos/asf/incubator-juneau/tree/daa17605 Diff: http://git-wip-us.apache.org/repos/asf/incubator-juneau/diff/daa17605 Branch: refs/heads/master Commit: daa17605a4a87a6db870ec09784f1823c90d76f9 Parents: 7b4384b Author: jamesbognar <[email protected]> Authored: Tue Aug 30 16:11:57 2016 -0400 Committer: jamesbognar <[email protected]> Committed: Wed Aug 31 12:01:02 2016 -0400 ---------------------------------------------------------------------- .../java/org/apache/juneau/BeanContext.java | 8 ++-- .../main/java/org/apache/juneau/BeanMap.java | 16 ++++--- .../org/apache/juneau/BeanPropertyValue.java | 10 ++++- .../main/java/org/apache/juneau/ClassMeta.java | 4 ++ .../apache/juneau/annotation/BeanProperty.java | 2 + .../apache/juneau/annotation/BeanSubType.java | 46 -------------------- .../org/apache/juneau/html/HtmlSerializer.java | 7 +-- .../org/apache/juneau/jena/RdfSerializer.java | 8 ++-- .../org/apache/juneau/json/JsonSerializer.java | 8 ++-- .../juneau/msgpack/MsgPackSerializer.java | 5 ++- .../juneau/serializer/SerializerSession.java | 19 ++++++++ .../juneau/urlencoding/UonSerializer.java | 7 +-- .../urlencoding/UrlEncodingSerializer.java | 12 ++--- .../org/apache/juneau/xml/XmlSerializer.java | 14 +++--- .../java/org/apache/juneau/BeanMapTest.java | 6 +-- 15 files changed, 85 insertions(+), 87 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/daa17605/juneau-core/src/main/java/org/apache/juneau/BeanContext.java ---------------------------------------------------------------------- diff --git a/juneau-core/src/main/java/org/apache/juneau/BeanContext.java b/juneau-core/src/main/java/org/apache/juneau/BeanContext.java index 9b9ce4a..90d2135 100644 --- a/juneau-core/src/main/java/org/apache/juneau/BeanContext.java +++ b/juneau-core/src/main/java/org/apache/juneau/BeanContext.java @@ -446,9 +446,9 @@ public class BeanContext extends Context { */ public static final String BEAN_implClasses_put = "BeanContext.implClasses.map.put"; - public static final String BEAN_classLexicon = "BeanContext.pojoSwaps.list"; - public static final String BEAN_classLexicon_add = "BeanContext.pojoSwaps.list.add"; - public static final String BEAN_classLexicon_remove = "BeanContext.pojoSwaps.list.remove"; + public static final String BEAN_classLexicon = "BeanContext.classLexicon.list"; + public static final String BEAN_classLexicon_add = "BeanContext.classLexicon.list.add"; + public static final String BEAN_classLexicon_remove = "BeanContext.classLexicon.list.remove"; /** * Specifies the default parser to use when converting <code>Strings</code> to POJOs in the {@link BeanContext#convertToType(Object, Class)} method (<code>Class</code>). @@ -620,7 +620,7 @@ public class BeanContext extends Context { } pojoSwaps = lpf.toArray(new PojoSwap[0]); - classLexicon = new ClassLexicon(pm.get(BEAN_pojoSwaps, Class[].class, new Class[0])); + classLexicon = new ClassLexicon(pm.get(BEAN_classLexicon, Class[].class, new Class[0])); implClasses = new TreeMap<Class<?>,Class<?>>(new ClassComparator()); Map<Class,Class> m = pm.getMap(BEAN_implClasses, Class.class, Class.class, null); http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/daa17605/juneau-core/src/main/java/org/apache/juneau/BeanMap.java ---------------------------------------------------------------------- diff --git a/juneau-core/src/main/java/org/apache/juneau/BeanMap.java b/juneau-core/src/main/java/org/apache/juneau/BeanMap.java index 9e39951..0c2235e 100644 --- a/juneau-core/src/main/java/org/apache/juneau/BeanMap.java +++ b/juneau-core/src/main/java/org/apache/juneau/BeanMap.java @@ -392,16 +392,20 @@ public class BeanMap<T> extends AbstractMap<String,Object> implements Delegate<T * <p> * This allows a snapshot of all values to be grabbed from a bean in one call. * - * @param addClassAttr Add a <jk>"_class"</jk> bean property to the returned list. - * @param ignoreNulls Don't return properties whose values are null. + * @param ignoreNulls + * Don't return properties whose values are null. + * @param prependVals + * Additional bean property values to prepended to this list. + * Any <jk>null</jk> values in this list will be ignored. * @return The list of all bean property values. */ - public List<BeanPropertyValue> getValues(final boolean addClassAttr, final boolean ignoreNulls) { + public List<BeanPropertyValue> getValues(final boolean ignoreNulls, BeanPropertyValue...prependVals) { Collection<BeanPropertyMeta> properties = getProperties(); - int capacity = (ignoreNulls && properties.size() > 10) ? 10 : properties.size() + (addClassAttr ? 1 : 0); + int capacity = (ignoreNulls && properties.size() > 10) ? 10 : properties.size() + prependVals.length; List<BeanPropertyValue> l = new ArrayList<BeanPropertyValue>(capacity); - if (addClassAttr) - l.add(new BeanPropertyValue(meta.getClassProperty(), meta.c.getName(), null)); + for (BeanPropertyValue v : prependVals) + if (v != null) + l.add(v); for (BeanPropertyMeta bpm : properties) { try { Object val = bpm.get(this); http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/daa17605/juneau-core/src/main/java/org/apache/juneau/BeanPropertyValue.java ---------------------------------------------------------------------- diff --git a/juneau-core/src/main/java/org/apache/juneau/BeanPropertyValue.java b/juneau-core/src/main/java/org/apache/juneau/BeanPropertyValue.java index 043dcb3..10676e8 100644 --- a/juneau-core/src/main/java/org/apache/juneau/BeanPropertyValue.java +++ b/juneau-core/src/main/java/org/apache/juneau/BeanPropertyValue.java @@ -32,7 +32,7 @@ public class BeanPropertyValue { * @param value The bean property value. * @param thrown The exception thrown by calling the property getter. */ - protected BeanPropertyValue(BeanPropertyMeta pMeta, Object value, Throwable thrown) { + public BeanPropertyValue(BeanPropertyMeta pMeta, Object value, Throwable thrown) { this.pMeta = pMeta; this.value = value; this.thrown = thrown; @@ -47,6 +47,14 @@ public class BeanPropertyValue { } /** + * Returns the bean property metadata. + * @return The bean property metadata. + */ + public final ClassMeta<?> getClassMeta() { + return pMeta.getClassMeta(); + } + + /** * Returns the bean property name. * @return The bean property name. */ http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/daa17605/juneau-core/src/main/java/org/apache/juneau/ClassMeta.java ---------------------------------------------------------------------- diff --git a/juneau-core/src/main/java/org/apache/juneau/ClassMeta.java b/juneau-core/src/main/java/org/apache/juneau/ClassMeta.java index ba31b41..64487cc 100644 --- a/juneau-core/src/main/java/org/apache/juneau/ClassMeta.java +++ b/juneau-core/src/main/java/org/apache/juneau/ClassMeta.java @@ -384,6 +384,10 @@ public final class ClassMeta<T> implements Type { return this; } + public ClassLexicon getClassLexicon() { + return classLexicon; + } + /** * Returns the category of this class. * http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/daa17605/juneau-core/src/main/java/org/apache/juneau/annotation/BeanProperty.java ---------------------------------------------------------------------- diff --git a/juneau-core/src/main/java/org/apache/juneau/annotation/BeanProperty.java b/juneau-core/src/main/java/org/apache/juneau/annotation/BeanProperty.java index 81a3b0d..9fa2557 100644 --- a/juneau-core/src/main/java/org/apache/juneau/annotation/BeanProperty.java +++ b/juneau-core/src/main/java/org/apache/juneau/annotation/BeanProperty.java @@ -167,5 +167,7 @@ public @interface BeanProperty { * </dl> */ String[] properties() default {}; + + Class<?>[] lexicon() default {}; } http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/daa17605/juneau-core/src/main/java/org/apache/juneau/annotation/BeanSubType.java ---------------------------------------------------------------------- diff --git a/juneau-core/src/main/java/org/apache/juneau/annotation/BeanSubType.java b/juneau-core/src/main/java/org/apache/juneau/annotation/BeanSubType.java deleted file mode 100644 index f4486a9..0000000 --- a/juneau-core/src/main/java/org/apache/juneau/annotation/BeanSubType.java +++ /dev/null @@ -1,46 +0,0 @@ -/*************************************************************************************************************************** - * 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.annotation; - -import static java.lang.annotation.RetentionPolicy.*; - -import java.lang.annotation.*; - -/** - * Maps a bean subclass with a string identifier. - * <p> - * Used in conjunction with {@link Bean#subTypes()} for defining mappings of bean subclasses with string identifiers. - * - * @author James Bognar ([email protected]) - */ -@Documented -@Target({}) -@Retention(RUNTIME) -@Inherited -public @interface BeanSubType { - - /** - * The bean subclass. - * <p> - * Must be a subclass or subinterface of the parent bean. - */ - Class<?> type(); - - /** - * A string identifier for this subtype. - * <p> - * This identifier is used in conjunction with the {@link Bean#subTypeProperty()} during serialization - * to create a <code>{subType:<js>'id'</js>}</code> property on the serialized object. - */ - String id(); -} \ No newline at end of file http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/daa17605/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 8b8c070..4d06376 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 @@ -344,8 +344,9 @@ public class HtmlSerializer extends XmlSerializer { out.eTag(i+1, "tr").nl(); } - for (BeanPropertyValue p : m.getValues(false, session.isTrimNulls())) { + for (BeanPropertyValue p : m.getValues(session.isTrimNulls())) { BeanPropertyMeta pMeta = p.getMeta(); + ClassMeta<?> cMeta = p.getClassMeta(); String key = p.getName(); Object value = p.getValue(); @@ -353,7 +354,7 @@ public class HtmlSerializer extends XmlSerializer { if (t != null) session.addBeanGetterWarning(pMeta, t); - if (session.canIgnoreValue(pMeta.getClassMeta(), key, value)) + if (session.canIgnoreValue(cMeta, key, value)) continue; out.sTag(i+1, "tr").nl(); @@ -362,7 +363,7 @@ public class HtmlSerializer extends XmlSerializer { out.eTag(i+2, "td").nl(); out.sTag(i+2, "td").nl(); try { - serializeAnything(session, out, value, p.getMeta().getClassMeta(), key, 2, pMeta); + serializeAnything(session, out, value, cMeta, key, 2, pMeta); } catch (SerializeException e) { throw e; } catch (Error e) { http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/daa17605/juneau-core/src/main/java/org/apache/juneau/jena/RdfSerializer.java ---------------------------------------------------------------------- diff --git a/juneau-core/src/main/java/org/apache/juneau/jena/RdfSerializer.java b/juneau-core/src/main/java/org/apache/juneau/jena/RdfSerializer.java index bdc7e95..fd37609 100644 --- a/juneau-core/src/main/java/org/apache/juneau/jena/RdfSerializer.java +++ b/juneau-core/src/main/java/org/apache/juneau/jena/RdfSerializer.java @@ -325,11 +325,11 @@ public class RdfSerializer extends WriterSerializer { } private void serializeBeanMap(RdfSerializerSession session, BeanMap<?> m, Resource r) throws SerializeException { - List<BeanPropertyValue> l = m.getValues(false, session.isTrimNulls()); + List<BeanPropertyValue> l = m.getValues(session.isTrimNulls()); Collections.reverse(l); for (BeanPropertyValue bpv : l) { BeanPropertyMeta pMeta = bpv.getMeta(); - ClassMeta<?> cm = pMeta.getClassMeta(); + ClassMeta<?> cMeta = pMeta.getClassMeta(); if (pMeta.getExtendedMeta(RdfBeanPropertyMeta.class).isBeanUri()) continue; @@ -340,7 +340,7 @@ public class RdfSerializer extends WriterSerializer { if (t != null) session.addBeanGetterWarning(pMeta, t); - if (session.canIgnoreValue(cm, key, value)) + if (session.canIgnoreValue(cMeta, key, value)) continue; BeanPropertyMeta bpm = bpv.getMeta(); @@ -353,7 +353,7 @@ public class RdfSerializer extends WriterSerializer { session.addModelPrefix(ns); Property p = session.getModel().createProperty(ns.getUri(), session.encodeElementName(key)); - RDFNode n = serializeAnything(session, value, pMeta.isUri(), cm, key, pMeta, r); + RDFNode n = serializeAnything(session, value, pMeta.isUri(), cMeta, key, pMeta, r); if (n != null) r.addProperty(p, n); } http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/daa17605/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 05ece00..7ae0ac5 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 @@ -295,16 +295,16 @@ public class JsonSerializer extends WriterSerializer { out.append('{'); boolean addComma = false; - - for (BeanPropertyValue p : m.getValues(addClassAttr, session.isTrimNulls())) { + for (BeanPropertyValue p : m.getValues(session.isTrimNulls(), addClassAttr ? session.createBeanClassProperty(m, null) : null)) { BeanPropertyMeta pMeta = p.getMeta(); + ClassMeta<?> cMeta = p.getClassMeta(); String key = p.getName(); Object value = p.getValue(); Throwable t = p.getThrown(); if (t != null) session.addBeanGetterWarning(pMeta, t); - if (session.canIgnoreValue(pMeta.getClassMeta(), key, value)) + if (session.canIgnoreValue(cMeta, key, value)) continue; if (addComma) @@ -312,7 +312,7 @@ public class JsonSerializer extends WriterSerializer { out.cr(depth).attr(key).append(':').s(); - serializeAnything(session, out, value, pMeta.getClassMeta(), key, pMeta); + serializeAnything(session, out, value, cMeta, key, pMeta); addComma = true; } http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/daa17605/juneau-core/src/main/java/org/apache/juneau/msgpack/MsgPackSerializer.java ---------------------------------------------------------------------- diff --git a/juneau-core/src/main/java/org/apache/juneau/msgpack/MsgPackSerializer.java b/juneau-core/src/main/java/org/apache/juneau/msgpack/MsgPackSerializer.java index f66452f..340ff78 100644 --- a/juneau-core/src/main/java/org/apache/juneau/msgpack/MsgPackSerializer.java +++ b/juneau-core/src/main/java/org/apache/juneau/msgpack/MsgPackSerializer.java @@ -162,7 +162,7 @@ public class MsgPackSerializer extends OutputStreamSerializer { private void serializeBeanMap(MsgPackSerializerSession session, MsgPackOutputStream out, final BeanMap<?> m, boolean addClassAttr) throws Exception { - List<BeanPropertyValue> values = m.getValues(addClassAttr, session.isTrimNulls()); + List<BeanPropertyValue> values = m.getValues(session.isTrimNulls(), addClassAttr ? session.createBeanClassProperty(m, null) : null); int size = values.size(); for (BeanPropertyValue p : values) @@ -172,6 +172,7 @@ public class MsgPackSerializer extends OutputStreamSerializer { for (BeanPropertyValue p : values) { BeanPropertyMeta pMeta = p.getMeta(); + ClassMeta<?> cMeta = p.getClassMeta(); String key = p.getName(); Object value = p.getValue(); Throwable t = p.getThrown(); @@ -179,7 +180,7 @@ public class MsgPackSerializer extends OutputStreamSerializer { session.addBeanGetterWarning(pMeta, t); else { serializeAnything(session, out, key, null, null, null); - serializeAnything(session, out, value, pMeta == null ? session.getBeanContext().string() : pMeta.getClassMeta(), key, pMeta); + serializeAnything(session, out, value, cMeta, key, pMeta); } } } http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/daa17605/juneau-core/src/main/java/org/apache/juneau/serializer/SerializerSession.java ---------------------------------------------------------------------- diff --git a/juneau-core/src/main/java/org/apache/juneau/serializer/SerializerSession.java b/juneau-core/src/main/java/org/apache/juneau/serializer/SerializerSession.java index 3ea28e3..47d0c3d 100644 --- a/juneau-core/src/main/java/org/apache/juneau/serializer/SerializerSession.java +++ b/juneau-core/src/main/java/org/apache/juneau/serializer/SerializerSession.java @@ -740,4 +740,23 @@ public class SerializerSession extends Session { m.put("stack", stack); return m; } + + /** + * Create a "_class" property that represents the name of the bean. + * + * @param m + * The bean map to create a class property on. + * @param lexicon + * The bean/pojo lexicon map to use to resolve the name of the bean class. + * @return + * A new bean property value. + */ + public BeanPropertyValue createBeanClassProperty(BeanMap<?> m, ClassLexicon lexicon) { + BeanMeta<?> bm = m.getMeta(); + Class<?> c = bm.getClassMeta().getInnerClass(); + String name = (lexicon == null ? null : lexicon.getNameForClass(c)); + if (name == null) + name = c.getName(); + return new BeanPropertyValue(bm.getClassProperty(), name, null); + } } http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/daa17605/juneau-core/src/main/java/org/apache/juneau/urlencoding/UonSerializer.java ---------------------------------------------------------------------- diff --git a/juneau-core/src/main/java/org/apache/juneau/urlencoding/UonSerializer.java b/juneau-core/src/main/java/org/apache/juneau/urlencoding/UonSerializer.java index b5204d1..dbdb939 100644 --- a/juneau-core/src/main/java/org/apache/juneau/urlencoding/UonSerializer.java +++ b/juneau-core/src/main/java/org/apache/juneau/urlencoding/UonSerializer.java @@ -373,8 +373,9 @@ public class UonSerializer extends WriterSerializer { boolean addComma = false; - for (BeanPropertyValue p : m.getValues(addClassAttr, session.isTrimNulls())) { + for (BeanPropertyValue p : m.getValues(session.isTrimNulls(), addClassAttr ? session.createBeanClassProperty(m, null) : null)) { BeanPropertyMeta pMeta = p.getMeta(); + ClassMeta<?> cMeta = p.getClassMeta(); String key = p.getName(); Object value = p.getValue(); @@ -382,7 +383,7 @@ public class UonSerializer extends WriterSerializer { if (t != null) session.addBeanGetterWarning(pMeta, t); - if (session.canIgnoreValue(pMeta.getClassMeta(), key, value)) + if (session.canIgnoreValue(cMeta, key, value)) continue; if (addComma) @@ -390,7 +391,7 @@ public class UonSerializer extends WriterSerializer { out.cr(depth).appendObject(key, false, false, false).append('='); - serializeAnything(session, out, value, pMeta.getClassMeta(), key, pMeta, false, false); + serializeAnything(session, out, value, cMeta, key, pMeta, false, false); addComma = true; } http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/daa17605/juneau-core/src/main/java/org/apache/juneau/urlencoding/UrlEncodingSerializer.java ---------------------------------------------------------------------- diff --git a/juneau-core/src/main/java/org/apache/juneau/urlencoding/UrlEncodingSerializer.java b/juneau-core/src/main/java/org/apache/juneau/urlencoding/UrlEncodingSerializer.java index 4b9f4fd..bf10562 100644 --- a/juneau-core/src/main/java/org/apache/juneau/urlencoding/UrlEncodingSerializer.java +++ b/juneau-core/src/main/java/org/apache/juneau/urlencoding/UrlEncodingSerializer.java @@ -326,8 +326,9 @@ public class UrlEncodingSerializer extends UonSerializer { boolean addAmp = false; - for (BeanPropertyValue p : m.getValues(addClassAttr, session.isTrimNulls())) { + for (BeanPropertyValue p : m.getValues(session.isTrimNulls(), addClassAttr ? session.createBeanClassProperty(m, null) : null)) { BeanPropertyMeta pMeta = p.getMeta(); + ClassMeta<?> cMeta = p.getClassMeta(); String key = p.getName(); Object value = p.getValue(); @@ -335,21 +336,20 @@ public class UrlEncodingSerializer extends UonSerializer { if (t != null) session.addBeanGetterWarning(pMeta, t); - if (session.canIgnoreValue(pMeta.getClassMeta(), key, value)) + if (session.canIgnoreValue(cMeta, key, value)) continue; if (value != null && session.shouldUseExpandedParams(pMeta)) { - ClassMeta cm = pMeta.getClassMeta(); // Transformed object array bean properties may be transformed resulting in ArrayLists, // so we need to check type if we think it's an array. - Iterator i = (cm.isCollection() || value instanceof Collection) ? ((Collection)value).iterator() : ArrayUtils.iterator(value); + Iterator i = (cMeta.isCollection() || value instanceof Collection) ? ((Collection)value).iterator() : ArrayUtils.iterator(value); while (i.hasNext()) { if (addAmp) out.cr(depth).append('&'); out.appendObject(key, false, true, true).append('='); - super.serializeAnything(session, out, i.next(), pMeta.getClassMeta().getElementType(), key, pMeta, false, true); + super.serializeAnything(session, out, i.next(), cMeta.getElementType(), key, pMeta, false, true); addAmp = true; } @@ -359,7 +359,7 @@ public class UrlEncodingSerializer extends UonSerializer { out.appendObject(key, false, true, true).append('='); - super.serializeAnything(session, out, value, pMeta.getClassMeta(), key, pMeta, false, true); + super.serializeAnything(session, out, value, cMeta, key, pMeta, false, true); addAmp = true; } http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/daa17605/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 0dcbf0b..61b08b1 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 @@ -262,7 +262,7 @@ public class XmlSerializer extends WriterSerializer { findNsfMappings(session, o2); } if (bm != null) { - for (BeanPropertyValue p : bm.getValues(false, session.isTrimNulls())) { + for (BeanPropertyValue p : bm.getValues(session.isTrimNulls())) { Namespace ns = p.getMeta().getExtendedMeta(XmlBeanPropertyMeta.class).getNamespace(); if (ns != null && ns.uri != null) @@ -530,20 +530,22 @@ public class XmlSerializer extends WriterSerializer { boolean hasChildren = false; BeanMeta<?> bm = m.getMeta(); - List<BeanPropertyValue> lp = m.getValues(false, session.isTrimNulls()); + List<BeanPropertyValue> lp = m.getValues(session.isTrimNulls()); Map<String,BeanPropertyMeta> xmlAttrs = bm.getExtendedMeta(XmlBeanMeta.class).getXmlAttrProperties(); Object content = null; for (BeanPropertyValue p : lp) { if (xmlAttrs.containsKey(p.getName())) { BeanPropertyMeta pMeta = p.getMeta(); + ClassMeta<?> cMeta = p.getClassMeta(); + String key = p.getName(); Object value = p.getValue(); Throwable t = p.getThrown(); if (t != null) session.addBeanGetterWarning(pMeta, t); - if (session.canIgnoreValue(pMeta.getClassMeta(), key, value)) + if (session.canIgnoreValue(cMeta, key, value)) continue; Namespace ns = (session.isEnableNamespaces() && pMeta.getExtendedMeta(XmlBeanPropertyMeta.class).getNamespace() != elementNs ? pMeta.getExtendedMeta(XmlBeanPropertyMeta.class).getNamespace() : null); @@ -559,6 +561,8 @@ public class XmlSerializer extends WriterSerializer { for (BeanPropertyValue p : lp) { BeanPropertyMeta pMeta = p.getMeta(); + ClassMeta<?> cMeta = p.getClassMeta(); + XmlFormat xf = pMeta.getExtendedMeta(XmlBeanPropertyMeta.class).getXmlFormat(); if (xf == CONTENT) { @@ -573,14 +577,14 @@ public class XmlSerializer extends WriterSerializer { if (t != null) session.addBeanGetterWarning(pMeta, t); - if (session.canIgnoreValue(pMeta.getClassMeta(), key, value)) + if (session.canIgnoreValue(cMeta, key, value)) continue; if (! hasChildren) { hasChildren = true; out.appendIf(! isCollapsed, '>').nl(); } - serializeAnything(session, out, value, pMeta.getClassMeta(), key, pMeta.getExtendedMeta(XmlBeanPropertyMeta.class).getNamespace(), false, pMeta.getExtendedMeta(XmlBeanPropertyMeta.class).getXmlFormat(), pMeta); + serializeAnything(session, out, value, cMeta, key, pMeta.getExtendedMeta(XmlBeanPropertyMeta.class).getNamespace(), false, pMeta.getExtendedMeta(XmlBeanPropertyMeta.class).getXmlFormat(), pMeta); } } if ((! hasContent) || session.canIgnoreValue(string(), null, content)) http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/daa17605/juneau-core/src/test/java/org/apache/juneau/BeanMapTest.java ---------------------------------------------------------------------- diff --git a/juneau-core/src/test/java/org/apache/juneau/BeanMapTest.java b/juneau-core/src/test/java/org/apache/juneau/BeanMapTest.java index e6f6f28..8db2cff 100755 --- a/juneau-core/src/test/java/org/apache/juneau/BeanMapTest.java +++ b/juneau-core/src/test/java/org/apache/juneau/BeanMapTest.java @@ -1895,16 +1895,16 @@ public class BeanMapTest { Z z = new Z(); BeanMap<Z> bm = BeanContext.DEFAULT.forBean(z); - Iterator i = bm.getValues(false, true).iterator(); + Iterator i = bm.getValues(true).iterator(); assertFalse(i.hasNext()); z.b = ""; - i = bm.getValues(false, true).iterator(); + i = bm.getValues(true).iterator(); assertTrue(i.hasNext()); i.next(); assertFalse(i.hasNext()); - i = bm.getValues(false, false).iterator(); + i = bm.getValues(false).iterator(); assertTrue(i.hasNext()); i.next(); assertTrue(i.hasNext());
