diff options
author | Morten Tokle <mortent@verizonmedia.com> | 2020-03-05 09:26:44 +0100 |
---|---|---|
committer | Morten Tokle <mortent@verizonmedia.com> | 2020-03-05 10:04:42 +0100 |
commit | 71f4f6f5663a487dc439f6d446ffc82fc8795693 (patch) | |
tree | 89c65aa4b4f9397b4df65f76ed15437ccf98f837 /vespa-athenz | |
parent | 749bb37f6e77ffa43e250799a6940bccd268dc6c (diff) |
Log errors
Diffstat (limited to 'vespa-athenz')
-rw-r--r-- | vespa-athenz/src/main/java/com/yahoo/vespa/athenz/client/common/ClientBase.java | 19 |
1 files changed, 16 insertions, 3 deletions
diff --git a/vespa-athenz/src/main/java/com/yahoo/vespa/athenz/client/common/ClientBase.java b/vespa-athenz/src/main/java/com/yahoo/vespa/athenz/client/common/ClientBase.java index 97a04e21d4b..c1ce45c35da 100644 --- a/vespa-athenz/src/main/java/com/yahoo/vespa/athenz/client/common/ClientBase.java +++ b/vespa-athenz/src/main/java/com/yahoo/vespa/athenz/client/common/ClientBase.java @@ -2,6 +2,7 @@ package com.yahoo.vespa.athenz.client.common; import com.fasterxml.jackson.core.JsonProcessingException; +import com.fasterxml.jackson.databind.JsonMappingException; import com.fasterxml.jackson.databind.ObjectMapper; import com.fasterxml.jackson.datatype.jsr310.JavaTimeModule; import com.yahoo.vespa.athenz.client.common.bindings.ErrorResponseEntity; @@ -16,6 +17,7 @@ import org.apache.http.entity.StringEntity; import org.apache.http.impl.client.CloseableHttpClient; import org.apache.http.impl.client.DefaultHttpRequestRetryHandler; import org.apache.http.impl.client.HttpClientBuilder; +import org.apache.http.util.EntityUtils; import javax.net.ssl.HostnameVerifier; import javax.net.ssl.SSLContext; @@ -23,12 +25,16 @@ import java.io.IOException; import java.io.UncheckedIOException; import java.time.Duration; import java.util.function.Supplier; +import java.util.logging.Level; +import java.util.logging.Logger; /** * @author bjorncs */ public abstract class ClientBase implements AutoCloseable { + private static final Logger logger = Logger.getLogger(ClientBase.class.getName()); + private static final ObjectMapper objectMapper = new ObjectMapper().registerModule(new JavaTimeModule()); private final CloseableHttpClient client; @@ -59,15 +65,22 @@ public abstract class ClientBase implements AutoCloseable { } protected <T> T readEntity(HttpResponse response, Class<T> entityType) throws IOException { - if (isSuccess(response.getStatusLine().getStatusCode())) { + int statusCode = response.getStatusLine().getStatusCode(); + if (isSuccess(statusCode)) { if (entityType.equals(Void.class)) { return null; } else { return objectMapper.readValue(response.getEntity().getContent(), entityType); } } else { - ErrorResponseEntity errorEntity = objectMapper.readValue(response.getEntity().getContent(), ErrorResponseEntity.class); - throw exceptionFactory.createException(errorEntity.code, errorEntity.description); + byte[] entity = EntityUtils.toByteArray(response.getEntity()); + try { + ErrorResponseEntity errorEntity = objectMapper.readValue(entity, ErrorResponseEntity.class); + throw exceptionFactory.createException(errorEntity.code, errorEntity.description); + } catch (JsonMappingException e) { + logger.log(Level.INFO, String.format("Response returned status %d, but error response not parseable: %s", statusCode, new String(entity)), e); + throw new RuntimeException("Non JSON response from Athenz."); + } } } |