2010-05-14 3 views
2

Я встраиваю Jetty в приложение на основе Spring. Я настраиваю свой сервер Jetty в контекстном файле Spring. Специфическая часть конфигурации У меня возникли проблемы с это: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> 

Если вы видите выше, где я поставил ????????, я хочу, чтобы в идеале resourceBase к опорному папку на моем пути к классам. Я развертываю свое приложение в одном исполняемом JAR-файле и имею папку config/web/WEB-INF на моем пути к классам.

Jetty, похоже, способен обрабатывать URL-адреса, определенные в resourceBase (например, jar:file:/myapp.jar!/config/web), но он, похоже, не поддерживает URL-адреса классов. Я получаю исключение IllegalArgumentException, если я определяю что-то вроде classpath:config/web.

Это настоящая боль для меня. В любом случае, кто-нибудь знает о достижении этой функциональности?

Спасибо,

Andrew

ответ

5

Вы должны получить свой ресурс как Spring, Resource и вызвать getURI().toString() на него, что-то вроде этого:

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> 

-

Или более элегантный подход с языком выражения Spring 3.0 в:

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

Nice один. Если вы не используете Spring, просто используйте SomeClass.class.getResource ("/ config/web"). ToURI(). ToString() –

Смежные вопросы