2013-01-07 2 views
6

В настоящее время у нас есть Java webapp с Spring MVC DispatcherServlet и два CXFServlets. DispatcherServlet является сервлетом по умолчанию (отображение /), один CXFServlet соответствует /api/*, другой - /services/*.CXF и множественные сопоставления сервлетов

Что давал мне покой, то, что это кажется невозможным, чтобы иметь 1 CXFServlet, что хозяйничает 2 услуги, один на /api/v0 и один на /services/myService, без отображения /* к CXFServlet. Если это было возможно, это сэкономит время инициализации, проблемы с настройкой и памятью другого экземпляра сервлета.

В основном, мой вопрос в том, знает ли кто-нибудь способ разместить 2 службы CXF по 2 URL-адресам в 1 CXFServlet, без общего базового/корневого URL-адреса, предпочтительно используя конфигурацию пространств имен Spring, без сопоставления /* с CXFServlet?

ответ

3

invoke метод из CXF ServletController первых вызовов HttpServletRequest#getPathInfo, которая возвращает часть запрашиваемого URL без сервлета url-pattern. Результат этого вызова затем используется для соответствия любому определенному сервису по вызову DestinationRegistry#getDestinationForPath. Поэтому в настоящее время невозможно иметь службы соответствия CXF, используя путь с включенной частью сервлета - CXF никогда не вызывает HttpServletRequest#getServletPath, который понадобится для этого.

Обратите внимание, что значение base-address, которые могут быть установлены в параметрах инициализации сервлета (<init-param>) будет влиять только на какой-либо URL, что CXF отображает, потому что ServletController#getBaseURL метод, который использует это значение не используется во время вызова служб.

Смежные вопросы