@Override
  protected boolean acceptWebSocket(HttpServletRequest req, HttpServletResponse resp)
      throws ServletException, IOException {
    if (!super.acceptWebSocket(req, resp)) {
      return false;
    } else {
      resp.setHeader("upgrade", "websocket");
      resp.setHeader("connection", "upgrade");
    }

    String key = req.getHeader("Sec-WebSocket-Key");
    resp.setHeader("Sec-WebSocket-Accept", getWebSocketAccept(key));

    WebApplication application = getApplication();
    // Small hack until the Servlet API provides a way to do this.
    TomcatWebSocketProcessor webSocketHandler = new TomcatWebSocketProcessor(req, application);
    TomcatWebSocketProcessor.TomcatWebSocket tomcatWebSocket =
        webSocketHandler.new TomcatWebSocket();

    // the request can be a wrapper from application servlet filters
    while (req instanceof HttpServletRequestWrapper) {
      req = (HttpServletRequest) ((HttpServletRequestWrapper) req).getRequest();
    }
    ((RequestFacade) req).doUpgrade(tomcatWebSocket);
    return true;
  }