2016-02-03 3 views
0

Привет всем У меня есть эти ошибкиJava Glassfish Spring Sockjs не удалось: Ошибка при WebSocket рукопожатия: Неожиданный код ответа: 500

WebSocket connection to 'ws://localhost:8080/vix/hello/598/rula3cfq/websocket' failed: Error during WebSocket handshake: Unexpected response code: 500 

мой GlassFish версия 4, весна 4.2.4.RELEASE

Это мой контроллер

@Controller 
public class Test 
{ 

@MessageMapping("/hello") 
@SendTo("/topic/greetings") 
public Greeting greeting(HelloMessage message) throws Exception 
{ 
    Thread.sleep(3000); 
    return new Greeting("hello" + message.getName()); 
} 

это WebSocket конфигурации

@Configuration 
@EnableWebSocketMessageBroker 
public class WebsocketConfig extends   
       AbstractWebSocketMessageBrokerConfigurer 
{ 
@Override 
public void configureMessageBroker(MessageBrokerRegistry config) { 
    config.enableSimpleBroker("/topic"); 
    config.setApplicationDestinationPrefixes("/app"); 
} 

public void registerStompEndpoints(StompEndpointRegistry registry) { 
    registry.addEndpoint("/hello") 
      .setAllowedOrigins("*").withSockJS(); 
} 

}

это безопасность конфигурации

@Override 
public void configure(WebSecurity web) throws Exception { 
    web.ignoring().antMatchers("/webjars/**", "/images/**", "/oauth/uncache_approvals", "/oauth/cache_approvals","/topic/**","/app/**", 
      "/hello/**", "/calcApp/**"); 
} 

это фронт, где я с помощью топать и sockjs

var stompClient = null; 

    function setConnected(connected) { 
     document.getElementById('connect').disabled = connected; 
     document.getElementById('disconnect').disabled = !connected; 
     document.getElementById('conversationDiv').style.visibility = connected ? 'visible' : 'hidden'; 
     document.getElementById('response').innerHTML = ''; 
    } 

    function connect() { 
     var socket = new SockJS('http://localhost:8080/vix/hello'); 
     stompClient = Stomp.over(socket); 
     stompClient.connect({}, function(frame) { 
      setConnected(true); 
      console.log('Connected: ' + frame); 
      stompClient.subscribe('/vix/topic/greetings', function(greeting){ 
       showGreeting(JSON.parse(greeting.body).content); 
      }); 
     }); 
    } 

    function disconnect() { 
     if (stompClient != null) { 
      stompClient.disconnect(); 
     } 
     setConnected(false); 
     console.log("Disconnected"); 
    } 

    function sendName() { 
     var name = document.getElementById('name').value; 
     stompClient.send("/vix/app/hello", {}, JSON.stringify({ 'name': name })); 
    } 

    function showGreeting(message) { 
     var response = document.getElementById('response'); 
     var p = document.createElement('p'); 
     p.style.wordWrap = 'break-word'; 
     p.appendChild(document.createTextNode(message)); 
     response.appendChild(p); 
    } 

идея, как это исправить? Я новичок весной WebSocket

ответ

0

В вашем методе подключения вы можете просто оставить

Не используйте ту же конечную точку «привет» и MessageMapping, будет путать

public void registerStompEndpoints(StompEndpointRegistry registry) { 
    registry.addEndpoint("/ws") 
     .setAllowedOrigins("*").withSockJS(); 
} 

var socket = new SockJS('/hello'); 

Здесь также удалить contextPath VIX

stompClient.subscribe('/topic/greetings', function(greeting){ 
    showGreeting(JSON.parse(greeting.body).content); 
}); 

Здесь опять же

stompClient.send("/app/hello", {}, JSON.stringify({ 'name': name })); 

В основном, вся проблема заключалась в добавлении контекста, потому что контекст был добавлен по умолчанию при добавлении первого «/»