7

I am getting the following and cant seem to find an answer.

Error [ValidationError{validationErrorType=FieldUndefined, queryPath=[find_by_id], message=Validation error of type FieldUndefined: Field 'find_by_id' in type 'Query' is undefined @ 'find_by_id', locations=[SourceLocation{line=1, column=2}], description='Field 'find_by_id' in type 'Query' is undefined'}]

My Code.

Query

@GraphQLQuery(name = "find_by_id")
public Event findById(@GraphQLArgument(name = "id") Long id) {

Schema Gen

@EJB
private EventFacade eventFacade; // Normal stateless bean 

GraphQLSchema guestSchema = new GraphQLSchemaGenerator()
            .withOperationsFromSingleton(eventFacade)
            .withValueMapperFactory(new JacksonValueMapperFactory())
            .withDefaults()
            .generate();

GraphQL graphQL = GraphQL.newGraphQL(guestSchema).build();

Code to Execute

String query = "{find_by_id (id: 1){eventName}}";
ExecutionResult result = graphQL.execute(query);

Using the SPQR lib

Event POJO is basic with eventName as a String and an id from the abstract (Parent) class. Entity class is in a different jar (Entity Jar). Code to execute Query and build schema are in the EJB Jar.

Any help / indication where i went wrong will be appreciated.

UPDATE Created a git issue to help solve Git Issue

kaqqao
  • 12,984
  • 10
  • 64
  • 118
Tinus Jackson
  • 3,397
  • 2
  • 25
  • 58

3 Answers3

5

I found this solution here: https://github.com/leangen/graphql-spqr/wiki/Errors#ambiguous-member-type

Reference: To treat all missing type arguments as Object or apply custom type transformation logic, supply a TypeTransformer:

This should work for you.

    GraphQLSchema schema = new GraphQLSchemaGenerator()
           .withBasePackages(basePackages)
           .withTypeTransformer(new DefaultTypeTransformer(true, true))
           .withOperationsFromSingleton(eventFacade).generate();
T.Kruger
  • 316
  • 1
  • 5
1

I believe you must change this String query = "{find_by_id (id: 1){eventName}}"; to String query = "\"query\": {find_by_id (id: 1){eventName}}";

Manav Bhanot
  • 113
  • 3
  • 16
1

Can you add the Even Class details, I'm guessing that's where your issue lies as the author in your URL pass a class to the query, but you are passing only ID(find_by_id) followed by {eventName} i think it should be changed to

"{Event(id: 1){eventName}}"

The Author has given an example about how to use findByID in the below examples for the Vendor Class and he calls it in a different format from yours, maybe give that a shot :) https://github.com/leangen/graphql-spqr-samples

rohit thomas
  • 2,302
  • 11
  • 23
  • Tried it and it does not work. I believe the first part is only the name of the query and not the class / type – Tinus Jackson May 03 '18 at 06:24
  • https://stackoverflow.com/questions/48968896/validation-error-of-type-fieldundefined-field-register-in-type-query-is-und did you check this answer gives a better understanding of how the query should be formed?? – rohit thomas May 07 '18 at 03:16
  • im not sure that you read through the lib. It will explain most of what im trying to do. Also not building my own schema as the lib are doing it for me – Tinus Jackson May 07 '18 at 06:20