2016-07-18 1 views
1

J'ai créé un WSClient en fonction de la documentation de lecture. Et en utilisant cet objet client, j'utilise WSRequest pour obtenir ma réponse. Mais tout ce que je reçois est un corps null et 0 comme le code de réponse du serveur. Et quand je débogue à où je demande get() il dit java.lang.illegalstateexception: closed.java.lang.illegalstateexception: fermé en utilisant WSRequest: Lecture Java

Voici mon code.

WS client

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; 
} 

Gestionnaire de demandes

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(); 

J'utilise aussi ExecutorService pour le traitement asynchrone. J'ai cherché partout ce problème et je n'ai toujours pas trouvé de solution pour cela.

Erreur dans Debug

Debug Error

Nouvelle erreur de débogage

Not Completed Error

+1

s'il vous plaît ajouter votre erreur stacktrace et mentionner le numéro de ligne que vous avez l'erreur dans la réalité .. @Akila –

+0

Il n'y a pas d'erreur d'affichage dans la console. Donc j'ai dû le déboguer. J'ai mis à jour ma question avec une capture d'écran du débogage –

+0

'customWSClient.close(); return customWSClient; 'c'est peut-être le problème? – Salem

Répondre

0

Le problème ici est que le WSClient est fermé avec customWSClient.close(). Après cela, il n'est pas possible de faire des demandes.

+0

Je l'ai corrigé mais maintenant je reçois une autre erreur. Il dit [email protected] [Non terminé]. J'ai modifié ma question avec le nouveau débogage. –