[GERONIMO-6788] BigDecimal/BigInteger/object support
diff --git a/geronimo-openapi-impl/src/main/java/org/apache/geronimo/microprofile/openapi/impl/processor/SchemaProcessor.java b/geronimo-openapi-impl/src/main/java/org/apache/geronimo/microprofile/openapi/impl/processor/SchemaProcessor.java
index 09552a3..e8d9c75 100644
--- a/geronimo-openapi-impl/src/main/java/org/apache/geronimo/microprofile/openapi/impl/processor/SchemaProcessor.java
+++ b/geronimo-openapi-impl/src/main/java/org/apache/geronimo/microprofile/openapi/impl/processor/SchemaProcessor.java
@@ -16,14 +16,22 @@
*/
package org.apache.geronimo.microprofile.openapi.impl.processor;
-import static java.beans.Introspector.decapitalize;
-import static java.util.Arrays.asList;
-import static java.util.Collections.emptyMap;
-import static java.util.Optional.of;
-import static java.util.Optional.ofNullable;
-import static java.util.stream.Collectors.toList;
-import static java.util.stream.Collectors.toMap;
+import org.apache.geronimo.microprofile.openapi.impl.model.DiscriminatorImpl;
+import org.apache.geronimo.microprofile.openapi.impl.model.SchemaImpl;
+import org.eclipse.microprofile.openapi.annotations.enums.SchemaType;
+import org.eclipse.microprofile.openapi.annotations.media.DiscriminatorMapping;
+import org.eclipse.microprofile.openapi.annotations.media.Schema;
+import org.eclipse.microprofile.openapi.models.Components;
+import javax.json.Json;
+import javax.json.JsonArray;
+import javax.json.JsonNumber;
+import javax.json.JsonObject;
+import javax.json.JsonReader;
+import javax.json.JsonReaderFactory;
+import javax.json.JsonString;
+import javax.json.JsonValue;
+import javax.json.bind.annotation.JsonbProperty;
import java.io.StringReader;
import java.lang.reflect.AnnotatedElement;
import java.lang.reflect.Field;
@@ -33,6 +41,7 @@
import java.lang.reflect.Type;
import java.lang.reflect.WildcardType;
import java.math.BigDecimal;
+import java.math.BigInteger;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Date;
@@ -44,40 +53,38 @@
import java.util.function.Supplier;
import java.util.stream.Stream;
-import javax.json.Json;
-import javax.json.JsonArray;
-import javax.json.JsonNumber;
-import javax.json.JsonObject;
-import javax.json.JsonReader;
-import javax.json.JsonReaderFactory;
-import javax.json.JsonString;
-import javax.json.JsonValue;
-import javax.json.bind.annotation.JsonbProperty;
-import javax.ws.rs.core.Response;
-
-import org.apache.geronimo.microprofile.openapi.impl.model.DiscriminatorImpl;
-import org.apache.geronimo.microprofile.openapi.impl.model.SchemaImpl;
-import org.eclipse.microprofile.openapi.annotations.enums.SchemaType;
-import org.eclipse.microprofile.openapi.annotations.media.DiscriminatorMapping;
-import org.eclipse.microprofile.openapi.annotations.media.Schema;
-import org.eclipse.microprofile.openapi.models.Components;
+import static java.beans.Introspector.decapitalize;
+import static java.util.Arrays.asList;
+import static java.util.Collections.emptyMap;
+import static java.util.Optional.of;
+import static java.util.Optional.ofNullable;
+import static java.util.stream.Collectors.toList;
+import static java.util.stream.Collectors.toMap;
public class SchemaProcessor {
private final Map<Type, org.eclipse.microprofile.openapi.models.media.Schema> cache = new HashMap<>();
private final Map<Class<?>, String> providedRefs = new HashMap<>();
private final Class<?> persistenceCapable;
+ private final Class<?> responseType;
private final JsonReaderFactory jsonReaderFactory;
public SchemaProcessor() {
+ final ClassLoader loader = Thread.currentThread().getContextClassLoader();
Class<?> pc = null;
try {
- pc = Thread.currentThread().getContextClassLoader()
- .loadClass("org.apache.openjpa.enhance.PersistenceCapable");
+ pc = loader.loadClass("org.apache.openjpa.enhance.PersistenceCapable");
+ } catch (final NoClassDefFoundError | ClassNotFoundException e) {
+ // no-op
+ }
+ Class<?> responseType = null;
+ try {
+ responseType = loader.loadClass("javax.ws.rs.core.Response");
} catch (final NoClassDefFoundError | ClassNotFoundException e) {
// no-op
}
jsonReaderFactory = Json.createReaderFactory(emptyMap());
persistenceCapable = pc;
+ this.responseType = responseType;
}
public org.eclipse.microprofile.openapi.models.media.Schema mapSchemaFromClass(
@@ -123,10 +130,12 @@
schema.type(org.eclipse.microprofile.openapi.models.media.Schema.SchemaType.INTEGER);
} else if (Integer.class == model || Short.class == model || Byte.class == model || Long.class == model) {
schema.type(org.eclipse.microprofile.openapi.models.media.Schema.SchemaType.INTEGER).nullable(true);
- } else if (Response.class == model || JsonObject.class == model || JsonValue.class == model) {
+ } else if (Object.class == model || responseType == model || JsonObject.class == model || JsonValue.class == model) {
schema.type(org.eclipse.microprofile.openapi.models.media.Schema.SchemaType.OBJECT)
.nullable(true)
.properties(new HashMap<>());
+ } else if (BigDecimal.class == model || BigInteger.class == model) {
+ schema.type(org.eclipse.microprofile.openapi.models.media.Schema.SchemaType.STRING).nullable(true);
} else if (JsonArray.class == model) {
schema.type(org.eclipse.microprofile.openapi.models.media.Schema.SchemaType.ARRAY)
.nullable(true)