MessageBodyWorkers messageBodyWorkers) { Object entity = request.getEntity(); String method = request.getMethod(); MediaType mediaType = request.getMediaType();
@Override public void filter(ClientRequestContext requestContext) { Object entity = requestContext.getEntity(); String serialized = serializeEntity(entity); log(serialized);
@Override public void filter(ClientRequestContext requestContext) throws IOException { logger.log(Level.INFO, "Request URI: {0}", requestContext.getUri()); logger.log(Level.INFO, "Request method: {0}", requestContext.getMethod()); if (requestContext.getEntity() == null) { logger.log(Level.INFO, "empty requestContext"); } else logger.log(Level.INFO, objectMapper.writeValueAsString(requestContext.getEntity())); } }
@Provider @Component // because I'm using spring boot public class GetMessageBodyFilter implements ClientRequestFilter { @Override public void filter(ClientRequestContext requestContext) throws IOException { if (requestContext.getEntity() instanceof Map && requestContext.getMethod().equals(HttpMethod.GET)) { UriBuilder uriBuilder = UriBuilder.fromUri(requestContext.getUri()); Map allParam = (Map)requestContext.getEntity(); for (Object key : allParam.keySet()) { uriBuilder.queryParam(key.toString(), allParam.get(key)); } requestContext.setUri(uriBuilder.build()); requestContext.setEntity(null); } } }
@Override public void filter(@NonNull ClientRequestContext clientRequestContext) throws IOException { Map<String, String> authHeaders = requestSigner.signRequest( clientRequestContext.getUri(), clientRequestContext.getMethod(), clientRequestContext.getStringHeaders(), clientRequestContext.getEntity()); final MultivaluedMap<String, Object> headers = clientRequestContext.getHeaders(); for (Map.Entry<String, String> e : authHeaders.entrySet()) { if (!headers.keySet().contains(e.getKey())) { headers.putSingle(e.getKey(), e.getValue()); } } } }
@Override public void filter( ClientRequestContext context ) throws IOException { if (debugLevel == RESTDebugLevel.NONE || debugLevel == RESTDebugLevel.TARGET_URI) { return; } MultivaluedMap<String, Object> reqHeaders = context.getHeaders(); StringBuilder requestMessage = new StringBuilder(); requestMessage.append("Sending the following request: \n"); if ( (debugLevel & RESTDebugLevel.HEADERS) == RESTDebugLevel.HEADERS) { requestMessage.append(context.getMethod() + " " + context.getUri() + " \n"); for (Entry<String, List<Object>> reqHeaderEntry : reqHeaders.entrySet()) { requestMessage.append(reqHeaderEntry.getKey() + ": " + Arrays.toString(reqHeaderEntry.getValue().toArray()) + " \n"); } } if ( (debugLevel & RESTDebugLevel.BODY) == RESTDebugLevel.BODY && context.hasEntity()) { //log request body Object entity = context.getEntity(); if (entity instanceof Form) { requestMessage.append("Body: " + ((Form) entity).asMap()); } else { requestMessage.append("Body: " + entity.toString()); } } log.info(requestMessage); }
@Override public InputStream getContent() { ByteArrayOutputStream baos = new ByteArrayOutputStream(); final Object entity = clientRequestContext.getEntity(); if (entity == null) { return null; } else { MessageBodyWriter messageBodyWriter = workers.getMessageBodyWriter(entity.getClass(), entity.getClass(), new Annotation[]{}, clientRequestContext.getMediaType()); try { // use the MBW to serialize entity into baos messageBodyWriter.writeTo(entity, entity.getClass(), entity.getClass(), new Annotation[] {}, clientRequestContext.getMediaType(), new MultivaluedHashMap<String, Object>(), baos); } catch (IOException e) { throw new RuntimeException( "Error while serializing entity.", e); } return new ByteArrayInputStream(baos.toByteArray()); } }
@Override public void filter(ClientRequestContext context) throws IOException { context.abortWith(Response.status(201).entity(context.getEntity()).type(MediaType.TEXT_XML_TYPE).build()); } }
@Override public void filter(ClientRequestContext ctx) throws IOException { MediaType contentType = ctx.getMediaType(); if (contentType != null && "multipart".equals(contentType.getType())) { List<Object> parts = getAttachmentParts(ctx.getEntity()); ctx.setEntity(parts); } } }
@Override public void filter(@NonNull ClientRequestContext clientRequestContext) throws IOException { RequestSigner chosenRequestSigner = this.defaultRequestSigner; SigningStrategy perOperationSigningStrategy = (SigningStrategy) clientRequestContext.getProperty(SIGNING_STRATEGY_PROPERTY_NAME); if (perOperationSigningStrategy != null && requestSigners.containsKey(perOperationSigningStrategy)) { chosenRequestSigner = requestSigners.get(perOperationSigningStrategy); // removing this property from the context, now that we have processed it clientRequestContext.removeProperty(SIGNING_STRATEGY_PROPERTY_NAME); } MultivaluedMap<String, String> stringHeaders = clientRequestContext.getStringHeaders(); Map<String, String> authHeaders = chosenRequestSigner.signRequest( clientRequestContext.getUri(), clientRequestContext.getMethod(), stringHeaders, clientRequestContext.getEntity()); MultivaluedMap<String, Object> headers = clientRequestContext.getHeaders(); for (Map.Entry<String, String> e : authHeaders.entrySet()) { if (!headers.keySet().contains(e.getKey())) { headers.putSingle(e.getKey(), e.getValue()); } } } }
@Override public void filter(ClientRequestContext requestContext) throws IOException { if (!logHttp && !log.isTraceEnabled()) { return; } log(">> REST Request: " + requestContext.getMethod() + " => " + requestContext.getUri()); // Log before sending a request for (String key : requestContext.getHeaders().keySet()) { String headerVal = requestContext.getHeaders().get(key).toString(); if (key.equals(RestConstant.HEADER_API_KEY)) { headerVal = this.maskHeaderValues( requestContext.getHeaders() .get(key)); } log(">> Header: " + key + " = " + headerVal); } log(">> body: " + requestContext.getEntity()); }
@Override public void filter(ClientRequestContext requestContext) throws IOException { if (!logHttp && !log.isTraceEnabled()) { return; } log(">> REST Request: " + requestContext.getMethod() + " => " + requestContext.getUri()); // Log before sending a request for (String key : requestContext.getHeaders().keySet()) { String headerVal = requestContext.getHeaders().get(key).toString(); if (key.equals(RestConstant.HEADER_API_KEY)) { headerVal = this.maskHeaderValues( requestContext.getHeaders() .get(key)); } log(">> Header: " + key + " = " + headerVal); } log(">> body: " + requestContext.getEntity()); }
MessageBodyWorkers messageBodyWorkers) { Object entity = request.getEntity(); String method = request.getMethod(); MediaType mediaType = request.getMediaType();
@Test public void testClientFiltersLocalResponseLambdas() { String address = "http://localhost:" + PORT + "/bookstores"; List<Object> providers = new ArrayList<>(); providers.add((ClientRequestFilter) ctx -> { ctx.abortWith(Response.status(201).entity(ctx.getEntity()).type(MediaType.TEXT_XML_TYPE).build()); }); providers.add((ClientResponseFilter) (reqContext, respContext) -> { MultivaluedMap<String, String> headers = respContext.getHeaders(); headers.putSingle(HttpHeaders.LOCATION, "http://localhost/redirect"); }); WebClient wc = WebClient.create(address, providers); Book theBook = new Book("Echo", 123L); Response r = wc.post(theBook); assertEquals(201, r.getStatus()); assertEquals("http://localhost/redirect", r.getHeaderString(HttpHeaders.LOCATION)); Book responseBook = r.readEntity(Book.class); assertSame(theBook, responseBook); }
@Override public void filter(ClientRequestContext rc) throws IOException { String method = rc.getMethod(); String expectedMethod = null; if (rc.getAcceptableMediaTypes().contains(MediaType.valueOf("text/mistypedxml")) && rc.getHeaders().getFirst("THEMETHOD") != null) { expectedMethod = MediaType.TEXT_XML_TYPE.equals(rc.getMediaType()) ? "DELETE" : "GET"; rc.setUri(URI.create("http://localhost:" + PORT + "/bookstore/books2")); rc.setMethod(rc.getHeaders().getFirst("THEMETHOD").toString()); if ("GET".equals(expectedMethod)) { rc.getHeaders().putSingle("Content-Type", "text/xml"); } } else { expectedMethod = "POST"; } if (!expectedMethod.equals(method)) { throw new RuntimeException(); } if ("GET".equals(expectedMethod)) { rc.setEntity(new Book("book", 560L)); } else { rc.setEntity(new Book("book", ((Book)rc.getEntity()).getId() + 5)); } }