Tinus Jackson
Tinus Jackson

Reputation: 3653

ValidationError FieldUndefined SPQR GraphQL

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

Upvotes: 7

Views: 5918

Answers (3)

T.Kruger
T.Kruger

Reputation: 316

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

Upvotes: 5

rohit thomas
rohit thomas

Reputation: 2312

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

Upvotes: 1

Manav Bhanot
Manav Bhanot

Reputation: 113

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

Upvotes: 1

Related Questions