我试图在一个部署在码头的战争中实施一个jsr 356 websocket连接。
我以此为指导:http://aredko.blogspot.com/2013/11/java-websockets-jsr-356-on-jetty-91.html
(我可以找到很多关于基本上使用带有嵌入式jetty服务器的jsr 356的教程,但是在现有服务器中构建websocket连接都没有 - 那里有什么好的吗?)
每当我运行上面列出的代码时,我都会收到以下错误:
java.lang.LinkageError: loader constraint violation: when resolving method "org.eclipse.jetty.websocket.jsr356.server.deploy.WebSocketServerContainerInitializer.configureContext(Lorg/eclipse/jetty/servlet/ServletContextHandler;)Lorg/eclipse/jetty/websocket/jsr356/server/ServerContainer;" the class loader (instance of org/eclipse/jetty/webapp/WebAppClassLoader) of the current class, com/me/stuff/data/DataServer, and the class loader (instance of org/eclipse/jetty/start/Classpath$Loader) for resolved class, org/eclipse/jetty/websocket/jsr356/server/deploy/WebSocketServerContainerInitializer, have different Class objects for the type y.websocket.jsr356.server.deploy.WebSocketServerContainerInitializer.configureContext(Lorg/eclipse/jetty/servlet/ServletContextHandler;)Lorg/eclipse/jetty/websocket/jsr356/server/ServerContainer; used in the signature
引用代码
ServerContainer container = WebSocketServerContainerInitializer.configureContext(context);
我不知道这一点。我使用gradle中的以下几行来引入websocket:
providedCompile (
[ group: 'javax.websocket', name: 'javax.websocket-api', version: '+'],
[ group: 'javax.ws.rs', name: 'javax.ws.rs-api', version: '+' ]
)
compile (
[ group: 'org.eclipse.jetty.websocket', name: 'javax-websocket-server-impl', version: '+'],
[ group: 'org.eclipse.jetty.websocket', name: 'javax-websocket-client-impl', version: '+']
)
我看到javax-websocket-server-impl jar和javax.websocket-api jar都包含ServerContainer类......但是我只包含war文件中的一个。码头是否从其内部旧版本中拉出来?还是我完全误读了问题的根源?
我的码头版本是:jetty-9.2.1.v20140609
答案 0 :(得分:1)
websocket jar不应该在你的WAR中。
从WAR的WEB-INF/lib/
目录中删除以下jar。
javax.websocket-api-*.jar
- javax.websocket API jar javax-websocket-server-impl-*.jar
- jetty服务器javax.websocket.server。* implementation jar javax-websocket-client-impl
- jetty javax.websocket。*(client)jar 这是因为您正在编写/编译javax.websocket.*
API类。
API和API的实现由Jetty本身提供。
这与对servlet-api进行编码时没有什么不同。 (也就是说,你没有在你的WAR中包含servlet-api和servlet-api的实现)