users@jersey.java.net

[Jersey] Re: Error when using Jersey 2.0 AsyncResponse/_at_Suspended feature

From: <myxjtu_at_yahoo.com>
Date: Fri, 12 Oct 2012 21:14:36 +0000 (GMT)

SO here is code for my Jersey class (unrelevant part are skipped)
@Path("/taxonomy")
public class JerseyTaxonomyServletAsync {
                
        private final ExecutorService QUEUE_EXECUTOR = Executors
                      .newCachedThreadPool(new
ThreadFactoryBuilder().setNameFormat(
                        "Taxonomy-executor-%d").build());
        
        public JerseyTaxonomyServletAsync() {
                
        }

    @GET
    @Produces(MediaType.APPLICATION_XML)
    public void getTaxonomy(@Suspended final AsyncResponse ar) {
        ar.setTimeoutHandler(new TimeoutHandler() {
            @Override public void handleTimeout(AsyncResponse
asyncResponse) {
                asyncResponse.cancel(60);
              }
            });
        
        QUEUE_EXECUTOR.submit(new Runnable() {
            @Override public void run() {
                try {
                    TaxonomyResponse taxonomyResponse = new
TaxonomyResponse();

                    ar.resume(taxonomyResponse);
                }
                catch (Exception ex) {
                    ar.cancel();
                }
            }
        });
        return;
    }
         
}

And here is the code of my unit test which calls the service:. The
statement that causes the error is:
  Response response =
client.target(UriBuilder.fromUri("http://localhost:9998").path("/taxono
my").build())
               
.request(MediaType.APPLICATION_XML).get(Response.class);




import javax.servlet.http.HttpServlet;
import javax.ws.rs.client.Client;
import javax.ws.rs.client.ClientFactory;
import javax.ws.rs.core.MediaType;
import javax.ws.rs.core.Response;
import javax.ws.rs.core.UriBuilder;


import org.junit.Ignore;
import org.junit.Test;

import com.google.inject.servlet.GuiceFilter;
import com.sun.grizzly.http.embed.GrizzlyWebServer;
import com.sun.grizzly.http.servlet.ServletAdapter;

  public void testWithGrizzly() throws IllegalArgumentException,
NullPointerException, IOException {
     
        GrizzlyWebServer server = new GrizzlyWebServer(9998);
        ServletAdapter adapter = new ServletAdapter(new DummySevlet());
       
       // GuiceServletConfig is a guice DI config class
        adapter.addServletListener(GuiceServletConfig.class.getName());
        adapter.addFilter(new GuiceFilter(), "GuiceFilter", null);
        server.addGrizzlyAdapter(adapter, new String[]{ "/" });
        server.start();
     
        Client client = ClientFactory.newClient();
        Response response =
client.target(UriBuilder.fromUri("http://localhost:9998").path("/taxono
my").build())
               
.request(MediaType.APPLICATION_XML).get(Response.class);
   
        int responseCode = response.getStatus();
        TaxonomyResponse taxonomyResponse =
response.readEntity(TaxonomyResponse.class);
        
        //String responseMsg =
webResource.path("getAttributes").get(String.class);
       // assertEquals("Hello World", responseMsg);
        assertEquals(responseCode, 200);
        
        server.stop();
    }