Почему мой аспект протоколирования мешает запуску функций netty-websocket? - PullRequest
1 голос
/ 27 мая 2019

Мой аспект ведения журнала не позволяет запускать функции netty-websocket (OnOpen, OnMessage и т. Д.).

У меня есть сервер на основе netty-websocket, который выполняет определенные функции при подключении к новому клиенту или получении сообщений. Эти функции работают правильно.

Недавно я добавил аспект регистрации для записи подробной информации об этих функциях. Неожиданно это останавливает запуск этих функций (и сам аспект ведения журнала тоже не работает).

Аспект ведения журнала корректно работает с другими функциями.

Код аспекта регистрации:

@Aspect
@Component
public class ServiceLogAspect {

    @Around("execution(* com.test.server.WebSocketServer.onOpen(..))")
    public Object around(ProceedingJoinPoint jp) throws Throwable {
        Object result;
        System.out.println("around");
        try {
            result = jp.proceed();
            return result;
        } catch (Throwable e) {
            e.printStackTrace();
        }
        return null;

}

Код функции веб-сокета:


@ServerEndpoint(prefix = "netty-websocket")
@Component
public class WebSocketServer {
    @OnOpen
    public void onOpen(Session session, HttpHeaders headers, ParameterMap parameterMap) throws IOException {
        System.out.println("session:" + session + ", new connection"); // not executed
    }

Я также пытался @Before, что приводит к той же ошибке.

@Around("execution(* com.test.server.WebSocketServer.onOpen(..))")
public void beforeMethod(JoinPoint point) {
        System.out.println("before method");
    }

Я считаю, что это конфликт с аннотациями @onOpen. (@onMessage работает отлично). Как я могу это исправить и использовать аспект ведения журнала для таких функций?

...