Skip to content

Commit 9da2c21

Browse files
committed
Consolidate WebSocketHandler interface and sub-interfaces
1 parent 8200601 commit 9da2c21

File tree

8 files changed

+66
-82
lines changed

8 files changed

+66
-82
lines changed

spring-websocket/src/main/java/org/springframework/sockjs/AbstractSockJsSession.java

Lines changed: 2 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,6 @@
2525
import org.springframework.websocket.CloseStatus;
2626
import org.springframework.websocket.HandlerProvider;
2727
import org.springframework.websocket.TextMessage;
28-
import org.springframework.websocket.TextMessageHandler;
2928
import org.springframework.websocket.WebSocketHandler;
3029
import org.springframework.websocket.WebSocketSession;
3130

@@ -44,7 +43,7 @@ public abstract class AbstractSockJsSession implements WebSocketSession {
4443

4544
private final HandlerProvider<WebSocketHandler> handlerProvider;
4645

47-
private TextMessageHandler handler;
46+
private WebSocketHandler handler;
4847

4948
private State state = State.NEW;
5049

@@ -124,7 +123,7 @@ protected void updateLastActiveTime() {
124123

125124
public void delegateConnectionEstablished() {
126125
this.state = State.OPEN;
127-
initHandler();
126+
this.handler = handlerProvider.getHandler();
128127
try {
129128
this.handler.afterConnectionEstablished(this);
130129
}
@@ -133,12 +132,6 @@ public void delegateConnectionEstablished() {
133132
}
134133
}
135134

136-
private void initHandler() {
137-
WebSocketHandler webSocketHandler = handlerProvider.getHandler();
138-
Assert.isInstanceOf(TextMessageHandler.class, webSocketHandler, "Expected a TextMessageHandler");
139-
this.handler = (TextMessageHandler) webSocketHandler;
140-
}
141-
142135
/**
143136
* Close due to unhandled runtime error from WebSocketHandler.
144137
* @param closeStatus TODO

spring-websocket/src/main/java/org/springframework/sockjs/server/transport/SockJsWebSocketHandler.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,7 @@
2727
import org.springframework.websocket.CloseStatus;
2828
import org.springframework.websocket.HandlerProvider;
2929
import org.springframework.websocket.TextMessage;
30-
import org.springframework.websocket.TextMessageHandler;
30+
import org.springframework.websocket.TextWebSocketHandlerAdapter;
3131
import org.springframework.websocket.WebSocketHandler;
3232
import org.springframework.websocket.WebSocketSession;
3333

@@ -41,7 +41,7 @@
4141
* @author Rossen Stoyanchev
4242
* @since 4.0
4343
*/
44-
public class SockJsWebSocketHandler implements TextMessageHandler {
44+
public class SockJsWebSocketHandler extends TextWebSocketHandlerAdapter {
4545

4646
private final SockJsConfiguration sockJsConfig;
4747

spring-websocket/src/main/java/org/springframework/websocket/TextMessageHandler.java renamed to spring-websocket/src/main/java/org/springframework/websocket/BinaryWebSocketHandlerAdapter.java

Lines changed: 14 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -5,35 +5,34 @@
55
* you may not use this file except in compliance with the License.
66
* You may obtain a copy of the License at
77
*
8-
* http://www.apache.org/licenses/LICENSE-2.0
8+
* http://www.apache.org/licenses/LICENSE-2.0
99
*
1010
* Unless required by applicable law or agreed to in writing, software
1111
* distributed under the License is distributed on an "AS IS" BASIS,
1212
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
1313
* See the License for the specific language governing permissions and
1414
* limitations under the License.
1515
*/
16+
1617
package org.springframework.websocket;
1718

18-
import org.springframework.websocket.WebSocketHandlerAdapter.TextAndBinaryMessageHandlerAdapter;
19-
import org.springframework.websocket.WebSocketHandlerAdapter.TextMessageHandlerAdapter;
19+
import java.io.IOException;
2020

2121

2222
/**
23-
* A handler for WebSocket text messages.
24-
*
25-
* @author Rossen Stoyanchev
26-
* @since 4.0
2723
*
28-
* @see TextMessageHandlerAdapter
29-
* @see TextAndBinaryMessageHandlerAdapter
24+
* @author rossen
3025
*/
31-
public interface TextMessageHandler extends WebSocketHandler {
32-
26+
public class BinaryWebSocketHandlerAdapter extends WebSocketHandlerAdapter {
3327

34-
/**
35-
* Handle an incoming text message.
36-
*/
37-
void handleTextMessage(TextMessage message, WebSocketSession session);
28+
@Override
29+
public void handleTextMessage(TextMessage message, WebSocketSession session) {
30+
try {
31+
session.close(CloseStatus.NOT_ACCEPTABLE.withReason("Text messages not supported"));
32+
}
33+
catch (IOException e) {
34+
// ignore
35+
}
36+
}
3837

3938
}

spring-websocket/src/main/java/org/springframework/websocket/BinaryMessageHandler.java renamed to spring-websocket/src/main/java/org/springframework/websocket/TextWebSocketHandlerAdapter.java

Lines changed: 13 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -5,30 +5,35 @@
55
* you may not use this file except in compliance with the License.
66
* You may obtain a copy of the License at
77
*
8-
* http://www.apache.org/licenses/LICENSE-2.0
8+
* http://www.apache.org/licenses/LICENSE-2.0
99
*
1010
* Unless required by applicable law or agreed to in writing, software
1111
* distributed under the License is distributed on an "AS IS" BASIS,
1212
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
1313
* See the License for the specific language governing permissions and
1414
* limitations under the License.
1515
*/
16+
1617
package org.springframework.websocket;
1718

19+
import java.io.IOException;
1820

1921

2022
/**
21-
* A handler for WebSocket binary messages.
2223
*
2324
* @author Rossen Stoyanchev
2425
* @since 4.0
2526
*/
26-
public interface BinaryMessageHandler extends WebSocketHandler {
27-
27+
public class TextWebSocketHandlerAdapter extends WebSocketHandlerAdapter {
2828

29-
/**
30-
* Handle an incoming binary message.
31-
*/
32-
void handleBinaryMessage(BinaryMessage message, WebSocketSession session);
29+
@Override
30+
public void handleBinaryMessage(BinaryMessage message, WebSocketSession session) {
31+
try {
32+
session.close(CloseStatus.NOT_ACCEPTABLE.withReason("Binary messages not supported"));
33+
}
34+
catch (IOException e) {
35+
// ignore
36+
}
37+
}
3338

3439
}

spring-websocket/src/main/java/org/springframework/websocket/WebSocketHandler.java

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,16 @@ public interface WebSocketHandler {
3636
*/
3737
void afterConnectionClosed(CloseStatus closeStatus, WebSocketSession session);
3838

39+
/**
40+
* Handle an incoming text message.
41+
*/
42+
void handleTextMessage(TextMessage message, WebSocketSession session);
43+
44+
/**
45+
* Handle an incoming binary message.
46+
*/
47+
void handleBinaryMessage(BinaryMessage message, WebSocketSession session);
48+
3949
/**
4050
* TODO
4151
*/

spring-websocket/src/main/java/org/springframework/websocket/WebSocketHandlerAdapter.java

Lines changed: 5 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -34,20 +34,15 @@ public void afterConnectionClosed(CloseStatus status, WebSocketSession session)
3434
}
3535

3636
@Override
37-
public void handleTransportError(Throwable exception, WebSocketSession session) {
38-
}
39-
40-
41-
public static abstract class TextMessageHandlerAdapter
42-
extends WebSocketHandlerAdapter implements TextMessageHandler {
37+
public void handleTextMessage(TextMessage message, WebSocketSession session) {
4338
}
4439

45-
public static abstract class BinaryMessageHandlerAdapter
46-
extends WebSocketHandlerAdapter implements BinaryMessageHandler {
40+
@Override
41+
public void handleBinaryMessage(BinaryMessage message, WebSocketSession session) {
4742
}
4843

49-
public static abstract class TextAndBinaryMessageHandlerAdapter extends WebSocketHandlerAdapter
50-
implements TextMessageHandler, BinaryMessageHandler {
44+
@Override
45+
public void handleTransportError(Throwable exception, WebSocketSession session) {
5146
}
5247

5348
}

spring-websocket/src/main/java/org/springframework/websocket/endpoint/WebSocketHandlerEndpoint.java

Lines changed: 18 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -27,12 +27,10 @@
2727
import org.apache.commons.logging.LogFactory;
2828
import org.springframework.util.Assert;
2929
import org.springframework.websocket.BinaryMessage;
30-
import org.springframework.websocket.BinaryMessageHandler;
3130
import org.springframework.websocket.CloseStatus;
3231
import org.springframework.websocket.HandlerProvider;
3332
import org.springframework.websocket.PartialMessageHandler;
3433
import org.springframework.websocket.TextMessage;
35-
import org.springframework.websocket.TextMessageHandler;
3634
import org.springframework.websocket.WebSocketHandler;
3735
import org.springframework.websocket.WebSocketSession;
3836

@@ -74,36 +72,27 @@ public void onOpen(final javax.websocket.Session session, EndpointConfig config)
7472
this.webSocketSession = new StandardWebSocketSession(session);
7573
this.handler = handlerProvider.getHandler();
7674

77-
if (this.handler instanceof TextMessageHandler) {
78-
session.addMessageHandler(new MessageHandler.Whole<String>() {
75+
session.addMessageHandler(new MessageHandler.Whole<String>() {
76+
@Override
77+
public void onMessage(String message) {
78+
handleTextMessage(session, message);
79+
}
80+
});
81+
if (this.handler instanceof PartialMessageHandler) {
82+
session.addMessageHandler(new MessageHandler.Partial<byte[]>() {
7983
@Override
80-
public void onMessage(String message) {
81-
handleTextMessage(session, message);
84+
public void onMessage(byte[] messagePart, boolean isLast) {
85+
handleBinaryMessage(session, messagePart, isLast);
8286
}
8387
});
8488
}
85-
else if (this.handler instanceof BinaryMessageHandler) {
86-
if (this.handler instanceof PartialMessageHandler) {
87-
session.addMessageHandler(new MessageHandler.Partial<byte[]>() {
88-
@Override
89-
public void onMessage(byte[] messagePart, boolean isLast) {
90-
handleBinaryMessage(session, messagePart, isLast);
91-
}
92-
});
93-
}
94-
else {
95-
session.addMessageHandler(new MessageHandler.Whole<byte[]>() {
96-
@Override
97-
public void onMessage(byte[] message) {
98-
handleBinaryMessage(session, message, true);
99-
}
100-
});
101-
}
102-
}
10389
else {
104-
if (logger.isWarnEnabled()) {
105-
logger.warn("WebSocketHandler handles neither text nor binary messages: " + this.handler);
106-
}
90+
session.addMessageHandler(new MessageHandler.Whole<byte[]>() {
91+
@Override
92+
public void onMessage(byte[] message) {
93+
handleBinaryMessage(session, message, true);
94+
}
95+
});
10796
}
10897

10998
try {
@@ -147,7 +136,7 @@ private void handleTextMessage(javax.websocket.Session session, String message)
147136
}
148137
try {
149138
TextMessage textMessage = new TextMessage(message);
150-
((TextMessageHandler) handler).handleTextMessage(textMessage, this.webSocketSession);
139+
this.handler.handleTextMessage(textMessage, this.webSocketSession);
151140
}
152141
catch (Throwable ex) {
153142
tryCloseWithError(ex);
@@ -160,7 +149,7 @@ private void handleBinaryMessage(javax.websocket.Session session, byte[] message
160149
}
161150
try {
162151
BinaryMessage binaryMessage = new BinaryMessage(message, isLast);
163-
((BinaryMessageHandler) handler).handleBinaryMessage(binaryMessage, this.webSocketSession);
152+
this.handler.handleBinaryMessage(binaryMessage, this.webSocketSession);
164153
}
165154
catch (Throwable ex) {
166155
tryCloseWithError(ex);

spring-websocket/src/main/java/org/springframework/websocket/server/support/JettyRequestUpgradeStrategy.java

Lines changed: 2 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -40,11 +40,9 @@
4040
import org.springframework.util.Assert;
4141
import org.springframework.util.ObjectUtils;
4242
import org.springframework.websocket.BinaryMessage;
43-
import org.springframework.websocket.BinaryMessageHandler;
4443
import org.springframework.websocket.CloseStatus;
4544
import org.springframework.websocket.HandlerProvider;
4645
import org.springframework.websocket.TextMessage;
47-
import org.springframework.websocket.TextMessageHandler;
4846
import org.springframework.websocket.WebSocketHandler;
4947
import org.springframework.websocket.WebSocketMessage;
5048
import org.springframework.websocket.WebSocketSession;
@@ -213,9 +211,7 @@ public void onWebSocketText(String payload) {
213211
logger.trace("Received message for WebSocket session id="
214212
+ this.session.getId() + ": " + message);
215213
}
216-
if (this.handler instanceof TextMessageHandler) {
217-
((TextMessageHandler) this.handler).handleTextMessage(message, this.session);
218-
}
214+
this.handler.handleTextMessage(message, this.session);
219215
}
220216
catch(Throwable ex) {
221217
tryCloseWithError(ex);
@@ -230,10 +226,7 @@ public void onWebSocketBinary(byte[] payload, int offset, int len) {
230226
logger.trace("Received binary data for WebSocket session id="
231227
+ this.session.getId() + ": " + message);
232228
}
233-
if (this.handler instanceof BinaryMessageHandler) {
234-
((BinaryMessageHandler) this.handler).handleBinaryMessage(message,
235-
this.session);
236-
}
229+
this.handler.handleBinaryMessage(message, this.session);
237230
}
238231
catch(Throwable ex) {
239232
tryCloseWithError(ex);

0 commit comments

Comments
 (0)