package edu.mayo.cts2.framework.webapp.rest.osgi; import javax.servlet.ServletConfig; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletRequestWrapper; import javax.servlet.http.HttpServletResponse; import org.apache.commons.lang.StringUtils; import org.osgi.util.tracker.ServiceTracker; public class OsgiDispatcherServlet extends org.springframework.web.servlet.DispatcherServlet { private static final long serialVersionUID = -1902220453736915877L; private ServiceTracker osgiServletTracker; @Override public void init(ServletConfig config) throws ServletException { super.init(config); this.osgiServletTracker = (ServiceTracker) config.getServletContext().getAttribute("osgi-servlet-tracker"); } protected void noHandlerFound(HttpServletRequest request, HttpServletResponse response) throws Exception { HttpServlet dispatcher = (HttpServlet) this.osgiServletTracker.getService(); if(dispatcher == null){ super.noHandlerFound(request, response); } else { //dispatcher.service(request, response); dispatcher.service(new PathInfoChangingRequest(request), response); } } public class PathInfoChangingRequest extends HttpServletRequestWrapper { public PathInfoChangingRequest(HttpServletRequest request) { super(request); } @Override public String getPathInfo() { String pathInfo = super.getPathInfo(); if (StringUtils.isBlank(pathInfo)) { String servletPath = super.getServletPath(); return servletPath; } else { return pathInfo; } } } }