2013-01-07 9 views
6

Obecnie mamy aplikację webową Java ze Spring MVC DispatcherServlet i dwie CXFSerlety. Serwerem DispatcherServer jest domyślny serwlet (mapowanie /), jeden CXFServlet odwzorowuje na /api/*, drugi na /services/*.CXF i wiele odwzorowań serwletów

Co gryzie mnie to, że wydaje się niemożliwe, aby mieć 1 CXFServlet obsługującego 2 usługi, jeden na /api/v0 i jeden na /services/myService, bez odwzorowywania /* do CXFServlet. Gdyby było to możliwe, zaoszczędziłoby to czas inicjalizacji, kłopoty z konfiguracją i wymagania pamięci dla innej instancji serwletu.

Moje pytanie brzmi, czy ktokolwiek wie, jak obsługiwać 2 usługi CXF na 2 adresach URL w 1 CXFServlet, bez wspólnego adresu URL bazy/root, najlepiej przy użyciu Spring Namepaces config, bez mapowania /* do CXFServlet?

Odpowiedz

3

invoke Sposób CXF ServletController pierwszych zaproszeń HttpServletRequest#getPathInfo, która zwraca część żądanego adresu URL bez apletu url-pattern. Wynik tego połączenia jest następnie używany do dopasowania dowolnej zdefiniowanej usługi poprzez wywołanie do DestinationRegistry#getDestinationForPath. W związku z tym obecnie niemożliwe jest posiadanie usług dopasowywania CXF za pomocą ścieżki z częścią serwletu zawartą w pakiecie - CXF nigdy nie będzie wywoływać HttpServletRequest#getServletPath, która byłaby potrzebna do tego.

pamiętać, że wartość base-address, które mogą być ustawione w parametrach inicjalizacji serwletu (<init-param>) wpłynie tylko żadnych adresów URL, które CXF wyświetla, ponieważ metoda ServletController#getBaseURL że używa tej wartości nie jest używany podczas wywołania usługi.