【发布时间】:2011-05-27 12:17:03
【问题描述】:
我正在使用 jersey 测试框架为我的 rest 调用(在 jersey 中实现)编写单元测试,我得到一个 IncompatibleClassChangeError,这真的很令人困惑:
原因:java.lang.IncompatibleClassChangeError:类 javax.ws.rs.core.Response$Status 未实现请求的接口 javax.ws.rs.core.Response$StatusType 在 com.sun.jersey.spi.container.ContainerResponse.getStatus(ContainerResponse.java:548) 在 com.sun.jersey.spi.container.ContainerResponse$CommittingOutputStream.commitWrite(ContainerResponse.java:156) 在 com.sun.jersey.spi.container.ContainerResponse$CommittingOutputStream.write(ContainerResponse.java:133) 在 sun.nio.cs.StreamEncoder.writeBytes(StreamEncoder.java:202) 在 sun.nio.cs.StreamEncoder.implFlushBuffer(StreamEncoder.java:272) 在 sun.nio.cs.StreamEncoder.implFlush(StreamEncoder.java:276) 在 sun.nio.cs.StreamEncoder.flush(StreamEncoder.java:122) 在 java.io.OutputStreamWriter.flush(OutputStreamWriter.java:212) 在 java.io.BufferedWriter.flush(BufferedWriter.java:236) 在 com.sun.jersey.core.util.ReaderWriter.writeToAsString(ReaderWriter.java:191) 在 com.sun.jersey.core.provider.AbstractMessageReaderWriterProvider.writeToAsString(AbstractMessageReaderWriterProvider.java:128) 在 com.sun.jersey.core.impl.provider.entity.StringProvider.writeTo(StringProvider.java:88) 在 com.sun.jersey.core.impl.provider.entity.StringProvider.writeTo(StringProvider.java:58) 在 com.sun.jersey.spi.container.ContainerResponse.write(ContainerResponse.java:299) 在 com.sun.jersey.server.impl.application.WebApplicationImpl._handleRequest(WebApplicationImpl.java:1326) 在 com.sun.jersey.server.impl.application.WebApplicationImpl.handleRequest(WebApplicationImpl.java:1239) 在 com.sun.jersey.server.impl.application.WebApplicationImpl.handleRequest(WebApplicationImpl.java:1229) 在 com.sun.jersey.spi.container.servlet.WebComponent.service(WebComponent.java:420) 在 com.sun.jersey.spi.container.servlet.ServletContainer.service(ServletContainer.java:497) 在 com.sun.jersey.spi.container.servlet.ServletContainer.service(ServletContainer.java:684) 在 javax.servlet.http.HttpServlet.service(HttpServlet.java:820) 在 com.sun.grizzly.http.servlet.FilterChainImpl.doFilter(FilterChainImpl.java:188) ... 20 更多我的休息电话是这样的:
@GET
@Produces("application/json")
@Path("/test")
public String test() {
return "it works";
}
我的测试是这样的:
public class MyTest extends JerseyTest {
public MyTest() {
super("com.mypackage");
}
@Test
public void test() throws IllegalArgumentException, IOException {
WebResource webResource = resource();
webResource.path("/test").accept("application/json").get(ClientResponse.class).toString();
}
}
第二行抛出异常。那么我在这里做错了什么?我正在使用 jersey 1.4 和 1.4 作为 jersey 测试框架。任何帮助,将不胜感激。谢谢!
更新:我注意到如果我通过 maven 在命令行中运行它,测试将通过,很奇怪。
【问题讨论】:
-
在向我的应用程序(通过 org.springframework.web.filter.DelegatingFilterProxy)添加 Servlet 过滤器后,我似乎遇到了这个异常,过滤器将标头添加到 HttpServletResponse。
标签: unit-testing testing rest jersey