public void apply(feign.RequestTemplate template) { final SpringCloudBeanRegistry beanRegistry = SpringCloudBeanRegistry.getInstance(); CompensableBeanFactory beanFactory = beanRegistry.getBeanFactory(); CompensableManager compensableManager = beanFactory.getCompensableManager(); CompensableTransaction compensable = compensableManager.getCompensableTransactionQuietly(); if (compensable == null) { return; } try { TransactionContext transactionContext = compensable.getTransactionContext(); byte[] byteArray = SerializeUtils.serializeObject(transactionContext); String transactionText = Base64.getEncoder().encodeToString(byteArray); Map<String, Collection<String>> headers = template.headers(); if (headers.containsKey(HEADER_TRANCACTION_KEY) == false) { template.header(HEADER_TRANCACTION_KEY, transactionText); } if (headers.containsKey(HEADER_PROPAGATION_KEY) == false) { template.header(HEADER_PROPAGATION_KEY, identifier); } } catch (IOException ex) { throw new RuntimeException("Error occurred while preparing the transaction context!", ex); } }
@Override public void apply(RequestTemplate template) { if (template.headers().containsKey(OkhttpTraceInterceptor.PATH_TEMPLATE_HEADER)) { Collection<String> rewrittenHeaders = template.headers().get(OkhttpTraceInterceptor.PATH_TEMPLATE_HEADER) .stream() .map(headerValue -> headerValue.replace(PathTemplateHeaderEnrichmentContract.OPEN_BRACE_REPLACEMENT, '{') .replace(PathTemplateHeaderEnrichmentContract.CLOSE_BRACE_REPLACEMENT, '}')) .collect(Collectors.toList()); Map<String, Collection<String>> headers = new HashMap<>(template.headers()); headers.put(OkhttpTraceInterceptor.PATH_TEMPLATE_HEADER, rewrittenHeaders); template.headers(headers); } } }
/** * Adds the header if it wasn't yet specified. * * @param requestTemplate the request * @param name the header name * @param values the header values */ protected void addHeader(RequestTemplate requestTemplate, String name, String... values) { if (!requestTemplate.headers().containsKey(name)) { requestTemplate.header(name, values); } }
/** * Adds the header if it wasn't yet specified. * * @param requestTemplate the request * @param name the header name * @param values the header values */ protected void addHeader(RequestTemplate requestTemplate, String name, String... values) { if (!requestTemplate.headers().containsKey(name)) { requestTemplate.header(name, values); } }
public FeignRequestOutputMessage(RequestTemplate request) { this.httpHeaders = HttpHeadersUtils.getHttpHeaders(request.headers()); this.buf = new ByteArrayOutputStream(); }
private FeignOutputMessage(RequestTemplate request) { httpHeaders = getHttpHeaders(request.headers()); }
private FeignOutputMessage(RequestTemplate request) { httpHeaders = getHttpHeaders(request.headers()); }
@Override public void apply(RequestTemplate template) { Collection<String> apiSources = template.headers().get(HeaderUtils.API_SOURCE_HEADER); if (apiSources == null || apiSources.isEmpty()) { return; } if (apiSources.iterator().next().equals(HeaderUtils.MARATHON_API_SOURCE)) { template.insert(0, "/marathon"); } template.header(HeaderUtils.API_SOURCE_HEADER); } }
/** * Returns whether the request requires GZIP compression. * * @param template the request template * @return true if request requires compression, false otherwise */ private boolean requiresCompression(RequestTemplate template) { final Map<String, Collection<String>> headers = template.headers(); return matchesMimeType(headers.get(HttpEncoding.CONTENT_TYPE)) && contentLengthExceedThreshold(headers.get(HttpEncoding.CONTENT_LENGTH)); }
/** * Returns whether the request requires GZIP compression. * * @param template the request template * @return true if request requires compression, false otherwise */ private boolean requiresCompression(RequestTemplate template) { final Map<String, Collection<String>> headers = template.headers(); return matchesMimeType(headers.get(HttpEncoding.CONTENT_TYPE)) && contentLengthExceedThreshold(headers.get(HttpEncoding.CONTENT_LENGTH)); }
@Override public void apply(RequestTemplate template) { Collection<String> apiSources = template.headers().get(HeaderUtils.API_SOURCE_HEADER); if (apiSources == null || apiSources.isEmpty()) { return; } if (apiSources.iterator().next().equals(HeaderUtils.MARATHON_API_SOURCE)) { template.insert(0, marathonPath); } else if (apiSources.iterator().next().equals(HeaderUtils.METRONOME_API_SOURCE)) { template.insert(0, metronomePath); } template.header(HeaderUtils.API_SOURCE_HEADER); } }
@Override protected void processAnnotationOnClass(MethodMetadata data, Class<?> targetType) { if (targetType.isAnnotationPresent(Headers.class)) { String[] headersOnType = targetType.getAnnotation(Headers.class).value(); checkState(headersOnType.length > 0, "Headers annotation was empty on type %s.", targetType.getName()); Map<String, Collection<String>> headers = toMap(headersOnType); headers.putAll(data.template().headers()); data.template().headers(null); // to clear data.template().headers(headers); } }
protected MultiValueMap<String, String> headers(Object[] argv, Map<String, ?> substitutionsMap) { MultiValueMap<String, String> headers = new LinkedMultiValueMap<>(); methodMetadata.template().headers().keySet() .forEach(headerName -> headers.addAll(headerName, headerExpanders.get(headerName).stream() .map(expander -> expander.apply(substitutionsMap)) .collect(toList()))); if (methodMetadata.headerMapIndex() != null) { ((Map<String, String>) argv[methodMetadata.headerMapIndex()]) .forEach(headers::add); } return headers; }
@Override public void apply(RequestTemplate template) { if (!HeaderAccessUtils.caseInsensitiveContains(template.headers(), HttpHeaders.USER_AGENT)) { template.header(HttpHeaders.USER_AGENT, userAgent); } } }
@Test public void doesNotUseDelegateWhenContentTypeHeaderHasArbitraryCase() { headers.put("Content-TYPE", Arrays.asList(MediaType.TEXT_PLAIN)); requestTemplate.headers(headers); textDelegateEncoder.encode(null, null, requestTemplate); verifyZeroInteractions(delegate); } }
@Test public void doesNotUseDelegateWhenContentTypeIsTextPlain() { headers.put(HttpHeaders.CONTENT_TYPE, Arrays.asList(MediaType.TEXT_PLAIN)); requestTemplate.headers(headers); textDelegateEncoder.encode(null, null, requestTemplate); verifyZeroInteractions(delegate); }
@Test public void usesDelegateWhenContentTypeIsNotTextPlain() { headers.put(HttpHeaders.CONTENT_TYPE, Arrays.asList(MediaType.APPLICATION_JSON)); requestTemplate.headers(headers); textDelegateEncoder.encode(null, null, requestTemplate); verify(delegate).encode(null, null, requestTemplate); }
@Test public void usesDelegateWhenHeaderIsAbsent() { requestTemplate.headers(headers); textDelegateEncoder.encode(null, null, requestTemplate); verify(delegate).encode(null, null, requestTemplate); }
Request toRequest() { return new RequestTemplate() .method(request.method()) .append(getUri().toASCIIString()) .headers(request.headers()) .body(request.body(), request.charset()) .request(); }
@Override public boolean processArgument(AnnotatedParameterContext context, Annotation annotation, Method method) { String name = ANNOTATION.cast(annotation).value(); checkState(emptyToNull(name) != null, "PathVariable annotation was empty on param %s.", context.getParameterIndex()); context.setParameterName(name); MethodMetadata data = context.getMethodMetadata(); String varName = '{' + name + '}'; if (!data.template().url().contains(varName) && !searchMapValues(data.template().queries(), varName) && !searchMapValues(data.template().headers(), varName)) { data.formParams().add(name); } return true; }