2017-08-09 62 views
0

我有Spring-Boot w Vaadin項目,我不得不定義一些Spring-MVC REST控制器。使用Vaadin UI時,所有工作都正常。但是,當我調用任何REST控制器功能明智似乎工作,但我可以看到在日誌中有一個異常拋出。ClassCastException:ServletRequestHandledEvent不能轉換爲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) 

由於源代碼的可用性我開始調試和發現,如果我重寫org.springframework.context.event.GenericApplicationListenerAdapter.supportsEventType(ResolvableType EVENTTYPE)像波紋管一切都會恢復正常。

@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"))); 
} 

(我已經加入this.declaredEventType.getType()的toString()等於( 「E」)最後return語句!)

問: 我應該堅持有這個黑客或只是可能會錯過配置中的東西? 在此先感謝。

回答

1

你沒有錯過任何你的配置。 ClassCastException歸因於Spring Framework 5.0 RC3中的a bug。它已被修復在最新的快照中。你現在可以堅持使用你的破解版,或者你可以在你的pom.xml或者build.gradle中重載spring.version來切換到使用Spring Framework快照(可從https://repo.spring.io/snapshot獲得)。

+0

非常感謝你,安迪。我很欣賞這一點。我會等到RC4出來。同時,真的很奇怪,我沒有發現Jira bug報告。 –

相關問題