diff --git a/src/main/java/com/github/dockerjava/jaxrs/filter/ResponseStatusExceptionFilter.java b/src/main/java/com/github/dockerjava/jaxrs/filter/ResponseStatusExceptionFilter.java index 6c2476291..bac31fc81 100644 --- a/src/main/java/com/github/dockerjava/jaxrs/filter/ResponseStatusExceptionFilter.java +++ b/src/main/java/com/github/dockerjava/jaxrs/filter/ResponseStatusExceptionFilter.java @@ -10,6 +10,8 @@ import javax.ws.rs.core.MediaType; import org.apache.commons.io.IOUtils; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; import com.fasterxml.jackson.databind.JsonNode; import com.fasterxml.jackson.databind.ObjectMapper; @@ -31,6 +33,8 @@ */ public class ResponseStatusExceptionFilter implements ClientResponseFilter { + private static final Logger LOG = LoggerFactory.getLogger(ResponseStatusExceptionFilter.class); + @Override public void filter(ClientRequestContext requestContext, ClientResponseContext responseContext) throws IOException { int status = responseContext.getStatus(); @@ -79,13 +83,19 @@ private String getBodyAsMessage(ClientResponseContext responseContext) { String message = IOUtils.toString(entityStream, charset); if (MediaType.APPLICATION_JSON_TYPE.equals(mediaType)) { - ObjectMapper mapper = new ObjectMapper(); - JsonNode node = mapper.readTree(entityStream).get("message"); - if (node != null) { - message = node.textValue(); + try { + JsonNode node = new ObjectMapper().readTree(message); + if (node != null) { + JsonNode messageNode = node.get("message"); + if (messageNode != null && messageNode.isTextual()) { + message = messageNode.textValue(); + } + } + } catch (IOException e) { + // ignore parsing errors and return the message as is + LOG.debug("Failed to unwrap error message: {}", e.getMessage(), e); } } - return message; } catch (Exception ignored) { } }