Hacktoberfest 2026: as issues que os mantenedores marcaram para outubro, abertas e boas para iniciantes. Ver issues do Hacktoberfest

Generic wrapper don't work with Lists

Aberta
#254 0 comentários 2 reações 0 responsáveis Ver no GitHub

Mantenedores costumam responder em até 1 dia

Ninguém assumiu esta issue ainda.

Avaliação

Dificuldade
4/5
Tempo estimado
3-5 dias
Facilidade para iniciantes
25/100
Tipo de issue
Bug
Clareza
Claramente especificada
Status de atividade
Estagnada
Stack de tecnologia
graphql, java, kotlin
Domínio
api, backend

Direção de pesquisa

Start with the source resolver in FieldResolver.kt, named in the stack trace, and reproduce the supplied example with List<Try<Payload>>. Compare it with the working Try<Payload> case; done means nested wrappers resolve the Payload fields instead of passing the Try object to field resolution.

Escrita pelo modelo de indexação a partir do texto da issue.

Descrição

bug

Generic wrappers don't work if used not as outermost wrapper, i.e. Wrapper<String> works while List<Wrapper<String>> doesn't.

My example, with Vavr Try:

package com.my.test;

import com.coxautodev.graphql.tools.GraphQLQueryResolver;
import com.coxautodev.graphql.tools.SchemaParser;
import com.coxautodev.graphql.tools.SchemaParserOptions;
import graphql.GraphQL;
import io.vavr.control.Try;

import java.util.List;

public class GenericWrapperTest {

    private static final String schemaString = "type Query {\n" +
            "    payloads: [Payload!]!\n" +
            "}\n" +
            "\n" +
            "type Payload {\n" +
            "    data: String!\n" +
            "}";

    private static final String query = "{\n" +
            "    payloads {\n" +
            "        data\n" +
            "    }\n" +
            "}";

    public static class Payload {
        public Try<String> getData() {
            return Try.success("foo");
        }
    }

    public static class Query implements GraphQLQueryResolver {
        public List<Try<Payload>> getPayloads() {
            return List.of(Try.success(new Payload()));
        }
    }

    public static void main(String[] args) {

        final var tryWrapper = SchemaParserOptions.GenericWrapper.withTransformer(io.vavr.control.Try.class, 0,
                Try::get, type -> type);


        final var schema = SchemaParser.newParser()
                .schemaString(schemaString)
                .resolvers(new Query())
                .options(SchemaParserOptions.newOptions()
                        .genericWrappers(tryWrapper)
                        .build())
                .build()
                .makeExecutableSchema();

        System.out.println(GraphQL.newGraphQL(schema).build().execute(query));

    }
}

Trying to run this results in

2019-03-28 14:11:35.212 [main] WARN  g.e.SimpleDataFetcherExceptionHandler:23 - Exception while fetching data (/payloads[0]/data) : Expected source object to be an instance of 'com.my.test.GenericWrapperTest$Payload' but instead got 'io.vavr.control.Try$Success'
com.coxautodev.graphql.tools.ResolverError: Expected source object to be an instance of 'com.my.test.GenericWrapperTest$Payload' but instead got 'io.vavr.control.Try$Success'
	at com.coxautodev.graphql.tools.FieldResolver$getSourceResolver$2.invoke(FieldResolver.kt:27)

Switching payloads to just Try<Payload> makes it run as expected - fail field resolution on failed Try and complete on successful.

Linguagem predominante
Kotlin
Estrelas
824
Forks
175
Merge médio
2d 5h
PRs com merge (30d)
52

Preparar o ambiente

Este projeto não oferece contêiner de desenvolvimento, Dockerfile nem guia de contribuição, então a configuração fica por sua conta: comece pelo README e veja nosso guia da primeira contribuição para os passos gerais.

Primeiros passos

  1. Leia a issue inteira e depois o guia de contribuição do projeto.
  2. Comente na issue dizendo que vai assumir — evita que duas pessoas façam o mesmo trabalho.
  3. Faça um fork do repositório e trabalhe em uma branch.
  4. Abra um pull request que referencie o número da issue.

Mais de graphql-java-kickstart/graphql-java-tools

Todas as issues de graphql-java-kickstart/graphql-java-tools

Issues semelhantes

Mais issues de Kotlin

Receba novas issues na sua caixa de entrada

Um resumo curto de issues do GitHub para quem está começando.