package de.axone.web.rest; import java.io.IOException; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import de.axone.data.Charsets; import de.axone.data.Mime.MimeTypes; import de.axone.web.SuperURL; import de.axone.web.SuperURLBuilders; public abstract class AbstractRestServlet<DATA, REQUEST extends RestRequest> extends HttpServlet { private static final long serialVersionUID = 2270602676285881313L; private static final Logger log = LoggerFactory.getLogger( AbstractRestServlet.class ); private final RestFunctionRegistry<DATA, REQUEST> registry; protected AbstractRestServlet( RestFunctionRegistry<DATA, REQUEST> registry ){ this.registry = registry; } protected abstract REQUEST makeRequest( HttpServletRequest req, HttpServletResponse resp ); protected void _process( HttpServletRequest req, HttpServletResponse resp ) throws ServletException, IOException { if( log.isTraceEnabled() ){ SuperURL u = SuperURLBuilders.fromRequest().build( req ); log.trace( "Request for: {}", u.toDebug() ); } resp.setCharacterEncoding( Charsets.utf8 ); resp.setContentType( MimeTypes.JSON.text() ); REQUEST request = makeRequest( req, resp ); try { registry.run( null, request, resp ); } catch( Throwable t ){ throw new ServletException( t ); } finally { resp.getWriter().close(); } } @Override protected void doGet( HttpServletRequest req, HttpServletResponse resp ) throws ServletException, IOException { _process( req, resp ); } @Override protected void doPost( HttpServletRequest req, HttpServletResponse resp ) throws ServletException, IOException { _process( req, resp ); } @Override protected void doPut( HttpServletRequest req, HttpServletResponse resp ) throws ServletException, IOException { _process( req, resp ); } @Override protected void doDelete( HttpServletRequest req, HttpServletResponse resp ) throws ServletException, IOException { _process( req, resp ); } }