cxf-issues mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Dmitry Murashenkov (JIRA)" <>
Subject [jira] [Commented] (CXF-7203) Multiple servlet mappings for CXFNonSpringServlet
Date Thu, 02 Feb 2017 14:51:51 GMT


Dmitry Murashenkov commented on CXF-7203:

After several experiments we altered jetty setup to using virtual hosts (, or simply, instead of /user and /admin contexts)
and now have a single CXF servlet per virtual host, so no conflict of paths takes place.

> Multiple servlet mappings for CXFNonSpringServlet
> -------------------------------------------------
>                 Key: CXF-7203
>                 URL:
>             Project: CXF
>          Issue Type: Improvement
>            Reporter: Dmitry Murashenkov
> I want to achieve following set of calls to ease configuration management:
> Endpoint.publish("/user/soap/userService", userService);
> Endpoint.publish("/admin/soap/adminService", adminService);
> ServletContextHandler userContext = new ServletContextHandler();
> userContext.setContextPath("/user");
> userContext.addServlet(new ServletHolder(cxf), "/soap/*");
> ServletContextHandler adminContext = new ServletContextHandler();
> adminContext.setContextPath("/admin");
> adminContext.addServlet(new ServletHolder(cxf), "/soap/*");
> Currently it is not possible since ServletController.invoke() takes request.getPathInfo()
and that would be "/userService". So CXFServlet can only be mapped to root context, which
may be impossible if I have other servlets in "/user" context and Jetty would first call more
specific user context for that URI.
> Current workaround is to extend CXFNonSpringServlet and rewrite pathInfo, servletContext
and contextPath in the invoke() as if servlet is deployed in server root "/*":
> @Override
> protected void invoke(HttpServletRequest request, HttpServletResponse response) throws
> {
>     String fullPath = request.getContextPath() + "/" + request.getServletPath() + "/"
+ request.getPathInfo();
>     fullPath = fullPath.replaceAll("//", "/");
>     ((Request)request).setPathInfo(fullPath);
>     ((Request)request).setContextPath("/");
>     ((Request)request).setServletPath("/");
>     super.invoke(request, response);
> }
> Also having single CXFServlet mapped several times in Jetty causes NPE in CXFNonSpringServlet.destroy()
since it is called multiple times and destinationRegistry is set to null after first invocation.
> Same problem exists for CXFNonSpringJaxrsServlet and can be worked around the same way.
Additionally it fails during several init() invocations - attempting to start several endpoints
for same address.

This message was sent by Atlassian JIRA

View raw message