Skip to content

StompSubProtocolHandler does not close the connection after sending an ERROR frame #23039

@bgK

Description

@bgK

In StompSubProtocolHandler, when handling a message received from the client, if an exception is thrown when sending the message to the output MessageChannel, the default error handler sends an ERROR frame to the client.

According to the STOMP 1.2 specification, the broker must close the connection after sending an ERROR frame: https://stomp.github.io/stomp-specification-1.2.html#ERROR

This is what I have been observing:

  • Before the client connects
$ netstat -tnp | grep 25833 | wc -l
5
  • With a breakpoint in StompSubProtocolHandler before the error is sent:
$ netstat -tnp | grep 25833 | wc -l
6
  • After the error is sent:
$ netstat -tnp | grep 25833 | wc -l
6
  • After closing the client:
$ netstat -tnp | grep 25833 | wc -l
5

This is an issue for me because I'm checking a JWT token in an interceptor for the CONNECT frame. If the server says the token is expired, the client is supposed to renew it and re-try connecting. However, as the connection is never closed by the server, the client never re-tries connecting.

Maybe ExceptionWebSocketHandlerDecorator was supposed to close the connection, but as the exception is caught in StompSubProtocolHandler, it never has a chance to do so.

Edit: This happens only when StompSubProtocolHandler.errorHandler is null. When using StompSubProtocolErrorHandler the behavior is correct.

Metadata

Metadata

Assignees

Labels

in: messagingIssues in messaging modules (jms, messaging)type: bugA general bug

Type

No type

Projects

No projects

Milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions