【问题标题】:Testing Spring Framework 4 with Servlet 2.5使用 Servlet 2.5 测试 Spring Framework 4
【发布时间】:2014-01-25 12:36:46
【问题描述】:

我在让 Spring Framework 4 与使用 Servlet 2.5 的现有项目一起工作时遇到问题。我的 web 项目实际上运行良好,但是我的测试用例失败了,这是由MockHttpServletRequest 引起的,它抛出了这个异常:-

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 转发。

我该如何解决这个问题?谢谢。

【问题讨论】:

  • @MarkusMalkusch :谢谢,它有效。如果您可以在下面发布您的解决方案,我会接受。

标签: java spring spring-test


【解决方案1】:

将 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 的支持。如果是故意的,它至少应该进入参考文档。因此,甚至可能值得提交一个关于它的错误 (SPR-11292)。

但是等一下3.4 Java EE 6 and 7:

Java EE 版本 6 或更高版本现在被认为是 Spring Framework 4 的基准,其中 JPA 2.0 和 Servlet 3.0 规范特别相关。[..] 可以将 Spring 应用程序部署到 Servlet 2.5 环境中;但是,尽可能推荐使用 Servlet 3.0+。

所以我认为符合文档中提到的条件。


更新: Spring 4.0.1 参考文档现在对 Mocks 更加清晰:

强烈建议使用 Servlet 3.0+,它是 Spring 的测试和模拟包的先决条件,用于在开发环境中进行测试设置。

【讨论】:

  • 您找到 Servlet 2.5 部署指南了吗?
  • 使用任何 Spring
  • 以下链接(当前)显示了一个使用 servlet 3.0 的工作示例:concretepage.com/java-ee/jsp-servlet/…
  • 我已经将动态web模块分配到3.0,清理项目,然后还是同样的错误。 :(
猜你喜欢
  • 1970-01-01
  • 2014-09-26
  • 1970-01-01
  • 2017-04-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多