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

incubator-juneau git commit: Ongoing work for lexicon support.

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 <ja...@gmail.com>
Authored: Tue Aug 30 16:11:57 2016 -0400
Committer: jamesbognar <ja...@gmail.com>
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 (james.bognar@salesforce.com)
- */
-@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());