package org.glassfish.jersey.server.model.internal;
import java.lang.reflect.InvocationHandler;
import javax.ws.rs.ProcessingException;
import javax.ws.rs.container.ResourceContext;
import javax.ws.rs.core.Response;
import javax.inject.Singleton;
import org.glassfish.jersey.server.ContainerRequest;
import org.glassfish.jersey.server.internal.inject.ConfiguredValidator;
import org.glassfish.jersey.server.model.Invocable;
import org.glassfish.jersey.server.spi.internal.ResourceMethodDispatcher;
@Singleton
final class VoidVoidDispatcherProvider implements ResourceMethodDispatcher.Provider {
private final ResourceContext resourceContext;
VoidVoidDispatcherProvider(ResourceContext resourceContext) {
this.resourceContext = resourceContext;
}
private static class VoidToVoidDispatcher extends AbstractJavaResourceMethodDispatcher {
private VoidToVoidDispatcher(final Invocable resourceMethod,
final InvocationHandler handler,
final ConfiguredValidator validator) {
super(resourceMethod, handler, validator);
}
@Override
public Response doDispatch(final Object resource, final ContainerRequest containerRequest) throws ProcessingException {
invoke(containerRequest, resource);
return Response.noContent().build();
}
}
@Override
public ResourceMethodDispatcher create(final Invocable resourceMethod,
final InvocationHandler handler,
final ConfiguredValidator validator) {
if (resourceMethod.getHandlingMethod().getReturnType() != void.class || !resourceMethod.getParameters().isEmpty()) {
return null;
}
return resourceContext.initResource(new VoidToVoidDispatcher(resourceMethod, handler, validator));
}
}