Search in sources :

Example 1 with SuspendableContainerRequestContext

use of org.jboss.resteasy.core.interception.jaxrs.SuspendableContainerRequestContext 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 2 with SuspendableContainerRequestContext

use of org.jboss.resteasy.core.interception.jaxrs.SuspendableContainerRequestContext 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) HttpRequest(org.jboss.resteasy.spi.HttpRequest) IOException(java.io.IOException) Executors(java.util.concurrent.Executors) Objects(java.util.Objects) ResteasyContext(org.jboss.resteasy.core.ResteasyContext) Response(jakarta.ws.rs.core.Response) ContainerRequestContext(jakarta.ws.rs.container.ContainerRequestContext) ContainerRequestFilter(jakarta.ws.rs.container.ContainerRequestFilter) SuspendableContainerRequestContext(org.jboss.resteasy.core.interception.jaxrs.SuspendableContainerRequestContext) ExecutorService(java.util.concurrent.ExecutorService) ExecutorService(java.util.concurrent.ExecutorService) SuspendableContainerRequestContext(org.jboss.resteasy.core.interception.jaxrs.SuspendableContainerRequestContext) AsyncResponse(jakarta.ws.rs.container.AsyncResponse)

Aggregations

AsyncResponse (jakarta.ws.rs.container.AsyncResponse)2 CompletionCallback (jakarta.ws.rs.container.CompletionCallback)2 ContainerRequestContext (jakarta.ws.rs.container.ContainerRequestContext)2 ContainerRequestFilter (jakarta.ws.rs.container.ContainerRequestFilter)2 Response (jakarta.ws.rs.core.Response)2 IOException (java.io.IOException)2 Objects (java.util.Objects)2 ExecutorService (java.util.concurrent.ExecutorService)2 Executors (java.util.concurrent.Executors)2 Logger (org.jboss.logging.Logger)2 ResteasyContext (org.jboss.resteasy.core.ResteasyContext)2 SuspendableContainerRequestContext (org.jboss.resteasy.core.interception.jaxrs.SuspendableContainerRequestContext)2 HttpRequest (org.jboss.resteasy.spi.HttpRequest)2