JUNEAU-128 Code improvements around DynamicSwaps
diff --git a/juneau-core/juneau-core-utest/src/test/java/org/apache/juneau/httppart/OpenApiPartParserTest.java b/juneau-core/juneau-core-utest/src/test/java/org/apache/juneau/httppart/OpenApiPartParserTest.java
index ebefce0..64fe094 100644
--- a/juneau-core/juneau-core-utest/src/test/java/org/apache/juneau/httppart/OpenApiPartParserTest.java
+++ b/juneau-core/juneau-core-utest/src/test/java/org/apache/juneau/httppart/OpenApiPartParserTest.java
@@ -690,12 +690,11 @@
 	}

 

 	public static class F3 {

-		private String f;

+		private Long f;

 		public F3(Long in) {

-			this.f = "F3-" + in.toString();

+			this.f = in;

 		}

-		@Override

-		public String toString() {

+		public Long toLong() {

 			return f;

 		}

 	}

@@ -792,7 +791,7 @@
 		Object o = p.parse(s, "1", Object.class);

 		assertObjectEquals("1", o);

 		assertClass(Long.class, o);

-		assertObjectEquals("'F3-1'", p.parse(s,  "1", F3.class));

+		assertObjectEquals("1", p.parse(s,  "1", F3.class));

 	}

 

 	@Test

@@ -811,8 +810,8 @@
 		assertObjectEquals("['1','2']", p.parse(s, "1,2", List.class, String.class));

 		assertObjectEquals("[1,2]", p.parse(s, "1,2", Object[].class));

 		assertObjectEquals("[1,2]", p.parse(s, "1,2", List.class, Object.class));

-		assertObjectEquals("['F3-1','F3-2']", p.parse(s,  "1,2", F3[].class));

-		assertObjectEquals("['F3-1','F3-2']", p.parse(s,  "1,2", List.class, F3.class));

+		assertObjectEquals("[1,2]", p.parse(s,  "1,2", F3[].class));

+		assertObjectEquals("[1,2]", p.parse(s,  "1,2", List.class, F3.class));

 		assertObjectEquals("'F4-[1,2]'", p.parse(s,  "1,2", F4.class));

 	}

 

@@ -840,9 +839,9 @@
 		assertObjectEquals("[[1,2],[3]]", p.parse(s, "1,2|3", Object[][].class));

 		assertObjectEquals("[[1,2],[3]]", p.parse(s, "1,2|3", List.class, Object[].class));

 		assertObjectEquals("[[1,2],[3]]", p.parse(s, "1,2|3", List.class, List.class, Object.class));

-		assertObjectEquals("[['F3-1','F3-2'],['F3-3']]", p.parse(s,  "1,2|3", F3[][].class));

-		assertObjectEquals("[['F3-1','F3-2'],['F3-3']]", p.parse(s,  "1,2|3", List.class, F3[].class));

-		assertObjectEquals("[['F3-1','F3-2'],['F3-3']]", p.parse(s,  "1,2|3", List.class, List.class, F3.class));

+		assertObjectEquals("[[1,2],[3]]", p.parse(s,  "1,2|3", F3[][].class));

+		assertObjectEquals("[[1,2],[3]]", p.parse(s,  "1,2|3", List.class, F3[].class));

+		assertObjectEquals("[[1,2],[3]]", p.parse(s,  "1,2|3", List.class, List.class, F3.class));

 		assertObjectEquals("['F4-[1,2]','F4-[3]']", p.parse(s, "1,2|3", F4[].class));

 		assertObjectEquals("['F4-[1,2]','F4-[3]']", p.parse(s, "1,2|3", List.class, F4.class));

 	}

