java.lang.illegalstateexception: закрыто с помощью WSRequest: воспроизвести Java

Я создал WSClient в соответствии с Play Documentation. И используя этот клиентский объект, я использую WSRequest для получения ответа. Но все, что я получаю, это null тело и 0 в качестве кода ответа сервера. И когда я отлаживаю туда, где я запрашиваю get(), он говорит java.lang.illegalstateexception: closed.

Ниже приведен мой код.

Клиент WS

 private WSClient wsClient() throws IOException {
   akka.stream.Materializer materializer = akka.stream.ActorMaterializer.create(akka.actor.ActorSystem.create());
    // Set up the client config (you can also use a parser here):
    scala.Option<String> noneString = scala.None$.empty();
    WSClientConfig wsClientConfig = new WSClientConfig(
            Duration.apply(120000, TimeUnit.SECONDS), // connectionTimeout
            Duration.apply(120000, TimeUnit.SECONDS), // idleTimeout
            Duration.apply(120000, TimeUnit.SECONDS), // requestTimeout
            true, // followRedirects
            true, // useProxyProperties
            noneString, // userAgent
            true, // compressionEnabled / enforced
            SSLConfigFactory.defaultConfig());

    AhcWSClientConfig clientConfig = AhcWSClientConfigFactory.forClientConfig(wsClientConfig);

    // Add underlying asynchttpclient options to WSClient
    AhcConfigBuilder builder = new AhcConfigBuilder(clientConfig);
    DefaultAsyncHttpClientConfig.Builder ahcBuilder = builder.configure();
    AsyncHttpClientConfig.AdditionalChannelInitializer logging = new AsyncHttpClientConfig.AdditionalChannelInitializer() {
        @Override
        public void initChannel(io.netty.channel.Channel channel) throws IOException {
            channel.pipeline().addFirst("log", new io.netty.handler.logging.LoggingHandler("debug"));
        }
    };
    ahcBuilder.setHttpAdditionalChannelInitializer(logging);

    WSClient customWSClient = new play.libs.ws.ahc.AhcWSClient(ahcBuilder.build(), materializer);

    customWSClient.close();
    return customWSClient;
}

Обработчик запросов

Future future = executorService.submit(new Runnable() {
                @Override
                public void run() {
                    WSRequest wsRequest = wsClient.url(url);

                    WSRequest complexRequest = wsRequest.setHeader(header.getKey(), header.getValue())
                            .setRequestTimeout(120000).setMethod(requestMethod);

                    CompletionStage<WSResponse> responsePromise = complexRequest.get();

                    CompletionStage<Result> promiseResult = responsePromise.thenApplyAsync(responseAfter -> {

                        int responseStatus = responseAfter.getStatus();
                        String body = responseAfter.getBody();
                        restResponse.setBody(body);
                        restResponse.setStatus(responseStatus);

                        return ok();
                    });

                }
            });
            future.get();

            executorService.shutdown();

Я также использую ExecutorService для асинхронной обработки. Я везде искал эту проблему, и я до сих пор не нашел для нее решения.

Ошибка отладки

Ошибка отладки

Новая ошибка отладки

Ошибка не завершена


person Akila Randil    schedule 18.07.2016    source источник
comment
пожалуйста, добавьте свою трассировку стека ошибок и укажите номер строки, в которой вы действительно получили ошибку .. @Akila   -  person Vikrant Kashyap    schedule 18.07.2016
comment
В консоли не отображается ошибка. Поэтому мне пришлось отлаживать его. Я обновил свой вопрос скриншотом отладки   -  person Akila Randil    schedule 18.07.2016
comment
customWSClient.close(); return customWSClient; может в этом проблема?   -  person Salem    schedule 18.07.2016
comment
@ Салем, да, это ошибка.   -  person Stephane Landelle    schedule 19.07.2016
comment
@AkilaHettiarachchi Я также использую ExecutorService для асинхронной обработки. WSClient уже асинхронный (вы получаете CompletionStage)   -  person Salem    schedule 25.07.2016
comment
@Salem Даже без этого это не работает.   -  person Akila Randil    schedule 26.07.2016


Ответы (1)


Проблема здесь в том, что WSClient закрывается с помощью customWSClient.close(). После этого делать запросы невозможно.

person Salem    schedule 20.07.2016
comment
Я исправил это, но теперь я получаю другую ошибку. Там написано scala.concurrent.java8.FuturesConvertersImpl$CF@7c2312fa[Не завершено]. Я отредактировал свой вопрос с новой отладкой. - person Akila Randil; 25.07.2016