public MockClient add(RequestKey requestKey, int status, InputStream responseBody) throws IOException { return add(requestKey, status, Util.toByteArray(responseBody)); }
public MockClient ok(RequestKey requestKey, InputStream responseBody) throws IOException { return ok(requestKey, Util.toByteArray(responseBody)); }
@Override public void encode(Object object, Type bodyType, RequestTemplate template) throws EncodeException { if (bodyType.equals(InputStream.class)) { try { template.body(Util.toByteArray((InputStream) object), StandardCharsets.UTF_8); } catch (IOException e) { throw new RuntimeException(e); } } else { delegate.encode(object, bodyType, template); } } }
@Override public void encode(Object object, Type bodyType, RequestTemplate template) throws EncodeException { if (bodyType.equals(InputStream.class)) { try { template.body(Util.toByteArray((InputStream) object), StandardCharsets.UTF_8); } catch (IOException e) { throw new RuntimeException(e); } } else { delegate.encode(object, bodyType, template); } } }
@Override public void encode(Object object, Type bodyType, RequestTemplate template) throws EncodeException { if (bodyType.equals(InputStream.class)) { try { template.body(Util.toByteArray((InputStream) object), StandardCharsets.UTF_8); } catch (IOException e) { throw new RuntimeException(e); } } else { delegate.encode(object, bodyType, template); } } }
@Override public void encode(Object object, Type bodyType, RequestTemplate template) throws EncodeException { if (bodyType.equals(InputStream.class)) { try { template.body(Util.toByteArray((InputStream) object), StandardCharsets.UTF_8); } catch (IOException e) { throw new RuntimeException(e); } } else { delegate.encode(object, bodyType, template); } } }
@Override public Object decode(Response response, Type type) throws IOException, FeignException { if (type.equals(InputStream.class)) { byte[] body = Util.toByteArray(response.body().asInputStream()); return new ByteArrayInputStream(body); } else { return delegate.decode(response, type); } } }
@Override public String readInputStream(InputStream data) { try { return new String(Util.toByteArray(data), StandardCharsets.UTF_8); } catch (IOException e) { throw new RuntimeException(e); } }
@Override public String readInputStream(InputStream data) { try { return new String(Util.toByteArray(data), StandardCharsets.UTF_8); } catch (IOException e) { throw new RuntimeException(e); } }
@Override public Object decode(Response response, Type type) throws IOException, FeignException { if (type.equals(InputStream.class)) { byte[] body = response.body() != null ? Util.toByteArray(response.body().asInputStream()) : new byte[0]; return new ByteArrayInputStream(body); } else { return delegate.decode(response, type); } } }
@Override public Object decode(Response response, Type type) throws IOException, FeignException { if (type.equals(InputStream.class)) { byte[] body = response.body() != null ? Util.toByteArray(response.body().asInputStream()) : new byte[0]; return new ByteArrayInputStream(body); } else { return delegate.decode(response, type); } } }
@Override public Object decode(Response response, Type type) throws IOException, FeignException { if (type.equals(InputStream.class)) { byte[] body = response.body() != null ? Util.toByteArray(response.body().asInputStream()) : new byte[0]; return new ByteArrayInputStream(body); } else { return delegate.decode(response, type); } } }
@Override public Object decode(Response response, Type type) throws IOException { if (response.status() == 404) return Util.emptyValueOf(type); if (response.body() == null) return null; if (byte[].class.equals(type)) { return Util.toByteArray(response.body().asInputStream()); } return super.decode(response, type); } }
@Test public void testDecodesAsInputStream() throws Exception { String data = "data"; Response response = Response.create(200, "OK", ImmutableMap.of(), data, StandardCharsets.UTF_8); InputStream decoded = (InputStream) inputStreamDelegateDecoder.decode(response, InputStream.class); assertThat(new String(Util.toByteArray(decoded), StandardCharsets.UTF_8), is(data)); }
@Test public void testSupportsNullBody() throws Exception { String data = ""; Response response = Response.create(200, "OK", ImmutableMap.of(), (Response.Body) null); InputStream decoded = (InputStream) inputStreamDelegateDecoder.decode(response, InputStream.class); assertThat(new String(Util.toByteArray(decoded), StandardCharsets.UTF_8), is(data)); }
if (response.body() != null) { try { byte[] bodyData = Util.toByteArray(response.body().asInputStream()); responseCopy = responseCopy.toBuilder().body(bodyData).build(); T apiResponse = (T) decoder.decode(responseCopy, apiResponseClass);
@Test public void testStandardClientsUseInputStreamDelegateDecoder() throws IOException { String data = "bytes"; assertThat(Util.toByteArray(service.writeInputStream(data)), is(bytes(data))); }
@Test public void testClientCanHandleEmptyInputStream() throws IOException { String data = ""; assertThat(Util.toByteArray(service.writeInputStream(data)), is(bytes(data))); }
@Override protected Response logAndRebufferResponse(String configKey, feign.Logger.Level logLevel, Response response, long elapsedTime) throws IOException { String requestId = requestIdProvider.getRequestId(); HttpData reqData = requestDataProvider.retrieve(requestId); if (requestTraceable(reqData) && isNotSkipped(reqData)) { byte[] bodyData = Util.toByteArray(response.body().asInputStream()); String content = new String(bodyData, StandardCharsets.UTF_8.name()); HttpData resData = new HttpData(extractHeaders(response), extractStatus(response), content); Response rebufferedResponse = Response.create(response.status(), response.reason(), response.headers(), bodyData); requestResponseLogger.logObfuscatedResponse(reqData, resData, TAG); requestDataProvider.remove(requestId); return super.logAndRebufferResponse(configKey, logLevel, rebufferedResponse, elapsedTime); } else { log.debug("Cannot obfuscate response, matching request data lost"); return super.logAndRebufferResponse(configKey, logLevel, response, elapsedTime); } }
protected Response logAndRebufferResponse(String configKey, Level logLevel, Response response, long elapsedTime) throws IOException { String reason = response.reason() != null && logLevel.compareTo(Level.NONE) > 0 ? " " + response.reason() : ""; log(configKey, "<--- HTTP/1.1 %s%s (%sms)", response.status(), reason, elapsedTime); if (logLevel.ordinal() >= Level.HEADERS.ordinal()) { for (String field : response.headers().keySet()) { for (String value : valuesOrEmpty(response.headers(), field)) { log(configKey, "%s: %s", field, value); } } int bodyLength = 0; if (response.body() != null) { if (logLevel.ordinal() >= Level.FULL.ordinal()) { log(configKey, ""); // CRLF } byte[] bodyData = Util.toByteArray(response.body().asInputStream()); bodyLength = bodyData.length; if (logLevel.ordinal() >= Level.FULL.ordinal() && bodyLength > 0) { log(configKey, "%s", decodeOrDefault(bodyData, UTF_8, "Binary data")); } log(configKey, "<--- END HTTP (%s-byte body)", bodyLength); return Response.create(response.status(), response.reason(), response.headers(), bodyData); } else { log(configKey, "<--- END HTTP (%s-byte body)", bodyLength); } } return response; }