У меня проблема с WSClient в playframework.
Когда я отправляю запрос на закрытие WSClient в блоке finally после:
public WSResponse sendPostRequest(String url, String bodyAsJson, Map<String,List<String>> headers) throws Exception {
WSResponse response;
CompletionStage<WSResponse> wsResponseCompletionStage;
try {
//Headers
WSRequest request = ws.url(url);
request = mapHeaderParams(headers, request);
//sending request to api......
wsResponseCompletionStage = request.post(bodyAsJson);
request.getHeaders().put("Authorization", Arrays.asList("Basic "+ "xyz"));
response = wsResponseCompletionStage.toCompletableFuture().get();
logger.debug("Response Data from Api : " + response.getBody());
} catch (Exception e) {
logger.error("Error Posting Data to Api : " + e.getMessage());
ws.close();
throw e;
}finally {
ws.close();
}
return response;
}
я всегда получаю сообщение об ошибке, когда хочучтобы отправить следующий запрос:
java.lang.IllegalStateException: Closed
.. и когда я не закрываю свой ws-клиент, он постоянно регистрируется в моем приложении.Журналы, подобные этому, и не останавливают его вообще:
debug] oancDefaultChannelPool - Закрыто 0 соединений из 1 в 0 мс [debug] oancDefaultChannelPool - Количество записей для: https://api.com:443: 1 [debug] oancDefaultChannelPool - закрыты 0 соединений из 1 в 0 мс [debug] oancDefaultChannelPool - счетчик записей для: https://api.com:443: 1 [debug] oancDefaultChannelPool - закрыты 0 соединений из 1 в 0 мс
.. поэтому WSClient никогда не закрывается!
Вот мой класс WebClient:
@Singleton
public class ApiRequestClient{
@Inject
private WSClient ws;
final Logger.ALogger logger = Logger.of(this.getClass());
@Inject
public ApiRequestClient(WSClient ws) {
this.ws = ws;
}
public WSRequest mapHeaderParams(Map<String, List<String>> headers, WSRequest request) {
//not working !!!! ....
//request.getHeaders().putAll(headersa);
//thats why we do ......
Set keySet = headers.keySet();
for(Object key : keySet){
request.setHeader(key.toString(), headers.get(key).get(0));
}
return request;
}
public WSResponse sendPostRequest(String url, String bodyAsJson, Map<String,List<String>> headers) throws Exception {
WSResponse response;
CompletionStage<WSResponse> wsResponseCompletionStage;
try {
//Headers
WSRequest request = ws.url(url);
request = mapHeaderParams(headers, request);
//sending request to api......
wsResponseCompletionStage = request.post(bodyAsJson);
//FIXME !!!!
request.getHeaders().put("Authorization", Arrays.asList("Basic "+ "xyz"));
response = wsResponseCompletionStage.toCompletableFuture().get();
logger.debug("Response Data from Api : " + response.getBody());
} catch (Exception e) {
logger.error("Error Posting Data to Api : " + e.getMessage());
ws.close();
throw e;
}finally {
ws.close();
}
return response;
}
public static Map<String, String> queryStringToParameterMap(Map<String, String[]> queryString) {
Map<String, String> params = new HashMap<String, String>();
Set<String> keys = queryString.keySet();
for (String key : keys) {
params.put(key, queryString.get(key)[0]);
}
return params;
}
}
Кто-нибудь знает это странное поведение ??
THX много