Currently we have a Java webapp with a Spring MVC DispatcherServlet and two CXFServlets. The DispatcherServlet is the default servlet (mapping /), one CXFServlet maps to /api/*, the other to /services/*.
What is bugging me, is that it seems impossible to have 1 CXFServlet that hosts 2 services, one on /api/v0 and one on /services/myService, without mapping /* to the CXFServlet. If this were possible, it would save the initialisation time, config hassle and memory requirements of another servlet instance.
So basically, my question is if anyone knows of a way to host 2 CXF services on 2 URLs in 1 CXFServlet, without a common base/root URL, preferably using the Spring namespaces config, without mapping /* to the CXFServlet?
The invoke method of the CXF ServletController first calls HttpServletRequest#getPathInfo, which returns the part of the requested URL without the servlet's url-pattern. The result of this call is then used to match any defined service through a call to DestinationRegistry#getDestinationForPath. It is therefore currently impossible to have CXF match services using a path with the servlet part included — CXF never calls HttpServletRequest#getServletPath which would be needed for this.
Note that the base-address value that can be set in the servlet's initialisation parameters (<init-param>) will only affect any URLs that CXF displays, because the ServletController#getBaseURL method that uses this value is not used during service invocation.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With