代码如何确定使用 WebSphereRequestUpgradeStrategy 与 TomcatRequestUpgradeStrategy?
how does code determine to use WebSphereRequestUpgradeStrategy vs TomcatRequestUpgradeStrategy?
我正在尝试使用 websockets,我的 spring 应用程序在 Websphere Liberty 上运行。我的 Websockets 连接不起作用,在使用 class 库进行调试时,我发现我的代码转到了 TomcatRequestUpgradeStrategy
而这个不起作用,而使用 WebSphereRequestUpgradeStrategy
的代码工作正常.我不清楚确定这项工作的逻辑如何?我已经设置了 spring-boot-starter-tomcat 作为我的 pom.xml 中提供的。所以我不清楚它是如何导致它使用 TomcatRequestUpgradeStrategy 的。有人可以帮我解决这个问题吗?
工作:
SRTServletRequest31.upgrade(Class<T>) line: 157
WsocHandlerImpl.handleRequest(HttpServletRequest, HttpServletResponse, ServerEndpointConfig, Map<String,String>, boolean) line: 268
ServerContainerExt.doUpgrade(HttpServletRequest, HttpServletResponse, ServerEndpointConfig, Map<String,String>) line: 288
NativeMethodAccessorImpl.invoke0(Method, Object, Object[]) line: not available [native method]
NativeMethodAccessorImpl.invoke(Object, Object[]) line: 62
DelegatingMethodAccessorImpl.invoke(Object, Object[]) line: 43
Method.invoke(Object, Object...) line: 498
WebSphereRequestUpgradeStrategy.upgradeInternal(ServerHttpRequest, ServerHttpResponse, String, List<Extension>, Endpoint) line: 87
WebSphereRequestUpgradeStrategy(AbstractStandardUpgradeStrategy).upgrade(ServerHttpRequest, ServerHttpResponse, String, List<WebSocketExtension>, Principal, WebSocketHandler, Map<String,Object>) line: 119
DefaultHandshakeHandler(AbstractHandshakeHandler).doHandshake(ServerHttpRequest, ServerHttpResponse, WebSocketHandler, Map<String,Object>) line: 281
WebSocketHttpRequestHandler.handleRequest(HttpServletRequest, HttpServletResponse) line: 166
不工作:
SRTServletRequest31.upgrade(Class<T>) line: 157
RequestWrapper(HttpServletRequestWrapper).upgrade(Class<T>) line: 399
HttpSessionSecurityContextRepository$Servlet3SaveToSessionRequestWrapper(HttpServletRequestWrapper).upgrade(Class<T>) line: 399
HttpServlet3RequestFactory$Servlet3SecurityContextHolderAwareRequestWrapper(HttpServletRequestWrapper).upgrade(Class<T>) line: 399
UpgradeUtil.doUpgrade(WsServerContainer, HttpServletRequest, HttpServletResponse, ServerEndpointConfig, Map<String,String>) line: 234
WsServerContainer.doUpgrade(HttpServletRequest, HttpServletResponse, ServerEndpointConfig, Map<String,String>) line: 265
TomcatRequestUpgradeStrategy.upgradeInternal(ServerHttpRequest, ServerHttpResponse, String, List<Extension>, Endpoint) line: 72
TomcatRequestUpgradeStrategy(AbstractStandardUpgradeStrategy).upgrade(ServerHttpRequest, ServerHttpResponse, String, List<WebSocketExtension>, Principal, WebSocketHandler, Map<String,Object>) line: 119
DefaultHandshakeHandler(AbstractHandshakeHandler).doHandshake(ServerHttpRequest, ServerHttpResponse, WebSocketHandler, Map<String,Object>) line: 281
WebSocketHttpRequestHandler.handleRequest(HttpServletRequest, HttpServletResponse) line: 166
如果您需要更多详细信息,请告诉我。感谢任何回复。
我找到了问题的答案。这可能对将来的其他人有帮助。
DefaultHandshakeHandler
检查 org.apache.tomcat.websocket.server.WsHttpUpgradeHandler
是否存在于 class 加载程序中。由于 pom 依赖项中存在 tomcat-embed-websocket,因此存在此 class。所以,即使我在 Liberty 上 运行,这也被触发了。从 pom 中删除相同的内容,帮助我解决了问题。
我正在尝试使用 websockets,我的 spring 应用程序在 Websphere Liberty 上运行。我的 Websockets 连接不起作用,在使用 class 库进行调试时,我发现我的代码转到了 TomcatRequestUpgradeStrategy
而这个不起作用,而使用 WebSphereRequestUpgradeStrategy
的代码工作正常.我不清楚确定这项工作的逻辑如何?我已经设置了 spring-boot-starter-tomcat 作为我的 pom.xml 中提供的。所以我不清楚它是如何导致它使用 TomcatRequestUpgradeStrategy 的。有人可以帮我解决这个问题吗?
工作:
SRTServletRequest31.upgrade(Class<T>) line: 157
WsocHandlerImpl.handleRequest(HttpServletRequest, HttpServletResponse, ServerEndpointConfig, Map<String,String>, boolean) line: 268
ServerContainerExt.doUpgrade(HttpServletRequest, HttpServletResponse, ServerEndpointConfig, Map<String,String>) line: 288
NativeMethodAccessorImpl.invoke0(Method, Object, Object[]) line: not available [native method]
NativeMethodAccessorImpl.invoke(Object, Object[]) line: 62
DelegatingMethodAccessorImpl.invoke(Object, Object[]) line: 43
Method.invoke(Object, Object...) line: 498
WebSphereRequestUpgradeStrategy.upgradeInternal(ServerHttpRequest, ServerHttpResponse, String, List<Extension>, Endpoint) line: 87
WebSphereRequestUpgradeStrategy(AbstractStandardUpgradeStrategy).upgrade(ServerHttpRequest, ServerHttpResponse, String, List<WebSocketExtension>, Principal, WebSocketHandler, Map<String,Object>) line: 119
DefaultHandshakeHandler(AbstractHandshakeHandler).doHandshake(ServerHttpRequest, ServerHttpResponse, WebSocketHandler, Map<String,Object>) line: 281
WebSocketHttpRequestHandler.handleRequest(HttpServletRequest, HttpServletResponse) line: 166
不工作:
SRTServletRequest31.upgrade(Class<T>) line: 157
RequestWrapper(HttpServletRequestWrapper).upgrade(Class<T>) line: 399
HttpSessionSecurityContextRepository$Servlet3SaveToSessionRequestWrapper(HttpServletRequestWrapper).upgrade(Class<T>) line: 399
HttpServlet3RequestFactory$Servlet3SecurityContextHolderAwareRequestWrapper(HttpServletRequestWrapper).upgrade(Class<T>) line: 399
UpgradeUtil.doUpgrade(WsServerContainer, HttpServletRequest, HttpServletResponse, ServerEndpointConfig, Map<String,String>) line: 234
WsServerContainer.doUpgrade(HttpServletRequest, HttpServletResponse, ServerEndpointConfig, Map<String,String>) line: 265
TomcatRequestUpgradeStrategy.upgradeInternal(ServerHttpRequest, ServerHttpResponse, String, List<Extension>, Endpoint) line: 72
TomcatRequestUpgradeStrategy(AbstractStandardUpgradeStrategy).upgrade(ServerHttpRequest, ServerHttpResponse, String, List<WebSocketExtension>, Principal, WebSocketHandler, Map<String,Object>) line: 119
DefaultHandshakeHandler(AbstractHandshakeHandler).doHandshake(ServerHttpRequest, ServerHttpResponse, WebSocketHandler, Map<String,Object>) line: 281
WebSocketHttpRequestHandler.handleRequest(HttpServletRequest, HttpServletResponse) line: 166
如果您需要更多详细信息,请告诉我。感谢任何回复。
我找到了问题的答案。这可能对将来的其他人有帮助。
DefaultHandshakeHandler
检查 org.apache.tomcat.websocket.server.WsHttpUpgradeHandler
是否存在于 class 加载程序中。由于 pom 依赖项中存在 tomcat-embed-websocket,因此存在此 class。所以,即使我在 Liberty 上 运行,这也被触发了。从 pom 中删除相同的内容,帮助我解决了问题。