如何在Java7中处理2个不同版本的HttpServletRequest?

时间:2013-12-14 09:36:03

标签: java linux tomcat

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

的TeamCity自动构建

我正在尝试使用实现HttpServletRequest的自定义构建类来单元测试REST方法,该类只实现了几种方法。

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

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

changeSessionId, 
upgrade 

setContentLength

并且Linux构建抱怨我不会用这些(假的)方法覆盖任何东西。

我实际上与

的HttpServletResponse有同样的问题
setContentLengthLong

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

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

2 个答案:

答案 0 :(得分:2)

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

答案 1 :(得分:0)

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

由于这是针对单元测试的,因此请考虑mockingMockito框架。