Minor update related to schema inspection
The change updates the registration of explicit mappings from any registered ClassNameTypeResolver's. 1. Check if there are any explicit mappings 2. Check all TypeResolver's Also, change factory method to make it more clear that all it needs from a ClassNameTypeResolver are the explicit mappings.
This commit is contained in:
@@ -166,15 +166,8 @@ final class DefaultSchemaResourceGraphQlSourceBuilder
|
||||
// visitors may transform the schema, for example to add Connection types.
|
||||
|
||||
if (this.schemaReportConsumer != null) {
|
||||
this.schemaReportRunner = (schema) -> {
|
||||
SchemaMappingInspector.Initializer initializer = SchemaMappingInspector.initializer();
|
||||
if (this.typeResolver instanceof ClassNameTypeResolver cntr) {
|
||||
initializer.classResolver(SchemaMappingInspector.ClassResolver.fromClassNameTypeResolver(cntr));
|
||||
}
|
||||
this.inspectorInitializerConsumer.accept(initializer);
|
||||
SchemaReport report = initializer.inspect(schema, runtimeWiring.getDataFetchers());
|
||||
this.schemaReportConsumer.accept(report);
|
||||
};
|
||||
this.schemaReportRunner = (schema) ->
|
||||
this.schemaReportConsumer.accept(createSchemaReport(schema, runtimeWiring));
|
||||
}
|
||||
|
||||
return (this.schemaFactory != null) ?
|
||||
@@ -239,6 +232,24 @@ final class DefaultSchemaResourceGraphQlSourceBuilder
|
||||
return (this.typeResolver != null) ? this.typeResolver : new ClassNameTypeResolver();
|
||||
}
|
||||
|
||||
private SchemaReport createSchemaReport(GraphQLSchema schema, RuntimeWiring runtimeWiring) {
|
||||
SchemaMappingInspector.Initializer initializer = SchemaMappingInspector.initializer();
|
||||
|
||||
// Add explicit mappings from ClassNameTypeResolver's
|
||||
runtimeWiring.getTypeResolvers().values().stream().distinct().forEach((resolver) -> {
|
||||
if (resolver instanceof ClassNameTypeResolver cntr) {
|
||||
Map<Class<?>, String> mappings = cntr.getMappings();
|
||||
if (!mappings.isEmpty()) {
|
||||
initializer.classResolver(SchemaMappingInspector.ClassResolver.create(mappings));
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
this.inspectorInitializerConsumer.accept(initializer);
|
||||
|
||||
return initializer.inspect(schema, runtimeWiring.getDataFetchers());
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void applyGraphQlConfigurers(GraphQL.Builder builder) {
|
||||
super.applyGraphQlConfigurers(builder);
|
||||
|
||||
@@ -362,16 +362,12 @@ public final class SchemaMappingInspector {
|
||||
|
||||
|
||||
/**
|
||||
* Create a resolver by re-using the explicit, reverse mappings of
|
||||
* {@link ClassNameTypeResolver}.
|
||||
* @param resolver the type resolver using class names
|
||||
* Create a resolver from the given mappings.
|
||||
* @param mappings from Class to GraphQL type name
|
||||
*/
|
||||
static ClassResolver fromClassNameTypeResolver(ClassNameTypeResolver resolver) {
|
||||
MappingClassResolver mappingResolver = new MappingClassResolver();
|
||||
resolver.getMappings().forEach((key, value) -> mappingResolver.addMapping(value, key));
|
||||
return mappingResolver;
|
||||
static ClassResolver create(Map<Class<?>, String> mappings) {
|
||||
return new MappingClassResolver(mappings);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
@@ -415,8 +411,8 @@ public final class SchemaMappingInspector {
|
||||
|
||||
private final MultiValueMap<String, Class<?>> map = new LinkedMultiValueMap<>();
|
||||
|
||||
void addMapping(String typeName, Class<?> clazz) {
|
||||
this.map.add(typeName, clazz);
|
||||
MappingClassResolver(Map<Class<?>, String> mappings) {
|
||||
mappings.forEach((key, value) -> this.map.add(value, key));
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
@@ -106,7 +106,7 @@ public class SchemaMappingInspectorInterfaceTests extends SchemaMappingInspector
|
||||
typeResolver.addMapping(CarImpl.class, "Car");
|
||||
|
||||
SchemaReport report = inspectSchema(schema,
|
||||
initializer -> initializer.classResolver(ClassResolver.fromClassNameTypeResolver(typeResolver)),
|
||||
initializer -> initializer.classResolver(ClassResolver.create(typeResolver.getMappings())),
|
||||
VehicleController.class);
|
||||
|
||||
assertThatReport(report)
|
||||
|
||||
@@ -120,7 +120,7 @@ public class SchemaMappingInspectorUnionTests extends SchemaMappingInspectorTest
|
||||
typeResolver.addMapping(PhotoImpl.class, "Photo");
|
||||
|
||||
SchemaReport report = inspectSchema(schema,
|
||||
initializer -> initializer.classResolver(ClassResolver.fromClassNameTypeResolver(typeResolver)),
|
||||
initializer -> initializer.classResolver(ClassResolver.create(typeResolver.getMappings())),
|
||||
SearchController.class);
|
||||
|
||||
assertThatReport(report)
|
||||
|
||||
Reference in New Issue
Block a user