[ https://issues.apache.org/jira/browse/CXF-6929?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]
Florian Diebold updated CXF-6929: --------------------------------- Affects Version/s: 3.1.1 > Request hangs when using JAX-RS AsyncResponse and Exception mapper > ------------------------------------------------------------------ > > Key: CXF-6929 > URL: https://issues.apache.org/jira/browse/CXF-6929 > Project: CXF > Issue Type: Bug > Affects Versions: 3.1.1, 3.1.6 > Reporter: Florian Diebold > > I have a JAX-RS resource which takes an AsyncResponse, but immediately throws > an exception before returning from the function. If the exception is then > mapped by an ExceptionMapper, the response seems to be never sent, and the > request hangs. Am I doing something wrong? > Example code: > {code} > import javax.ws.rs.GET; > import javax.ws.rs.Path; > import javax.ws.rs.Produces; > import javax.ws.rs.container.AsyncResponse; > import javax.ws.rs.container.Suspended; > import javax.ws.rs.core.Response; > import javax.ws.rs.ext.ExceptionMapper; > import org.apache.commons.lang.NotImplementedException; > import org.apache.cxf.jaxrs.servlet.CXFNonSpringJaxrsServlet; > import org.eclipse.jetty.server.Connector; > import org.eclipse.jetty.server.Server; > import org.eclipse.jetty.server.ServerConnector; > import org.eclipse.jetty.servlet.ServletContextHandler; > import org.eclipse.jetty.servlet.ServletHolder; > public class ServerDemo2 { > public static void main( final String[] args ) throws Exception { > final Server server = new Server(); > final ServerConnector connector = new ServerConnector( server ); > connector.setHost( "localhost" ); > connector.setPort( 8888 ); > server.setConnectors( new Connector[] { connector } ); > final ServletContextHandler handler = new ServletContextHandler(); > final ServletHolder holder = new ServletHolder( > CXFNonSpringJaxrsServlet.class ); > holder.setInitParameter( "jaxrs.serviceClasses", > Resource.class.getName() ); > holder.setInitParameter( "jaxrs.providers", Mapper.class.getName() ); > handler.addServlet( holder, "/*" ); > server.setHandler( handler ); > server.start(); > System.in.read(); > server.stop(); > } > public static class Mapper implements > ExceptionMapper<NotImplementedException> { > @Override > public Response toResponse( final NotImplementedException exception ) > { > exception.printStackTrace(); > return Response.ok().build(); > } > } > @Path( "/" ) > public static class Resource { > @GET > @Path( "/foo" ) > @Produces( "text/plain" ) > public void foo( @Suspended final AsyncResponse response ) { > throw new NotImplementedException( "foo" ); > } > @GET > @Path( "/bar" ) > @Produces( "text/plain" ) > public void bar( @Suspended final AsyncResponse response ) { > throw new RuntimeException( "bar" ); > } > } > } > {code} > curl localhost:8888/foo hangs forever; curl localhost:8888/bar does not. -- This message was sent by Atlassian JIRA (v6.3.4#6332)