@@ -853,12 +852,11 @@
 	//-----------------------------------------------------------------------------------------------------------------

 

 	public static class G1 {

-		private String f;

-		public G1(Float in) {

-			this.f = "G1-" + in.toString();

+		private float f;

+		public G1(float in) {

+			this.f = in;

 		}

-		@Override

-		public String toString() {

+		public float toFloat() {

 			return f;

 		}

 	}

@@ -875,12 +873,11 @@
 	}

 

 	public static class G3 {

-		private String f;

-		public G3(Double in) {

-			this.f = "G3-" + in.toString();

+		private Double f;

+		public G3(double in) {

+			this.f = in;

 		}

-		@Override

-		public String toString() {

+		public double toDouble() {

 			return f;

 		}

 	}

@@ -907,7 +904,7 @@
 		Object o =  p.parse(s, "1", Object.class);

 		assertObjectEquals("1.0",o);

 		assertClass(Float.class, o);

-		assertObjectEquals("'G1-1.0'", p.parse(s,  "1", G1.class));

+		assertObjectEquals("1.0", p.parse(s,  "1", G1.class));

 	}

 

 	@Test

@@ -923,8 +920,8 @@
 		assertObjectEquals("['1','2']", p.parse(s, "1,2", List.class, String.class));

 		assertObjectEquals("[1.0,2.0]", p.parse(s, "1,2", Object[].class));

 		assertObjectEquals("[1.0,2.0]", p.parse(s, "1,2", List.class, Object.class));

-		assertObjectEquals("['G1-1.0','G1-2.0']", p.parse(s,  "1,2", G1[].class));

-		assertObjectEquals("['G1-1.0','G1-2.0']", p.parse(s,  "1,2", List.class, G1.class));

+		assertObjectEquals("[1.0,2.0]", p.parse(s,  "1,2", G1[].class));

+		assertObjectEquals("[1.0,2.0]", p.parse(s,  "1,2", List.class, G1.class));

 		assertObjectEquals("'G2-[1.0,2.0]'", p.parse(s,  "1,2", G2.class));

 	}

 

@@ -947,9 +944,9 @@
 		assertObjectEquals("[[1.0,2.0],[3.0]]", p.parse(s, "1,2|3", Object[][].class));

 		assertObjectEquals("[[1.0,2.0],[3.0]]", p.parse(s, "1,2|3", List.class, Object[].class));

 		assertObjectEquals("[[1.0,2.0],[3.0]]", p.parse(s, "1,2|3", List.class, List.class, Object.class));

-		assertObjectEquals("[['G1-1.0','G1-2.0'],['G1-3.0']]", p.parse(s,  "1,2|3", G1[][].class));

-		assertObjectEquals("[['G1-1.0','G1-2.0'],['G1-3.0']]", p.parse(s,  "1,2|3", List.class, G1[].class));

-		assertObjectEquals("[['G1-1.0','G1-2.0'],['G1-3.0']]", p.parse(s,  "1,2|3", List.class, List.class, G1.class));

+		assertObjectEquals("[[1.0,2.0],[3.0]]", p.parse(s,  "1,2|3", G1[][].class));

+		assertObjectEquals("[[1.0,2.0],[3.0]]", p.parse(s,  "1,2|3", List.class, G1[].class));

+		assertObjectEquals("[[1.0,2.0],[3.0]]", p.parse(s,  "1,2|3", List.class, List.class, G1.class));

 		assertObjectEquals("['G2-[1.0,2.0]','G2-[3.0]']", p.parse(s, "1,2|3", G2[].class));

 		assertObjectEquals("['G2-[1.0,2.0]','G2-[3.0]']", p.parse(s, "1,2|3", List.class, G2.class));

 	}

@@ -965,7 +962,7 @@
 		Object o = p.parse(s, "1", Object.class);

 		assertObjectEquals("1.0", o);

 		assertClass(Double.class, o);

-		assertObjectEquals("'G3-1.0'", p.parse(s,  "1", G3.class));

+		assertObjectEquals("1.0", p.parse(s,  "1", G3.class));

 	}

 

 	@Test

@@ -981,8 +978,8 @@
 		assertObjectEquals("['1','2']", p.parse(s, "1,2", List.class, String.class));

 		assertObjectEquals("[1.0,2.0]", p.parse(s, "1,2", Object[].class));

 		assertObjectEquals("[1.0,2.0]", p.parse(s, "1,2", List.class, Object.class));

-		assertObjectEquals("['G3-1.0','G3-2.0']", p.parse(s,  "1,2", G3[].class));

-		assertObjectEquals("['G3-1.0','G3-2.0']", p.parse(s,  "1,2", List.class, G3.class));

