如何在GraphQL Java中解析多个模式文件

时间:2017-10-04 09:16:41

标签: java graphql graphql-java

我正在使用GraphQL和java。我有几个要解析的模式文件。任何人都可以告诉我是否有办法做到这一点。我使用了以下方式,只允许解析一个模式文件。

@Value("classpath:dashboard.graphql")
private Resource schemaResource;

File schemaFile = schemaResource.getFile();
TypeDefinitionRegistry definitionRegistry = new SchemaParser().parse(schemaFile);

我有两个架构文件,例如 dashboard.graphql student.graphql 。那么我们如何解析这两个文件呢?

任何人都可以解释一下。

由于

2 个答案:

答案 0 :(得分:3)

我知道这是一个古老的问题,但是SO答案出现在官方的GraphQL-java documentation之前,所以我想将其发布在这里:

SchemaParser schemaParser = new SchemaParser();
SchemaGenerator schemaGenerator = new SchemaGenerator();

File schemaFile1 = loadSchema("starWarsSchemaPart1.graphqls");
File schemaFile2 = loadSchema("starWarsSchemaPart2.graphqls");
File schemaFile3 = loadSchema("starWarsSchemaPart3.graphqls");

TypeDefinitionRegistry typeRegistry = new TypeDefinitionRegistry();

// each registry is merged into the main registry
typeRegistry.merge(schemaParser.parse(schemaFile1));
typeRegistry.merge(schemaParser.parse(schemaFile2));
typeRegistry.merge(schemaParser.parse(schemaFile3));

GraphQLSchema graphQLSchema = schemaGenerator.makeExecutableSchema(typeRegistry, buildRuntimeWiring());

答案 1 :(得分:1)

我们使用schemaParserBuilder

这样做了
SchemaParserBuilder parser = SchemaParser.newParser();
parser.files(arrayOfFileNames);//fill the array with the paths to your schema files
//define other properties like resolvers here
GraphQLSchema schema = parser.build().makeExecutableSchema();

另一个想法是否需要TypeDefinitionRegistry - 对象。只需单独阅读所有模式文件,将它们合并到String并使用schemaParser.parse(String schema)。实际上parser.files正是这样做的。