Как код определяет использование WebSphereRequestUpgradeStrategy и TomcatRequestUpgradeStrategy? - PullRequest
0 голосов
/ 28 апреля 2019

Я пытаюсь использовать веб-сокеты, и мое весеннее приложение работает на Websphere Liberty. Мое соединение Websockets не работает, и после отладки с библиотеками классов я обнаружил, что мой код обращается к TomcatRequestUpgradeStrategy, а этот не работает, в отличие от того, который использует WebSphereRequestUpgradeStrategy, работает нормально. Не ясно, как логика определяет эту работу? Я установил spring-boot-starter-tomcat, как указано в моем pom. Так что не ясно, как это заставляет его использовать 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    

Пожалуйста, дайте мне знать, если вам нужно больше деталей. Цени любой ответ.

1 Ответ

0 голосов
/ 30 апреля 2019

Я разобрался с ответом на мой вопрос.Это может быть полезно для кого-то еще в будущем.

DefaultHandshakeHandler проверяет наличие org.apache.tomcat.websocket.server.WsHttpUpgradeHandler в загрузчике классов.Поскольку в зависимости pom был tomcat-embed-websocket, этот класс присутствовал.Так что, хотя я работал на Liberty, это сработало.Удаление того же из пом помогло мне решить проблему.

...