+		assertObjectEquals("[1.0,2.0]", p.parse(s,  "1,2", G3[].class));

+		assertObjectEquals("[1.0,2.0]", p.parse(s,  "1,2", List.class, G3.class));

 		assertObjectEquals("'G4-[1.0,2.0]'", p.parse(s,  "1,2", G4.class));

 	}

 

@@ -1005,9 +1002,9 @@
 		assertObjectEquals("[[1.0,2.0],[3.0]]", p.parse(s, "1,2|3", Object[][].class));

 		assertObjectEquals("[[1.0,2.0],[3.0]]", p.parse(s, "1,2|3", List.class, Object[].class));

 		assertObjectEquals("[[1.0,2.0],[3.0]]", p.parse(s, "1,2|3", List.class, List.class, Object.class));

-		assertObjectEquals("[['G3-1.0','G3-2.0'],['G3-3.0']]", p.parse(s,  "1,2|3", G3[][].class));

-		assertObjectEquals("[['G3-1.0','G3-2.0'],['G3-3.0']]", p.parse(s,  "1,2|3", List.class, G3[].class));

-		assertObjectEquals("[['G3-1.0','G3-2.0'],['G3-3.0']]", p.parse(s,  "1,2|3", List.class, List.class, G3.class));

+		assertObjectEquals("[[1.0,2.0],[3.0]]", p.parse(s,  "1,2|3", G3[][].class));

+		assertObjectEquals("[[1.0,2.0],[3.0]]", p.parse(s,  "1,2|3", List.class, G3[].class));

+		assertObjectEquals("[[1.0,2.0],[3.0]]", p.parse(s,  "1,2|3", List.class, List.class, G3.class));

 		assertObjectEquals("['G4-[1.0,2.0]','G4-[3.0]']", p.parse(s, "1,2|3", G4[].class));

 		assertObjectEquals("['G4-[1.0,2.0]','G4-[3.0]']", p.parse(s, "1,2|3", List.class, G4.class));

 	}

diff --git a/juneau-core/juneau-marshall-rdf/src/main/java/org/apache/juneau/jena/RdfParserSession.java b/juneau-core/juneau-marshall-rdf/src/main/java/org/apache/juneau/jena/RdfParserSession.java
index 5c181c1..ead6465 100644
--- a/juneau-core/juneau-marshall-rdf/src/main/java/org/apache/juneau/jena/RdfParserSession.java
+++ b/juneau-core/juneau-marshall-rdf/src/main/java/org/apache/juneau/jena/RdfParserSession.java
@@ -322,8 +322,6 @@
 			o = sType.newInstanceFromString(outer, decodeString(n.asResource().getURI()));

 		} else if (sType.canCreateNewInstanceFromString(outer)) {

 			o = sType.newInstanceFromString(outer, decodeString(getValue(n, outer)));

-		} else if (sType.canCreateNewInstanceFromNumber(outer)) {

-			o = sType.newInstanceFromNumber(this, outer, parseNumber(getValue(n, outer).toString(), sType.getNewInstanceFromNumberClass()));

 		} else if (n.isResource()) {

 			Resource r = n.asResource();

 			Map m = new ObjectMap(this);

diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/BeanSession.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/BeanSession.java
index 8b00b67..d8221f7 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/BeanSession.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/BeanSession.java
@@ -299,6 +299,10 @@
 				ClassInfo nc = swap.getNormalClass(), fc = swap.getSwapClass();

 				if (nc.isParentOf(tc) && fc.isParentOf(value.getClass()))

 					return (T)swap.unswap(this, value, to);

+				if (value instanceof Number && fc.isNumeric()) {

+					value = convertToMemberType(null, value, fc.inner());

+					return (T)swap.unswap(this, value, to);

+				}

 			}

 

 			ClassMeta<?> from = getClassMetaForObject(value);

@@ -673,9 +677,6 @@
 			if (to.isBean())

 				return newBeanMap(to.getInnerClass()).load(value.toString()).getBean();

 

-			if (to.canCreateNewInstanceFromNumber(outer) && value instanceof Number)

-				return to.newInstanceFromNumber(this, outer, (Number)value);

