当前位置: 首页 > 知识库问答 >
问题:

尝试使用jsr 356时发生java.lang.Linkage错误

邢承弼
2023-03-14

我试图从部署在Jetty中的war中实现一个JSR356 websocket连接。

我将此作为指南:http://aredko.blogspot.com/2013/11/java-websockets-jsr-356-on-jetty91.html

(我可以找到很多关于在嵌入式jetty服务器上基本使用JSR356的教程,但是没有关于在现有服务器中构建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是不是从它自己的内部旧版本?还是我完全误读了问题的来源?

我拥有的jetty版本是:Jetty9.2.1.v20140609

共有1个答案

贾俊喆
2023-03-14

null

从WAR的web-inf/lib/目录中删除以下JAR。

  • javax.websocket-api-*.jar-javax.websocket API jar
  • javax-websocket-server-impl-*.jar-jetty服务器javax.websocket.server.*实现jar
  • javax-websocket-client-impl-jetty javax.websocket.*(client)JAR

这是因为您是针对javax.websocket.*API类进行编码/编译的。

API和API的实现由Jetty自己提供。

这与您针对servlet-api编写代码时没有什么不同。(也就是说,在WAR中不包含servlet-api和servlet-api的实现)

 类似资料:
  • 我正在使用Context.SendorderedBroadcast方法发送广播,并在到达ResultReceiver之前检查是否有人收到了广播。 下面是一段代码: 到目前为止,我只在搭载Android 2.1版本的摩托罗拉Defy手机上遇到过这种情况,但它也可能发生在其他手机上。 我在网上找不到任何关于它的参考资料,有人知道为什么会这样吗?谢谢!

  • 问题内容: 在Windows上安装了Docker,并额外安装了2个Oracle VM VirualBox和Kitematic。我在Windows 10 PC中禁用了Hyper-V。现在的问题是我无法从DockerHub下载任何Docker映像,甚至我都无法以如下方式运行命令 两端都显示以下错误。 尝试连接时发生错误:获取 http:// localhost:2375 / v1.21 / info

  • 为了快速地将数据插入到数据库中,我一直在尝试生成一个巨大的SQL(大约200个查询),但由于某种原因,我得到了SQL错误,但不确定是什么导致了它。 错误: SQL错误(1064):您的SQL语法有错误;查看与您的MySQL server版本相对应的手册,以了解在第8行附近使用的正确语法 下面是我的一部分代码: 你可以在Pastebin上找到我的完整SQL。 不知道是什么原因造成的,因为后面的“6”

  • 问题内容: 我正在尝试使用java解析JSON字符串。我不知道该怎么做,我在互联网上搜索了很多内容,但有了一些主意。有了我,我有构建代码,但它不起作用。当尝试执行我的代码时,它将引发错误。我无法解决错误。 看到下面是我的代码: 我的JSON字符串在该文件中: 当我执行代码时,它会引发如下错误: 请帮助我解决这个问题,在此先感谢 问题答案: 您的json在Java中解析错误。在Java中,最大值为

  • 大约34小时前,我生成了一个签名的apk,但现在,我无法生成一个签名的apk,我不知道如何解决这个问题。请帮忙 这是我的输出消息 > 错误:任务“:app:LintVitalRelease”执行失败。 尝试:使用--stacktrace选项运行以获取堆栈跟踪。使用--info或--debug选项运行以获取更多日志输出。使用--scan运行以获得完整的见解。 这是我的Build.Gradle(应用程

  • 我尝试使用shared_ptrs创建一个单例对象。但是,当构造函数/析构函数对特定对象是私有的时,代码不会编译 我正在使用VS17编译器创建的错误如下 错误C2440:":无法从'_Ux*'转换为'std::shared_ptr'与[_Ux=ThreadPool]包含\内存(1462):注意:没有构造函数可以采取源类型,或构造函数重载解决方案是含糊不清的threadpool.cpp(9):注意:请