2016-12-31 10 views
14

Chcę napisać kawałek kodu, który będzie obsługiwać zapytania GraphQL takie jak:Dlaczego DataFetcher nie jest wywoływany w tej konfiguracji GraphQL?

query { 
     group(id: "com.graphql-java") 
     name(name: "graphql-java") 
     version(id: "2.3.0") 
    } 

Utworzyłem moduł pobierania danych i umieścić punkt przerwania wewnątrz metody get:

import graphql.schema.DataFetcher; 
    import graphql.schema.DataFetchingEnvironment; 

    public class TestDataFetcher implements DataFetcher { 
     public Object get(final DataFetchingEnvironment dataFetchingEnvironment) { 
      return null; 
     } 
    } 

Następnie I napisał następujący kod:

public class Example02 { 
     public static void main(final String[] args) throws IOException { 
      final Example02 app = new Example02(); 
      app.run(); 
     } 
     void run() throws IOException { 
      final TestDataFetcher testDataFetcher = new TestDataFetcher(); 

      final List<GraphQLFieldDefinition> fields = Lists.newArrayList(
        createGroupField(testDataFetcher), 
        createNameField(), 
        createVersionField()); 

      final GraphQLObjectType queryType = newObject() 
        .name("query") 
        .fields(fields) 
        .build(); 
      final GraphQLSchema schema = GraphQLSchema.newSchema() 
        .query(queryType) 
        .build(); 
      final String query = FileUtils.readFileToString(
        new File("src/main/resources/query1.txt"), 
        "UTF-8" 
     ); 
      final Map<String, Object> result = (Map<String, Object>) new GraphQL(schema).execute(query).getData(); 
      System.out.println(result); 
     } 

     private GraphQLFieldDefinition createVersionField() { 
      return newFieldDefinition().type(GraphQLString).name("version").build(); 
     } 

     private GraphQLFieldDefinition createNameField() { 
      return newFieldDefinition().type(GraphQLString).name("name").build(); 
     } 

     private GraphQLFieldDefinition createGroupField(TestDataFetcher testDataFetcher) { 
      final GraphQLArgument idArg = newArgument().name("id").type(GraphQLString).build(); 
      return newFieldDefinition() 
        .type(GraphQLString) 
        .name("group") 
        .dataFetcher(testDataFetcher) 
        .argument(idArg) 
        .build(); 
     } 
    } 

Kiedy uruchomić metodę main w trybie debugowania, punkt przerwania nie jest aktywować re.

Dlaczego? Jak mogę to naprawić?

Odpowiedz

5

Oto próbka robocza. Użyłem twojego pliku zapytania, tak jak go opublikowałeś. Przeprowadź wdrożenie swojego modułu danych w razie potrzeby. Zasadniczo powinieneś zdefiniować argumenty dla pól nazwy i wersji. Debugger mówi wszystko, gdy uruchomisz new GraphQL(schema).execute(query) ma tablicę errors, która zawiera wszystkie problemy.

import graphql.GraphQL; 
import graphql.schema.*; 
import org.apache.commons.io.FileUtils; 

import java.io.File; 
import java.io.IOException; 
import java.util.ArrayList; 
import java.util.List; 
import java.util.Map; 

import static graphql.Scalars.GraphQLString; 
import static graphql.schema.GraphQLArgument.newArgument; 
import static graphql.schema.GraphQLFieldDefinition.newFieldDefinition; 
import static graphql.schema.GraphQLObjectType.newObject; 

public class Example2 { 


    public class TestDataFetcher implements DataFetcher { 
     public Object get(DataFetchingEnvironment environment) { 
      String id = (String)environment.getArgument("id"); 
      return id; 
     } 
    } 

    public static void main(final String[] args) { 
     Example2 app = new Example2(); 
     app.run(); 
    } 
    void run() { 
     TestDataFetcher testDataFetcher = new TestDataFetcher(); 

     List<GraphQLFieldDefinition> fields = new ArrayList<GraphQLFieldDefinition>(); 

      fields.add(createGroupField(testDataFetcher)); 
       fields.add(createNameField()); 
       fields.add(createVersionField()); 

     GraphQLObjectType queryType = newObject() 
       .name("query") 
       .fields(fields) 
       .build(); 

     GraphQLSchema schema = GraphQLSchema.newSchema() 
       .query(queryType) 
       .build(); 
     String query = null; 
     try { 
       query = FileUtils.readFileToString(
        new File("src/main/resources/query1.txt"), 
        "UTF-8" 
      ); 
     }catch(IOException ioe){ 
      ioe.printStackTrace(); 
     } 

     if(query!=null) { 
      Map<String, Object> result = (Map<String, Object>) new GraphQL(schema).execute(query).getData(); 
      System.out.println(result); 
     } 
    } 

    private GraphQLFieldDefinition createVersionField() { 
     GraphQLArgument arg = newArgument().name("id").type(GraphQLString).build(); 
     return newFieldDefinition().type(GraphQLString).name("version").argument(arg).build(); 
    } 

    private GraphQLFieldDefinition createNameField() { 
     GraphQLArgument arg = newArgument().name("name").type(GraphQLString).build(); 
     return newFieldDefinition().type(GraphQLString).name("name").argument(arg).build(); 
    } 

    private GraphQLFieldDefinition createGroupField(TestDataFetcher testDataFetcher) { 
     final GraphQLArgument idArg = newArgument().name("id").type(GraphQLString).build(); 
     return newFieldDefinition() 
       .type(GraphQLString) 
       .name("group") 
       .dataFetcher(testDataFetcher) 
       .argument(idArg) 
       .build(); 
    } 
} 
0

Twoim problemem jest Twoje zapytanie. Jeśli debugujesz zmienną query, jest to query {\n group(id: "com.graphql-java")\n name(name: "graphql-java")\n version(id: "2.3.0")\n}. Problem to "\ n" w zapytaniu.

Po zmianie zapytania na query{group(id: "com.graphql-java")} zostanie wykonany Twój punkt zatrzymania.

Aby wykonać zapytanie, musiałem najpierw zaktualizować parametry GraphQlFiledDefinitions, aby otrzymać argument.

private GraphQLFieldDefinition createVersionField(TestDataFetcher testDataFetcher) { 
    final GraphQLArgument idArg = newArgument().name("id").type(GraphQLString).build(); 
    return newFieldDefinition().type(GraphQLString).name("version").staticValue("id value").argument(idArg).build(); 
} 

private GraphQLFieldDefinition createNameField(TestDataFetcher testDataFetcher) { 
    final GraphQLArgument nameArg = newArgument().name("name").type(GraphQLString).build(); 
    return newFieldDefinition().type(GraphQLString).name("name").staticValue("name Value").argument(nameArg).build(); 
} 

private GraphQLFieldDefinition createGroupField(TestDataFetcher testDataFetcher) { 
    final GraphQLArgument idArg = newArgument().name("id").type(GraphQLString).build(); 
    return newFieldDefinition() 
      .type(GraphQLString) 
      .name("group") 
      .dataFetcher(testDataFetcher) 
      .argument(idArg) 
      .build(); 
} 

A potem mogę użyć zapytania bez linia łamie query {group(id: "com.graphql-java"),name(name:"graphql-java"),version(id: "2.3.0")}

+0

działa z "\ n" niezależnie od –

+0

\ n jest po prostu białymi znakami. To nowa linia. –

Powiązane problemy