in johnzon-jsonschema/src/main/java/org/apache/johnzon/jsonschema/generator/PojoGenerator.java [247:344]
protected String asType(final String javaName, final JsonObject schema, final boolean required) {
final JsonValue ref = schema.get("$ref");
if (ref != null && ref.getValueType() == JsonValue.ValueType.STRING) {
final String name = onRef(new Ref(
JsonString.class.cast(ref).getString(), configuration.getClassName(), imports, attributes, nested));
if (name != null) {
return name;
}
}
final JsonValue value = schema.get("type");
String type;
if (value == null) {
if (schema.containsKey("properties") || schema.containsKey("additionalProperties")) {
type = "object";
} else if (schema.containsKey("items")) {
type = "array";
} else { // unknown, don't fail for wrongly written schema
imports.add(JsonValue.class.getName());
return JsonValue.class.getSimpleName();
}
} else {
type = JsonString.class.cast(value).getString();
}
final JsonValue formatValue = schema.get("date-time");
if (formatValue != null && formatValue.getValueType() == JsonValue.ValueType.STRING) {
type = JsonString.class.cast(formatValue).getString();
}
switch (type) {
case "array":
final JsonObject items = getValueAs(schema, "items", JsonObject.class);
final String itemType = onItemSchema(javaName, items);
imports.add(List.class.getName());
return List.class.getSimpleName() + "<" + itemType + ">";
case "object":
return onObjectAttribute(javaName, schema);
case "null":
imports.add(JsonValue.class.getName());
return JsonValue.class.getSimpleName();
case "boolean":
return required ? "boolean" : "Boolean";
case "string":
final JsonValue enumList = schema.get("enum");
if (enumList != null && enumList.getValueType() == JsonValue.ValueType.ARRAY) {
return onEnum(javaName, enumList, schema);
}
return "String";
case "number":
case "double": // openapi
return required ? "double" : "Double";
// openapi types
case "int":
case "int32":
case "integer":
return required ? "int" : "Integer";
case "int64":
case "long":
return required ? "long" : "Long";
case "float":
return required ? "float" : "Float";
case "date":
imports.add(LocalDate.class.getName());
return LocalDate.class.getSimpleName();
case "duration":
imports.add(Duration.class.getName());
return Duration.class.getSimpleName();
case "date-time":
case "dateTime":
imports.add(OffsetDateTime.class.getName());
return OffsetDateTime.class.getSimpleName();
case "time":
imports.add(LocalTime.class.getName());
return LocalTime.class.getSimpleName();
case "byte":
return "byte[]";
case "uuid":
case "hostname":
case "idn-hostname":
case "email":
case "idn-email":
case "ipv4":
case "ipv6":
case "uri":
case "uri-reference":
case "iri":
case "iri-reference":
case "uri-template":
case "json-pointer":
case "relative-json-pointer":
case "regex":
case "binary": // base64
case "password":
return "String";
default:
throw new IllegalArgumentException("Unsupported type: " + type);
}
}