2010-05-14 14 views
2

J'encadre Jetty dans une application Spring. Je configure mon serveur Jetty dans un fichier de contexte Spring. La partie spécifique de la configuration que je vais avoir du mal avec ceci:Embedded Jetty resourceBase classpath URL

<bean class="org.eclipse.jetty.webapp.WebAppContext"> 
    <property name="contextPath" value="/" /> 
    <property name="resourceBase" value="????????" /> 
    <property name="parentLoaderPriority" value="true" /> 
</bean> 

Si vous voyez ci-dessus, où je mets le ????????, je veux idéalement la resourceBase faire référence à une dossier sur mon classpath. Je déploie mon application dans un seul fichier JAR exécutable et j'ai un dossier config/web/WEB-INF sur mon classpath.

Jetty semble être capable de gérer les URL définies dans la resourceBase (par exemple, jar:file:/myapp.jar!/config/web) mais ne semble pas prendre en charge les URL de chemin de classe. Je reçois une exception IllegalArgumentException si je définis quelque chose comme classpath:config/web.

C'est une vraie douleur pour moi. Est-ce que quelqu'un sait de toute façon pour réaliser cette fonctionnalité?

Merci,

Andrew

Répondre

5

Vous devez obtenir votre ressource en tant que Resource de ressort et appeler getURI().toString() sur elle, quelque chose comme ceci:

public class ResourceUriFactoryBean extends AbstractFactoryBean<String> { 

    private Resource resource; 

    public ResourceUriFactoryBean(Resource resource) { 
     this.resource = resource; 
    } 

    @Override 
    protected String createInstance() throws Exception { 
     return resource.getURI().toString(); 
    } 

    @Override 
    public Class<? extends String> getObjectType() { 
     return String.class; 
    }  
} 

-

<property name="resourceBase"> 
    <bean class = "com.metatemplating.sample.test.ResourceUriFactoryBean"> 
     <constructor-arg value = "classpath:config/web" /> 
    </bean> 
</property> 

-

Ou approche plus élégante avec la langue d'expression Spring 3.0:

<property name="resourceBase" 
    value = "#{new org.springframework.core.io.ClassPathResource('config/web').getURI().toString()}" /> 
+3

un Nice. Si vous n'utilisez pas Spring, utilisez simplement SomeClass.class.getResource ("/ config/web"). ToURI(). ToString() –