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
Nouvelle erreur de débogage
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 –
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 –
'customWSClient.close(); return customWSClient; 'c'est peut-être le problème? – Salem