2017-01-12 3 views
2

Ich schrieb einen Web-Socket-Server und einen Client mit Feder verwenden und anpassen. Die Codes folgen. Die Codes, die eine Nachricht an den Server senden, funktionieren, aber die Methode sesssion script kann keine Nachricht vom Server empfangen. Ich suche nach vielen Dokumenten und überprüfe meine Codes. Ich weiß nicht warum es nicht funktionieren kann.wie MessageConversion (Frühjahr websocket Client)

Hier ist mein Client-Codes:

public class Test { 

    public static void main(String[] args) { 

     Thread thread = new Thread(new WebsocketThread()); 
     thread.start(); 
     Thread.sleep(5000); 
    } 
} 

class MyStompSessionHandler extends StompSessionHandlerAdapter { 

    @Override 
    public void afterConnected(StompSession session, StompHeaders connectedHeaders) { 
     session.send("/app/messages", "{'payload3':2222}".getBytes()); 
     session.subscribe("/user/queue/position-updates", new StompFrameHandler() { 

      @Override 
      public Type getPayloadType(StompHeaders headers) { 
       return String.class; 
      } 

      @Override 
      public void handleFrame(StompHeaders headers, Object payload) { 
       System.out.println("test:" + payload); 
      } 

     }); 
    } 
} 

class WebsocketThread implements Runnable{ 
    @Override 
    public void run() { 
     List<Transport> transports = new ArrayList<>(1); 
     transports.add(new WebSocketTransport(new StandardWebSocketClient())); 
     WebSocketClient webSocketClient = new SockJsClient(transports); 
     WebSocketStompClient stompClient = new WebSocketStompClient(webSocketClient); 

     String url = "ws://127.0.0.1:8860/orders"; 
     StompSessionHandler sessionHandler = new MyStompSessionHandler(); 
     ListenableFuture<StompSession> future = stompClient.connect(url, sessionHandler); 
    } 
} 

Hier ist mein Server-Codes:

@Controller 
public class TestController { 

    @Autowired 
    private SimpMessagingTemplate simpMessagingTemplate; 

    @MessageMapping("/messages") 
    public void sendUserMsg(String messages) throws IOException { 
     System.out.println("webSocket:" + messages); 
     simpMessagingTemplate.convertAndSend("/queue/position-updates", "This is return message"); 
    } 
} 

Es ist Ausnahme:

org.springframework.messaging.converter.MessageConversionException: Nein geeignet Wandler, PayloadType = Klasse java.lang.String, handlerType = class com.example.hello.MyStompSessionHandler bei org.springframework.messaging.simp.stomp.D efaultStompSession.invokeHandler (DefaultStompSession.java:419) bei org.springframework.messaging.simp.stomp.DefaultStompSession.handleMessage (DefaultStompSession.java:373) bei org.springframework.web.socket.messaging.WebSocketStompClient $ WebSocketTcpConnectionHandlerAdapter.handleMessage (WebSocketStompClient.java:342) bei org.springframework.web.socket.sockjs.client.AbstractClientSockJsSession.handleMessageFrame (AbstractClientSockJsSession.java:267) bei org.springframework.web.socket.sockjs.client.AbstractClientSockJsSession.handleFrame (AbstractClientSockJsSession. Java: 200) bei org.springframework.web.socket.sockjs.client.WebSocketTransport $ ClientSockJsWebSocketHandler.handleTextMessage (WebSocketTransport.java:162) bei org.springframework.web.socket.handler.AbstractWebSocketHandler.handleMessage (A bstractWebSocketHandler.java:43) bei org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.handleTextMessage (StandardWebSocketHandlerAdapter.java:110) bei org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter.access $ 000 (StandardWebSocketHandlerAdapter .java: 42) bei org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter $ 3.onMessage (StandardWebSocketHandlerAdapter.java:81) bei org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter $ 3.onMessage (StandardWebSocketHandlerAdapter .java-: 78) bei org.apache.tomcat.websocket.WsFrameBase.sendMessageText (WsFrameBase.java:399) bei org.apache.tomcat.websocket.WsFrameBase.processDataText (WsFrameBase.java:500) bei org.apache .tomcat.web socket.WsFrameBase.processData (WsFrameBase.java:295) bei org.apache.tomcat.websocket.WsFrameBase.processInputBuffer (WsFrameBase.java:131) bei org.apache.tomcat.websocket.WsFrameClient.processSocketRead (WsFrameClient.java: 73) bei org.apache.tomcat.websocket.WsFrameClient.access $ 300 (WsFrameClient.java:31) bei org.apache.tomcat.websocket.WsFrameClient $ WsFrameClientCompletionHandler.completed (WsFrameClient.java:131) bei org.apache .tomcat.websocket.WsFrameClient $ WsFrameClientCompletionHandler.completed (WsFrameClient.java:114) bei sun.nio.ch.Invoker.invokeUnchecked (Invoker.java:126) bei sun.nio.ch.Invoker $ 2.run (Invoker. java: 218) bei sun.nio.ch.AsynchronousChannelGroupImpl $ 1.run (AsynchronousChannelGroupImpl.java:112) bei java.util.concurrent.ThreadPoolExecutor.runWorker (ThreadPoolExecutor.java:1142) bei java.util.concurrent.ThreadPoolExecutor $ Worker.run (ThreadPoolExecutor.java: 617) bei java.lang.Thread.run (Thread. java: 745)

+0

Ich benutze sessionsubscribe ("/ user/queue/position-updates", ...) und sessionsubscribe ("/ queue/position-updates", ...) beide können nicht funktionieren –

+0

Es ist die Ausnahme: –

+0

Offenbar haben Sie in der Web-Socket-Konfiguration keinen org.springframework.messaging.converter.MessageConverter konfiguriert. – Reva

Antwort

-1

einen StringMessageConverter zu-Client hinzufügen, funktioniert es.

WebSocketStompClient stompClient = new WebSocketStompClient(webSocketClient); 
stompClient.setMessageConverter(new StringMessageConverter()); 

Aber wie unsere eigenen MessageConverter anpassen? Gibt es einen Artikel?

+0

Nein, das funktioniert nicht. Es gibt keinen passenden Konverter. – Sanjeev

0

Es scheint, wie Sie keine org.springframework.messaging.converter.MessageConverter in Web-Socket-Konfiguration konfiguriert haben, tun. Wenn Sie jackson jar auf Ihrem Klassenpfad haben, wird es automatisch für die json-Konvertierung übernommen. Für andere Konverter müssen Sie sie in der WebSocket-Konfigurationsdatei konfigurieren.

@Configuration 
@EnableWebSocketMessageBroker 
@ComponentScan(SpringScanPackageNames) 
    public class WebSocketConfig extends AbstractWebSocketMessageBrokerConfigurer { 
@Override 
public boolean configureMessageConverters(List<MessageConverter> arg0) { 

    StringMessageConverter strConvertor = new StringMessageConverter(); 
    arg0.add(strConvertor); 
    return true; 
} 
// Other config 
Verwandte Themen