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
New Debug Fehler
Bitte fügen Sie Ihren Fehler Stacktrace und Erwähnung Zeilennummer Sie haben den Fehler in der tatsächlichen .. @Akila –
Es ist kein Fehler in der Konsole angezeigt. Also musste ich es debuggen. Ich aktualisierte meine Frage mit einem Screenshot des Debugs –
'customWSClient.close(); return customWSClient; 'ist das vielleicht das Problem? – Salem