-

 			if (to.canCreateNewInstanceFromString(outer))

 				return to.newInstanceFromString(outer, value.toString());

 

diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/ClassMeta.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/ClassMeta.java
index de10c27..746067f 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/ClassMeta.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/ClassMeta.java
@@ -71,10 +71,7 @@
 	private final Method fromStringMethod;                  // The static valueOf(String) or fromString(String) or forString(String) method (if it has one).

 	private final ConstructorInfo

 		noArgConstructor,                                    // The no-arg constructor for this class (if it has one).

-		stringConstructor,                                   // The X(String) constructor (if it has one).

-		numberConstructor;                                   // The X(Number) constructor (if it has one).

-	private final Class<?>

-		numberConstructorType;

+		stringConstructor;                                   // The X(String) constructor (if it has one).

 	private final Method

 		exampleMethod;                                       // The example() or @Example-annotated method (if it has one).

 	private final Field

@@ -164,8 +161,6 @@
 			this.namePropertyMethod = builder.namePropertyMethod;

 			this.noArgConstructor = builder.noArgConstructor;

 			this.stringConstructor = builder.stringConstructor;

-			this.numberConstructor = builder.numberConstructor;

-			this.numberConstructorType = builder.numberConstructorType;

 			this.primitiveDefault = builder.primitiveDefault;

 			this.publicMethods = builder.publicMethods;

 			this.beanFilter = beanFilter;

@@ -226,8 +221,6 @@
 		this.fromStringMethod = mainType.fromStringMethod;

 		this.noArgConstructor = mainType.noArgConstructor;

 		this.stringConstructor = mainType.stringConstructor;

-		this.numberConstructor = mainType.numberConstructor;

-		this.numberConstructorType = mainType.numberConstructorType;

 		this.namePropertyMethod = mainType.namePropertyMethod;

 		this.parentPropertyMethod = mainType.parentPropertyMethod;

 		this.isDelegate = mainType.isDelegate;

@@ -274,8 +267,6 @@
 		this.fromStringMethod = null;

 		this.noArgConstructor = null;

 		this.stringConstructor = null;

-		this.numberConstructor = null;

-		this.numberConstructorType = null;

 		this.namePropertyMethod = null;

 		this.parentPropertyMethod = null;

 		this.isDelegate = false;

@@ -321,10 +312,7 @@
 			namePropertyMethod = null;

 		ConstructorInfo

 			noArgConstructor = null,

-			stringConstructor = null,

-			numberConstructor = null;

-		Class<?>

-			numberConstructorType = null;

+			stringConstructor = null;

 		Object primitiveDefault = null;

 		Map<String,Method>

 			publicMethods = new LinkedHashMap<>();

@@ -519,10 +507,6 @@
 						ClassInfo arg = pt.get(isMemberClass ? 1 : 0);

 						if (arg.is(String.class))

 							stringConstructor = cs;

-						else if (cc != NUMBER && (arg.isChildOf(Number.class) || (arg.isPrimitive() && (arg.isAny(int.class, short.class, long.class, float.class, double.class))))) {

-							numberConstructor = cs;

-							numberConstructorType = arg.getWrapperIfPrimitive();

-						}

 					}

 				}

 			}

@@ -1598,33 +1582,6 @@
 	}

 

 	/**

-	 * Returns <jk>true</jk> if this class can call the {@link #newInstanceFromString(Object, String)} method.

-	 *

-	 * @param outer

-	 * 	The outer class object for non-static member classes.

-	 * 	Can be <jk>null</jk> for non-member or static classes.

-	 * @return <jk>true</jk> if this class has a no-arg constructor or invocation handler.

-	 */

-	public boolean canCreateNewInstanceFromNumber(Object outer) {

-		if (numberConstructor != null) {

-			if (isMemberClass)

-				return outer != null && numberConstructor.hasParamTypes(outer.getClass());

-			return true;

-		}

-		return false;

-	}

-

-	/**

-	 * Returns the class type of the parameter of the numeric constructor.

-	 *

-	 * @return The class type of the numeric constructor, or <jk>null</jk> if no such constructor exists.

-	 */

-	@SuppressWarnings("unchecked")

