package org.jboss.resteasy.springmvc; import org.jboss.resteasy.plugins.server.servlet.HttpServletResponseWrapper; import org.jboss.resteasy.plugins.server.servlet.ServletSecurityContext; import org.jboss.resteasy.spi.HttpResponse; import org.jboss.resteasy.spi.ResteasyProviderFactory; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import javax.ws.rs.core.SecurityContext; public abstract class ResteasyWebHandlerTemplate<T> { protected ResteasyProviderFactory factory; public ResteasyWebHandlerTemplate(ResteasyProviderFactory factory) { this.factory = factory; } public T handle(ResteasyRequestWrapper requestWrapper, HttpServletResponse httpServletResponse) throws Exception { T result = null; HttpResponse response = new HttpServletResponseWrapper(httpServletResponse, factory); HttpServletRequest servletRequest = requestWrapper.getHttpServletRequest(); try { ResteasyProviderFactory.pushContext(HttpServletRequest.class, servletRequest); ResteasyProviderFactory.pushContext(HttpServletResponse.class, httpServletResponse); ResteasyProviderFactory.pushContext(SecurityContext.class, new ServletSecurityContext(servletRequest)); result = handle(requestWrapper, response); } finally { ResteasyProviderFactory.clearContextData(); } return result; } abstract protected T handle(ResteasyRequestWrapper requestWrapper, HttpResponse response) throws Exception; }