代码如何确定使用WebSphereRequestUpgradeStrategy和TomcatRequestUpgradeStrategy?

问题描述 投票:0回答:1

我正在尝试使用websockets,我的Spring应用程序在Websphere Liberty上运行。我的Websockets连接不起作用,并且在使用类库调试时,我发现我的代码转到TomcatRequestUpgradeStrategy并且这个代码不起作用,而使用WebSphereRequestUpgradeStrategy的代码工作正常。我不清楚如何确定这项工作的逻辑?我已经设置了我的pom中提供的spring-boot-starter-tomcat。所以我不清楚它是如何导致它使用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    

如果您需要更多详细信息,请告诉我。感谢任何回应。

java websocket websphere-liberty java-websocket
1个回答
0
投票

我想出了我的问题的答案。这可能对将来的其他人有所帮助。

DefaultHandshakeHandler检查了类加载器中是否存在org.apache.tomcat.websocket.server.WsHttpUpgradeHandler。由于pom依赖中存在tomcat-embed-websocket,因此该类存在。所以,即使我在Liberty上运行,也会被触发。从pom中删除它,帮助我解决了问题。

© www.soinside.com 2019 - 2024. All rights reserved.