AbstractHttpTransport transport = _bayeux.findHttpTransport(request);
if (transport == null)
{
response.sendError(HttpServletResponse.SC_BAD_REQUEST, "Unknown Bayeux Transport");
}
protected AbstractHttpTransport findHttpTransport(HttpServletRequest request)
{
// Avoid allocation of the Iterator
for (int i = 0; i < _allowedTransports.size(); ++i)
{
String transportName = _allowedTransports.get(i);
ServerTransport serverTransport = getTransport(transportName);
if (serverTransport instanceof AbstractHttpTransport)
{
AbstractHttpTransport transport = (AbstractHttpTransport)serverTransport;
if (transport.accept(request))
return transport;
}
}
return null;
}
In case of a WS request The serverTransport is not an instance of AbstractHttpTransport and so this ends up returning null, which results in the 400 from CometDServlet. Which makes sense since JettyWebSocketTransport extends AbstractWebSocketTransport and not AbstractHttpTransport (Or AbstractHTTPStreamTransport as in case of JSONTransport where I do not see this problem)
It looks like with this implementation a WS call will always be returned a 400. Am I missing something here? Any help will be appreciated :)
The CometD version is 3.0.4, DW 0.8.1 and Jetty version is 9.2.9.v20150224
<dependency>
<groupId>org.eclipse.jetty.websocket</groupId>
<artifactId>javax-websocket-server-impl</artifactId>
</dependency>
<dependency>
<groupId>org.eclipse.jetty.websocket</groupId>
<artifactId>websocket-server</artifactId>
</dependency>
<dependency>
<groupId>org.eclipse.jetty.websocket</groupId>
<artifactId>websocket-api</artifactId>
</dependency>
environment.servlets().addFilter("wsfilter", new WebSocketUpgradeFilter());
Is there something else I need to do to make the request be intercepted by Jetty and not go to the CometDServlet.
I also tried looking at posts with people facing similar exceptions but most of them used the JSR 356 WebSocketTransport instead of Jetty specific one.
Would you have any ideas on what I could be missing/doing wrong and where I could look for similar usage examples.
Thanks for the help!
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_set_header X-Forwarded-For $http_x_forwarded_for;
proxy_set_header Host $http_host;
proxy_pass http://mywebsite;
Thanks!
@ServerEndpoint("/cometd")
@WebServlet(name = "CometdServlet", urlPatterns = {"/cometd/*"}, loadOnStartup = 2, asyncSupported = true ,
initParams = {
@WebInitParam(name = "ws.cometdURLMapping", value = "/cometd/*"),
@WebInitParam(name = "transports", value = "org.cometd.websocket.server.WebSocketTransport," +
"org.cometd.server.transport.JSONTransport,org.cometd.server.transport.JSONPTransport")
})
//@WebFilter(filterName = "cross-origin",value="org.eclipse.jetty.servlets.CrossOriginFilter",asyncSupported =true,urlPatterns ={"/cometd/*"} )
public class ZCometdServlet extends CometDServlet implements BayeuxServer.SubscriptionListener
that error goes away.
But handshake fails.
How to resolve this problem.