Search in sources :

Example 16 with AsyncResponse

use of jakarta.ws.rs.container.AsyncResponse in project resteasy by resteasy.

the class LegacySuspendResource method get.

@GET
@Produces("text/plain")
public void get(@Suspended final AsyncResponse response) {
    response.setTimeout(8000, TimeUnit.MILLISECONDS);
    Thread t = new Thread() {

        @Override
        public void run() {
            try {
                Thread.sleep(100);
                Response jaxrs = Response.ok("hello").type(MediaType.TEXT_PLAIN).build();
                response.resume(jaxrs);
            } catch (Exception e) {
                StringWriter errors = new StringWriter();
                e.printStackTrace(new PrintWriter(errors));
                logger.error(errors.toString());
            }
        }
    };
    t.start();
}
Also used : Response(jakarta.ws.rs.core.Response) AsyncResponse(jakarta.ws.rs.container.AsyncResponse) StringWriter(java.io.StringWriter) PrintWriter(java.io.PrintWriter) Produces(jakarta.ws.rs.Produces) GET(jakarta.ws.rs.GET)

Example 17 with AsyncResponse

use of jakarta.ws.rs.container.AsyncResponse in project resteasy by resteasy.

the class AsyncRequestFilter method filter.

@Override
public void filter(ContainerRequestContext requestContext) throws IOException {
    requestContext.getHeaders().add("RequestFilterCallback" + name, String.valueOf(callbackException));
    callbackException = null;
    SuspendableContainerRequestContext ctx = (SuspendableContainerRequestContext) requestContext;
    String action = ctx.getHeaderString(name);
    LOG.error("Filter request for " + name + " with action: " + action);
    if ("sync-pass".equals(action)) {
    // do nothing
    } else if ("sync-fail".equals(action)) {
        ctx.abortWith(Response.ok(name).build());
    } else if ("async-pass".equals(action)) {
        ctx.suspend();
        ExecutorService executor = Executors.newSingleThreadExecutor();
        executor.submit(() -> ctx.resume());
    } else if ("async-pass-instant".equals(action)) {
        ctx.suspend();
        ctx.resume();
    } else if ("async-fail".equals(action)) {
        ctx.suspend();
        ExecutorService executor = Executors.newSingleThreadExecutor();
        executor.submit(() -> ctx.abortWith(Response.ok(name).build()));
    } else if ("async-fail-instant".equals(action)) {
        ctx.suspend();
        ctx.abortWith(Response.ok(name).build());
    } else if ("async-throw-late".equals(action)) {
        ctx.suspend();
        HttpRequest req = ResteasyContext.getContextData(HttpRequest.class);
        ExecutorService executor = Executors.newSingleThreadExecutor();
        executor.submit(() -> {
            try {
                Thread.sleep(2000);
            } catch (InterruptedException e) {
                // TODO Auto-generated catch block
                LOG.error("Error:", e);
            }
            AsyncResponse resp = req.getAsyncContext().getAsyncResponse();
            resp.register((CompletionCallback) (t) -> {
                if (callbackException != null)
                    throw new RuntimeException("Callback called twice");
                callbackException = Objects.toString(t);
            });
            if ("true".equals(req.getHttpHeaders().getHeaderString("UseExceptionMapper")))
                ctx.resume(new AsyncFilterException("ouch"));
            else
                ctx.resume(new Throwable("ouch"));
        });
    }
    LOG.error("Filter request for " + name + " with action: " + action + " done");
}
Also used : HttpRequest(org.jboss.resteasy.spi.HttpRequest) CompletionCallback(jakarta.ws.rs.container.CompletionCallback) Logger(org.jboss.logging.Logger) AsyncResponse(jakarta.ws.rs.container.AsyncResponse) IOException(java.io.IOException) HttpRequest(org.jboss.resteasy.spi.HttpRequest) Executors(java.util.concurrent.Executors) Objects(java.util.Objects) Response(jakarta.ws.rs.core.Response) ResteasyContext(org.jboss.resteasy.core.ResteasyContext) ContainerRequestContext(jakarta.ws.rs.container.ContainerRequestContext) ContainerRequestFilter(jakarta.ws.rs.container.ContainerRequestFilter) ExecutorService(java.util.concurrent.ExecutorService) SuspendableContainerRequestContext(org.jboss.resteasy.core.interception.jaxrs.SuspendableContainerRequestContext) ExecutorService(java.util.concurrent.ExecutorService) SuspendableContainerRequestContext(org.jboss.resteasy.core.interception.jaxrs.SuspendableContainerRequestContext) AsyncResponse(jakarta.ws.rs.container.AsyncResponse)

