Java 在Jetty9中为WebSocket使用带注释的POJO时的异常处理

Java 在Jetty9中为WebSocket使用带注释的POJO时的异常处理,java,websocket,jetty,Java,Websocket,Jetty,我们正在尝试使用jetty9实现基本的websocket处理。一切都是按照手册进行的 @WebServlet public class SocketsServer extends WebSocketHandler { @Override public void configure(WebSocketServletFactory factory) { factory.getPolicy().setIdleTimeout(100000); factory.register(So

我们正在尝试使用jetty9实现基本的websocket处理。一切都是按照手册进行的

@WebServlet  
public class SocketsServer extends WebSocketHandler {

@Override
public void configure(WebSocketServletFactory factory) {
    factory.getPolicy().setIdleTimeout(100000);
    factory.register(SocketClient.class);
}

@WebSocket(maxMessageSize = 64 * 1024)
public static class SocketClient {

    @OnWebSocketConnect
    public void onConnect(Session session) {
        System.out.println("Connected: " + toString());
        throw new RuntimeException("fail");
    }
}
}


请注意,
抛出新的运行时异常(“fail”)行。如果在其中一个带注释的POJO方法中引发运行时异常,它将被静默忽略,并且客户端将断开连接。这在某种程度上可能对生产环境有用(也许?),但对开发人员来说却是一种可怕的行为。因此,问题是,我们如何处理和/或记录这些方法中的所有异常?

您有一些关于此场景的信息,您不愿意关注这些信息

  • 关闭代码和原因
  • 有错误吗
  • 让我首先向你们展示我在代码中的意思

    import org.eclipse.jetty.websocket.api.Session;
    导入org.eclipse.jetty.websocket.api.annotations.OnWebSocketClose;
    导入org.eclipse.jetty.websocket.api.annotations.OnWebSocketConnect;
    导入org.eclipse.jetty.websocket.api.annotations.OnWebSocketError;
    导入org.eclipse.jetty.websocket.api.annotations.OnWebSocketMessage;
    导入org.eclipse.jetty.websocket.api.annotations.websocket;
    @网袋
    公共类AnnotatedTextSocket
    {
    @OnWebSocketClose
    public void onClose(int statusCode,字符串原因)
    {
    System.out.printf(“一旦关闭(%d,%s)%n)”,状态代码,原因;
    }
    @OnWebSocketConnect
    公共连接无效(会话sess)
    {
    系统输出打印F(“未连接(%s)%n”,sess);
    }
    @OnWebSocketError
    公共无效申报人(可撤销原因)
    {
    System.out.printf(“onError(%s:%s)%n”、cause.getClass().getSimpleName()、cause.getMessage());
    原因.printStackTrace(系统输出);
    }
    @OnWebSocketMessage
    公共void onText(字符串消息)
    {
    System.out.printf(“上文本(%s)%n”,消息);
    }
    }
    
    您将注意到,
    @OnWebSocketClose
    将显示本地套接字由于异常情况而关闭

    @OnWebSocketError
    将向您传递导致关闭的各种异常


    注意:此通知行为也与未来的JSR-356 Java WebSocket API(又名javax.WebSocket)在您的场景中的工作方式一致。

    我认为这可能是
    @OnWebSocketError
    方法的目的。我尝试了您提供的代码,但是服务器控制台除了调用
    onConnect
    之外,没有显示任何方法的指示。奇怪的是,它应该这样做。我继续往前走,在门口打开了一个窃听器