Search in sources :

Example 91 with Route

use of org.apache.camel.Route 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: {}", LogSanitizer.sanitize(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 = {}", LogSanitizer.sanitize(path));
        String endpointName = getEndpointNameFromPath(path);
        log.trace("Endpoint Name = {}", LogSanitizer.sanitize(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);
    }
    try {
        if (consumer == null) {
            log.debug("No consumer to service request {}", LogSanitizer.sanitize(request));
            response.sendError(HttpServletResponse.SC_NOT_FOUND);
            return;
        }
        // are we suspended?
        if (consumer.getEndpoint().isSuspended()) {
            log.debug("Consumer suspended, cannot service request {}", LogSanitizer.sanitize(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;
        }
    } catch (IOException e) {
        LOGGER.warn("Could not send error due to: {}", e.getMessage());
        LOGGER.debug("Could not send error due to: ", e);
    }
    if (consumer == null) {
        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, consumer.getEndpoint(), 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(PROCESSING_ERROR_MSG, 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(PROCESSING_ERROR_MSG, e);
        throw e;
    } catch (Exception e) {
        log.debug(PROCESSING_ERROR_MSG, e);
        throw new ServletException(e);
    } finally {
        consumer.doneUoW(exchange);
        restoreTccl(exchange, oldTccl);
    }
}
Also used : DefaultExchange(org.apache.camel.support.DefaultExchange) Exchange(org.apache.camel.Exchange) DefaultExchange(org.apache.camel.support.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)

Aggregations

Route (org.apache.camel.Route)91 EventDrivenConsumerRoute (org.apache.camel.impl.EventDrivenConsumerRoute)27 Endpoint (org.apache.camel.Endpoint)24 Channel (org.apache.camel.Channel)17 DeadLetterChannel (org.apache.camel.processor.DeadLetterChannel)15 Processor (org.apache.camel.Processor)13 ArrayList (java.util.ArrayList)12 SendProcessor (org.apache.camel.processor.SendProcessor)11 CamelContext (org.apache.camel.CamelContext)10 ShutdownRoute (org.apache.camel.ShutdownRoute)8 FilterProcessor (org.apache.camel.processor.FilterProcessor)7 RoutePolicy (org.apache.camel.spi.RoutePolicy)6 HashMap (java.util.HashMap)5 Service (org.apache.camel.Service)5 LinkedHashMap (java.util.LinkedHashMap)4 Map (java.util.Map)4 CopyOnWriteArrayList (java.util.concurrent.CopyOnWriteArrayList)4 DelegateProcessor (org.apache.camel.DelegateProcessor)4 RouteBuilder (org.apache.camel.builder.RouteBuilder)4 MockEndpoint (org.apache.camel.component.mock.MockEndpoint)4