Example 18 with AsyncResponse

use of jakarta.ws.rs.container.AsyncResponse in project resteasy by resteasy.

the class CallbackResourceBase method cancel.

@GET
@Path("cancelvoid")
public String cancel(@QueryParam("stage") String stage) {
    AsyncResponse response = takeAsyncResponse(stage);
    boolean ret = response.cancel();
    // Invoking a cancel(...) method multiple times to cancel request
    // processing has the same effect as canceling the request processing
    // only once.
    ret &= response.cancel();
    addResponse(response, stage);
    return ret ? TRUE : FALSE;
}
Also used : AsyncResponse(jakarta.ws.rs.container.AsyncResponse) Path(jakarta.ws.rs.Path) GET(jakarta.ws.rs.GET)

Example 19 with AsyncResponse

use of jakarta.ws.rs.container.AsyncResponse in project resteasy by resteasy.

the class CallbackResourceBase method resumeWithRuntimeException.

@GET
@Path("resumeruntime")
public String resumeWithRuntimeException(@QueryParam("stage") String stage) {
    AsyncResponse async = takeAsyncResponse(stage);
    boolean b = async.resume(new RuntimeException(RESUMED));
    addResponse(async, stage);
    return b ? TRUE : FALSE;
}
Also used : AsyncResponse(jakarta.ws.rs.container.AsyncResponse) Path(jakarta.ws.rs.Path) GET(jakarta.ws.rs.GET)

Example 20 with AsyncResponse

use of jakarta.ws.rs.container.AsyncResponse in project resteasy by resteasy.

the class CallbackResourceBase method cancelretry.

@POST
@Path("cancelretry")
public String cancelretry(@QueryParam("stage") String stage, String sRetryAfter) {
    AsyncResponse response = takeAsyncResponse(stage);
    int retryAfter = Integer.parseInt(sRetryAfter);
    boolean b = response.cancel(retryAfter);
    // Invoking a cancel(...) method multiple times to cancel request
    // processing has the same effect as canceling the request processing
    // only once.
    b &= response.cancel(retryAfter * 2);
    addResponse(response, stage);
    return b ? TRUE : FALSE;
}
Also used : AsyncResponse(jakarta.ws.rs.container.AsyncResponse) Path(jakarta.ws.rs.Path) POST(jakarta.ws.rs.POST)

Aggregations

AsyncResponse (jakarta.ws.rs.container.AsyncResponse)59 Path (jakarta.ws.rs.Path)47 GET (jakarta.ws.rs.GET)43 Response (jakarta.ws.rs.core.Response)23 Produces (jakarta.ws.rs.Produces)16 PrintWriter (java.io.PrintWriter)13 StringWriter (java.io.StringWriter)13 Logger (org.jboss.logging.Logger)13 POST (jakarta.ws.rs.POST)10 ForbiddenException (jakarta.ws.rs.ForbiddenException)6 IOException (java.io.IOException)4 WebApplicationException (jakarta.ws.rs.WebApplicationException)3 CompletionCallback (jakarta.ws.rs.container.CompletionCallback)2 ContainerRequestContext (jakarta.ws.rs.container.ContainerRequestContext)2 ContainerRequestFilter (jakarta.ws.rs.container.ContainerRequestFilter)2 ResponseBuilder (jakarta.ws.rs.core.Response.ResponseBuilder)2 Date (java.util.Date)2 Objects (java.util.Objects)2 CountDownLatch (java.util.concurrent.CountDownLatch)2 ExecutorService (java.util.concurrent.ExecutorService)2