2016-08-18 4 views
0

Я пытаюсь настроить веб-сокеты весной, используя сервер Wildfly 10. Согласно this учебник, у меня есть следующие файлы:Включение WebSockets с использованием весны

Это класс веб-сокет:

package com.myapp.spring.web.controller; 

import javax.websocket.OnClose; 
import javax.websocket.OnError; 
import javax.websocket.OnMessage; 
import javax.websocket.OnOpen; 
import javax.websocket.server.ServerEndpoint; 

import org.springframework.web.socket.server.standard.SpringConfigurator; 


@ServerEndpoint(value="/serverendpoint", configurator = SpringConfigurator.class) 

/** 
* This class creates web sockets, opens, and maintains connection with the client 
*/ 
public class serverendpoint { 


    @OnOpen 
    public void handleOpen() { 
     System.out.println("JAVA: Client is now connected..."); 
    } 

    @OnMessage 
    public String handleMessage (String message) { 

     if (message.equals("ping")) 
      return "pong"; 
     else if (message.equals("close")) { 
      handleClose(); 
      return null; 
     } 
     System.out.println("JAVA: Received from client: "+ message); 
     if (message.contains("//")) { 
      MyClass mc = new MyClass(message); 
      return mc.someMethod(); 
     } else { 
      System.out.println("Message From Web Socket Not Understood"); 
      return null; 
     } 
    } 

    @OnClose 
    public void handleClose() { 
     System.out.println("JAVA: Client is now disconnected..."); 
    } 

    @OnError 
    public void handleError (Throwable t) { 
     t.printStackTrace(); 
    } 
} 

Это файл веб-сокет конфигурации:

package com.myapp.spring.security.config; 

import org.springframework.context.annotation.Bean; 
import org.springframework.context.annotation.Configuration; 
import org.springframework.web.socket.server.standard.ServerEndpointExporter; 
import com.myapp.spring.web.controller.serverendpoint; 

@Configuration 
public class EndpointConfig { 

    @Bean 
    public serverendpoint serverendpoint() { 
     return new serverendpoint(); 
    } 

    @Bean 
    public ServerEndpointExporter endpointExporter() { 
     return new ServerEndpointExporter(); 
    } 

} 

Это мой pom.xml:

 <dependency> 
      <groupId>org.springframework</groupId> 
      <artifactId>spring-context</artifactId> 
      <version>4.3.2.RELEASE</version> 
     </dependency> 
     <dependency> 
      <groupId>org.springframework</groupId> 
      <artifactId>spring-webmvc</artifactId> 
      <version>4.3.2.RELEASE</version> 
     </dependency> 
     <dependency> 
      <groupId>org.springframework.boot</groupId> 
      <artifactId>spring-boot-starter-security</artifactId> 
      <version>1.4.0.RELEASE</version> 
     </dependency> 
     <dependency> 
      <groupId>org.springframework.boot</groupId> 
      <artifactId>spring-boot-starter-websocket</artifactId> 
      <version>1.4.0.RELEASE</version> 
     </dependency> 

Согласно руководству, это все, что я должен сделать. Но я получаю следующие ошибки:

Failed to start service jboss.undertow.deployment.default-server.default-host./ROOT: org.jboss.msc.service.StartException in service jboss.undertow.deployment.default-server.default-host./ROOT: java.lang.RuntimeException: java.lang.ClassCastException: org.apache.tomcat.websocket.server.WsServerContainer cannot be cast to io.undertow.websockets.jsr.ServerWebSocketContainer 
    at org.wildfly.extension.undertow.deployment.UndertowDeploymentService$1.run(UndertowDeploymentService.java:85) 
    at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511) 
    at java.util.concurrent.FutureTask.run(FutureTask.java:266) 
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) 
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) 
    at java.lang.Thread.run(Thread.java:745) 
    at org.jboss.threads.JBossThread.run(JBossThread.java:320) 
Caused by: java.lang.RuntimeException: java.lang.ClassCastException: org.apache.tomcat.websocket.server.WsServerContainer cannot be cast to io.undertow.websockets.jsr.ServerWebSocketContainer 
    at io.undertow.servlet.core.DeploymentManagerImpl.deploy(DeploymentManagerImpl.java:231) 
    at org.wildfly.extension.undertow.deployment.UndertowDeploymentService.startContext(UndertowDeploymentService.java:100) 
    at org.wildfly.extension.undertow.deployment.UndertowDeploymentService$1.run(UndertowDeploymentService.java:82) 
    ... 6 more 
Caused by: java.lang.ClassCastException: org.apache.tomcat.websocket.server.WsServerContainer cannot be cast to io.undertow.websockets.jsr.ServerWebSocketContainer 
    at io.undertow.websockets.jsr.Bootstrap$WebSocketListener.contextInitialized(Bootstrap.java:104) 
    at io.undertow.servlet.core.ApplicationListeners.contextInitialized(ApplicationListeners.java:187) 
    at io.undertow.servlet.core.DeploymentManagerImpl.deploy(DeploymentManagerImpl.java:198) 
    ... 8 more 

Какая у вас проблема? Кроме того, есть ли какие-либо другие файлы конфигурации, которые мне нужно добавить, чтобы мой веб-сокет правильно отображался в конечной точке /serverendpoint, как это было в моем классе serverendpoint() (я спрашиваю об этом, потому что я немного не уверен, если мне нужен только один файл конфигурации или нет.Это не кажется правильным.Я посмотрел вокруг, и others включили другие файлы, например, с @EnableWebSocket, но в учебнике сказано, что мне нужны только эти два файла.)?

Большое вам спасибо!

ответ

0

Просьба пройти через https://github.com/spring-projects/spring-boot/issues/6166 и посмотреть, решит ли это вашу проблему. Аналогичная проблема представлена ​​в SO по адресу Spring Boot Websockets in Wildfly. Надеюсь это поможет.

+0

Я рассмотрю это, большое вам спасибо. Но помимо файла конфигурации мне нужны какие-либо другие файлы для моего веб-сокета для работы весной? – user5139637

+0

Учебное пособие, которое вы проводите, имеет образец проекта, доступный по адресу https://github.com/rstoyanchev/spring-websocket-test. Посмотрите, поможет ли это вам. – abaghel

+0

Теперь я получаю новую ошибку: Caused by: javax.websocket.DeploymentException: UT003023: Несколько конечных точек с одинаковым логическим отображением PathTemplate {template = false, base = '/ serverendpoint', parts = []} и PathTemplate {template = false, base = '/ serverendpoint', parts = []} – user5139637

Смежные вопросы