Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

ServletException: ClassNotFoundException org.eclipse.jetty.websocket.server.WebSocketServerFactory

I set up a Websocket Server that is supposed to run a servlet which is created by a websocket servlet factory.
However, whenever I try to reach the websocket via my favourite browser I get:

HTTP ERROR: 500

Problem accessing /test/sound. Reason:

   javax.servlet.ServletException: java.lang.ClassNotFoundException: org.eclipse.jetty.websocket.server.WebSocketServerFactory

The server console gives similar errors. Here's the complete console error message:

    [13:21:26 WARN]: 2015-08-27 13:21:26.912:WARN:/test:qtp20972561-41: unavailable
java.lang.ClassNotFoundException: org.eclipse.jetty.websocket.server.WebSocketSe
rverFactory
        at java.net.URLClassLoader.findClass(Unknown Source)
        at java.lang.ClassLoader.loadClass(Unknown Source)
        at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source)
        at java.lang.ClassLoader.loadClass(Unknown Source)
        at org.eclipse.jetty.websocket.servlet.WebSocketServletFactory$Loader.lo
ad(WebSocketServletFactory.java:63)
        at org.eclipse.jetty.websocket.servlet.WebSocketServletFactory$Loader.cr
eate(WebSocketServletFactory.java:42)
        at org.eclipse.jetty.websocket.servlet.WebSocketServlet.init(WebSocketSe
rvlet.java:128)
        at javax.servlet.GenericServlet.init(GenericServlet.java:244)
        at org.eclipse.jetty.servlet.ServletHolder.initServlet(ServletHolder.jav
a:612)
        at org.eclipse.jetty.servlet.ServletHolder.getServlet(ServletHolder.java
:468)
        at org.eclipse.jetty.servlet.ServletHolder.handle(ServletHolder.java:778
)
        at org.eclipse.jetty.servlet.ServletHandler.doHandle(ServletHandler.java
:587)
        at org.eclipse.jetty.server.handler.ContextHandler.doHandle(ContextHandl
er.java:1125)
        at org.eclipse.jetty.servlet.ServletHandler.doScope(ServletHandler.java:
515)
        at org.eclipse.jetty.server.handler.ContextHandler.doScope(ContextHandle
r.java:1059)
        at org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.j
ava:141)
        at org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper
.java:97)
        at org.eclipse.jetty.server.Server.handle(Server.java:497)
        at org.eclipse.jetty.server.HttpChannel.handle(HttpChannel.java:310)
        at org.eclipse.jetty.server.HttpConnection.onFillable(HttpConnection.jav
a:248)
        at org.eclipse.jetty.io.AbstractConnection$2.run(AbstractConnection.java
:540)
        at org.eclipse.jetty.util.thread.QueuedThreadPool.runJob(QueuedThreadPoo
l.java:620)
        at org.eclipse.jetty.util.thread.QueuedThreadPool$3.run(QueuedThreadPool
.java:540)
        at java.lang.Thread.run(Unknown Source)
[13:21:26 WARN]: 2015-08-27 13:21:26.913:WARN:oejs.ServletHandler:qtp20972561-41
:
javax.servlet.ServletException: java.lang.ClassNotFoundException: org.eclipse.je
tty.websocket.server.WebSocketServerFactory
        at org.eclipse.jetty.websocket.servlet.WebSocketServlet.init(WebSocketSe
rvlet.java:138)
        at javax.servlet.GenericServlet.init(GenericServlet.java:244)
        at org.eclipse.jetty.servlet.ServletHolder.initServlet(ServletHolder.jav
a:612)
        at org.eclipse.jetty.servlet.ServletHolder.getServlet(ServletHolder.java
:468)
        at org.eclipse.jetty.servlet.ServletHolder.handle(ServletHolder.java:778
)
        at org.eclipse.jetty.servlet.ServletHandler.doHandle(ServletHandler.java
:587)
        at org.eclipse.jetty.server.handler.ContextHandler.doHandle(ContextHandl
er.java:1125)
        at org.eclipse.jetty.servlet.ServletHandler.doScope(ServletHandler.java:
515)
        at org.eclipse.jetty.server.handler.ContextHandler.doScope(ContextHandle
r.java:1059)
        at org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.j
ava:141)
        at org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper
.java:97)
        at org.eclipse.jetty.server.Server.handle(Server.java:497)
        at org.eclipse.jetty.server.HttpChannel.handle(HttpChannel.java:310)
        at org.eclipse.jetty.server.HttpConnection.onFillable(HttpConnection.jav
a:248)
        at org.eclipse.jetty.io.AbstractConnection$2.run(AbstractConnection.java
:540)
        at org.eclipse.jetty.util.thread.QueuedThreadPool.runJob(QueuedThreadPoo
l.java:620)
        at org.eclipse.jetty.util.thread.QueuedThreadPool$3.run(QueuedThreadPool
.java:540)
        at java.lang.Thread.run(Unknown Source)
Caused by:
java.lang.ClassNotFoundException: org.eclipse.jetty.websocket.server.WebSocketSe
rverFactory
        at java.net.URLClassLoader.findClass(Unknown Source)
        at java.lang.ClassLoader.loadClass(Unknown Source)
        at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source)
        at java.lang.ClassLoader.loadClass(Unknown Source)
        at org.eclipse.jetty.websocket.servlet.WebSocketServletFactory$Loader.lo
ad(WebSocketServletFactory.java:63)
        at org.eclipse.jetty.websocket.servlet.WebSocketServletFactory$Loader.cr
