@Override public void register(CamelServlet provider) { if (LOG.isDebugEnabled()) { LOG.debug("Registering CamelServlet with name {} consumers present: {}", provider.getServletName(), consumers.size()); } providers.add(provider); for (HttpConsumer consumer : consumers) { provider.connect(consumer); } }
@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); } }
@Override protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { if (isAsync()) { final AsyncContext context = req.startAsync(); //run async context.start(() -> doServiceAsync(context)); } else { doService(req, resp); } }
/** * @deprecated use {@link ServletResolveConsumerStrategy#resolve(javax.servlet.http.HttpServletRequest, java.util.Map)} */ @Deprecated protected HttpConsumer resolve(HttpServletRequest request) { return getServletResolveConsumerStrategy().resolve(request, getConsumers()); }
HttpConsumer consumer = resolve(request); if (consumer == null) { boolean hasAnyMethod = METHODS.stream().anyMatch(m -> getServletResolveConsumerStrategy().isHttpMethodAllowed(request, m, getConsumers())); if (hasAnyMethod) { log.debug("No consumer to service request {} as method {} is not allowed", request, request.getMethod()); 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(); ClassLoader oldTccl = overrideTccl(exchange); HttpHelper.setCharsetFromContentType(request.getContentType(), exchange); exchange.setIn(new HttpMessage(exchange, consumer.getEndpoint(), request, response)); } finally { consumer.doneUoW(exchange); restoreTccl(exchange, oldTccl);
@Override public void init(ServletConfig config) throws ServletException { super.init(config);
@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 CamelServlet getCamelServlet(String servletName) { for (CamelServlet provider : providers) { if (provider.getServletName().equals(servletName)) { return provider; } } return null; }
/** * This is used to handle request asynchronously * @param context the {@link AsyncContext} */ protected void doServiceAsync(AsyncContext context) { final HttpServletRequest request = (HttpServletRequest) context.getRequest(); final HttpServletResponse response = (HttpServletResponse) context.getResponse(); try { doService(request, response); } catch (Exception e) { //An error shouldn't occur as we should handle most of error in doService log.error("Error processing request", e); try { response.sendError(HttpServletResponse.SC_INTERNAL_SERVER_ERROR); } catch (Exception e1) { log.debug("Cannot send reply to client!", e1); } //Need to wrap it in RuntimeException as it occurs in a Runnable throw new RuntimeCamelException(e); } finally { context.complete(); } }
@Override public void init(ServletConfig config) throws ServletException { super.init(config);
@Override public void connect(HttpConsumer consumer) { ServletEndpoint endpoint = getServletEndpoint(consumer); if (endpoint.getServletName() != null && endpoint.getServletName().equals(getServletName())) { super.connect(consumer); } }
@Override public void unregister(CamelServlet provider) { if (LOG.isDebugEnabled()) { LOG.debug("Unregistering CamelServlet with name {}", provider.getServletName()); } providers.remove(provider); }