2013-01-07 5 views
6

Attualmente abbiamo una webapp Java con un MVC DispatcherServlet e due CXFServlet. DispatcherServlet è il servlet predefinito (mappatura /), un CXFServlet esegue il mapping su /api/*, l'altro su /services/*.CXF e più servlet mapping

Quello che mi sta intercettazioni, è che sembra impossibile avere 1 CXFServlet che ospita 2 servizi, uno su /api/v0 e uno sul /services/myService senza mappatura /* al CXFServlet. Se ciò fosse possibile, salverebbe il tempo di inizializzazione, i problemi di configurazione e di memoria di un'altra istanza di servlet. Quindi, in pratica, la mia domanda è se qualcuno conosce un modo per ospitare 2 servizi CXF su 2 URL in 1 CXFServlet, senza un URL di base/root comune, preferibilmente utilizzando la configurazione dei namespace Spring, senza mappare /* in CXFServlet?

risposta

3

Il invoke metodo dei primi CXF ServletController chiamate HttpServletRequest#getPathInfo, che restituisce la parte dell'URL richiesto senza il servlet del url-pattern. Il risultato di questa chiamata viene quindi utilizzato per abbinare qualsiasi servizio definito tramite una chiamata a DestinationRegistry#getDestinationForPath. Pertanto è attualmente impossibile avere i servizi di corrispondenza CXF utilizzando un percorso con la parte servlet inclusa. CXF non chiama mai HttpServletRequest#getServletPath che sarebbe necessario per questo.

noti che il valore base-address che può essere impostato nei parametri di inizializzazione del servlet (<init-param>) interesserà solo gli URL che CXF visualizza, poiché il metodo ServletController#getBaseURL che utilizza questo valore non viene utilizzato durante il servizio richiamo.