2017-08-09 2 views
0

J'ai un projet Spring-Boot w Vaadin dans lequel j'ai dû définir des contrôleurs Spring-MVC REST. Tout en utilisant Vaadin UI tout fonctionne bien. Mais quand j'appelle l'une des fonctionnalités des contrôleurs REST, tout semble fonctionner, mais je peux voir dans les journaux qu'une exception est levée.ClassCastException: ServletRequestHandledEvent ne peut pas être converti en WebServerInitializedEvent

1102038 2017-08-09 09:36:12.223 [ajp-nio-8009-exec-5] DEBUG o.s.c.e.SimpleApplicationEventMulticaster - Non-matching event type for listener: org.springframework.boot.web.context.ServerPortInfoApplicationContextInitializer$$Lambda$102/[email protected] 
java.lang.ClassCastException: org.springframework.web.context.support.ServletRequestHandledEvent cannot be cast to org.springframework.boot.web.context.WebServerInitializedEvent 
    at org.springframework.context.event.SimpleApplicationEventMulticaster.invokeListener(SimpleApplicationEventMulticaster.java:167) 
    at org.springframework.context.event.SimpleApplicationEventMulticaster.multicastEvent(SimpleApplicationEventMulticaster.java:139) 
    at org.springframework.context.support.AbstractApplicationContext.publishEvent(AbstractApplicationContext.java:399) 
    at org.springframework.context.support.AbstractApplicationContext.publishEvent(AbstractApplicationContext.java:353) 
    at org.springframework.web.servlet.FrameworkServlet.publishRequestHandledEvent(FrameworkServlet.java:1078) 
    at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:1009) 
    at org.springframework.web.servlet.FrameworkServlet.doPut(FrameworkServlet.java:892) 
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:651) 
    at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:855) 
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:729) 
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:230) 
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:165) 
    at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52) 
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:192) 
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:165) 
    at org.springframework.security.web.authentication.logout.LogoutFilter.doFilter(LogoutFilter.java:116) 
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:192) 
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:165) 
    at org.jasig.cas.client.session.SingleSignOutFilter.doFilter(SingleSignOutFilter.java:97) 
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:192) 
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:165) 
    at org.springframework.security.web.authentication.AbstractAuthenticationProcessingFilter.doFilterAbstractAuthenticationProcessingFilter.java:200) 

Merci au code source disponibilité j'ai commencé le débogage et a constaté que si j'Override org.springframework.context.event.GenericApplicationListenerAdapter.supportsEventType (ResolvableType eventType) comme beugler tout va revenir à la normale.

@Override 
@SuppressWarnings("unchecked") 
public boolean supportsEventType(ResolvableType eventType) { 
    if (this.delegate instanceof SmartApplicationListener) { 
     Class<? extends ApplicationEvent> eventClass = (Class<? extends ApplicationEvent>) eventType.resolve(); 
     return (eventClass != null && 
       ((SmartApplicationListener) this.delegate).supportsEventType(eventClass)); 
    } else 
     return (this.declaredEventType == null || 
       (this.declaredEventType.isAssignableFrom(eventType) && 
       !this.declaredEventType.getType().toString().equals("E"))); 
} 

(j'ai ajouté this.declaredEventType.getType() toString() est égal à ("E") à la dernière déclaration de retour!..)

Question: Dois-je tenir avec ce hack ou juste pourrait manquer quelque chose dans une configuration? Merci d'avance.

Répondre

1

Vous n'avez rien manqué dans votre configuration. Le ClassCastException est dû à a bug dans Spring Framework 5.0 RC3. Il a été corrigé dans les derniers instantanés. Vous pouvez rester avec votre hack pour le moment, ou vous pouvez passer à l'utilisation des instantanés Spring Framework (qui sont disponibles à partir de https://repo.spring.io/snapshot) en remplaçant spring.version dans votre fichier pom.xml ou build.gradle.

+0

Merci beaucoup, Andy. J'apprécie cela. Je vais attendre patiemment jusqu'à ce que RC4 sorte. En attendant, c'est vraiment étrange que je n'aie pas trouvé ce rapport de bug de Jira. –