2016-11-17 6 views
-1

Это сообщение об ошибке из OkHttp v3.4.1 уже обсуждался несколько раз, и каждый раз, когда я читал об этом, люди не приближались тело ответа:OkHttp: соединение с http://example.com/ было утечено. Вы забыли закрыть тело ответа?

WARNING: A connection to http://www.example.com/ was leaked. Did you forget to close a response body? 

Но мой код выглядит как это:

private String executeRequest(Request request) throws IOException { 
    Response response = httpClient.newCall(request).execute(); 

    try (ResponseBody responseBody = response.body()) { 
     String string = responseBody.string(); 
     logger.debug("Result: {}", string); 
     return string; 
    } 
    } 

Так что responseBody.close() всегда называется. Почему я получил ошибку выше? я настроил пользовательский JWT перехватчик, но я не вижу, как это может вызвать проблемы:

public class JwtInterceptor implements Interceptor { 

    private String jwt; 

    @Override 
    public Response intercept(Chain chain) throws IOException { 
    Request request = chain.request(); 

    if (jwt != null) { 
     request = request.newBuilder() 
      .addHeader("Authorization", "Bearer " + jwt) 
      .build(); 
    } 

    Response response = chain.proceed(request); 
    String jwt = response.header("jwt"); 
    if (jwt != null) { 
     this.jwt = jwt; 
    } 

    return chain.proceed(request); 
    } 
} 
+0

где 'responseBody.close()' вызывается в вашем примере? –

+0

Я могу только сказать, что 'response.close()' никогда не вызывается ** – Antoniossss

+3

^^^ try-with-resources –

ответ

0

Оказывается, мой перехватчик прослушивается:

return chain.proceed(request); 

должно быть:

return request; 

 Смежные вопросы

  • Нет связанных вопросов^_^