Клиент Apollo, выбрасывающий NPE при вызове ApolloQueryCall.enqueue - PullRequest
0 голосов
/ 06 марта 2019

Я изучаю взаимодействие клиента GraphQL с сервером с использованием JAVA.Я использую Apollo-Client сейчас.Возникла проблема при выполнении запроса через Java-клиент.

Моя схема GraphQL:

type Query {
  bookById(id: ID): Book
}

type Book {
  id: ID
  name: String
  pageCount: Int
  author: Author
}

type Author {
  id: ID
  firstName: String
  lastName: String
}

Моя схема запроса

query BookById($id: ID!) {
    bookById(id: $id) {
        name
    }
}

Я сгенерировал код клиента Java из подключаемого модуля Apollo Gradle.

Ниже приведен код моего клиента:

public class Client {
    private static final String BASE_URL = "https://localhost:8080/graphql";

    private ApolloClient apolloClient;
    private AtomicInteger result;

    @Test
    public void connectServer() throws InterruptedException {
        OkHttpClient okHttpClient = new OkHttpClient.Builder()
                .build();
        apolloClient = ApolloClient.builder()
                .serverUrl(BASE_URL)
                .okHttpClient(okHttpClient)
                .build();

        BookByIdQuery bookByIdQuery = new BookByIdQuery("book-1");

        ApolloQueryCall<BookByIdQuery.Data> query = apolloClient
                .query(bookByIdQuery);

        System.out.println(bookByIdQuery.queryDocument());

        query.enqueue(new CallBackImpl());

        Thread.currentThread().join();
    }


    private class CallBackImpl extends ApolloCall.Callback<BookByIdQuery.Data> {

        @Override
        public void onResponse(@Nonnull Response<BookByIdQuery.Data> response) {
            log.info(response.data().bookById().name());

        }

        @Override
        public void onFailure(@Nonnull ApolloException e) {
            log.info("Fail:" + e.getMessage());
        }
    }
}

Когда я запускаю эту клиентскую программу, она выдает:

Exception in thread "OkHttp Dispatcher" java.lang.NullPointerException
at Client$CallBackImpl.onFailure(Client.java:61)
at com.apollographql.apollo.ApolloCall$Callback.onNetworkError(ApolloCall.java:115)
at com.apollographql.apollo.internal.RealApolloCall$1.onFailure(RealApolloCall.java:238)
at com.apollographql.apollo.internal.interceptor.ApolloCacheInterceptor$1$1.onFailure(ApolloCacheInterceptor.java:91)
at com.apollographql.apollo.internal.interceptor.ApolloParseInterceptor$1.onFailure(ApolloParseInterceptor.java:63)
at com.apollographql.apollo.internal.interceptor.ApolloServerInterceptor$1$1.onFailure(ApolloServerInterceptor.java:89)
at okhttp3.RealCall$AsyncCall.execute(RealCall.java:148)
at okhttp3.internal.NamedRunnable.run(NamedRunnable.java:32)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
at java.lang.Thread.run(Thread.java:745)

Ошибка на стороне сервера:

ava.lang.IllegalArgumentException: Invalid character found in method name. HTTP method names must be tokens
at org.apache.coyote.http11.Http11InputBuffer.parseRequestLine(Http11InputBuffer.java:414) ~[tomcat-embed-core-9.0.14.jar:9.0.14]
at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:294) ~[tomcat-embed-core-9.0.14.jar:9.0.14]
at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:66) [tomcat-embed-core-9.0.14.jar:9.0.14]
at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:834) [tomcat-embed-core-9.0.14.jar:9.0.14]
at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1417) [tomcat-embed-core-9.0.14.jar:9.0.14]
at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49) [tomcat-embed-core-9.0.14.jar:9.0.14]
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) [na:1.8.0_121]
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) [na:1.8.0_121]
at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61) [tomcat-embed-core-9.0.14.jar:9.0.14]
at java.lang.Thread.run(Thread.java:745) [na:1.8.0_121]

От клиента бессонницы тот же звонок работает нормально по URL: https://localhost:8080/graphql: enter image description here

1 Ответ

0 голосов
/ 06 марта 2019

заменены https на http в BASE_URL.Сервер не смог понять запрос https.

...