0

On Mac with Oracle java "1.8.0_45" I have create a Jetty base dir with:

# java -jar /Users/afarber/jetty-distribution-9.3.10.v20160621/start.jar jetty.home=/Users/afarber/jetty-distribution-9.3.10.v20160621 jetty.base=/Users/afarber/jetty-base --add-to-startd=http,servlet,webapp,resources,ext,fcgi,websocket,proxy-protocol,deploy
INFO: ext             initialised in ${jetty.base}/start.d/ext.ini
INFO: resources       initialised in ${jetty.base}/start.d/resources.ini
INFO: server          initialised (transitively) in ${jetty.base}/start.d/server.ini
INFO: http            initialised in ${jetty.base}/start.d/http.ini
INFO: servlet         initialised in ${jetty.base}/start.d/servlet.ini
INFO: fcgi            initialised in ${jetty.base}/start.d/fcgi.ini
INFO: proxy-protocol  initialised in ${jetty.base}/start.d/proxy-protocol.ini
INFO: webapp          initialised in ${jetty.base}/start.d/webapp.ini
INFO: websocket       initialised in ${jetty.base}/start.d/websocket.ini
MKDIR: ${jetty.base}/lib
MKDIR: ${jetty.base}/lib/ext
MKDIR: ${jetty.base}/resources
MKDIR: ${jetty.base}/webapps
INFO: Base directory was modified

Then I have put $JETTY_BASE/webapps/ws-servlet-0.1-SNAPSHOT.war produced by the very simple Maven project out of -

WsServlet.java

public class WsServlet extends WebSocketServlet
{
    @Override
    public void configure(WebSocketServletFactory factory) {
        factory.register(EchoListener.class);
    }
}

EchoListener.java

public class EchoListener implements WebSocketListener {
    private static final Logger LOG = Log.getLogger(EchoListener.class);
    private Session mSession;

    @Override
    public void onWebSocketConnect(Session session) {
        LOG.info("onWebSocketConnect {}", session);
        mSession = session;
    }

    @Override
    public void onWebSocketText(String message) {
        LOG.info("onWebSocketText {}", message);
        if (mSession != null && mSession.isOpen()) {
            mSession.getRemote().sendString("ECHO: " + message, null);
        }
    }
}

Finally I have created the $JETTY_BASE/webapps/ws.xml file pointing to the WAR-file:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE Configure PUBLIC "-//Jetty//Configure//EN" 
    "http://www.eclipse.org/jetty/configure_9_0.dtd">
<Configure class="org.eclipse.jetty.webapp.WebAppContext">

    <Set name="contextPath">/ws</Set>
    <Set name="war"><SystemProperty name="jetty.base"/>/webapps/ws-servlet-0.1-SNAPSHOT.war</Set>
</Configure>

When I start Jetty and then connect to it using simple JavaScript code in browser var ws = new WebSocket("//127.0.0.1:8080/ws"); or the Simple Web Socket Client extension for Chrome the error comes:

# java -Dorg.eclipse.jetty.LEVEL=DEBUG -jar /Users/afarber/jetty-distribution-9.3.10.v20160621/start.jar jetty.base=/Users/afarber/jetty-base
....
WARN:oejs.ProxyConnectionFactory:qtp1993134103-12: Bad character 13 for SelectChannelEndPoint@26ba5622{/127.0.0.1:49883<->8080,Open,in,out,-,-,0/30000,ProxyConnection@49376d8e}{io=1/0,kio=1,kro=1}

Here is the full Jetty log, what have I missed here please?

UPDATE:

I have also tried connecting to ws://127.0.0.1:8080/ws-servlet-0.1-SNAPSHOT and tried adding annotations like @WebServlet(name = "WsServlet", urlPatterns = { "/ws" })- but that does not help. Also I have tried the older version 9.3.9.v20160517.

UPDATE 2:

Is the root cause the PROXY Protocol, which I have to use at my production server, because I offload SSL and normal connections to HAProxy? From the doc I read that 13 is sent as the first byte.

UPDATE 3:

The problem has been solved by adding a trailing slash: ws://127.0.0.1:8080/ws/

Alexander Farber
  • 21,519
  • 75
  • 241
  • 416
  • 1
    0x0a is a new line and 0x0d is a carriage return - this is commonly used as a new line character in Microsoft files. Then, 0x51, 0x55, 0x49 and 0x54 is "QUIT". 13 is the decimal number for carriage return. It sounds like you should try to get one thing working before using the proxy. – stdunbar Jul 06 '16 at 00:17
  • No, that was an excerpt from HAProxy doc and not from my logs. I have deleted it, so that it does not mislead anyone. Also, quite many things are already working well at my Jetty-server (like [serving Wordpress via FastCGI](http://www.eclipse.org/jetty/documentation/9.3.x/configuring-fastcgi.html) and also `HttpServlet`s as WAR-files and offloading SSL to HAProxy at the Linux server). I only have the problem with the `WebSocketServlet` as WAR-file. – Alexander Farber Jul 06 '16 at 08:06

0 Answers0