【问题标题】:How to handle 2 different versions of HttpServletRequest in Java7?如何在 Java 7 中处理 2 个不同版本的 HttpServletRequest?
【发布时间】:2013-12-14 09:36:02
【问题描述】:

我正在 Windows 上的 NetBeans 7.4 下开发 REST 服务器(使用 Java SE Runtime 1.7.0_21-b11) 然后将 .war 部署在运行 Tomcat (Java 1.7.0_45-b18) 的 Linux 机器上,使用 ant 自动构建 TeamCity 来构建 .war

我正在尝试使用实现 HttpServletRequest 的自定义构建类对 REST 方法进行单元测试,该类仅实现几个方法。

public class HttpMockReq implements HttpServletRequest { @Override ... }

我的问题是,该接口的定义在我的 Windows 开发环境中以及当我在 Linux 上使用 ant 编译它时是不同的。具体来说,在 Windows 上的 HttpServletRequest 中定义了 3 个在 Linux 版本中不存在的方法:

changeSessionId, 
upgrade 

setContentLength

Linux 版本抱怨我没有用这些(假)方法覆盖任何东西。

我实际上对 HttpServletResponse 有同样的问题

setContentLengthLong

我对不同的库、工具和 java 安装有点迷茫。我无法弄清楚 Windows 端(Java 7 的版本稍旧)如何/为什么对这些接口有更广泛的定义。

附带问题:有没有办法让这些环境中的一个接受@Ignore 或其他东西的更丰富或更糟糕的实现?

【问题讨论】:

    标签: java linux tomcat


    【解决方案1】:

    也许您的问题是您使用的 Tomcat 版本。方法 changeSessionId() 来自 Servlets 3.1 规范,它仅支持 Tomcat 8.0.X,也许您安装了 Tomcat 7.0.X,检查一下,如果是,请尝试下载并安装Tomcat 8.0.X(见http://tomcat.apache.org/whichversion.html

    【讨论】:

    • 确实如此。有没有办法让 Windows 端的 Netbeans 使用旧的 Servlet 规范?
    • 为了解决给定我的上下文的问题,修复方法是将 Tomcat7 中的 servlet-api.jar 显式添加到 NetBeans 项目的 jar 列表中。这优先于 j2ee-platform-classpath,我的 mock 非常高兴。
    【解决方案2】:

    与其实现接口,不如考虑扩展HttpServletRequestWrapper。如果您需要能够实现不同的、不兼容的接口版本,请考虑creating a proxy

    由于这是用于单元测试,因此请考虑使用 mocking 框架,例如 Mockito

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-05-19
      • 2014-08-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-09
      相关资源
      最近更新 更多