2012-02-02 10 views
11

Szukam odsłonić plik clientacesspolicy.xml z osadzonego serwera pomostu.Jak mogę obsłużyć konkretny zasób classpath pod danym adresem przy użyciu osadzonego pomostu?

Moja obecna próba wygląda następująco:

ContextHandler capHandler = new ContextHandler(); 
capHandler.setContextPath("/clientaccesspolicy.xml"); 
capHandler.setBaseResource(Resource.newClassPathResource("clientaccesspolicy.xml")); 
HandlerList handlers = new HandlerList(); 
handlers.addHandler(capHandler); 
... 
httpServer.setHandler(handlers); 

Ale ja dostaję 404 dostępem http://localhost:9000/clientaccesspolicy.xml

Jak mogę wystawiać zasób ścieżce klasy do danego adresu URL programowo w Jetty?

Dzięki, Andy

Odpowiedz

8

Twój kod nie działa, ponieważ w rzeczywistości nie ContextHandler zawartości serwera w górę. Mała regulacja sprawi, że będzie to coś w rodzaju pracy, ale aby zrobić to, czego naprawdę chcesz, musisz napisać własny przewodnik.

W "rodzaj prac" wersji:

ContextHandler capHandler = new ContextHandler(); 
capHandler.setContextPath("/clientaccesspolicy.xml"); 
ResourceHandler resHandler = new ResourceHandler(); 
resHandler.setBaseResource(Resource.newClassPathResource("clientaccesspolicy.xml")); 
capHandler.setHandler(resHandler); 

Ale, że traktuje wersja /clientaccesspolicy.xml jako katalogu, więc to przekierowuje do /clientaccesspolicy.xml/ a następnie wyświetla zawartość pliku XML.

Co to wygląda tak, jak chcesz to wersja ResourceHandler który ma odnośnika z url =>zasobów. Pomost nie jest wysyłany z programem obsługi, który to robi, ale powinieneś być w stanie utworzyć podklasę ResourceHandler, a następnie zastąpić getResource. W takim przypadku nie będziesz potrzebować [lub chcesz] ContextHandler, po prostu sprawdź połączenia z "/clientaccesspolicy.xml" i zmapuj je do właściwego zasobu ClassPath.

+0

brzmi idealnie, da to szansę! Dzięki – Andy

+0

aktualizacja - obie sugestie zadziałały, ale tylko druga stworzyła użyteczny plik zasad dostępu klienta – Andy

17

Właściwie można po prostu zarejestrować ścieżkę klasy jako źródło ścieżki zajęć (co zaskakujące).

ResourceHandler resHandler = new ResourceHandler(); 
resHandler.setBaseResource(Resource.newClassPathResource("/")); 
server.setHandler(resHandler); 

Następnie można uzyskać dostęp do plików znajdujących się w ścieżce zajęć. Więc jeśli masz plik file.xml, będzie on obsługiwany z localhost: 9000/file.xml.

Powiązane problemy