ValidationError FieldUndefined SPQR GraphQL

Я получаю следующее и не могу найти ответа.

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'}]

Мой код.

Запрос

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

Схема 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();

Код для выполнения

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

Использование библиотеки SPQR

Событие POJO является базовым с eventName как String и идентификатором из абстрактного (Parent) класса. Класс сущности находится в другой банке (Entity Jar). Код для выполнения запроса и схемы сборки находится в EJB Jar.

Любая помощь / указание, где я ошибся, будет оценена по достоинству.

ОБНОВЛЕНИЕ Создана проблема с git, чтобы помочь решить проблему с Git


person Tinus Jackson    schedule 26.04.2018    source источник


Ответы (3)


Я нашел это решение здесь: https://github.com/leangen/graphql-spqr/wiki/Errors#ambiguous-member-type

Ссылка: Чтобы обработать все отсутствующие аргументы типа как Object или применить логику преобразования настраиваемого типа, предоставьте TypeTransformer:

Это должно сработать для вас.

    GraphQLSchema schema = new GraphQLSchemaGenerator()
           .withBasePackages(basePackages)
           .withTypeTransformer(new DefaultTypeTransformer(true, true))
           .withOperationsFromSingleton(eventFacade).generate();
person T.Kruger    schedule 10.05.2018
comment
Это требуется .withBasePackages (basePackages)? - person Tinus Jackson; 10.05.2018
comment
Нет, это не обязательно, я тоже должен был упомянуть в своем ответе. Убедитесь, что .withTypeTransformer стоит до .withOperationsFromSingleton. - person T.Kruger; 10.05.2018

Я считаю, что вы должны изменить эту строку query = "{find_by_id (id: 1) {eventName}}"; в String query = "\" query \ ": {find_by_id (id: 1) {eventName}}";

person Manav Bhanot    schedule 26.04.2018
comment
Библиотека, которую я использую, не требует этого. См. Пример из библиотеки - person Tinus Jackson; 02.05.2018
comment
Получение следующего, если я добавлю его graphql.GraphQL - Запрос не удалось проанализировать: 'query: {find_by_id (id: 1) {eventName}}' - person Tinus Jackson; 02.05.2018

Можете ли вы добавить детали четного класса, я предполагаю, в чем заключается ваша проблема, поскольку автор в вашем URL-адресе передает класс в запрос, но вы передаете только идентификатор (find_by_id), за которым следует {eventName}, я думаю, что его следует изменить к

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

Автор привел пример того, как использовать findByID в приведенных ниже примерах для класса поставщика, и он называет его в формате, отличном от вашего, может быть, попробую :) https://github.com/leangen/graphql-spqr-samples

person rohit thomas    schedule 03.05.2018
comment
Пробовал и не работает. Я считаю, что первая часть - это только имя запроса, а не класс / тип - person Tinus Jackson; 03.05.2018
comment
stackoverflow.com/questions/48968896/ вы проверили, что этот ответ дает лучшее понимание того, как должен формироваться запрос ?? - person rohit thomas; 07.05.2018
comment
Я не уверен, что вы прочитали библиотеку. Это объяснит большую часть того, что я пытаюсь сделать. Также не строю свою собственную схему, поскольку библиотека делает это за меня. - person Tinus Jackson; 07.05.2018