@Override public ServletEndpoint getEndpoint() { return (ServletEndpoint) super.getEndpoint(); } }
@Override public String getConsumerPath() { return consumer.getPath(); }
if (consumer.isSuspended()) { log.debug("Consumer suspended, cannot service request {}", request); response.sendError(HttpServletResponse.SC_SERVICE_UNAVAILABLE); if ("OPTIONS".equals(request.getMethod()) && !consumer.isOptionsEnabled()) { String allowedMethods = METHODS.stream().filter(m -> getServletResolveConsumerStrategy().isHttpMethodAllowed(request, m, getConsumers())).collect(Collectors.joining(",")); if (allowedMethods == null && consumer.getEndpoint().getHttpMethodRestrict() != null) { allowedMethods = consumer.getEndpoint().getHttpMethodRestrict(); if (consumer.getEndpoint().getHttpMethodRestrict() != null && !consumer.getEndpoint().getHttpMethodRestrict().contains(request.getMethod())) { response.sendError(HttpServletResponse.SC_METHOD_NOT_ALLOWED); return; if ("TRACE".equals(request.getMethod()) && !consumer.isTraceEnabled()) { response.sendError(HttpServletResponse.SC_METHOD_NOT_ALLOWED); return; Exchange exchange = consumer.getEndpoint().createExchange(ExchangePattern.InOut); if (consumer.getEndpoint().isBridgeEndpoint()) { exchange.setProperty(Exchange.SKIP_GZIP_ENCODING, Boolean.TRUE); exchange.setProperty(Exchange.SKIP_WWW_FORM_URLENCODED, Boolean.TRUE); if (consumer.getEndpoint().isDisableStreamCache()) { exchange.setProperty(Exchange.DISABLE_HTTP_STREAM_CACHE, Boolean.TRUE); exchange.setIn(new HttpMessage(exchange, consumer.getEndpoint(), request, response));
if (consumer.isSuspended()) { log.debug("Consumer suspended, cannot service request {}", request); response.sendError(HttpServletResponse.SC_SERVICE_UNAVAILABLE); 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.isTraceEnabled()) { response.sendError(HttpServletResponse.SC_METHOD_NOT_ALLOWED); return; log.debug("Dispatching to Websocket Consumer at {}", consumer.getPath()); ((WebsocketConsumer)consumer).service(request, response);
if (consumer.getEndpoint().isSuspended()) { log.debug("Consumer suspended, cannot service request {}", request); response.sendError(HttpServletResponse.SC_SERVICE_UNAVAILABLE); 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; 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); exchange.setIn(new HttpMessage(exchange, consumer.getEndpoint(), request, response)); String contextPath = consumer.getEndpoint().getPath(); exchange.getIn().setHeader("CamelServletContextPath", contextPath); consumer.createUoW(exchange); } catch (Exception e) { log.debug("Error processing request", e);
private List<HttpConsumer> resolveCandidates(HttpServletRequest request, String method, Map<String, HttpConsumer> consumers) { String path = request.getPathInfo(); List<HttpConsumer> candidates = new ArrayList<>(); for (String key : consumers.keySet()) { //We need to look up the consumer path here String consumerPath = consumers.get(key).getPath(); HttpConsumer consumer = consumers.get(key); boolean matchOnUriPrefix = consumer.getEndpoint().isMatchOnUriPrefix(); // Just make sure the we get the right consumer path first if (RestConsumerContextPathMatcher.matchPath(path, consumerPath, matchOnUriPrefix)) { candidates.add(consumer); } } return candidates; }
private ServletEndpoint getServletEndpoint(HttpConsumer consumer) { if (!(consumer.getEndpoint() instanceof ServletEndpoint)) { throw new RuntimeException("Invalid consumer type. Must be ServletEndpoint but is " + consumer.getClass().getName()); } return (ServletEndpoint)consumer.getEndpoint(); }
@Override public void disconnect(HttpConsumer consumer) { String path = consumer.getPath(); String endpointName = getEndpointNameFromPath(path); log.debug("Disconnecting consumer: {}", endpointName); consumers.remove(endpointName); }
private ServletEndpoint getServletEndpoint(HttpConsumer consumer) { if (!(consumer.getEndpoint() instanceof ServletEndpoint)) { throw new IllegalArgumentException( "Invalid consumer type. Must be ServletEndpoint but is " + consumer.getClass().getName()); } return (ServletEndpoint) consumer.getEndpoint(); }
@Override public void unregister(HttpConsumer consumer) { if (LOG.isDebugEnabled()) { LOG.debug("Unregistering consumer for path {}", consumer.getPath()); } consumers.remove(consumer); for (CamelServlet provider : providers) { provider.disconnect(consumer); } }
public void connect(HttpConsumer consumer) { log.debug("Connecting consumer: {}", consumer); consumers.put(consumer.getEndpoint().getEndpointUri(), consumer); }
@Override public void register(HttpConsumer consumer) { if (LOG.isDebugEnabled()) { LOG.debug("Registering consumer for path {} providers present: {}", consumer.getPath(), providers.size()); } consumers.add(consumer); for (CamelServlet provider : providers) { provider.connect(consumer); } }
@Override public String getRestrictMethod() { return consumer.getEndpoint().getHttpMethodRestrict(); }
@Override public void connect(HttpConsumer consumer) { log.debug("Getting ServletEndpoint for consumer: {}", consumer); ServletEndpoint endpoint = getServletEndpoint(consumer); if (endpoint.getServletName() != null) { String endpointName = getEndpointNameFromPath(consumer.getPath()); log.debug("Adding consumer for endpointName: {}", endpointName); consumers.put(endpointName, consumer); } }
@Override public boolean isMatchOnUriPrefix() { return consumer.getEndpoint().isMatchOnUriPrefix(); }
public void disconnect(HttpConsumer consumer) { log.debug("Disconnecting consumer: {}", consumer); consumers.remove(consumer.getEndpoint().getEndpointUri()); }
public HttpBinding getBinding() { return getEndpoint().getHttpBinding(); }
public String getPath() { return getEndpoint().getPath(); }
@Override protected void doStart() throws Exception { super.doStart(); if (getEndpoint().canConnect(this)) { canConnected = true; getEndpoint().connect(this); suspended = false; } }
protected HttpConsumer doResolve(HttpServletRequest request, String method, Map<String, HttpConsumer> consumers) { String path = request.getPathInfo(); if (path == null) { return null; } HttpConsumer answer = consumers.get(path); List<HttpConsumer> candidates = resolveCandidates(request, method, consumers); // extra filter by restrict candidates = candidates.stream().filter(c -> matchRestMethod(method, c.getEndpoint().getHttpMethodRestrict())).collect(Collectors.toList()); if (candidates.size() == 1) { answer = candidates.get(0); } return answer; }