2014-01-07 78 views
14

我遇到了Spring Framework 4與使用Servlet 2.5的現有項目一起工作的問題。我的web項目實際運行良好,但我的測試用例是失敗的,它是由MockHttpServletRequest,這將引發此異常造成的: -使用Servlet 2.5測試Spring Framework 4

java.lang.NoClassDefFoundError: javax/servlet/AsyncContext 
    at java.net.URLClassLoader$1.run(URLClassLoader.java:202) 
    at java.security.AccessController.doPrivileged(Native Method) 

我嘗試添加任何依賴關係,但我會得到其他的Servlet 3.0相關的異常: -

<dependency> 
<groupId>javax</groupId> 
<artifactId>javaee-api</artifactId> 
<version>6.0</version> 
<scope>test</scope> 
</dependency> 

<dependency> 
    <groupId>org.mortbay.jetty</groupId> 
    <artifactId>servlet-api</artifactId> 
    <version>3.0.20090124</version> 
    <scope>test</scope> 
</dependency> 

基於Spring Framework網站,據說它使用Servlet 2.5。但是,Spring 4's MockHttpServletRequest似乎依靠Servlet 3.0轉發。

我該如何解決這個問題?謝謝。

+0

@MarkusMalkusch:謝謝,它的工作原理。如果您可以在下面發佈您的解決方案,我會接受它。 – limc

回答

17

將spring-test的依賴關係限制爲4之前的版本,如spring-test-3.2。

我不知道Spring-4放棄了對Servlet-2.5的支持。 3.9 Testing Improvements說:

從Spring 4.0開始,org.springframework.mock.web包中的一組mock現在與Servlet 3.0兼容。

我不明白「與servlet-3兼容」意味着一個被丟棄的servlet-2.5支持。如果是故意的,至少應該參考參考文檔。所以它甚至值得提交一個關於它的bug(SPR-11292)。

但等待有3.4 Java EE 6 and 7

的Java EE版本6或以上目前被認爲是Spring框架4的基線,與JPA 2.0和Servlet 3.0規範是特別相關的[..]它可以將Spring應用程序部署到Servlet 2.5環境中;但是,儘可能地推薦Servlet 3.0+。

所以我認爲這符合文件中提到的條件。


更新: 春季4.0.1參考文檔,目前約在嘲笑更加清晰:

Servlet的強烈建議3.0+和Spring的測試的先決條件和試驗模擬包開發環境中的設置。

+0

您是否找到Servlet 2.5部署指南? – Wienczny

+0

使用任何Spring <4文檔。如果你想使用Spring 4,它仍然是可能的,但是如文檔所述,你是獨立的。 –

+0

以下鏈接(當前)顯示了servlet 3.0的工作示例:http://www.concretepage.com/java-ee/jsp-servlet/asynccontext-example-in-servlet-3 – tim93422

相關問題