WebSocket callbacks need to remain inner classes (retaining generics)

This commit is contained in:
Juergen Hoeller 2018-02-16 10:22:05 +01:00
parent d5b0df8c3f
commit b35274f5a7
2 changed files with 35 additions and 12 deletions

View File

@ -60,21 +60,44 @@ public class StandardWebSocketHandlerAdapter extends Endpoint {
public void onOpen(final javax.websocket.Session session, EndpointConfig config) {
this.wsSession.initializeNativeSession(session);
// The following inner classes need to remain since lambdas would not retain their
// declared generic types (which need to be seen by the underlying WebSocket engine)
if (this.handler.supportsPartialMessages()) {
session.addMessageHandler((MessageHandler.Partial<String>)
(message, isLast) -> handleTextMessage(session, message, isLast));
session.addMessageHandler((MessageHandler.Partial<ByteBuffer>)
(message, isLast) -> handleBinaryMessage(session, message, isLast));
session.addMessageHandler(new MessageHandler.Partial<String>() {
@Override
public void onMessage(String message, boolean isLast) {
handleTextMessage(session, message, isLast);
}
});
session.addMessageHandler(new MessageHandler.Partial<ByteBuffer>() {
@Override
public void onMessage(ByteBuffer message, boolean isLast) {
handleBinaryMessage(session, message, isLast);
}
});
}
else {
session.addMessageHandler((MessageHandler.Whole<String>)
message -> handleTextMessage(session, message, true));
session.addMessageHandler((MessageHandler.Whole<ByteBuffer>)
message -> handleBinaryMessage(session, message, true));
session.addMessageHandler(new MessageHandler.Whole<String>() {
@Override
public void onMessage(String message) {
handleTextMessage(session, message, true);
}
});
session.addMessageHandler(new MessageHandler.Whole<ByteBuffer>() {
@Override
public void onMessage(ByteBuffer message) {
handleBinaryMessage(session, message, true);
}
});
}
session.addMessageHandler((MessageHandler.Whole<javax.websocket.PongMessage>)
message -> handlePongMessage(session, message.getApplicationData()));
session.addMessageHandler(new MessageHandler.Whole<javax.websocket.PongMessage>() {
@Override
public void onMessage(javax.websocket.PongMessage message) {
handlePongMessage(session, message.getApplicationData());
}
});
try {
this.handler.afterConnectionEstablished(this.wsSession);

View File

@ -1,5 +1,5 @@
/*
* Copyright 2002-2017 the original author or authors.
* Copyright 2002-2018 the original author or authors.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@ -55,7 +55,7 @@ public class WebLogicRequestUpgradeStrategy extends AbstractTyrusRequestUpgradeS
private static final WebLogicServletWriterHelper servletWriterHelper = new WebLogicServletWriterHelper();
private static final Connection.CloseListener noOpCloseListener = reason -> { };
private static final Connection.CloseListener noOpCloseListener = (reason -> {});
@Override