Reputation: 3653
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
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
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
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