2017-02-09 13 views
0

Ошибка:WebLogic 12: WebSocket квитирование excetion (500): Асинхронный-поддержка отключена

org.springframework.web.socket.server.HandshakeFailureException: Ошибка во время квитирования: http://2.12.85.0:6/eto/tvoy; вложенное исключение java.lang.IllegalStateException: Асинхронный-поддержка отключена по этому запросу: weblogic.servlet.internal.ServletRequestImpl

Сервер: WebLogic 12. Это появляется, когда я пытаюсь подключиться к WebSocket.

Мой web.xml:

<?xml version="1.0" encoding="UTF-8"?> 
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee" 
     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
     xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd" 
     version="3.1"> 
    <context-param> 
     <param-name>contextConfigLocation</param-name> 
     <param-value> 
      classpath:applicationContext.xml 
     </param-value> 
    </context-param> 

    <servlet> 
     <servlet-name>dispatcher</servlet-name> 
     <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> 
     <init-param> 
      <param-name>contextConfigLocation</param-name> 
      <param-value>/WEB-INF/dispatcher-servlet.xml</param-value> 
     </init-param> 
     <load-on-startup>1</load-on-startup> 
     <async-supported>true</async-supported> 
    </servlet> 
    <servlet-mapping> 
     <servlet-name>dispatcher</servlet-name> 
     <url-pattern>/</url-pattern> 
    </servlet-mapping> 

    <!--Позволяет работать с русскими символами--> 
    <filter> 
     <filter-name>encodingFilter</filter-name> 
     <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class> 
     <init-param> 
      <param-name>encoding</param-name> 
      <param-value>UTF-8</param-value> 
     </init-param> 
     <init-param> 
      <param-name>forceEncoding</param-name> 
      <param-value>true</param-value> 
     </init-param> 
    </filter> 
    <filter> 
     <filter-name>AFilter</filter-name> 
     <filter-class>org.springframework.web.filter.DelegatingFilterProxy</filter-class> 
     <async-supported>true</async-supported> 
    </filter> 
    <filter-mapping> 
     <filter-name>AFilter</filter-name> 
     <url-pattern>/*</url-pattern> 
    </filter-mapping> 
    <filter-mapping> 
     <filter-name>encodingFilter</filter-name> 
     <url-pattern>/*</url-pattern> 
    </filter-mapping> 
</web-app> 

Мой webSocketConfig:

import org.slf4j.Logger; 
import org.slf4j.LoggerFactory; 
import org.springframework.context.annotation.Bean; 
import org.springframework.context.annotation.Configuration; 
import org.springframework.scheduling.annotation.EnableAsync; 
import org.springframework.web.socket.WebSocketHandler; 
import org.springframework.web.socket.config.annotation.EnableWebSocket; 
import org.springframework.web.socket.config.annotation.WebSocketConfigurer; 
import org.springframework.web.socket.config.annotation.WebSocketHandlerRegistry; 

@Configuration 
@EnableWebSocket 
@EnableAsync 
public class WebSocketConfig implements WebSocketConfigurer { 
    private static final Logger log = LoggerFactory.getLogger("webSocketLogger"); 
    @Override 
    public void registerWebSocketHandlers(WebSocketHandlerRegistry registry) { 
     log.error("registerWebSocketHandlers"); 
     registry.addHandler(webSocketHandler(), "/chat").setAllowedOrigins("*"); 
    } 

    @Bean 
    public WebSocketHandler webSocketHandler() { 
     return new workspace.websocket.controller.WebSocketHandler(); 
    } 

} 

Мой WebSocket обработчик:

public class WebSocketHandler implements org.springframework.web.socket.WebSocketHandler { 
    private static final Logger log = LoggerFactory.getLogger("webSocketLogger"); 

    @Override 
    public void afterConnectionEstablished(WebSocketSession webSocketSession) throws Exception { 

    } 

    @Override 
    public void handleMessage(WebSocketSession webSocketSession, WebSocketMessage<?> webSocketMessage) throws Exception { 

    } 


    @Override 
    public void handleTransportError(WebSocketSession webSocketSession, Throwable throwable) throws Exception { 
     log.error("transport error", throwable); 
    } 

    @Override 
    public void afterConnectionClosed(WebSocketSession webSocketSession, CloseStatus closeStatus) throws Exception { 
    } 

    @Override 
    public boolean supportsPartialMessages() { 
     return false; 
    } 
} 

Что я должен делать?

ответ

0

Для приложения, использующего асинхронную функцию, вся цепочка обработки запроса должна иметь этот атрибут либо через аннотацию, либо в дескрипторе развертывания. Исключение IllegalStateException будет вызываться, если приложение пытается запустить асинхронную операцию, и в цепочке обработки запроса есть сервлет или сервлет-фильтр, который не поддерживает асинхронную обработку. Таким образом, чтобы решить эту проблему, набор фильтров должен быть дан дополнительный элемент:

<async-supported>true</async-supported> 

В вашем web.xml вы упускаете это для кодирования фильтра. Таким образом, ваша конфигурация фильтра кодирования должна быть такой:

<filter> 
     <filter-name>encodingFilter</filter-name> 
     <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class> 
     <async-supported>true</async-supported>    
     <init-param> 
      <param-name>encoding</param-name> 
      <param-value>UTF-8</param-value> 
     </init-param> 
     <init-param> 
      <param-name>forceEncoding</param-name> 
      <param-value>true</param-value> 
     </init-param>    
    </filter> 
+0

Thx! И это: public void registerWebSocketHandlers (реестр WebSocketHandlerRegistry) { log.error ("registerWebSocketHandlers"); registry.addHandler (webSocketHandler(), "/ чат") .setAllowedOrigins ("*") .setHandshakeHandler (новый DefaultHandshakeHandler (новый WebLogicRequestUpgradeStrategy())) ; } – Desp