@Test public void testService() throws Exception { when(servletRequest.getMethod()).thenReturn("get"); when(servletRequest.getRequestURI()).thenReturn("/some/where?k1=v1"); response.getHeaders().set("new", "value"); servlet.service(servletRequest, servletResponse); verify(servletResponse).setStatus(299); verify(servletResponse).setHeader("new", "value"); } }
void includeMatchingHeaders(StringBuilder builder, List<String> requiredHeaders, Headers headers) { for (String headerName : requiredHeaders) { for (String value : headers.get(headerName)) { if (value == null) value = "-"; builder.append(DELIM).append('\"').append(value).append('\"'); } } } }
for (Map.Entry<String, String> header : response.getHeaders().entries()) { servletResponse.setHeader(header.getKey(), header.getValue());
public static HttpResponseMessage clientResponseToZuulResponse(HttpRequestMessage zuulRequest, HttpClientResponse<ByteBuf> resp) { HttpResponseMessage zuulResp = new HttpResponseMessage(zuulRequest.getContext(), zuulRequest, 500); // Copy the response headers and info into the RequestContext for use by post filters. if (resp.getStatus() != null) { zuulResp.setStatus(resp.getStatus().code()); } Headers zuulRespHeaders = zuulResp.getHeaders(); for (Map.Entry<String, String> entry : resp.getHeaders().entries()) { // TODO - should we be filtering headers here like we do when using Ribbon? zuulRespHeaders.add(entry.getKey(), entry.getValue()); } return zuulResp; }
@Test public void testSetResponse() throws Exception { RibbonOrigin origin = new RibbonOrigin("blah"); origin = Mockito.spy(origin); CaseInsensitiveMultiMap headers = new CaseInsensitiveMultiMap(); headers.addHeader("test", "test"); headers.addHeader("content-length", "100"); byte[] body = "test-body".getBytes("UTF-8"); InputStream inp = new ByteArrayInputStream(body); Mockito.when(proxyResp.getStatus()).thenReturn(200); Mockito.when(proxyResp.getInputStream()).thenReturn(inp); Mockito.when(proxyResp.hasEntity()).thenReturn(true); Mockito.when(proxyResp.getHttpHeaders()).thenReturn(headers); HttpResponseMessage response = origin.createHttpResponseMessage(proxyResp, request); Assert.assertEquals(200, response.getStatus()); byte[] respBodyBytes = ByteBufUtils.toBytes(response.getBodyStream().toBlocking().single()); Assert.assertNotNull(respBodyBytes); Assert.assertEquals(body.length, respBodyBytes.length); Assert.assertTrue(response.getHeaders().contains("test", "test")); } }
public static HttpClientRequest<ByteBuf> createHttpClientRequest(HttpRequestMessage zuulReq) { HttpClientRequest<ByteBuf> clientReq = HttpClientRequest.create(HttpMethod.valueOf(zuulReq.getMethod().toUpperCase()), zuulReq.getPathAndQuery()); for (Map.Entry<String, String> entry : zuulReq.getHeaders().entries()) { // TODO - should we be filtering headers here like we do when using Ribbon? clientReq = clientReq.withHeader(entry.getKey(), entry.getValue()); } if (zuulReq.getBodyStream() != null) { clientReq = clientReq.withContentSource(zuulReq.getBodyStream()); } return clientReq; }
protected HttpResponseMessage createHttpResponseMessage(HttpResponse ribbonResp, HttpRequestMessage request) { // Convert to a zuul response object. HttpResponseMessage respMsg = new HttpResponseMessage(request.getContext(), request, 500); respMsg.setStatus(ribbonResp.getStatus()); for (Map.Entry<String, String> header : ribbonResp.getHttpHeaders().getAllHeaders()) { if (ProxyUtils.isValidResponseHeader(header.getKey())) { respMsg.getHeaders().add(header.getKey(), header.getValue()); } } // Body. Observable<ByteBuf> responseBodyObs = ByteBufUtils.fromInputStream(ribbonResp.getInputStream()); respMsg.setBodyStream(responseBodyObs); return respMsg; }
@Override public Observable<ZuulMessage> write(ZuulMessage msg, HttpServerResponse nativeResponse) { HttpResponseMessage zuulResp = (HttpResponseMessage) msg; // Set the response status code. nativeResponse.setStatus(HttpResponseStatus.valueOf(zuulResp.getStatus())); // Now set all of the response headers - note this is a multi-set in keeping with HTTP semantics for (Map.Entry<String, String> entry : zuulResp.getHeaders().entries()) { nativeResponse.getHeaders().add(entry.getKey(), entry.getValue()); } // Write response body stream as received. Observable<ZuulMessage> chain; Observable<ByteBuf> bodyStream = zuulResp.getBodyStream(); if (bodyStream != null) { chain = bodyStream .doOnNext(bb -> nativeResponse.writeBytesAndFlush(bb)) .ignoreElements() .doOnCompleted(() -> nativeResponse.close()) .map(bb -> msg); } else { chain = Observable.just(msg); } return chain; }
public HttpResponseMessage handle(HttpRequestMessage request) { HttpResponseMessage response = new HttpResponseMessage(request.getContext(), request, 200); response.getHeaders().set("Content-Type", "text/plain"); response.setBody("OK".getBytes(CS_UTF8)); return response; } }
for (Map.Entry<String, String> entry : headers.entries()) { if (ProxyUtils.isValidRequestHeader(entry.getKey())) { builder.header(entry.getKey(), entry.getValue());