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/27 19:04:26 UTC

incubator-juneau git commit: Simplify construction of Transform objects.

Repository: incubator-juneau
Updated Branches:
  refs/heads/master 0161c8295 -> 3a87c80b0


Simplify construction of Transform objects.

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

Branch: refs/heads/master
Commit: 3a87c80b0a17d4d8dc3fea68ff15bb05c7f6b7d6
Parents: 0161c82
Author: jamesbognar <ja...@gmail.com>
Authored: Sat Aug 27 12:33:09 2016 -0400
Committer: jamesbognar <ja...@gmail.com>
Committed: Sat Aug 27 15:04:19 2016 -0400

----------------------------------------------------------------------
 .../java/org/apache/juneau/BeanContext.java     | 29 +++----
 .../org/apache/juneau/BeanPropertyMeta.java     | 18 ++--
 .../main/java/org/apache/juneau/ClassMeta.java  |  9 +-
 .../main/java/org/apache/juneau/ObjectMap.java  |  2 +-
 .../org/apache/juneau/dto/cognos/DataSet.java   |  2 +-
 .../apache/juneau/dto/jsonschema/Schema.java    | 12 +--
 .../java/org/apache/juneau/html/HtmlParser.java |  2 +-
 .../org/apache/juneau/html/HtmlSerializer.java  |  6 +-
 .../java/org/apache/juneau/jena/RdfParser.java  |  2 +-
 .../org/apache/juneau/jena/RdfSerializer.java   |  4 +-
 .../java/org/apache/juneau/json/JsonParser.java |  4 +-
 .../org/apache/juneau/json/JsonSerializer.java  |  2 +-
 .../apache/juneau/msgpack/MsgPackParser.java    |  2 +-
 .../juneau/msgpack/MsgPackSerializer.java       |  2 +-
 .../java/org/apache/juneau/parser/Parser.java   |  2 +-
 .../juneau/serializer/SerializerSession.java    |  2 +-
 .../org/apache/juneau/transform/PojoSwap.java   | 90 +++++++++++++++-----
 .../apache/juneau/transform/SurrogateSwap.java  |  2 +-
 .../org/apache/juneau/transform/Transform.java  | 33 -------
 .../juneau/transforms/ByteArrayBase64Swap.java  |  3 +-
 .../juneau/transforms/CalendarLongSwap.java     |  4 +-
 .../juneau/transforms/CalendarMapSwap.java      |  4 +-
 .../apache/juneau/transforms/ReaderSwap.java    |  5 +-
 .../transforms/XMLGregorianCalendarSwap.java    |  3 +-
 .../apache/juneau/urlencoding/UonParser.java    |  2 +-
 .../juneau/urlencoding/UonSerializer.java       |  2 +-
 .../juneau/urlencoding/UrlEncodingParser.java   |  2 +-
 .../urlencoding/UrlEncodingSerializer.java      |  2 +-
 .../java/org/apache/juneau/xml/XmlParser.java   |  2 +-
 .../org/apache/juneau/xml/XmlSerializer.java    |  2 +-
 .../java/org/apache/juneau/PojoSwapTest.java    |  2 +-
 .../a/rttests/RoundTripTransformBeansTest.java  |  2 +-
 .../apache/juneau/server/TestTransforms.java    |  7 +-
 .../server/converters/Introspectable.java       |  2 +-
 .../juneau/server/converters/Queryable.java     |  2 +-
 .../juneau/server/converters/Traversable.java   |  2 +-
 36 files changed, 132 insertions(+), 141 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/3a87c80b/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 f32e46e..a43c36b 100644
--- a/juneau-core/src/main/java/org/apache/juneau/BeanContext.java
+++ b/juneau-core/src/main/java/org/apache/juneau/BeanContext.java
@@ -583,15 +583,10 @@ public class BeanContext extends Context {
  		for (Class<?> c : pm.get(BEAN_transforms, Class[].class, new Class[0])) {
 			if (isParentClass(Transform.class, c)) {
 				try {
-					if (isParentClass(BeanFilter.class, c)) {
-						BeanFilter<?> f = (BeanFilter<?>)c.newInstance();
-						//f.setBeanContext(this);
-						lbf.add(f);
-					} else if (isParentClass(PojoSwap.class, c)) {
-						PojoSwap<?,?> f = (PojoSwap<?,?>)c.newInstance();
-						f.setBeanContext(this);
-						lpf.add(f);
-					}
+					if (isParentClass(BeanFilter.class, c)) 
+						lbf.add((BeanFilter<?>)c.newInstance());
+					else if (isParentClass(PojoSwap.class, c)) 
+						lpf.add((PojoSwap<?,?>)c.newInstance());
 				} catch (Exception e) {
 					throw new RuntimeException(e);
 				}
@@ -599,16 +594,12 @@ public class BeanContext extends Context {
  				if (! c.getClass().isInterface()) {
 					List<SurrogateSwap<?,?>> l = SurrogateSwap.findTransforms(c);
 					if (! l.isEmpty()) {
-						for (SurrogateSwap<?,?> f : l) {
-							f.setBeanContext(this);
+						for (SurrogateSwap<?,?> f : l)
 							lpf.add(f);
-						}
 						continue;
 					}
 				}
-				BeanFilter<?> f = new InterfaceBeanFilter(c);
-				f.setBeanContext(this);
-				lbf.add(f);
+ 				lbf.add(new InterfaceBeanFilter(c));
 			}
 		}
  		beanFilters = lbf.toArray(new BeanFilter[0]);
@@ -1736,17 +1727,17 @@ public class BeanContext extends Context {
 
 			if (type.getPojoSwap() != null) {
 				PojoSwap f = type.getPojoSwap();
-				Class<?> nc = f.getNormalClass(), fc = f.getTransformedClass();
+				Class<?> nc = f.getNormalClass(), fc = f.getSwapClass();
 				if (isParentClass(nc, tc) && isParentClass(fc, value.getClass()))
-					return (T)f.unswap(value, type);
+					return (T)f.unswap(value, type, this);
 			}
 
 			ClassMeta<?> vt = getClassMetaForObject(value);
 			if (vt.getPojoSwap() != null) {
 				PojoSwap f = vt.getPojoSwap();
-				Class<?> nc = f.getNormalClass(), fc = f.getTransformedClass();
+				Class<?> nc = f.getNormalClass(), fc = f.getSwapClass();
 				if (isParentClass(nc, vt.getInnerClass()) && isParentClass(fc, tc))
-					return (T)f.swap(value);
+					return (T)f.swap(value, this);
 			}
 
 			if (type.isPrimitive()) {

http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/3a87c80b/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 52c7898..7a52c86 100644
--- a/juneau-core/src/main/java/org/apache/juneau/BeanPropertyMeta.java
+++ b/juneau-core/src/main/java/org/apache/juneau/BeanPropertyMeta.java
@@ -138,7 +138,7 @@ public class BeanPropertyMeta {
 	 */
 	public ClassMeta<?> getClassMeta() {
 		if (typeMeta == null)
-			typeMeta = (transform != null ? transform.getTransformedClassMeta() : rawTypeMeta == null ? beanMeta.ctx.object() : rawTypeMeta.getTransformedClassMeta());
+			typeMeta = (transform != null ? transform.getSwapClassMeta(beanMeta.ctx) : rawTypeMeta == null ? beanMeta.ctx.object() : rawTypeMeta.getTransformedClassMeta());
 		return typeMeta;
 	}
 
@@ -305,9 +305,7 @@ public class BeanPropertyMeta {
 			return null;
 		try {
 			if (ClassUtils.isParentClass(PojoSwap.class, c)) {
-				PojoSwap f = (PojoSwap)c.newInstance();
-				f.setBeanContext(this.beanMeta.ctx);
-				return f;
+				return (PojoSwap)c.newInstance();
 			}
 			throw new RuntimeException("TODO - Surrogate swaps not yet supported.");
 		} catch (Exception e) {
@@ -551,8 +549,8 @@ public class BeanPropertyMeta {
 				}
 
 			} else {
-				if (transform != null && value != null && isParentClass(transform.getTransformedClass(), value.getClass())) {
-						value = transform.unswap(value, rawTypeMeta);
+				if (transform != null && value != null && isParentClass(transform.getSwapClass(), value.getClass())) {
+						value = transform.unswap(value, rawTypeMeta, beanMeta.ctx);
 				} else {
 						value = beanMeta.ctx.convertToType(value, rawTypeMeta);
 					}
@@ -724,7 +722,7 @@ public class BeanPropertyMeta {
 	private Object transform(Object o) throws SerializeException {
 		// First use transform defined via @BeanProperty.
 		if (transform != null)
-			return transform.swap(o);
+			return transform.swap(o, beanMeta.ctx);
 		if (o == null)
 			return null;
 		// Otherwise, look it up via bean context.
@@ -733,14 +731,14 @@ public class BeanPropertyMeta {
 			ClassMeta<?> cm = rawTypeMeta.innerClass == c ? rawTypeMeta : beanMeta.ctx.getClassMeta(c);
 			PojoSwap f = cm.getPojoSwap();
 			if (f != null)
-				return f.swap(o);
+				return f.swap(o, beanMeta.ctx);
 		}
 		return o;
 	}
 
 	private Object unswap(Object o) throws ParseException {
 		if (transform != null)
-			return transform.unswap(o, rawTypeMeta);
+			return transform.unswap(o, rawTypeMeta, beanMeta.ctx);
 		if (o == null)
 			return null;
 		if (rawTypeMeta.hasChildPojoSwaps()) {
@@ -748,7 +746,7 @@ public class BeanPropertyMeta {
 			ClassMeta<?> cm = rawTypeMeta.innerClass == c ? rawTypeMeta : beanMeta.ctx.getClassMeta(c);
 			PojoSwap f = cm.getPojoSwap();
 			if (f != null)
-				return f.unswap(o, rawTypeMeta);
+				return f.unswap(o, rawTypeMeta, beanMeta.ctx);
 		}
 		return o;
 	}

http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/3a87c80b/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 d234b84..c603855 100644
--- a/juneau-core/src/main/java/org/apache/juneau/ClassMeta.java
+++ b/juneau-core/src/main/java/org/apache/juneau/ClassMeta.java
@@ -133,7 +133,7 @@ public final class ClassMeta<T> implements Type {
 					beanFilter = (BeanFilter)transform;
 				else
 					pojoSwap = (PojoSwap)transform;
-				transformedClassMeta = (pojoSwap == null ? this : beanContext.getClassMeta(pojoSwap.getTransformedClass()));
+				transformedClassMeta = (pojoSwap == null ? this : beanContext.getClassMeta(pojoSwap.getSwapClass()));
 			}
 			if (transformedClassMeta == null)
 				transformedClassMeta = this;
@@ -435,11 +435,8 @@ public final class ClassMeta<T> implements Type {
 			if (b != null) {
 				Class<?> c = b.swap();
 				if (c != Null.class) {
-					if (ClassUtils.isParentClass(PojoSwap.class, c)) {
-						Transform f = (Transform)c.newInstance();
-						f.setBeanContext(context);
-						return f;
-					}
+					if (ClassUtils.isParentClass(PojoSwap.class, c)) 
+						return (Transform)c.newInstance();
 					throw new RuntimeException("TODO - Surrogate classes not yet supported.");
 				}
 			}

http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/3a87c80b/juneau-core/src/main/java/org/apache/juneau/ObjectMap.java
----------------------------------------------------------------------
diff --git a/juneau-core/src/main/java/org/apache/juneau/ObjectMap.java b/juneau-core/src/main/java/org/apache/juneau/ObjectMap.java
index 507c827..7237cf5 100644
--- a/juneau-core/src/main/java/org/apache/juneau/ObjectMap.java
+++ b/juneau-core/src/main/java/org/apache/juneau/ObjectMap.java
@@ -361,7 +361,7 @@ public class ObjectMap extends LinkedHashMap<String,Object> {
 		if (o == null)
 			return null;
 		PojoSwap f = transform;
-		return (T)f.unswap(o, null);
+		return (T)f.unswap(o, null, beanContext);
 	}
 
 	/**

http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/3a87c80b/juneau-core/src/main/java/org/apache/juneau/dto/cognos/DataSet.java
----------------------------------------------------------------------
diff --git a/juneau-core/src/main/java/org/apache/juneau/dto/cognos/DataSet.java b/juneau-core/src/main/java/org/apache/juneau/dto/cognos/DataSet.java
index 77c770f..66ed6c8 100644
--- a/juneau-core/src/main/java/org/apache/juneau/dto/cognos/DataSet.java
+++ b/juneau-core/src/main/java/org/apache/juneau/dto/cognos/DataSet.java
@@ -112,7 +112,7 @@ public class DataSet {
 					for (Column col : columns) {
 						Object v;
 						if (col.transform != null)
-							v = col.transform.swap(o2);
+							v = col.transform.swap(o2, beanContext);
 						else
 							v = m.get(col.getName());
 						r.add(v == null ? null : v.toString());

http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/3a87c80b/juneau-core/src/main/java/org/apache/juneau/dto/jsonschema/Schema.java
----------------------------------------------------------------------
diff --git a/juneau-core/src/main/java/org/apache/juneau/dto/jsonschema/Schema.java b/juneau-core/src/main/java/org/apache/juneau/dto/jsonschema/Schema.java
index bcbee9d..45dcf6c 100644
--- a/juneau-core/src/main/java/org/apache/juneau/dto/jsonschema/Schema.java
+++ b/juneau-core/src/main/java/org/apache/juneau/dto/jsonschema/Schema.java
@@ -300,8 +300,7 @@ public class Schema {
 		}
 
 		@Override /* PojoSwap */
-		public Object unswap(Object o, ClassMeta<?> hint) throws ParseException {
-			BeanContext bc = getBeanContext();
+		public Object unswap(Object o, ClassMeta<?> hint, BeanContext bc) throws ParseException {
 			ClassMeta<?> cm = (o instanceof Collection ? bc.getClassMeta(JsonTypeArray.class) : bc.getClassMeta(JsonType.class));
 			return bc.convertToType(o, cm);
 		}
@@ -561,8 +560,7 @@ public class Schema {
 		}
 
 		@Override /* PojoSwap */
-		public Object unswap(Object o, ClassMeta<?> hint) throws ParseException {
-			BeanContext bc = getBeanContext();
+		public Object unswap(Object o, ClassMeta<?> hint, BeanContext bc) throws ParseException {
 			ClassMeta<?> cm = (o instanceof Collection ? bc.getClassMeta(SchemaArray.class) : bc.getClassMeta(Schema.class));
 			return bc.convertToType(o, cm);
 		}
@@ -856,8 +854,7 @@ public class Schema {
 		}
 
 		@Override /* PojoSwap */
-		public Object unswap(Object o, ClassMeta<?> hint) throws ParseException {
-			BeanContext bc = getBeanContext();
+		public Object unswap(Object o, ClassMeta<?> hint, BeanContext bc) throws ParseException {
 			ClassMeta<?> cm = (o instanceof Collection ? bc.getClassMeta(SchemaArray.class) : bc.getClassMeta(Boolean.class));
 			return bc.convertToType(o, cm);
 		}
@@ -1101,8 +1098,7 @@ public class Schema {
 		}
 
 		@Override /* PojoSwap */
-		public Object unswap(Object o, ClassMeta<?> hint) throws ParseException {
-			BeanContext bc = getBeanContext();
+		public Object unswap(Object o, ClassMeta<?> hint, BeanContext bc) throws ParseException {
 			ClassMeta<?> cm = (o instanceof Boolean ? bc.getClassMeta(Boolean.class) : bc.getClassMeta(Schema.class));
 			return bc.convertToType(o, cm);
 		}

http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/3a87c80b/juneau-core/src/main/java/org/apache/juneau/html/HtmlParser.java
----------------------------------------------------------------------
diff --git a/juneau-core/src/main/java/org/apache/juneau/html/HtmlParser.java b/juneau-core/src/main/java/org/apache/juneau/html/HtmlParser.java
index 6cdc4cd..3f74cd4 100644
--- a/juneau-core/src/main/java/org/apache/juneau/html/HtmlParser.java
+++ b/juneau-core/src/main/java/org/apache/juneau/html/HtmlParser.java
@@ -195,7 +195,7 @@ public final class HtmlParser extends ReaderParser {
 
 
 		if (transform != null && o != null)
-			o = transform.unswap(o, nt);
+			o = transform.unswap(o, nt, bc);
 
 		if (outer != null)
 			setParent(nt, o, outer);

http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/3a87c80b/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 664f266..361509f 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
@@ -224,7 +224,7 @@ public class HtmlSerializer extends XmlSerializer {
 			// Transform if necessary
 			PojoSwap transform = aType.getPojoSwap();
 			if (transform != null) {
-				o = transform.swap(o);
+				o = transform.swap(o, bc);
 
 				// If the transforms getTransformedClass() method returns Object, we need to figure out
 				// the actual type now.
@@ -411,7 +411,7 @@ public class HtmlSerializer extends XmlSerializer {
 
 				if (cm != null && cm.getPojoSwap() != null) {
 					PojoSwap f = cm.getPojoSwap();
-					o = f.swap(o);
+					o = f.swap(o, bc);
 					cm = cm.getTransformedClassMeta();
 				}
 
@@ -489,7 +489,7 @@ public class HtmlSerializer extends XmlSerializer {
 		ClassMeta<?> cm = bc.getClassMetaForObject(o1);
 		if (cm.getPojoSwap() != null) {
 			PojoSwap f = cm.getPojoSwap();
-			o1 = f.swap(o1);
+			o1 = f.swap(o1, bc);
 			cm = cm.getTransformedClassMeta();
 		}
 		if (cm == null || ! (cm.isMap() || cm.isBean()))

http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/3a87c80b/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 3b7ae14..d968f61 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
@@ -353,7 +353,7 @@ public class RdfParser extends ReaderParser {
 		}
 
 		if (transform != null && o != null)
-			o = transform.unswap(o, nt);
+			o = transform.unswap(o, nt, bc);
 
 		if (outer != null)
 			setParent(nt, o, outer);

http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/3a87c80b/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 5f464e1..3612162 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
@@ -182,7 +182,7 @@ public class RdfSerializer extends WriterSerializer {
 			// Transform if necessary
 			PojoSwap transform = aType.getPojoSwap();
 			if (transform != null) {
-				o = transform.swap(o);
+				o = transform.swap(o, bc);
 
 				// If the transforms getTransformedClass() method returns Object, we need to figure out
 				// the actual type now.
@@ -244,7 +244,7 @@ public class RdfSerializer extends WriterSerializer {
 			RdfCollectionFormat f = session.getCollectionFormat();
 			RdfClassMeta rcm = gType.getExtendedMeta(RdfClassMeta.class);
 			if (rcm.getCollectionFormat() != RdfCollectionFormat.DEFAULT)
-				f = rcm.getCollectionFormat(); 
+				f = rcm.getCollectionFormat();
 			if (bpm != null && bpm.getExtendedMeta(RdfBeanPropertyMeta.class).getCollectionFormat() != RdfCollectionFormat.DEFAULT)
 				f = bpm.getExtendedMeta(RdfBeanPropertyMeta.class).getCollectionFormat();
 			switch (f) {

http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/3a87c80b/juneau-core/src/main/java/org/apache/juneau/json/JsonParser.java
----------------------------------------------------------------------
diff --git a/juneau-core/src/main/java/org/apache/juneau/json/JsonParser.java b/juneau-core/src/main/java/org/apache/juneau/json/JsonParser.java
index 1930874..adfe20a 100644
--- a/juneau-core/src/main/java/org/apache/juneau/json/JsonParser.java
+++ b/juneau-core/src/main/java/org/apache/juneau/json/JsonParser.java
@@ -109,7 +109,7 @@ public final class JsonParser extends ReaderParser {
 		session.setCurrentClass(ft);
 		String wrapperAttr = ft.getExtendedMeta(JsonClassMeta.class).getWrapperAttr();
 
-		Object o = null; 
+		Object o = null;
 
 		skipCommentsAndSpace(session, r);
 		if (wrapperAttr != null)
@@ -202,7 +202,7 @@ public final class JsonParser extends ReaderParser {
 			skipWrapperAttrEnd(session, r);
 
 		if (transform != null && o != null)
-			o = transform.unswap(o, nt);
+			o = transform.unswap(o, nt, bc);
 
 		if (outer != null)
 			setParent(nt, o, outer);

http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/3a87c80b/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 119c9e4..6b78de4 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
@@ -190,7 +190,7 @@ public class JsonSerializer extends WriterSerializer {
 		// Transform if necessary
 		PojoSwap transform = aType.getPojoSwap();				// The transform
 		if (transform != null) {
-			o = transform.swap(o);
+			o = transform.swap(o, bc);
 
 			// If the transform's getTransformedClass() method returns Object, we need to figure out
 			// the actual type now.

http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/3a87c80b/juneau-core/src/main/java/org/apache/juneau/msgpack/MsgPackParser.java
----------------------------------------------------------------------
diff --git a/juneau-core/src/main/java/org/apache/juneau/msgpack/MsgPackParser.java b/juneau-core/src/main/java/org/apache/juneau/msgpack/MsgPackParser.java
index a22242b..893d0a4 100644
--- a/juneau-core/src/main/java/org/apache/juneau/msgpack/MsgPackParser.java
+++ b/juneau-core/src/main/java/org/apache/juneau/msgpack/MsgPackParser.java
@@ -182,7 +182,7 @@ public final class MsgPackParser extends InputStreamParser {
 		}
 
 		if (transform != null && o != null)
-			o = transform.unswap(o, nt);
+			o = transform.unswap(o, nt, bc);
 
 		if (outer != null)
 			setParent(nt, o, outer);

http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/3a87c80b/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 8795869..66905ae 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
@@ -80,7 +80,7 @@ public class MsgPackSerializer extends OutputStreamSerializer {
 		// Transform if necessary
 		PojoSwap transform = aType.getPojoSwap();				// The transform
 		if (transform != null) {
-			o = transform.swap(o);
+			o = transform.swap(o, bc);
 
 			// If the transform's getTransformedClass() method returns Object, we need to figure out
 			// the actual type now.

http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/3a87c80b/juneau-core/src/main/java/org/apache/juneau/parser/Parser.java
----------------------------------------------------------------------
diff --git a/juneau-core/src/main/java/org/apache/juneau/parser/Parser.java b/juneau-core/src/main/java/org/apache/juneau/parser/Parser.java
index 9a858b1..5ce5aac 100644
--- a/juneau-core/src/main/java/org/apache/juneau/parser/Parser.java
+++ b/juneau-core/src/main/java/org/apache/juneau/parser/Parser.java
@@ -600,7 +600,7 @@ public abstract class Parser extends CoreApi {
 		}
 
 		if (transform != null)
-			o = transform.unswap(o, type);
+			o = transform.unswap(o, type, session.getBeanContext());
 
 		return (T)o;
 	}

http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/3a87c80b/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 f7d070a..5595a7e 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
@@ -540,7 +540,7 @@ public class SerializerSession extends Session {
 		PojoSwap f = (type == null || type.isObject() ? getBeanContext().getClassMeta(o.getClass()).getPojoSwap() : type.getPojoSwap());
 		if (f == null)
 			return o;
-		return f.swap(o);
+		return f.swap(o, getBeanContext());
 	}
 
 	/**

http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/3a87c80b/juneau-core/src/main/java/org/apache/juneau/transform/PojoSwap.java
----------------------------------------------------------------------
diff --git a/juneau-core/src/main/java/org/apache/juneau/transform/PojoSwap.java b/juneau-core/src/main/java/org/apache/juneau/transform/PojoSwap.java
index 1fefd2c..c208e96 100644
--- a/juneau-core/src/main/java/org/apache/juneau/transform/PojoSwap.java
+++ b/juneau-core/src/main/java/org/apache/juneau/transform/PojoSwap.java
@@ -21,7 +21,7 @@ import org.apache.juneau.parser.*;
 import org.apache.juneau.serializer.*;
 
 /**
- * Used to convert non-serializable objects to a serializable form.
+ * Used to swap out non-serializable objects with serializable replacements during serialization, and vis-versa during parsing.
  *
  *
  * <h6 class='topic'>Description</h6>
@@ -72,10 +72,10 @@ import org.apache.juneau.serializer.*;
  * <h6 class='topic'>One-way vs. Two-way Serialization</h6>
  * <p>
  * 	Note that while there is a unified interface for handling swaps during both serialization and parsing,
- * 	in many cases only one of the {@link #swap(Object)} or {@link #unswap(Object, ClassMeta)} methods will be defined
+ * 	in many cases only one of the {@link #swap(Object)} or {@link #unswap(Object)} methods will be defined
  * 	because the swap is one-way.  For example, a swap may be defined to convert an {@code Iterator} to a {@code ObjectList}, but
- * 	it's not possible to unswap an {@code Iterator}.  In that case, the {@code generalize(Object}} method would
- * 	be implemented, but the {@code narrow(ObjectMap)} object would not, and the swap would be associated on
+ * 	it's not possible to unswap an {@code Iterator}.  In that case, the {@code swap(Object}} method would
+ * 	be implemented, but the {@code unswap(ObjectMap)} object would not, and the swap would be associated on
  * 	the serializer, but not the parser.  Also, you may choose to serialize objects like {@code Dates} to readable {@code Strings},
  * 	in which case it's not possible to reparse it back into a {@code Date}, since there is no way for the {@code Parser} to
  * 	know it's a {@code Date} from just the JSON or XML text.
@@ -92,8 +92,8 @@ import org.apache.juneau.serializer.*;
 public abstract class PojoSwap<T,S> extends Transform {
 
 	Class<T> normalClass;
-	Class<S> transformedClass;
-	ClassMeta<S> transformedClassMeta;
+	Class<S> swapClass;
+	ClassMeta<S> swapClassMeta;
 
 	/**
 	 * Constructor.
@@ -131,9 +131,9 @@ public abstract class PojoSwap<T,S> extends Transform {
 				} else
 					throw new RuntimeException("Unsupported parameter type: " + nType);
 				if (pta[1] instanceof Class)
-					this.transformedClass = (Class<S>)pta[1];
+					this.swapClass = (Class<S>)pta[1];
 				else if (pta[1] instanceof ParameterizedType)
-					this.transformedClass = (Class<S>)((ParameterizedType)pta[1]).getRawType();
+					this.swapClass = (Class<S>)((ParameterizedType)pta[1]).getRawType();
 				else
 					throw new RuntimeException("Unexpected transformed class type: " + pta[1].getClass().getName());
 			}
@@ -144,11 +144,11 @@ public abstract class PojoSwap<T,S> extends Transform {
 	 * Constructor for when the normal and transformed classes are already known.
 	 *
 	 * @param normalClass The normal class (cannot be serialized).
-	 * @param transformedClass The transformed class (serializable).
+	 * @param swapClass The transformed class (serializable).
 	 */
-	protected PojoSwap(Class<T> normalClass, Class<S> transformedClass) {
+	protected PojoSwap(Class<T> normalClass, Class<S> swapClass) {
 		this.normalClass = normalClass;
-		this.transformedClass = transformedClass;
+		this.swapClass = swapClass;
 	}
 
 	/**
@@ -174,9 +174,35 @@ public abstract class PojoSwap<T,S> extends Transform {
 	}
 
 	/**
+	 *	Same as {@link #swap(Object)}, but override this method instead if you want access to the bean context that created this swap.
+	 *
+	 * @param o The object to be transformed.
+	 * @param beanContext The bean context to use to get the class meta.
+	 * 	This is always going to be the same bean context that created this swap.
+	 * @return The transformed object.
+	 * @throws SerializeException If a problem occurred trying to convert the output.
+	 */
+	public S swap(T o, BeanContext beanContext) throws SerializeException {
+		return swap(o);
+	}
+
+	/**
 	 * If this transform is to be used to reconstitute POJOs that aren't true Java beans, it must implement this method.
 	 *
 	 * @param f The transformed object.
+	 * 	This may be <jk>null</jk> if the parser cannot make this determination.
+	 * @return The narrowed object.
+	 * @throws ParseException If this method is not implemented.
+	 */
+	public T unswap(S f) throws ParseException {
+		throw new ParseException("Narrow method not implemented on transform ''{0}''", this.getClass().getName());
+	}
+
+	/**
+	 *	Same as {@link #unswap(Object)}, but override this method if you need access to the expected class type
+	 *		to be created.
+	 *
+	 * @param f The transformed object.
 	 * @param hint If possible, the parser will try to tell you the object type being created.  For example,
 	 * 	on a serialized date, this may tell you that the object being created must be of type {@code GregorianCalendar}.<br>
 	 * 	This may be <jk>null</jk> if the parser cannot make this determination.
@@ -184,7 +210,23 @@ public abstract class PojoSwap<T,S> extends Transform {
 	 * @throws ParseException If this method is not implemented.
 	 */
 	public T unswap(S f, ClassMeta<?> hint) throws ParseException {
-		throw new ParseException("Narrow method not implemented on transform ''{0}''", this.getClass().getName());
+		return unswap(f);
+	}
+
+	/**
+	 *	Same as {@link #unswap(Object, ClassMeta)}, but override this method if you need access to the bean context that created this swap.
+	 *
+	 * @param f The transformed object.
+	 * @param hint If possible, the parser will try to tell you the object type being created.  For example,
+	 * 	on a serialized date, this may tell you that the object being created must be of type {@code GregorianCalendar}.<br>
+	 * 	This may be <jk>null</jk> if the parser cannot make this determination.
+	 * @param beanContext The bean context to use to get the class meta.
+	 * 	This is always going to be the same bean context that created this swap.
+	 * @return The narrowed object.
+	 * @throws ParseException If this method is not implemented.
+	 */
+	public T unswap(S f, ClassMeta<?> hint, BeanContext beanContext) throws ParseException {
+		return unswap(f, hint);
 	}
 
 	/**
@@ -204,24 +246,26 @@ public abstract class PojoSwap<T,S> extends Transform {
 	 *
 	 * @return The transformed form of this class.
 	 */
-	public Class<S> getTransformedClass() {
-		return transformedClass;
+	public Class<S> getSwapClass() {
+		return swapClass;
 	}
 
 	/**
 	 * Returns the {@link ClassMeta} of the transformed class type.
 	 * This value is cached for quick lookup.
 	 *
+	 * @param beanContext The bean context to use to get the class meta.
+	 * 	This is always going to be the same bean context that created this swap.
 	 * @return The {@link ClassMeta} of the transformed class type.
 	 */
-	public ClassMeta<S> getTransformedClassMeta() {
-		if (transformedClassMeta == null)
-			transformedClassMeta = beanContext.getClassMeta(transformedClass);
-		return transformedClassMeta;
+	public ClassMeta<S> getSwapClassMeta(BeanContext beanContext) {
+		if (swapClassMeta == null)
+			swapClassMeta = beanContext.getClassMeta(swapClass);
+		return swapClassMeta;
 	}
 
 	/**
-	 * Checks if the specified object is an instance of the normal class defined on this transform.
+	 * Checks if the specified object is an instance of the normal class defined on this swap.
 	 *
 	 * @param o The object to check.
 	 * @return <jk>true</jk> if the specified object is a subclass of the normal class defined on this transform.
@@ -234,16 +278,16 @@ public abstract class PojoSwap<T,S> extends Transform {
 	}
 
 	/**
-	 * Checks if the specified object is an instance of the transformed class defined on this transform.
+	 * Checks if the specified object is an instance of the swap class defined on this swap.
 	 *
 	 * @param o The object to check.
 	 * @return <jk>true</jk> if the specified object is a subclass of the transformed class defined on this transform.
 	 * 	<jk>null</jk> always return <jk>false</jk>.
 	 */
-	public boolean isTransformedObject(Object o) {
+	public boolean isSwappedObject(Object o) {
 		if (o == null)
 			return false;
-		return ClassUtils.isParentClass(transformedClass, o.getClass());
+		return ClassUtils.isParentClass(swapClass, o.getClass());
 	}
 
 	//--------------------------------------------------------------------------------
@@ -257,6 +301,6 @@ public abstract class PojoSwap<T,S> extends Transform {
 
 	@Override /* Object */
 	public String toString() {
-		return getClass().getSimpleName() + '<' + getNormalClass().getSimpleName() + "," + getTransformedClass().getSimpleName() + '>';
+		return getClass().getSimpleName() + '<' + getNormalClass().getSimpleName() + "," + getSwapClass().getSimpleName() + '>';
 	}
 }

http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/3a87c80b/juneau-core/src/main/java/org/apache/juneau/transform/SurrogateSwap.java
----------------------------------------------------------------------
diff --git a/juneau-core/src/main/java/org/apache/juneau/transform/SurrogateSwap.java b/juneau-core/src/main/java/org/apache/juneau/transform/SurrogateSwap.java
index f1164cc..5071121 100644
--- a/juneau-core/src/main/java/org/apache/juneau/transform/SurrogateSwap.java
+++ b/juneau-core/src/main/java/org/apache/juneau/transform/SurrogateSwap.java
@@ -195,7 +195,7 @@ public class SurrogateSwap<T,F> extends PojoSwap<T,F> {
 
 	@Override /* PojoSwap */
 	@SuppressWarnings("unchecked")
-	public T unswap(F f, ClassMeta<?> hint) throws ParseException {
+	public T unswap(F f) throws ParseException {
 		if (untransformMethod == null)
 			throw new ParseException("static valueOf({0}) method not implement on surrogate class ''{1}''", f.getClass().getName(), getNormalClass().getName());
 		try {

http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/3a87c80b/juneau-core/src/main/java/org/apache/juneau/transform/Transform.java
----------------------------------------------------------------------
diff --git a/juneau-core/src/main/java/org/apache/juneau/transform/Transform.java b/juneau-core/src/main/java/org/apache/juneau/transform/Transform.java
index c6ea8a4..010b3d1 100644
--- a/juneau-core/src/main/java/org/apache/juneau/transform/Transform.java
+++ b/juneau-core/src/main/java/org/apache/juneau/transform/Transform.java
@@ -57,9 +57,6 @@ public class Transform {
 	/** The class that this transform applies to. */
 	protected Class<?> forClass;
 
-	/** The bean context that this transform instance belongs to. */
-	protected BeanContext beanContext;
-
 	/** Whether this is a BeanFilter or PojoSwap. */
 	protected TransformType type = TransformType.POJO;
 
@@ -98,38 +95,8 @@ public class Transform {
 		return type;
 	}
 
-	/**
-	 * Returns the {@link BeanContext} that created this transform.
-	 *
-	 * @return The bean context that created this transform.
-	 */
-	protected BeanContext getBeanContext() {
-		return beanContext;
-	}
-
-	/**
-	 * Sets the bean context that this transform instance was created by.
-	 *
-	 * @param beanContext The bean context that created this transform.
-	 * @return This object (for method chaining).
-	 */
-	public Transform setBeanContext(BeanContext beanContext) {
-		this.beanContext = beanContext;
-		return this;
-	}
-
 	@Override /* Object */
 	public int hashCode() {
 		return getClass().getName().hashCode() + forClass().getName().hashCode();
 	}
-
-	/**
-	 * Checks if the specified transform class is the same as this one.
-	 *
-	 * @param f The transform to check.
-	 * @return <jk>true</jk> if the specified transform is equivalent to this one.
-	 */
-	public boolean isSameAs(Transform f) {
-		return f.getClass().equals(getClass()) && f.forClass().equals(forClass());
-	}
 }

http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/3a87c80b/juneau-core/src/main/java/org/apache/juneau/transforms/ByteArrayBase64Swap.java
----------------------------------------------------------------------
diff --git a/juneau-core/src/main/java/org/apache/juneau/transforms/ByteArrayBase64Swap.java b/juneau-core/src/main/java/org/apache/juneau/transforms/ByteArrayBase64Swap.java
index 5f8e584..597d909 100644
--- a/juneau-core/src/main/java/org/apache/juneau/transforms/ByteArrayBase64Swap.java
+++ b/juneau-core/src/main/java/org/apache/juneau/transforms/ByteArrayBase64Swap.java
@@ -12,7 +12,6 @@
  ***************************************************************************************************************************/
 package org.apache.juneau.transforms;
 
-import org.apache.juneau.*;
 import org.apache.juneau.internal.*;
 import org.apache.juneau.parser.*;
 import org.apache.juneau.serializer.*;
@@ -41,7 +40,7 @@ public class ByteArrayBase64Swap extends PojoSwap<byte[],String> {
 	 * Converts the specified {@link String} to a <code><jk>byte</jk>[]</code>.
 	 */
 	@Override /* PojoSwap */
-	public byte[] unswap(String s, ClassMeta<?> hint) throws ParseException {
+	public byte[] unswap(String s) throws ParseException {
 		try {
 			return StringUtils.base64Decode(s);
 		} catch (Exception e) {

http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/3a87c80b/juneau-core/src/main/java/org/apache/juneau/transforms/CalendarLongSwap.java
----------------------------------------------------------------------
diff --git a/juneau-core/src/main/java/org/apache/juneau/transforms/CalendarLongSwap.java b/juneau-core/src/main/java/org/apache/juneau/transforms/CalendarLongSwap.java
index 551c31c..ae5e8d0 100644
--- a/juneau-core/src/main/java/org/apache/juneau/transforms/CalendarLongSwap.java
+++ b/juneau-core/src/main/java/org/apache/juneau/transforms/CalendarLongSwap.java
@@ -38,11 +38,11 @@ public class CalendarLongSwap extends PojoSwap<Calendar,Long> {
 	 */
 	@Override /* PojoSwap */
 	@SuppressWarnings("unchecked")
-	public Calendar unswap(Long o, ClassMeta<?> hint) throws ParseException {
+	public Calendar unswap(Long o, ClassMeta<?> hint, BeanContext bc) throws ParseException {
 		ClassMeta<? extends Calendar> tt;
 		try {
 			if (hint == null || ! hint.canCreateNewInstance())
-				hint = getBeanContext().getClassMeta(GregorianCalendar.class);
+				hint = bc.getClassMeta(GregorianCalendar.class);
 			tt = (ClassMeta<? extends Calendar>)hint;
 			Calendar c = tt.newInstance();
 			c.setTimeInMillis(o);

http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/3a87c80b/juneau-core/src/main/java/org/apache/juneau/transforms/CalendarMapSwap.java
----------------------------------------------------------------------
diff --git a/juneau-core/src/main/java/org/apache/juneau/transforms/CalendarMapSwap.java b/juneau-core/src/main/java/org/apache/juneau/transforms/CalendarMapSwap.java
index 0dcd0d7..0bce08c 100644
--- a/juneau-core/src/main/java/org/apache/juneau/transforms/CalendarMapSwap.java
+++ b/juneau-core/src/main/java/org/apache/juneau/transforms/CalendarMapSwap.java
@@ -42,11 +42,11 @@ public class CalendarMapSwap extends PojoSwap<Calendar,Map> {
 	 */
 	@Override /* PojoSwap */
 	@SuppressWarnings("unchecked")
-	public Calendar unswap(Map o, ClassMeta<?> hint) throws ParseException {
+	public Calendar unswap(Map o, ClassMeta<?> hint, BeanContext bc) throws ParseException {
 		ClassMeta<? extends Calendar> tt;
 		try {
 			if (hint == null || ! hint.canCreateNewInstance())
-				hint = getBeanContext().getClassMeta(GregorianCalendar.class);
+				hint = bc.getClassMeta(GregorianCalendar.class);
 			tt = (ClassMeta<? extends Calendar>)hint;
 			long time = Long.parseLong(o.get("time").toString());
 			String timeZone = o.get("timeZone").toString();

http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/3a87c80b/juneau-core/src/main/java/org/apache/juneau/transforms/ReaderSwap.java
----------------------------------------------------------------------
diff --git a/juneau-core/src/main/java/org/apache/juneau/transforms/ReaderSwap.java b/juneau-core/src/main/java/org/apache/juneau/transforms/ReaderSwap.java
index f291521..930ef91 100644
--- a/juneau-core/src/main/java/org/apache/juneau/transforms/ReaderSwap.java
+++ b/juneau-core/src/main/java/org/apache/juneau/transforms/ReaderSwap.java
@@ -14,6 +14,7 @@ package org.apache.juneau.transforms;
 
 import java.io.*;
 
+import org.apache.juneau.*;
 import org.apache.juneau.html.*;
 import org.apache.juneau.internal.*;
 import org.apache.juneau.json.*;
@@ -98,11 +99,11 @@ public class ReaderSwap extends PojoSwap<Reader,Object> {
 	 * by the contents of the reader.
 	 */
 	@Override /* PojoSwap */
-	public Object swap(Reader o) throws SerializeException {
+	public Object swap(Reader o, BeanContext bc) throws SerializeException {
 		try {
 			if (parser == null)
 				return IOUtils.read(o);
-			return parser.parse(o, beanContext.object());
+			return parser.parse(o, bc.object());
 		} catch (IOException e) {
 			return e.getLocalizedMessage();
 		} catch (Exception e) {

http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/3a87c80b/juneau-core/src/main/java/org/apache/juneau/transforms/XMLGregorianCalendarSwap.java
----------------------------------------------------------------------
diff --git a/juneau-core/src/main/java/org/apache/juneau/transforms/XMLGregorianCalendarSwap.java b/juneau-core/src/main/java/org/apache/juneau/transforms/XMLGregorianCalendarSwap.java
index c0d369c..7fcb4a8 100644
--- a/juneau-core/src/main/java/org/apache/juneau/transforms/XMLGregorianCalendarSwap.java
+++ b/juneau-core/src/main/java/org/apache/juneau/transforms/XMLGregorianCalendarSwap.java
@@ -14,7 +14,6 @@ package org.apache.juneau.transforms;
 
 import javax.xml.datatype.*;
 
-import org.apache.juneau.*;
 import org.apache.juneau.internal.*;
 import org.apache.juneau.parser.*;
 import org.apache.juneau.serializer.*;
@@ -56,7 +55,7 @@ public class XMLGregorianCalendarSwap extends PojoSwap<XMLGregorianCalendar,Stri
 	 * Converts the specified {@link String} to an <code>XMLGregorianCalendar</code>.
 	 */
 	@Override /* PojoSwap */
-	public XMLGregorianCalendar unswap(String s, ClassMeta<?> hint) throws ParseException {
+	public XMLGregorianCalendar unswap(String s) throws ParseException {
 		if (StringUtils.isEmpty(s))
 			return null;
 		return dtf.newXMLGregorianCalendar(s);

http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/3a87c80b/juneau-core/src/main/java/org/apache/juneau/urlencoding/UonParser.java
----------------------------------------------------------------------
diff --git a/juneau-core/src/main/java/org/apache/juneau/urlencoding/UonParser.java b/juneau-core/src/main/java/org/apache/juneau/urlencoding/UonParser.java
index 05a4311..30d976f 100644
--- a/juneau-core/src/main/java/org/apache/juneau/urlencoding/UonParser.java
+++ b/juneau-core/src/main/java/org/apache/juneau/urlencoding/UonParser.java
@@ -202,7 +202,7 @@ public class UonParser extends ReaderParser {
 		}
 
 		if (transform != null && o != null)
-			o = transform.unswap(o, nt);
+			o = transform.unswap(o, nt, bc);
 
 		if (outer != null)
 			setParent(nt, o, outer);

http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/3a87c80b/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 db3c13c..f886369 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
@@ -276,7 +276,7 @@ public class UonSerializer extends WriterSerializer {
 		// Transform if necessary
 		PojoSwap transform = aType.getPojoSwap();				// The transform
 		if (transform != null) {
-			o = transform.swap(o);
+			o = transform.swap(o, bc);
 
 			// If the transform's getTransformedClass() method returns Object, we need to figure out
 			// the actual type now.

http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/3a87c80b/juneau-core/src/main/java/org/apache/juneau/urlencoding/UrlEncodingParser.java
----------------------------------------------------------------------
diff --git a/juneau-core/src/main/java/org/apache/juneau/urlencoding/UrlEncodingParser.java b/juneau-core/src/main/java/org/apache/juneau/urlencoding/UrlEncodingParser.java
index 9e081c3..0a177f5 100644
--- a/juneau-core/src/main/java/org/apache/juneau/urlencoding/UrlEncodingParser.java
+++ b/juneau-core/src/main/java/org/apache/juneau/urlencoding/UrlEncodingParser.java
@@ -126,7 +126,7 @@ public class UrlEncodingParser extends UonParser {
 		}
 
 		if (transform != null && o != null)
-			o = transform.unswap(o, nt);
+			o = transform.unswap(o, nt, bc);
 
 		if (outer != null)
 			setParent(nt, o, outer);

http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/3a87c80b/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 9b7541d..2f059ef 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
@@ -243,7 +243,7 @@ public class UrlEncodingSerializer extends UonSerializer {
 		// Transform if necessary
 		PojoSwap transform = aType.getPojoSwap();				// The transform
 		if (transform != null) {
-			o = transform.swap(o);
+			o = transform.swap(o, bc);
 
 			// If the transform's getTransformedClass() method returns Object, we need to figure out
 			// the actual type now.

http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/3a87c80b/juneau-core/src/main/java/org/apache/juneau/xml/XmlParser.java
----------------------------------------------------------------------
diff --git a/juneau-core/src/main/java/org/apache/juneau/xml/XmlParser.java b/juneau-core/src/main/java/org/apache/juneau/xml/XmlParser.java
index f4b27af..250f7e7 100644
--- a/juneau-core/src/main/java/org/apache/juneau/xml/XmlParser.java
+++ b/juneau-core/src/main/java/org/apache/juneau/xml/XmlParser.java
@@ -171,7 +171,7 @@ public class XmlParser extends ReaderParser {
 		}
 
 		if (transform != null && o != null)
-			o = transform.unswap(o, nt);
+			o = transform.unswap(o, nt, bc);
 
 		if (outer != null)
 			setParent(nt, o, outer);

http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/3a87c80b/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 2d9c285..7fb2135 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
@@ -329,7 +329,7 @@ public class XmlSerializer extends WriterSerializer {
 			// Transform if necessary
 			PojoSwap transform = aType.getPojoSwap();
 			if (transform != null) {
-				o = transform.swap(o);
+				o = transform.swap(o, bc);
 
 				// If the transform's getTransformedClass() method returns Object, we need to figure out
 				// the actual type now.

http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/3a87c80b/juneau-core/src/test/java/org/apache/juneau/PojoSwapTest.java
----------------------------------------------------------------------
diff --git a/juneau-core/src/test/java/org/apache/juneau/PojoSwapTest.java b/juneau-core/src/test/java/org/apache/juneau/PojoSwapTest.java
index 3867a34..acc702f 100755
--- a/juneau-core/src/test/java/org/apache/juneau/PojoSwapTest.java
+++ b/juneau-core/src/test/java/org/apache/juneau/PojoSwapTest.java
@@ -50,7 +50,7 @@ public class PojoSwapTest {
 		}
 
 		@Override
-		public String unswap(String f, ClassMeta<?> hint) throws ParseException {
+		public String unswap(String f) throws ParseException {
 			return f.substring(1, f.length()-1);
 		}
 	}

http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/3a87c80b/juneau-core/src/test/java/org/apache/juneau/a/rttests/RoundTripTransformBeansTest.java
----------------------------------------------------------------------
diff --git a/juneau-core/src/test/java/org/apache/juneau/a/rttests/RoundTripTransformBeansTest.java b/juneau-core/src/test/java/org/apache/juneau/a/rttests/RoundTripTransformBeansTest.java
index 9eeb56c..12561cb 100755
--- a/juneau-core/src/test/java/org/apache/juneau/a/rttests/RoundTripTransformBeansTest.java
+++ b/juneau-core/src/test/java/org/apache/juneau/a/rttests/RoundTripTransformBeansTest.java
@@ -239,7 +239,7 @@ public class RoundTripTransformBeansTest extends RoundTripTest {
 			return o.f1;
 		}
 		@Override /* PojoSwap */
-		public B unswap(String f, ClassMeta<?> hint) throws ParseException {
+		public B unswap(String f) throws ParseException {
 			B b1 = new B();
 			b1.f1 = f;
 			return b1;

http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/3a87c80b/juneau-server-test/src/main/java/org/apache/juneau/server/TestTransforms.java
----------------------------------------------------------------------
diff --git a/juneau-server-test/src/main/java/org/apache/juneau/server/TestTransforms.java b/juneau-server-test/src/main/java/org/apache/juneau/server/TestTransforms.java
index 81a7b05..5918f06 100755
--- a/juneau-server-test/src/main/java/org/apache/juneau/server/TestTransforms.java
+++ b/juneau-server-test/src/main/java/org/apache/juneau/server/TestTransforms.java
@@ -13,7 +13,6 @@
 package org.apache.juneau.server;
 
 
-import org.apache.juneau.*;
 import org.apache.juneau.parser.*;
 import org.apache.juneau.serializer.*;
 import org.apache.juneau.server.annotation.*;
@@ -74,7 +73,7 @@ public class TestTransforms extends TestTransformsParent {
 			return "A1-" + a.f1;
 		}
 		@Override /* PojoSwap */
-		public A unswap(String in, ClassMeta<?> hint) throws ParseException {
+		public A unswap(String in) throws ParseException {
 			if (! in.startsWith("A1"))
 				throw new RuntimeException("Invalid input for SwapA1!");
 			A a = new A();
@@ -89,7 +88,7 @@ public class TestTransforms extends TestTransformsParent {
 			return "A2-" + a.f1;
 		}
 		@Override /* PojoSwap */
-		public A unswap(String in, ClassMeta<?> hint) throws ParseException {
+		public A unswap(String in) throws ParseException {
 			if (! in.startsWith("A2"))
 				throw new RuntimeException("Invalid input for SwapA2!");
 			A a = new A();
@@ -104,7 +103,7 @@ public class TestTransforms extends TestTransformsParent {
 			return "A3-" + a.f1;
 		}
 		@Override /* PojoSwap */
-		public A unswap(String in, ClassMeta<?> hint) throws ParseException {
+		public A unswap(String in) throws ParseException {
 			if (! in.startsWith("A3"))
 				throw new RuntimeException("Invalid input for SwapA3!");
 			A a = new A();

http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/3a87c80b/juneau-server/src/main/java/org/apache/juneau/server/converters/Introspectable.java
----------------------------------------------------------------------
diff --git a/juneau-server/src/main/java/org/apache/juneau/server/converters/Introspectable.java b/juneau-server/src/main/java/org/apache/juneau/server/converters/Introspectable.java
index 0e05efa..effa3dc 100755
--- a/juneau-server/src/main/java/org/apache/juneau/server/converters/Introspectable.java
+++ b/juneau-server/src/main/java/org/apache/juneau/server/converters/Introspectable.java
@@ -46,7 +46,7 @@ public final class Introspectable implements RestConverter {
 			return o;
 		try {
 			if (cm.getPojoSwap() != null)
-				o = cm.getPojoSwap().swap(o);
+				o = cm.getPojoSwap().swap(o, req.getBeanContext());
 			return new PojoIntrospector(o, JsonParser.DEFAULT).invokeMethod(method, args);
 		} catch (Exception e) {
 			e.printStackTrace();

http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/3a87c80b/juneau-server/src/main/java/org/apache/juneau/server/converters/Queryable.java
----------------------------------------------------------------------
diff --git a/juneau-server/src/main/java/org/apache/juneau/server/converters/Queryable.java b/juneau-server/src/main/java/org/apache/juneau/server/converters/Queryable.java
index 4aefba9..2e8de1b 100755
--- a/juneau-server/src/main/java/org/apache/juneau/server/converters/Queryable.java
+++ b/juneau-server/src/main/java/org/apache/juneau/server/converters/Queryable.java
@@ -65,7 +65,7 @@ public final class Queryable implements RestConverter {
 				BeanContext bc = req.getBeanContext();
 
 				if (cm.getPojoSwap() != null)
-					o = cm.getPojoSwap().swap(o);
+					o = cm.getPojoSwap().swap(o, bc);
 
 				PojoQuery f = new PojoQuery(o, bc);
 

http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/3a87c80b/juneau-server/src/main/java/org/apache/juneau/server/converters/Traversable.java
----------------------------------------------------------------------
diff --git a/juneau-server/src/main/java/org/apache/juneau/server/converters/Traversable.java b/juneau-server/src/main/java/org/apache/juneau/server/converters/Traversable.java
index 2aa36ef..fe01e0d 100755
--- a/juneau-server/src/main/java/org/apache/juneau/server/converters/Traversable.java
+++ b/juneau-server/src/main/java/org/apache/juneau/server/converters/Traversable.java
@@ -52,7 +52,7 @@ public final class Traversable implements RestConverter {
 		if (req.getPathRemainder() != null) {
 			try {
 				if (cm.getPojoSwap() != null)
-					o = cm.getPojoSwap().swap(o);
+					o = cm.getPojoSwap().swap(o, req.getBeanContext());
 				PojoRest p = new PojoRest(o, req.getReaderParser());
 				o = p.get(req.getPathRemainder());
 			} catch (SerializeException e) {