use of org.apache.camel.http.common.HttpMessage in project ddf by codice.
the class HttpProxyCamelHttpTransportServlet method doService.
@Override
protected void doService(HttpServletRequest oldRequest, HttpServletResponse response) throws ServletException, IOException {
//Wrap request and clean the query String
HttpProxyWrappedCleanRequest request = new HttpProxyWrappedCleanRequest(oldRequest);
log.trace("Service: {}", request);
// Is there a consumer registered for the request.
HttpConsumer consumer = resolve(request);
if (consumer == null) {
String path = request.getPathInfo();
log.trace("Service Request Path = {}", path);
String endpointName = getEndpointNameFromPath(path);
log.trace("Endpoint Name = {}", endpointName);
Route route = camelContext.getRoute(endpointName);
try {
if (route != null) {
connect((HttpConsumer) route.getConsumer());
}
} catch (Exception e) {
log.debug("Exception while creating consumer", e);
}
consumer = resolve(request);
}
if (consumer == null) {
log.debug("No consumer to service request {}", request);
response.sendError(HttpServletResponse.SC_NOT_FOUND);
return;
}
// are we suspended?
if (consumer.getEndpoint().isSuspended()) {
log.debug("Consumer suspended, cannot service request {}", request);
response.sendError(HttpServletResponse.SC_SERVICE_UNAVAILABLE);
return;
}
if (consumer.getEndpoint().getHttpMethodRestrict() != null && !consumer.getEndpoint().getHttpMethodRestrict().equals(request.getMethod())) {
response.sendError(HttpServletResponse.SC_METHOD_NOT_ALLOWED);
return;
}
if ("TRACE".equals(request.getMethod()) && !consumer.getEndpoint().isTraceEnabled()) {
response.sendError(HttpServletResponse.SC_METHOD_NOT_ALLOWED);
return;
}
// create exchange and set data on it
Exchange exchange = new DefaultExchange(consumer.getEndpoint(), ExchangePattern.InOut);
if (consumer.getEndpoint().isBridgeEndpoint()) {
exchange.setProperty(Exchange.SKIP_GZIP_ENCODING, Boolean.TRUE);
}
if (consumer.getEndpoint().isDisableStreamCache()) {
exchange.setProperty(Exchange.DISABLE_HTTP_STREAM_CACHE, Boolean.TRUE);
}
// we override the classloader before building the HttpMessage just in case the binding
// does some class resolution
ClassLoader oldTccl = overrideTccl(exchange);
HttpHelper.setCharsetFromContentType(request.getContentType(), exchange);
exchange.setIn(new HttpMessage(exchange, request, response));
// set context path as header
String contextPath = consumer.getEndpoint().getPath();
exchange.getIn().setHeader("CamelServletContextPath", contextPath);
String httpPath = (String) exchange.getIn().getHeader(Exchange.HTTP_PATH);
// here we just remove the CamelServletContextPath part from the HTTP_PATH
if (contextPath != null && httpPath.startsWith(contextPath)) {
exchange.getIn().setHeader(Exchange.HTTP_PATH, httpPath.substring(contextPath.length()));
}
// we want to handle the UoW
try {
consumer.createUoW(exchange);
} catch (Exception e) {
log.debug("Error processing request", e);
throw new ServletException(e);
}
try {
if (log.isTraceEnabled()) {
log.trace("Processing request for exchangeId: {}", exchange.getExchangeId());
}
// process the exchange
consumer.getProcessor().process(exchange);
} catch (Exception e) {
exchange.setException(e);
}
try {
// now lets output to the response
if (log.isTraceEnabled()) {
log.trace("Writing response for exchangeId: {}", exchange.getExchangeId());
}
Integer bs = consumer.getEndpoint().getResponseBufferSize();
if (bs != null) {
log.trace("Using response buffer size: {}", bs);
response.setBufferSize(bs);
}
consumer.getBinding().writeResponse(exchange, response);
} catch (IOException e) {
log.debug("Error processing request", e);
throw e;
} catch (Exception e) {
log.debug("Error processing request", e);
throw new ServletException(e);
} finally {
consumer.doneUoW(exchange);
restoreTccl(exchange, oldTccl);
}
}
use of org.apache.camel.http.common.HttpMessage in project ddf by codice.
the class TestHttpProxy method testPolicyRemoveBeanGzipEncoding.
@Test
public void testPolicyRemoveBeanGzipEncoding() throws IOException {
InputStream inpuStream = TestHttpProxy.class.getResourceAsStream("/test.wsdl");
String wsdl = IOUtils.toString(inpuStream);
HttpProxy.PolicyRemoveBean policyRemoveBean = new HttpProxy.PolicyRemoveBean("8181", "8993", "localhost", "/services");
Exchange exchange = mock(Exchange.class);
HttpMessage httpMessage = mock(HttpMessage.class);
when(exchange.getIn()).thenReturn(httpMessage);
when(exchange.getOut()).thenReturn(httpMessage);
when(httpMessage.getHeader("CamelHttpQuery")).thenReturn("wsdl");
when(httpMessage.getBody()).thenReturn(inpuStream);
when(httpMessage.getHeader(Exchange.CONTENT_ENCODING)).thenReturn("gzip");
doCallRealMethod().when(httpMessage).setBody(any());
doCallRealMethod().when(httpMessage).getBody();
httpMessage.setBody(wsdl);
policyRemoveBean.rewrite(exchange);
assertTrue(httpMessage.getBody().toString().contains("https:"));
}
use of org.apache.camel.http.common.HttpMessage in project ddf by codice.
the class TestHttpProxy method testPolicyRemoveBean.
@Test
public void testPolicyRemoveBean() throws IOException {
InputStream inpuStream = TestHttpProxy.class.getResourceAsStream("/test.wsdl");
String wsdl = IOUtils.toString(inpuStream);
HttpProxy.PolicyRemoveBean policyRemoveBean = new HttpProxy.PolicyRemoveBean("8181", "8993", "localhost", "/services");
Exchange exchange = mock(Exchange.class);
HttpMessage httpMessage = mock(HttpMessage.class);
when(exchange.getIn()).thenReturn(httpMessage);
when(exchange.getOut()).thenReturn(httpMessage);
when(httpMessage.getHeader("CamelHttpQuery")).thenReturn("wsdl");
when(httpMessage.getBody()).thenReturn(inpuStream);
doCallRealMethod().when(httpMessage).setBody(any());
doCallRealMethod().when(httpMessage).getBody();
httpMessage.setBody(wsdl);
policyRemoveBean.rewrite(exchange);
assertFalse(httpMessage.getBody().toString().contains("https:"));
}
use of org.apache.camel.http.common.HttpMessage in project ddf by codice.
the class TestHttpProxy method testPolicyRemoveBeanNulls.
@Test
public void testPolicyRemoveBeanNulls() throws IOException {
InputStream inpuStream = TestHttpProxy.class.getResourceAsStream("/test.wsdl");
String wsdl = IOUtils.toString(inpuStream);
HttpProxy.PolicyRemoveBean policyRemoveBean = new HttpProxy.PolicyRemoveBean("8181", "8993", "localhost", "/services");
Exchange exchange = mock(Exchange.class);
HttpMessage httpMessage = mock(HttpMessage.class);
HttpServletRequest httpServletRequest = mock(HttpServletRequest.class);
when(exchange.getIn()).thenReturn(httpMessage);
when(exchange.getOut()).thenReturn(httpMessage);
policyRemoveBean.rewrite(exchange);
when(httpMessage.getRequest()).thenReturn(httpServletRequest);
policyRemoveBean.rewrite(exchange);
when(httpMessage.getHeader("CamelHttpQuery")).thenReturn("wsdl");
policyRemoveBean.rewrite(exchange);
when(exchange.getOut()).thenReturn(httpMessage);
doCallRealMethod().when(httpMessage).setBody(any());
doCallRealMethod().when(httpMessage).getBody();
httpMessage.setBody(wsdl);
policyRemoveBean.rewrite(exchange);
assertFalse(httpMessage.getBody().toString().contains("https:"));
}
Aggregations