2012-02-02 13 views
11

Sto cercando di esporre un file clientacesspolicy.xml da un server jetty incorporato.Come posso servire una particolare risorsa classpath a un dato indirizzo usando il molo incorporato?

Il mio tentativo in corso si presenta così:

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

ma ottengo un 404 accesso http://localhost:9000/clientaccesspolicy.xml

Come posso esporre una risorsa percorso di classe per un determinato URL a livello di codice in Jetty?

Grazie, Andy

risposta

8

Il codice non funziona perché una ContextHandler in realtà non il contenuto del server fino. Una piccola regolazione lo renderà una specie di lavoro, ma per fare quello che vuoi veramente dovrai scrivere il tuo gestore.

Il "sorta di opere" versione:

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

Ma, quella versione tratta /clientaccesspolicy.xml come una directory, in modo che reindirizza a /clientaccesspolicy.xml/ e quindi visualizza il contenuto del file XML.

Come appare quello che volete è una versione del ResourceHandler che ha una ricerca di url =>risorsa. Il molo non viene fornito con un gestore che lo fa, ma dovresti essere in grado di creare una sottoclasse di ResourceHandler e quindi eseguire l'override di getResource. In tal caso non avrai bisogno [o vuoi] di ContextHandler, basta controllare le chiamate a "/clientaccesspolicy.xml" e mapparlo alla risorsa ClassPath corretta.

+0

suoni perfetti, ci proveremo! Grazie all'aggiornamento – Andy

+0

: entrambi i suggerimenti funzionavano, ma solo il secondo ha creato un file dei criteri di accesso client utilizzabile – Andy

17

In realtà, si può solo registrare un percorso di classe come risorsa percorso di classe (sorprendentemente).

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

Quindi è possibile accedere a qualsiasi file presenti nel percorso classe. Quindi se hai un file.xml verrà servito da localhost: 9000/file.xml.

Problemi correlati