Provide factory to obtain JsonValue from java.lang.Number (#302)
Signed-off-by: Jorge Bescos Gascon <jorge.bescos.gascon@oracle.com>
diff --git a/api/src/main/java/jakarta/json/Json.java b/api/src/main/java/jakarta/json/Json.java
index 60263b0..501ec40 100644
--- a/api/src/main/java/jakarta/json/Json.java
+++ b/api/src/main/java/jakarta/json/Json.java
@@ -517,4 +517,15 @@
return escaped.replace("~1", "/").replace("~0", "~");
}
+ /**
+ * Creates a JsonNumber.
+ *
+ * @param value a JSON number
+ * @return the JsonNumber for the number
+ *
+ * @since 2.1
+ */
+ public static JsonNumber createValue(Number value) {
+ return JsonProvider.provider().createValue(value);
+ }
}
diff --git a/api/src/main/java/jakarta/json/spi/JsonProvider.java b/api/src/main/java/jakarta/json/spi/JsonProvider.java
index 8aad303..6cc7edb 100644
--- a/api/src/main/java/jakarta/json/spi/JsonProvider.java
+++ b/api/src/main/java/jakarta/json/spi/JsonProvider.java
@@ -477,4 +477,32 @@
public JsonNumber createValue(BigInteger value) {
throw new UnsupportedOperationException();
}
+
+ /**
+ * Creates a JsonNumber.
+ *
+ * When it is not implemented it checks the type and delegates
+ * to an existing method that already handles that type. It throws
+ * UnsupportedOperationException in case the type is not known.
+ *
+ * @param number a JSON number
+ * @return the JsonNumber for the number
+ *
+ * @since 2.1
+ */
+ public JsonNumber createValue(Number number) {
+ if (number instanceof Integer) {
+ return createValue(number.intValue());
+ } else if (number instanceof Long) {
+ return createValue(number.longValue());
+ } else if (number instanceof Double) {
+ return createValue(number.doubleValue());
+ } else if (number instanceof BigInteger) {
+ return createValue((BigInteger) number);
+ } else if (number instanceof BigDecimal) {
+ return createValue((BigDecimal) number);
+ } else {
+ throw new UnsupportedOperationException(number + " type is not known");
+ }
+ }
}