eate(WebSocketServletFactory.java:42)
        at org.eclipse.jetty.websocket.servlet.WebSocketServlet.init(WebSocketSe
rvlet.java:128)
        at javax.servlet.GenericServlet.init(GenericServlet.java:244)
        at org.eclipse.jetty.servlet.ServletHolder.initServlet(ServletHolder.jav
a:612)
        at org.eclipse.jetty.servlet.ServletHolder.getServlet(ServletHolder.java
:468)
        at org.eclipse.jetty.servlet.ServletHolder.handle(ServletHolder.java:778
)
        at org.eclipse.jetty.servlet.ServletHandler.doHandle(ServletHandler.java
:587)
        at org.eclipse.jetty.server.handler.ContextHandler.doHandle(ContextHandl
er.java:1125)
        at org.eclipse.jetty.servlet.ServletHandler.doScope(ServletHandler.java:
515)
        at org.eclipse.jetty.server.handler.ContextHandler.doScope(ContextHandle
r.java:1059)
        at org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.j
ava:141)
        at org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper
.java:97)
        at org.eclipse.jetty.server.Server.handle(Server.java:497)
        at org.eclipse.jetty.server.HttpChannel.handle(HttpChannel.java:310)
        at org.eclipse.jetty.server.HttpConnection.onFillable(HttpConnection.jav
a:248)
        at org.eclipse.jetty.io.AbstractConnection$2.run(AbstractConnection.java
:540)
        at org.eclipse.jetty.util.thread.QueuedThreadPool.runJob(QueuedThreadPoo
l.java:620)
        at org.eclipse.jetty.util.thread.QueuedThreadPool$3.run(QueuedThreadPool
.java:540)
        at java.lang.Thread.run(Unknown Source)

my best bet is, that I forgot something in my pom.xml since the WebSocketServletFactory class is missing, but I am not sure.

Here are the repositories and dependencies I have in the pom.xml

<repositories>
        <repository>
            <id>spigot-repo</id>
            <url>https://hub.spigotmc.org/nexus/content/repositories/snapshots/</url>
        </repository>
        <repository>
            <id>googlecode</id>
            <name>jWebSocket Repository</name>
            <url>http://jwebsocket.googlecode.com/svn/repo</url>
        </repository>
    </repositories>
    <dependencies>
        <dependency>
            <groupId>org.spigotmc</groupId>
            <artifactId>spigot-api</artifactId>
            <version>1.8.8-R0.1-SNAPSHOT</version>
            <scope>provided</scope>
        </dependency>
        <dependency>
            <groupId>org.eclipse.jetty</groupId>
            <artifactId>jetty-server</artifactId>
            <version>9.2.5.v20141112</version>
        </dependency>
        <dependency>
            <groupId>org.eclipse.jetty</groupId>
            <artifactId>jetty-servlet</artifactId>
            <version>9.2.5.v20141112</version>
        </dependency>
        <dependency>
            <groupId>org.eclipse.jetty.websocket</groupId>
            <artifactId>websocket-server</artifactId>
            <version>9.2.5.v20141112</version>
        </dependency>
        <dependency>
            <groupId>javax</groupId>
            <artifactId>javaee-api</artifactId>
            <version>7.0</version>
        </dependency>
    </dependencies>

How can I resolve this error? If any more source is required please request it.

like image 345
Ziron5 Avatar asked Aug 11 '26 02:08

Ziron5


1 Answers

Note: this answer assumes you are using jetty-distribution and normal webapps (WAR) files.

No Jetty classes should be in your war file's WEB-INF/lib or WEB-INF/classes, hence the <scope>provided</scope> setup.

With jetty-distribution 9.x be sure you have --module=websocket setup in your ${jetty.base}/start.ini

If you are writing for the jetty native websocket api, use this ...

    <dependency>
        <groupId>org.eclipse.jetty.websocket</groupId>
        <artifactId>websocket-api</artifactId>
        <version>9.3.2.v20150730</version>
        <scope>provided</scope>
    </dependency>

If you are wanting servlet support for the jetty native websocket api use this ...

    <dependency>
        <groupId>org.eclipse.jetty.websocket</groupId>
        <artifactId>websocket-servlet</artifactId>
        <version>9.3.2.v20150730</version>
        <scope>provided</scope>
    </dependency>

If you are wanting client support for the jetty native websocket api use this ...

    <dependency>
        <groupId>org.eclipse.jetty.websocket</groupId>
        <artifactId>websocket-client</artifactId>
        <version>9.3.2.v20150730</version>
        <scope>provided</scope>
    </dependency>

If you are writing against the javax.websocket.server server API, use the following (Note: this includes the javax.websocket client API as-well) ...

    <dependency>
        <groupId>javax.websocket</groupId>
        <artifactId>javax.websocket-api</artifactId>
        <version>1.0</version>
        <scope>provided</scope>
    </dependency>

If you are writing against the javax.websocket client only API, use the following ...

    <dependency>
        <groupId>javax.websocket</groupId>
        <artifactId>javax.websocket-client-api</artifactId>
        <version>1.0</version>
        <scope>provided</scope>
    </dependency>

The suggestions below are only valid for embedded-jetty use of WebSocket and javax.websocket (JSR-356) support.

If you are wanting javax.websocket.server (aka JSR-356 server) support use this ...

    <dependency>
        <groupId>org.eclipse.jetty.websocket</groupId>
        <artifactId>javax-websocket-server-impl</artifactId>
        <version>9.3.2.v20150730</version>
        <scope>provided</scope>
    </dependency>

If you are wanting javax.websocket (aja JSR-356 client) support use this ...

    <dependency>
        <groupId>org.eclipse.jetty.websocket</groupId>
        <artifactId>javax-websocket-client-impl</artifactId>
        <version>9.3.2.v20150730</version>
        <scope>provided</scope>
    </dependency>

And other references to websocket artifacts in your pom are useless and pointless, don't use em.

like image 198
Joakim Erdfelt Avatar answered Aug 12 '26 17:08

Joakim Erdfelt



Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!