private String getResponseBody(ClientResponseContext context) { try (InputStream entityStream = context.getEntityStream()) { if (entityStream != null) { byte[] bytes = IOUtils.toByteArray(entityStream); context.setEntityStream(new ByteArrayInputStream(bytes)); return new String(bytes); } } catch (IOException e) { LOGGER.log(Level.SEVERE, "Failure during reading the response body", e); context.setEntityStream(new ByteArrayInputStream(new byte[0])); } return ""; }
private String getBodyAsMessage(ClientResponseContext responseContext) throws IOException { if (responseContext.hasEntity()) { try (InputStream entityStream = responseContext.getEntityStream()) { Charset charset = null; MediaType mediaType = responseContext.getMediaType(); if (mediaType != null) { String charsetName = mediaType.getParameters().get("charset"); if (charsetName != null) { try { charset = Charset.forName(charsetName); } catch (Exception ignored) { } } } if (charset == null) { charset = Charset.defaultCharset(); } return IOUtils.toString(entityStream, charset); } catch (Exception ignored) { } } return null; } }
@Override public void filter(final ClientRequestContext requestContext, final ClientResponseContext responseContext) throws IOException { final long id = aid.incrementAndGet(); final StringBuilder b = new StringBuilder(); printResponseLine(b, "Client response received", id, responseContext.getStatus()); printPrefixedHeaders(b, id, RESPONSE_PREFIX, responseContext.getHeaders()); if (printEntity && responseContext.hasEntity()) { responseContext.setEntityStream(logInboundEntity(b, responseContext.getEntityStream())); } log(b); }
@Override public void filter(final ClientRequestContext requestContext, final ClientResponseContext responseContext) throws IOException { if (!logger.isLoggable(level)) { return; } final Object requestId = requestContext.getProperty(LOGGING_ID_PROPERTY); final long id = requestId != null ? (Long) requestId : _id.incrementAndGet(); final StringBuilder b = new StringBuilder(); printResponseLine(b, "Client response received", id, responseContext.getStatus()); printPrefixedHeaders(b, id, RESPONSE_PREFIX, responseContext.getHeaders()); if (responseContext.hasEntity() && printEntity(verbosity, responseContext.getMediaType())) { responseContext.setEntityStream(logInboundEntity(b, responseContext.getEntityStream(), MessageUtils.getCharset(responseContext.getMediaType()))); } log(b); } }
@Override public void filter(final ClientRequestContext requestContext, final ClientResponseContext responseContext) throws IOException { if (!logger.isLoggable(level)) { return; } final Object requestId = requestContext.getProperty(LOGGING_ID_PROPERTY); final long id = requestId != null ? (Long) requestId : _id.incrementAndGet(); final StringBuilder b = new StringBuilder(); printResponseLine(b, "Client response received", id, responseContext.getStatus()); printPrefixedHeaders(b, id, RESPONSE_PREFIX, responseContext.getHeaders()); if (responseContext.hasEntity() && printEntity(verbosity, responseContext.getMediaType())) { responseContext.setEntityStream(logInboundEntity(b, responseContext.getEntityStream(), MessageUtils.getCharset(responseContext.getMediaType()))); } log(b); } }
@Override public synchronized void close() { try { responseContext.getEntityStream().close(); } catch (Throwable e) { // ignore } }
@Override public synchronized boolean bufferEntity() { if (bufferedEntity != null) return true; InputStream is = responseContext.getEntityStream(); if (is == null) return false; try { bufferedEntity = ReadFromStream.readFromStream(1024, is); } catch (IOException e) { throw new ProcessingException(e); } return true; }
public void cacheIfPossible(ClientRequestContext request, ClientResponseContext response) throws IOException { String cc = (String) response.getHeaderString(HttpHeaders.CACHE_CONTROL); String exp = (String) response.getHeaderString(HttpHeaders.EXPIRES); int expires = -1; if (cc != null) { CacheControl cacheControl = CacheControl.valueOf(cc); if (cacheControl.isNoCache()) return; expires = cacheControl.getMaxAge(); } else if (exp != null) { Date date = DateUtil.parseDate(exp); expires = (int) ((date.getTime() - System.currentTimeMillis()) / 1000); } String lastModified = (String) response.getHeaderString(HttpHeaders.LAST_MODIFIED); String etag = (String) response.getHeaderString(HttpHeaders.ETAG); String contentType = (String) response.getHeaderString(HttpHeaders.CONTENT_TYPE); String accept = (String) request.getHeaderString(HttpHeaders.ACCEPT); byte[] cached = ReadFromStream.readFromStream(1024, response.getEntityStream()); // if Accept is present, use it, if not fallback to response Content-Type MediaType mediaType = accept != null ? MediaType.valueOf(accept) : MediaType.valueOf(contentType); final BrowserCache.Entry entry = cache.put(request.getUri().toString(), mediaType, response.getHeaders(), cached, expires, etag, lastModified); response.setEntityStream(new ByteArrayInputStream(cached)); }
PartialResponse(ClientResponseContext responseContext) { this.responseContext = responseContext; this.entityStream = responseContext.getEntityStream(); }
@Override public synchronized void close() { try { responseContext.getEntityStream().close(); } catch (Throwable e) { // ignore } }
@Override public synchronized void close() { try { responseContext.getEntityStream().close(); } catch (Throwable e) { // ignore } }
@Override public void close() { try { responseContext.getEntityStream().close(); } catch (IOException e) { throw new WebApplicationException("Failed to close entity stream", e); } }
private void logResponseBody(ClientResponseContext response) { try { LOG.info("{}", IOUtils.toString(response.getEntityStream(), StandardCharsets.UTF_8)); } catch (IOException e) { LOG.error("Failed to log response body", e); } }
@Override public HttpResponse withBody() throws IOException { this.body = ByteStreams.toByteArray(context.getEntityStream()); context.setEntityStream(new ByteArrayInputStream(body)); return this; }
@Override public <T> T readEntity(Class<T> entityType) { if (entityType.isAssignableFrom(String.class)) { return (T) readStringEntity(responseContext.getEntityStream()); } else { throw notSupported(); } }
@Override public void filter(ClientRequestContext requestContext, ClientResponseContext responseContext) throws IOException { if (responseContext.getStatus() == 500 && responseContext.hasEntity()) { Map error = new ObjectMapper().readValue(responseContext.getEntityStream(), Map.class); LOG.error("Status: {}, Exception: {}, Message: {}", responseContext.getStatus(), error.get("exception"), error.get("message")); } }
public JaxrsContextRamlResponse(ClientResponseContext context) { this.context = context; try { content = IoUtils.readIntoByteArray(context.getEntityStream()); context.setEntityStream(new ByteArrayInputStream(content)); } catch (IOException e) { throw new RamlCheckerException("Could not get response content", e); } }
private String getResponseEntity(final ClientResponseContext clientResponseContext) throws IOException { if (shouldLogEntity(clientResponseContext)) { final InterceptingInputStream s = new InterceptingInputStream(clientResponseContext.getEntityStream()); clientResponseContext.setEntityStream(s); logger.debug("Response body is: {}", s.getContents()); return s.getContents(); } else { return ""; } }
@Override public void filter(ClientRequestContext req, ClientResponseContext res) throws IOException { JweDecryptionOutput out = decrypt(res.getEntityStream()); byte[] bytes = out.getContent(); res.setEntityStream(new ByteArrayInputStream(bytes)); res.getHeaders().putSingle("Content-Length", Integer.toString(bytes.length)); String ct = JwtUtils.checkContentType(out.getHeaders().getContentType(), getDefaultMediaType()); if (ct != null) { res.getHeaders().putSingle("Content-Type", ct); } }
@Override public void filter(final ClientRequestContext requestContext, final ClientResponseContext responseContext) throws IOException { final long id = aid.incrementAndGet(); final StringBuilder b = new StringBuilder(); printResponseLine(b, "Client response received", id, responseContext.getStatus()); printPrefixedHeaders(b, id, RESPONSE_PREFIX, responseContext.getHeaders()); if (printEntity && responseContext.hasEntity()) { responseContext.setEntityStream(logInboundEntity(b, responseContext.getEntityStream())); } log(b); }