2016-07-18 20 views
1

Ich habe eine WSClient gemäß der Play-Dokumentation erstellt. Und mit diesem Client-Objekt verwende ich WSRequest, um meine Antwort zu erhalten. Aber alles, was ich bekomme, ist ein null Körper und 0 als Server-Response-Code. Und wenn ich debugge, wo ich Anfrage get() es sagt java.lang.illegalstateexception: closed.java.lang.illegalstateexception: geschlossen mit WSRequest: Play Java

Folgendes ist mein 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; 
} 

-Request-Handler

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

ich auch ExecutorService für asynchrone Bearbeitung verwenden. Ich habe überall nach diesem Problem gesucht und ich habe immer noch keine Lösung dafür gefunden.

Fehler in Debug

Debug Error

New Debug Fehler

Not Completed Error

+1

Bitte fügen Sie Ihren Fehler Stacktrace und Erwähnung Zeilennummer Sie haben den Fehler in der tatsächlichen .. @Akila –

+0

Es ist kein Fehler in der Konsole angezeigt. Also musste ich es debuggen. Ich aktualisierte meine Frage mit einem Screenshot des Debugs –

+0

'customWSClient.close(); return customWSClient; 'ist das vielleicht das Problem? – Salem

Antwort

0

Das Problem hierbei ist, dass der WSClient mit customWSClient.close() geschlossen wird. Danach ist es nicht möglich, Anfragen zu stellen.

+0

Ich habe es behoben, aber jetzt bekomme ich einen weiteren Fehler. Es sagt [email protected] [nicht abgeschlossen]. Ich habe meine Frage mit dem neuen Debug bearbeitet. –