Details
-
Improvement
-
Status: Open
-
Major
-
Resolution: Unresolved
-
1.6.0, 1.5.2
-
None
Description
This patch allows third-party to developers extend HttpSource behavior easily, without having to reimplement the whole thing.
More specifically:
- Adds an hook to customize org.mortbay.jetty.servlet.Context.
- Delegates the HttpServlet instance creation to a protected factory method.
- Changes FlumeHttpServlet visibility to protected, to let third party developers extend from it.
- Adds an hook in FlumeHTTPServlet to customize HttpServletResponse before it is flushed.
We developed this patch because we had to add a custom servlet filter to the Jetty context.
Having this patch applied, a third-party developer could easily extend HttpSource like this:
CustomHTTPSource.java
public class CustomHTTPSource extends HTTPSource { @Override protected void customizeServletContext(Context context) { super.customizeServletContext(context); context.addFilter(MyCustomHttpServletFilter.class,"/*",0); } @Override protected HttpServlet getServlet() { return new KeedioFlumeHTTPServlet(); } protected class KeedioFlumeHTTPServlet extends FlumeHTTPServlet{ @Override protected void customizeServletResponse(HttpServletRequest request, HttpServletResponse response) { super.customizeServletResponse(request, response); response.addHeader("Accept-Encoding","..."); } } }