我正在使用一个可运行的 jar(带有依赖项)来启动一个嵌入式 tomcat,该 tomcat 托管一个使用 struts2 和 websockets 的 web 应用程序。
该应用程序在Tomcat
安装中运行时可以正常工作,但是当从提到的可运行 jar 运行时,websocket 容器未初始化,导致404
尝试连接到相应的端点时响应。
我将问题缩小到发现进程,该进程读取META-INF/Services/javax.servlet.ServerContainerInitializer
不同的 jar 文件以查找为服务器初始化服务的类。特别是,初始化 Websockets Container 的类是org.apache.tomcat.websocket.server.WsSci
.
据我所见,WsSci
该类已由 maven 程序集插件重新打包在可运行的 jar 中,但该META-INF/Services/javax.servlet.ServerContainerInitializer
文件没有像原始 jar 那样提到这个类,它只提到了org.apache.jasper.servlet.JasperInitializer
初始化程序。
有什么办法可以让可运行的 jar 保持原样,并WebSockets Container
通过调用Tomcat
类上的某个方法以编程方式请求初始化?或者请求web.xml
文件中的初始化?
注意:作为一项工作,我可以看到,如果我将WsSci
类手动添加到META-INF/Services/javax.servlet.ServerContainerInitializer
可运行 jar 中的新文件中,则Websockets Containter
初始化正确。