URL-адрес встроенного класса Jetty resourceBase - PullRequest
2 голосов
/ 14 мая 2010

Я встраиваю Jetty в приложение на базе Spring. Я настраиваю свой сервер Jetty в файле контекста Spring. Конкретная часть конфигурации, с которой у меня возникают проблемы, такова:

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

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

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

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

Спасибо

Andrew

1 Ответ

5 голосов
/ 14 мая 2010

Вам нужно получить свой ресурс как * Spring 1001 * и вызвать на нем 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()}" /> 
...