-	public Class<? extends Number> getNewInstanceFromNumberClass() {

-		return (Class<? extends Number>) numberConstructorType;

-	}

-

-	/**

 	 * Returns the method or field annotated with {@link NameProperty @NameProperty}.

 	 *

 	 * @return

@@ -1738,34 +1695,6 @@
 	}

 

 	/**

-	 * Create a new instance of the main class of this declared type from a <c>Number</c> input.

-	 *

-	 * <p>

-	 * In order to use this method, the class must have one of the following methods:

-	 * <ul>

-	 * 	<li><code><jk>public</jk> T(Number in);</code>

-	 * </ul>

-	 *

-	 * @param session The current bean session.

-	 * @param outer

-	 * 	The outer class object for non-static member classes.

-	 * 	Can be <jk>null</jk> for non-member or static classes.

-	 * @param arg The input argument value.

-	 * @return A new instance of the object, or <jk>null</jk> if there is no numeric constructor on the object.

-	 * @throws ExecutableException Exception occurred on invoked constructor/method/field.

-	 */

-	public T newInstanceFromNumber(BeanSession session, Object outer, Number arg) throws ExecutableException {

-		ConstructorInfo c = numberConstructor;

-		if (c != null) {

-			Object arg2 = session.convertToType(arg, numberConstructor.getRawParamType(0));

-			if (isMemberClass)

-				return c.<T>invoke(outer, arg2);

-			return c.<T>invoke(arg2);

-		}

-		throw new InstantiationError("No string constructor or valueOf(Number) method found for class '"+getInnerClass().getName()+"'");

-	}

-

