public JsonSchema.Builder create(final Class<?> pojo) { final JsonSchema.Builder builder = jsonSchema().withTitle(pojo.getSimpleName()).withType("object"); Class<?> current = pojo; final Collection<String> excludes = new HashSet<>(); while (current != Object.class && current != null) { Stream.of(current.getDeclaredFields()).filter(f -> !f.getName().equals("$jacocoData")).filter(f -> { final int modifiers = f.getModifiers(); return !Modifier.isStatic(modifiers) && !Modifier.isTransient(modifiers); }) .filter(f -> !f.isAnnotationPresent(JsonSchemaIgnore.class)) .filter(f -> excludes.add(f.getName())) .sorted(comparing(Field::getName)) .forEach(field -> { final String name = ofNullable(field.getAnnotation(JsonSchemaProperty.class)) .map(JsonSchemaProperty::value) .orElseGet(field::getName); builder.withProperty(name, buildSchema(field)); }); current = current.getSuperclass(); } return builder; }
return schemas.computeIfAbsent(Class.class.cast(genericType), k -> jsonSchema().withType("string").build()); } else if (genericType == long.class || genericType == Long.class || genericType == int.class || genericType == Integer.class || genericType == byte.class || genericType == Byte.class || genericType == Double.class || genericType == float.class || genericType == Float.class || genericType == BigDecimal.class || genericType == BigInteger.class) { return schemas.computeIfAbsent(Class.class.cast(genericType), k -> jsonSchema().withType("number").build()); } else if (genericType == boolean.class || genericType == Boolean.class) { return schemas .computeIfAbsent(Class.class.cast(genericType), k -> jsonSchema().withType("boolean").build()); } else if (Class.class.isInstance(genericType)) { final Class<?> clazz = Class.class.cast(genericType); return jsonSchema; }); return jsonSchema().withType("array").withItems(nested).build(); } else if (Map.class.isAssignableFrom(rawClazz) && pt.getActualTypeArguments().length == 2) { final Type keyType = pt.getActualTypeArguments()[0]; + ", these must be Class instances"); return jsonSchema().withType("object").build(); } else { throw new IllegalArgumentException(