users@jersey.java.net

[Jersey] unit test jersey rest call with jersey test framework

From: jliao <jliao_at_riotgames.com>
Date: Sat, 18 Dec 2010 00:33:39 -0800 (PST)

I'm writing unit test for my rest call (implemented in jersey) with the
jersey test framework, I'm getting an IncompatibleClassChangeError, and it's
really confusing:

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

My rest call is like this:

    @GET
    @Produces("application/json")
    @Path("/test")
    public String test() {
        return "it works";
    }


My test is like this:

    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();
        }
    }


The 2nd line is throwing the exception. So what am I doing wrong here? I'm
using jersey 1.4 and also 1.4 for the jersey test framework. Any help would
be appreciated. Thanks!

-- 
View this message in context: http://jersey.576304.n2.nabble.com/unit-test-jersey-rest-call-with-jersey-test-framework-tp5847765p5847765.html
Sent from the Jersey mailing list archive at Nabble.com.