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

如何在GraphQL Java中解析多个模式文件,java,graphql,graphql-java,Java,Graphql,Graphql Java,我将GraphQL与java一起使用。我有几个要分析的模式文件。有人能告诉我是否有办法做到这一点吗。我使用了下面的方法,只允许解析一个模式文件 @Value("classpath:dashboard.graphql") private Resource schemaResource; File schemaFile = schemaResource.getFile(); TypeDefinitionRegistry definitionRegistry = new SchemaParser()

我将GraphQL与java一起使用。我有几个要分析的模式文件。有人能告诉我是否有办法做到这一点吗。我使用了下面的方法,只允许解析一个模式文件

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

File schemaFile = schemaResource.getFile();
TypeDefinitionRegistry definitionRegistry = new SchemaParser().parse(schemaFile);
Supose我有两个模式文件,例如dashboard.graphqlstudent.graphql。那么我们如何解析这两个文件呢

谁能给我解释一下吗


谢谢

我们使用
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(stringschema)
。事实上,
parser.files
正是这样做的。

我知道这是一个老生常谈的问题,但是答案出现在官方的GraphQL java之前,所以我想我会把它贴在这里:

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());

您好,在节点中,我们使用库merge-graphql-schemas()。检查Java中是否有类似的支持库。当我将.files与多个文件一起使用时,我的查询对象仅显示在数组中输入的最后一个文件中,有没有可能遇到这种情况?这是事实。。。尽管这种合并非常有限。它不合并查询,因此它的目的是将1模式拆分为位,而不是合并模式。因此,这是行不通的。事实上,如果您将所有模式连接到一个字符串中,并从中生成一个模式,那么实际上会得到相同的结果。