Search in sources :

Example 11 with HttpMessage

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);
    }
}
Also used : Exchange(org.apache.camel.Exchange) DefaultExchange(org.apache.camel.impl.DefaultExchange) DefaultExchange(org.apache.camel.impl.DefaultExchange) ServletException(javax.servlet.ServletException) IOException(java.io.IOException) HttpConsumer(org.apache.camel.http.common.HttpConsumer) HttpMessage(org.apache.camel.http.common.HttpMessage) Route(org.apache.camel.Route) ServletException(javax.servlet.ServletException) IOException(java.io.IOException)

Example 12 with HttpMessage

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:"));
}
Also used : Exchange(org.apache.camel.Exchange) InputStream(java.io.InputStream) Matchers.anyString(org.mockito.Matchers.anyString) HttpMessage(org.apache.camel.http.common.HttpMessage) Test(org.junit.Test)

Example 13 with HttpMessage

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:"));
}
Also used : Exchange(org.apache.camel.Exchange) InputStream(java.io.InputStream) Matchers.anyString(org.mockito.Matchers.anyString) HttpMessage(org.apache.camel.http.common.HttpMessage) Test(org.junit.Test)

Example 14 with HttpMessage

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:"));
}
Also used : Exchange(org.apache.camel.Exchange) HttpServletRequest(javax.servlet.http.HttpServletRequest) InputStream(java.io.InputStream) Matchers.anyString(org.mockito.Matchers.anyString) HttpMessage(org.apache.camel.http.common.HttpMessage) Test(org.junit.Test)

Aggregations

HttpMessage (org.apache.camel.http.common.HttpMessage)14 Exchange (org.apache.camel.Exchange)13 Processor (org.apache.camel.Processor)8 RouteBuilder (org.apache.camel.builder.RouteBuilder)8 Test (org.junit.Test)6 InputStream (java.io.InputStream)5 HttpSession (javax.servlet.http.HttpSession)5 IOException (java.io.IOException)3 Matchers.anyString (org.mockito.Matchers.anyString)3 ServletException (javax.servlet.ServletException)2 ServletInputStream (javax.servlet.ServletInputStream)2 HttpServletRequest (javax.servlet.http.HttpServletRequest)2 HttpConsumer (org.apache.camel.http.common.HttpConsumer)2 DefaultExchange (org.apache.camel.impl.DefaultExchange)2 ByteArrayInputStream (java.io.ByteArrayInputStream)1 TimeoutException (java.util.concurrent.TimeoutException)1 AsyncCallback (org.apache.camel.AsyncCallback)1 Message (org.apache.camel.Message)1 Route (org.apache.camel.Route)1 InputStreamCache (org.apache.camel.converter.stream.InputStreamCache)1