Hacktoberfest 2026: die Issues, die Maintainer für den Oktober markiert haben – offen und einsteigerfreundlich. Hacktoberfest-Issues durchsuchen

Generic wrapper don't work with Lists

Offen
#254 0 Kommentare 2 Reaktionen 0 zugewiesene Personen Auf GitHub ansehen

Maintainer antworten meist innerhalb von 1 Tag

Dieses Issue hat noch niemand übernommen.

Bewertung

Schwierigkeit
4/5
Geschätzter Aufwand
3-5 Tage
Anfängerfreundlichkeit
25/100
Issue-Typ
Bug
Klarheit
Klar beschrieben
Aktivitätsstatus
Veraltet
Tech-Stack
graphql, java, kotlin
Bereich
api, backend

Rechercherichtung

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.

Vom Indexierungsmodell aus dem Issue-Text verfasst.

Beschreibung

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.

Vorherrschende Sprache
Kotlin
Sterne
824
Forks
175
Ø Merge
2 T. 5 Std.
Gemergte PRs (30 T.)
52

Entwicklungsumgebung

Dieses Projekt bietet weder Dev-Container noch Dockerfile noch Beitragsleitfaden – die Einrichtung liegt bei Ihnen. Beginnen Sie mit der README; die allgemeinen Schritte stehen in unserem Leitfaden für den ersten Beitrag.

Erste Schritte

  1. Lesen Sie das ganze Issue und danach den Beitragsleitfaden des Projekts.
  2. Schreiben Sie ins Issue, dass Sie es übernehmen — das erspart doppelte Arbeit.
  3. Forken Sie das Repository und arbeiten Sie in einem Branch.
  4. Öffnen Sie einen Pull Request, der die Issue-Nummer nennt.

Mehr aus graphql-java-kickstart/graphql-java-tools

Alle Issues in graphql-java-kickstart/graphql-java-tools

Ähnliche Issues

Weitere Issues zu Kotlin

Neue Issues direkt in Ihr Postfach

Eine kurze Übersicht über anfängerfreundliche GitHub-Issues.