- 
                Notifications
    You must be signed in to change notification settings 
- Fork 38.8k
Description
Michael Simons opened SPR-14109 and commented
Hello there,
i hope this is indeed a Spring Framework and not a Spring Boot bug. If not, please excuse and move it to the right place.
In my application i have a WebSocketMessageBroker (enabled through @EnableWebSocketMessageBroker) as well as a HttpSessionEventPublisher (enabled via @Bean) and a ApplicationListener<HttpSessionCreatedEvent>.
If i use an anonymous inner class for the ApplicationListener, everything works fine.
If i use a lambda like so
public ApplicationListener<HttpSessionCreatedEvent> httpSessionCreatedEventListener() {
  return (HttpSessionCreatedEvent event) -> {
    LoggerFactory.getLogger(ClasscastApplication.class).info("Session created...");
  };
}the generic type of my listener is incorrectly identified and a BrokerAvailabilityEvent is passed to it leading to:
Caused by: java.lang.ClassCastException: org.springframework.messaging.simp.broker.BrokerAvailabilityEvent cannot be cast to org.springframework.security.web.session.HttpSessionCreatedEvent
	at org.springframework.context.event.SimpleApplicationEventMulticaster.invokeListener(SimpleApplicationEventMulticaster.java:163) ~[spring-context-4.2.5.RELEASE.jar:4.2.5.RELEASE]
	at org.springframework.context.event.SimpleApplicationEventMulticaster.multicastEvent(SimpleApplicationEventMulticaster.java:136) ~[spring-context-4.2.5.RELEASE.jar:4.2.5.RELEASE]
	at org.springframework.context.support.AbstractApplicationContext.publishEvent(AbstractApplicationContext.java:381) ~[spring-context-4.2.5.RELEASE.jar:4.2.5.RELEASE]
	at org.springframework.context.support.AbstractApplicationContext.publishEvent(AbstractApplicationContext.java:335) ~[spring-context-4.2.5.RELEASE.jar:4.2.5.RELEASE]
	at org.springframework.messaging.simp.broker.AbstractBrokerMessageHandler.publishBrokerAvailableEvent(AbstractBrokerMessageHandler.java:262) ~[spring-messaging-4.2.5.RELEASE.jar:4.2.5.RELEASE]
	at org.springframework.messaging.simp.broker.SimpleBrokerMessageHandler.startInternal(SimpleBrokerMessageHandler.java:178) ~[spring-messaging-4.2.5.RELEASE.jar:4.2.5.RELEASE]
	at org.springframework.messaging.simp.broker.AbstractBrokerMessageHandler.start(AbstractBrokerMessageHandler.java:164) ~[spring-messaging-4.2.5.RELEASE.jar:4.2.5.RELEASE]
	at org.springframework.context.support.DefaultLifecycleProcessor.doStart(DefaultLifecycleProcessor.java:173) ~[spring-context-4.2.5.RELEASE.jar:4.2.5.RELEASE]
	... 14 common frames omitted
I guess that might happen with other events, too, but i noticed it in context of messaging.
I have attached a demo application that reproduces that bug.
Affects: 4.2.5
Attachments:
- classcast.zip (62.78 kB)
Issue Links:
- GenericTypeResolver should be able to introspect generic arguments from lambdas [SPR-12525] #17130 GenericTypeResolver should be able to introspect generic arguments from lambdas
- SimpleApplicationEventMulticaster does not deal with lambda-defined listeners when ErrorHandler is set [SPR-15838] #20393 SimpleApplicationEventMulticaster does not deal with lambda-defined listeners when ErrorHandler is set
- SimpleApplicationEventMulticaster should not generally suppress ClassCastException [SPR-14846] #19412 SimpleApplicationEventMulticaster should not generally suppress ClassCastException