-	/**

 	 * Create a new instance of the main class of this declared type.

 	 *

 	 * @return A new instance of the object, or <jk>null</jk> if there is no no-arg constructor on the object.

diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/html/HtmlParserSession.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/html/HtmlParserSession.java
index 79e19e9..b9d7b6a 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/html/HtmlParserSession.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/html/HtmlParserSession.java
@@ -147,8 +147,6 @@
 				o = parseNumber(text, (Class<? extends Number>)eType.getInnerClass());

 			else if (sType.canCreateNewInstanceFromString(outer))

 				o = sType.newInstanceFromString(outer, text);

-			else if (sType.canCreateNewInstanceFromNumber(outer))

-				o = sType.newInstanceFromNumber(this, outer, parseNumber(text, sType.getNewInstanceFromNumberClass()));

 			else

 				isValid = false;

 

@@ -161,8 +159,6 @@
 				o = parseCharacter(text);

 			else if (sType.canCreateNewInstanceFromString(outer))

 				o = sType.newInstanceFromString(outer, text);

-			else if (sType.canCreateNewInstanceFromNumber(outer))

-				o = sType.newInstanceFromNumber(this, outer, parseNumber(text, sType.getNewInstanceFromNumberClass()));

 			else

 				isValid = false;

 			skipTag(r, tag == STRING ? xSTRING : xA);

@@ -173,8 +169,6 @@
 				o = parseNumber(text, Number.class);

 			else if (sType.isNumber())

 				o = parseNumber(text, (Class<? extends Number>)sType.getInnerClass());

-			else if (sType.canCreateNewInstanceFromNumber(outer))

-				o = sType.newInstanceFromNumber(this, outer, parseNumber(text, sType.getNewInstanceFromNumberClass()));

 			else

 				isValid = false;

 			skipTag(r, xNUMBER);

diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/json/JsonParserSession.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/json/JsonParserSession.java
index 586fdc4..571baae 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/json/JsonParserSession.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/json/JsonParserSession.java
@@ -192,8 +192,6 @@
 			o = parseIntoBeanMap2(r, m).getBean();

 		} else if (sType.canCreateNewInstanceFromString(outer) && (c == '\'' || c == '"')) {

 			o = sType.newInstanceFromString(outer, parseString(r));

-		} else if (sType.canCreateNewInstanceFromNumber(outer) && isFirstNumberChar((char)c)) {

-			o = sType.newInstanceFromNumber(this, outer, parseNumber(r, sType.getNewInstanceFromNumberClass()));

 		} else if (sType.isArray() || sType.isArgs()) {

 			if (c == '{') {

 				ObjectMap m = new ObjectMap(this);

diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/msgpack/MsgPackParserSession.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/msgpack/MsgPackParserSession.java
index 5421e5b..a33d250 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/msgpack/MsgPackParserSession.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/msgpack/MsgPackParserSession.java
@@ -142,8 +142,6 @@
 				}

 			} else if (sType.canCreateNewInstanceFromString(outer) && dt == STRING) {

 				o = sType.newInstanceFromString(outer, o == null ? "" : o.toString());

-			} else if (sType.canCreateNewInstanceFromNumber(outer) && dt.isOneOf(INT, LONG, FLOAT, DOUBLE)) {

-				o = sType.newInstanceFromNumber(this, outer, (Number)o);

 			} else if (sType.isCollection()) {

 				if (dt == MAP) {

 					ObjectMap m = new ObjectMap(this);

diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/parser/ParserSession.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/parser/ParserSession.java
index ff5e946..57abab8 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/parser/ParserSession.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/parser/ParserSession.java
@@ -774,10 +774,7 @@
 		if (sType.isChar())

 			o = parseCharacter(s);

 		else if (sType.isNumber())

-			if (type.canCreateNewInstanceFromNumber(outer))

-				o = type.newInstanceFromNumber(this, outer, parseNumber(s, type.getNewInstanceFromNumberClass()));

-			else

-				o = parseNumber(s, (Class<? extends Number>)sType.getInnerClass());

+			o = parseNumber(s, (Class<? extends Number>)sType.getInnerClass());

 		else if (sType.isBoolean())

 			o = Boolean.parseBoolean(s);

 		else if (! (sType.isCharSequence() || sType.isObject())) {

diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/reflect/ClassInfo.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/reflect/ClassInfo.java
index 6ab9fee..7ac1db5 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/reflect/ClassInfo.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/reflect/ClassInfo.java
@@ -1516,6 +1516,24 @@
 		return c != null && ! c.isInterface();
 	}
 
+	/**
+	 * Returns <jk>true</jk> if this class is a numeric type.
+	 *
+	 * <p>
+	 * The class either extends from {@link Number} or is a primitive numeric type (any primitive other than <jk>char</jk>).
+	 *
+	 * @return <jk>true</jk> if this class is a numeric type.
+	 */
+	public boolean isNumeric() {
+		if (c == null)
+			return false;
+		if (Number.class.isAssignableFrom(c))
+			return true;
+		if (c.isPrimitive())
+			return c == short.class || c == int.class || c == long.class || c == double.class || c == float.class || c == byte.class;
+		return false;
+	}
+
 	//-----------------------------------------------------------------------------------------------------------------
 	// Primitive wrappers
 	//-----------------------------------------------------------------------------------------------------------------
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/uon/UonParserSession.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/uon/UonParserSession.java
index ef41530..7cc5e81 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/uon/UonParserSession.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/uon/UonParserSession.java
@@ -275,8 +275,6 @@
 			String s = parseString(r, isUrlParamValue);

 			if (s != null)

 				o = sType.newInstanceFromString(outer, s);

-		} else if (sType.canCreateNewInstanceFromNumber(outer)) {

-			o = sType.newInstanceFromNumber(this, outer, parseNumber(r, sType.getNewInstanceFromNumberClass()));

 		} else if (sType.isArray() || sType.isArgs()) {

 			if (c == '(') {

 				ObjectMap m = new ObjectMap(this);

diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/xml/XmlParserSession.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/xml/XmlParserSession.java
index 52a7f00..7fca283 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/xml/XmlParserSession.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/xml/XmlParserSession.java
@@ -371,8 +371,6 @@
 			o = toArray(sType, l);

 		} else if (sType.canCreateNewInstanceFromString(outer)) {

 			o = sType.newInstanceFromString(outer, getElementText(r));

-		} else if (sType.canCreateNewInstanceFromNumber(outer)) {

-			o = sType.newInstanceFromNumber(this, outer, parseNumber(getElementText(r), sType.getNewInstanceFromNumberClass()));

 		} else {

 			throw new ParseException(this,

 				"Class ''{0}'' could not be instantiated.  Reason: ''{1}'', property: ''{2}''",