public HttpHeaders(Iterable<HttpHeader> headers) { ImmutableMultimap.Builder<CaseInsensitiveKey, String> builder = ImmutableMultimap.builder(); for (HttpHeader header: firstNonNull(headers, Collections.<HttpHeader>emptyList())) { builder.putAll(caseInsensitive(header.key()), header.values()); } this.headers = builder.build(); }
@Override public HttpHeader apply(HttpHeader input) { List<String> newValues = Lists.transform(input.values(), new Function<String, String>() { @Override public String apply(String input) { Template template = uncheckedCompileTemplate(input); return uncheckedApplyTemplate(template, model); } }); return new HttpHeader(input.key(), newValues); } });
@Override public void serialize(HttpHeaders headers, JsonGenerator jgen, SerializerProvider provider) throws IOException { jgen.writeStartObject(); for (HttpHeader header: headers.all()) { if (header.isSingleValued()) { jgen.writeStringField(header.key(), header.firstValue()); } else { jgen.writeArrayFieldStart(header.key()); for (String value: header.values()) { jgen.writeString(value); } jgen.writeEndArray(); } } jgen.writeEndObject(); } }
private void addHeaderSection(Map<String, MultiValuePattern> headerPatterns, HttpHeaders headers, ImmutableList.Builder<DiffLine<?>> builder) { boolean anyHeaderSections = false; if (headerPatterns != null && !headerPatterns.isEmpty()) { anyHeaderSections = true; for (String key : headerPatterns.keySet()) { HttpHeader header = headers.getHeader(key); MultiValuePattern headerPattern = headerPatterns.get(header.key()); String operator = generateOperatorString(headerPattern.getValuePattern(), ""); String printedPatternValue = header.key() + operator + ": " + headerPattern.getExpected(); DiffLine<MultiValue> section = new DiffLine<>("Header", headerPattern, header, printedPatternValue); builder.add(section); } } if (anyHeaderSections) { builder.add(SPACER); } }
private static HttpHeaders toStyxHeaders(com.github.tomakehurst.wiremock.http.HttpHeaders headers) { HttpHeaders.Builder builder = new HttpHeaders.Builder(); if (headers != null) { headers.all().forEach(header -> builder.add(header.key(), header.values())); } return builder.build(); }
/** * Builds a {@link Response} for the OpenAPI validator out of the * original {@link com.github.tomakehurst.wiremock.http.Response}. * * @param originalResponse the original {@link com.github.tomakehurst.wiremock.http.Response} */ @Nonnull public static Response of(@Nonnull final com.github.tomakehurst.wiremock.http.Response originalResponse) { requireNonNull(originalResponse, "An original response is required"); final SimpleResponse.Builder builder = new SimpleResponse.Builder(originalResponse.getStatus()) .withBody(originalResponse.getBodyAsString()); originalResponse.getHeaders().all().forEach(header -> builder.withHeader(header.key(), header.values())); return builder.build(); } }
/** * Builds a {@link Request} for the OpenAPI validator out of the * original {@link com.github.tomakehurst.wiremock.http.Request}. * * @param originalRequest the original {@link com.github.tomakehurst.wiremock.http.Request} */ @Nonnull public static Request of(@Nonnull final com.github.tomakehurst.wiremock.http.Request originalRequest) { requireNonNull(originalRequest, "An original request is required"); final URI uri = URI.create(originalRequest.getUrl()); final Map<String, QueryParameter> queryParameterMap = Urls.splitQuery(uri); final SimpleRequest.Builder builder = new SimpleRequest.Builder(originalRequest.getMethod().getName(), uri.getPath()) .withBody(originalRequest.getBodyAsString()); originalRequest.getHeaders().all().forEach(header -> builder.withHeader(header.key(), header.values())); queryParameterMap.forEach((key, value) -> builder.withQueryParam(key, value.values())); return builder.build(); } }
public void applyResponse(Response response, HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse) { Fault fault = response.getFault(); if (fault != null) { FaultInjector faultInjector = buildFaultInjector(httpServletRequest, httpServletResponse); fault.apply(faultInjector); httpServletResponse.addHeader(Fault.class.getName(), fault.name()); return; } if (response.getStatusMessage() == null) { httpServletResponse.setStatus(response.getStatus()); } else { httpServletResponse.setStatus(response.getStatus(), response.getStatusMessage()); } for (HttpHeader header: response.getHeaders().all()) { for (String value: header.values()) { httpServletResponse.addHeader(header.key(), value); } } if (response.shouldAddChunkedDribbleDelay()) { writeAndTranslateExceptionsWithChunkedDribbleDelay(httpServletResponse, response.getBodyStream(), response.getChunkedDribbleDelay()); } else { writeAndTranslateExceptions(httpServletResponse, response.getBodyStream()); } }
private String safelyExecuteRequest(String url, HttpUriRequest request) { if (hostHeader != null) { request.addHeader(HOST, hostHeader); } List<HttpHeader> httpHeaders = authenticator.generateAuthHeaders(); for (HttpHeader header: httpHeaders) { for (String value: header.values()) { request.addHeader(header.key(), value); } } try (CloseableHttpResponse response = httpClient.execute(request)) { int statusCode = response.getStatusLine().getStatusCode(); if (HttpStatus.isServerError(statusCode)) { throw new VerificationException( "Expected status 2xx for " + url + " but was " + statusCode); } if (statusCode == 401) { throw new NotAuthorisedException(); } String body = getEntityAsStringAndCloseStream(response); if (HttpStatus.isClientError(statusCode)) { Errors errors = Json.read(body, Errors.class); throw ClientError.fromErrors(errors); } return body; } catch (Exception e) { return throwUnchecked(e, String.class); } }
private RequestPattern buildRequestPatternFrom(Request request) { RequestPatternBuilder builder = newRequestPattern(request.getMethod(), urlEqualTo(request.getUrl())); if (!headersToMatch.isEmpty()) { for (HttpHeader header: request.getHeaders().all()) { if (headersToMatch.contains(header.caseInsensitiveKey())) { builder.withHeader(header.key(), equalTo(header.firstValue())); } } } if (request.isMultipart()) { for (Request.Part part : request.getParts()) { builder.withRequestBodyPart(valuePatternForPart(part)); } } else { String body = request.getBodyAsString(); if (!body.isEmpty()) { builder.withRequestBody(valuePatternForContentType(request)); } } return builder.build(); }
private MultipartValuePattern valuePatternForPart(Request.Part part) { MultipartValuePatternBuilder builder = new MultipartValuePatternBuilder().withName(part.getName()).matchingType(MultipartValuePattern.MatchingType.ALL); if (!headersToMatch.isEmpty()) { Collection<HttpHeader> all = part.getHeaders().all(); for (HttpHeader httpHeader : all) { if (headersToMatch.contains(httpHeader.caseInsensitiveKey())) { builder.withHeader(httpHeader.key(), equalTo(httpHeader.firstValue())); } } } HttpHeader contentType = part.getHeader("Content-Type"); if (!contentType.isPresent() || contentType.firstValue().contains("text")) { builder.withBody(equalTo(part.getBody().asString())); } else if (contentType.firstValue().contains("json")) { builder.withBody(equalToJson(part.getBody().asString(), true, true)); } else if (contentType.firstValue().contains("xml")) { builder.withBody(equalToXml(part.getBody().asString())); } else { builder.withBody(binaryEqualTo(part.getBody().asBytes())); } return builder.build(); }