我在写单元测试我的REST调用(泽西实现)与球衣测试框架,我发现了一个IncompatibleClassChangeError,这真的令人困惑:单元测试球衣REST调用与球衣测试框架
Caused by: java.lang.IncompatibleClassChangeError: Class javax.ws.rs.core.Response$Status does not implement the requested interface javax.ws.rs.core.Response$StatusType at com.sun.jersey.spi.container.ContainerResponse.getStatus(ContainerResponse.java:548) at com.sun.jersey.spi.container.ContainerResponse$CommittingOutputStream.commitWrite(ContainerResponse.java:156) at com.sun.jersey.spi.container.ContainerResponse$CommittingOutputStream.write(ContainerResponse.java:133) at sun.nio.cs.StreamEncoder.writeBytes(StreamEncoder.java:202) at sun.nio.cs.StreamEncoder.implFlushBuffer(StreamEncoder.java:272) at sun.nio.cs.StreamEncoder.implFlush(StreamEncoder.java:276) at sun.nio.cs.StreamEncoder.flush(StreamEncoder.java:122) at java.io.OutputStreamWriter.flush(OutputStreamWriter.java:212) at java.io.BufferedWriter.flush(BufferedWriter.java:236) at com.sun.jersey.core.util.ReaderWriter.writeToAsString(ReaderWriter.java:191) at com.sun.jersey.core.provider.AbstractMessageReaderWriterProvider.writeToAsString(AbstractMessageReaderWriterProvider.java:128) at com.sun.jersey.core.impl.provider.entity.StringProvider.writeTo(StringProvider.java:88) at com.sun.jersey.core.impl.provider.entity.StringProvider.writeTo(StringProvider.java:58) at com.sun.jersey.spi.container.ContainerResponse.write(ContainerResponse.java:299) at com.sun.jersey.server.impl.application.WebApplicationImpl._handleRequest(WebApplicationImpl.java:1326) at com.sun.jersey.server.impl.application.WebApplicationImpl.handleRequest(WebApplicationImpl.java:1239) at com.sun.jersey.server.impl.application.WebApplicationImpl.handleRequest(WebApplicationImpl.java:1229) at com.sun.jersey.spi.container.servlet.WebComponent.service(WebComponent.java:420) at com.sun.jersey.spi.container.servlet.ServletContainer.service(ServletContainer.java:497) at com.sun.jersey.spi.container.servlet.ServletContainer.service(ServletContainer.java:684) at javax.servlet.http.HttpServlet.service(HttpServlet.java:820) at com.sun.grizzly.http.servlet.FilterChainImpl.doFilter(FilterChainImpl.java:188) ... 20 more
我的REST调用是这样的:
@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();
}
}
的2 nd行抛出异常。那么我在这里做错了什么?我使用球衣1.4和球衣测试框架1.4。任何帮助,将不胜感激。谢谢!
更新:我注意到测试通过,如果我通过maven命令行运行它,很奇怪。
我似乎遇到了这个异常后,添加一个Servlet过滤器到我的应用程序n(通过org.springframework.web.filter.DelegatingFilterProxy),过滤器将Headers添加到HttpServletResponse。 – xgMz 2011-06-16 22:21:28