2013-01-07 86 views
6

目前我們有一個帶有Spring MVC DispatcherServlet和兩個CXFServlet的Java webapp。 DispatcherServlet是默認的Servlet(映射/),一個CXFServlet映射到/api/*,另一個映射到/services/*CXF和多個servlet映射

什麼是纏着我,是,它似乎不可能有1個CXFServlet承載2個服務,一個在/api/v0,一個在/services/myService,沒有映射/*到CXFServlet。如果可能的話,它會節省初始化時間,配置另一個servlet實例的麻煩和內存要求。所以基本上,我的問題是,如果有人知道在1個CXFServlet中的2個URL上託管2個CXF服務,沒有公共基本/根URL,最好使用Spring命名空間配置,而不將映射/*映射到CXFServlet?

回答

3

CXF ServletController首先調用HttpServletRequest#getPathInfoinvoke方法,該方法返回請求的URL 的部分,而不 servlet的url-pattern。此呼叫的結果然後用於通過呼叫DestinationRegistry#getDestinationForPath來匹配任何已定義的服務。因此,目前不可能使用包含servlet部分的路徑進行CXF匹配服務--CXF從不會調用HttpServletRequest#getServletPath,這將需要此服務。

注意,可以在servlet的初始化參數(<init-param>)設置的base-address值僅會影響CXF 顯示任何網址,因爲服務調用期間不使用利用該值ServletController#getBaseURL方法。