Skip to content

Commit 5dc39c4

Browse files
committed
Fixed websocket exception handling
1 parent 11adf14 commit 5dc39c4

3 files changed

Lines changed: 22 additions & 4 deletions

File tree

‎src/main/java/org/javawebstack/httpserver/HTTPServer.java‎

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -350,6 +350,7 @@ public void execute(Exchange exchange){
350350
exchange.write(transformResponse(response));
351351
if(exchange.getMethod() != HttpMethod.WEBSOCKET)
352352
exchange.close();
353+
return;
353354
}catch(Throwable ex){
354355
try {
355356
exchange.write(transformResponse(exceptionHandler.handle(exchange, ex)));
@@ -407,4 +408,7 @@ public org.eclipse.jetty.websocket.server.WebSocketHandler getInternalWebSocketH
407408
return webSocketHandler;
408409
}
409410

411+
public ExceptionHandler getExceptionHandler() {
412+
return exceptionHandler;
413+
}
410414
}

‎src/main/java/org/javawebstack/httpserver/websocket/InternalWebSocketAdapter.java‎

Lines changed: 15 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,11 @@ public void onConnect(Session session){
1919
return;
2020
}
2121
socket.setSession(session);
22-
socket.getHandler().onConnect(socket);
22+
try {
23+
socket.getHandler().onConnect(socket);
24+
}catch (Throwable t) {
25+
socket.getExchange().getServer().getExceptionHandler().handle(socket.getExchange(), t);
26+
}
2327
}
2428
@OnWebSocketMessage
2529
public void onMessage(Session session, String message){
@@ -28,14 +32,22 @@ public void onMessage(Session session, String message){
2832
session.close(500, "Server Error");
2933
return;
3034
}
31-
socket.getHandler().onMessage(socket, message);
35+
try {
36+
socket.getHandler().onMessage(socket, message);
37+
}catch (Throwable t) {
38+
socket.getExchange().getServer().getExceptionHandler().handle(socket.getExchange(), t);
39+
}
3240
}
3341
@OnWebSocketClose
3442
public void onClose(Session session, int code, String reason){
3543
WebSocket socket = webSockets.get(session.getUpgradeResponse().getHeader("X-Server-WSID"));
3644
if(socket != null){
45+
try {
46+
socket.getHandler().onClose(socket, code, reason);
47+
}catch (Throwable t) {
48+
socket.getExchange().getServer().getExceptionHandler().handle(socket.getExchange(), t);
49+
}
3750
webSockets.remove(session.getUpgradeResponse().getHeader("X-Server-WSID"));
38-
socket.getHandler().onClose(socket, code, reason);
3951
}
4052
}
4153
}

‎src/main/java/org/javawebstack/httpserver/websocket/InternalWebSocketRequestHandler.java‎

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,9 @@ public Object handle(Exchange exchange) {
2020
InternalWebSocketAdapter.webSockets.put(id, new WebSocket(exchange, handler));
2121
try {
2222
exchange.getServer().getInternalWebSocketHandler().handle(exchange.getPath(), (Request) exchange.rawRequest(), exchange.rawRequest(), exchange.rawResponse());
23-
} catch (IOException | ServletException ignored) {}
23+
} catch (IOException | ServletException ignored) {
24+
ignored.printStackTrace();
25+
}
2426
return null;
2527
}
2628
}

0 commit comments

Comments
 (0)