You have to add also the TestSocket in your Bean in Spring Configuration and remove configurator = SpringConfigurator.class
from your TestSocket.
Generally Spring overrides the normal java JSR 356 websocket by it's STOMP protocol which is part of websocket. It also not support fully binary message as normal websocket .
You should add ServerEndpointExporter
in Configuration as:
@Configuration
public class EndpointConfig
{
@Bean
public ChatEndpointNew chatEndpointNew(){
return new ChatEndpointNew();
}
@Bean
public ServerEndpointExporter endpointExporter(){
return new ServerEndpointExporter();
}
}
Let's see the complete chatMessage with the room in which the client ge's connected as:
@ServerEndpoint(value="/chatMessage/{room}")
public class ChatEndpointNew
{
private final Logger log = Logger.getLogger(getClass().getName());
@OnOpen
public void open(final Session session, @PathParam("room")final String room)
{
log.info("session openend and bound to room: " + room);
session.getUserProperties().put("room", room);
System.out.println("session openend and bound to room: " + room);
}
@OnMessage
public void onMessage(final Session session, final String message) {
String room = (String)session.getUserProperties().get("room");
try{
for (Session s : session.getOpenSessions()){
if(s.isOpen()
&& room.equals(s.getUserProperties().get("room"))){
String username = (String) session.getUserProperties().get("username");
if(username == null){
s.getUserProperties().put("username", message);
s.getBasicRemote().sendText(buildJsonData("System", "You are now connected as:"+message));
}else{
s.getBasicRemote().sendText(buildJsonData(username, message));
}
}
}
}catch(IOException e) {
log.log(Level.WARNING, "on Text Transfer failed", e);
}
}
@OnClose
public void onClose(final Session session){
String room = (String)session.getUserProperties().get("room");
session.getUserProperties().remove("room",room);
log.info("session close and removed from room: " + room);
}
private String buildJsonData(String username, String message) {
JsonObject jsonObject = Json.createObjectBuilder().add("message", "<tr><td class='user label label-info'style='font-size:20px;'>"+username+"</td>"+"<td class='message badge' style='font-size:15px;'> "+message+"</td></tr>").build();
StringWriter stringWriter = new StringWriter();
try(JsonWriter jsonWriter = Json.createWriter(stringWriter)){
jsonWriter.write(jsonObject);
}
return stringWriter.toString();
}
}
Note That, You should add ChatEndpointNew and ServerEndpointExporter separately of your main Spring configuration of your Application.
If any bug appear try this:
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-websocket</artifactId>
<version>4.0.0.RELEASE</version>
</dependency>
You can also go through this Spring documentation.