Как использовать org.eclipse.jetty.server.Request в веб-приложении?

В моем ServletFilter я хочу использовать определенный API-интерфейс причала, представленный в реализации HttpServletRequest.

Я запускал так:

final Request jettyRequest = Request.getBaseRequest(request)

Если я хочу избежать ClassNotFoundException, я должен добавить артефакт jetty-server в мои зависимости maven. Но если я это сделаю, getBaseRequest вернет null, потому что 'request instanceof Request' вернет false вместо true.

Это, безусловно, связано с конфликтом между загрузчиками классов причала и приложения, потому что оба они загрузили класс org.eclipse.jetty.server.Request. Я попробовал несколько конфигураций, но мне не удалось сделать класс запроса доступным для моего веб-приложения без добавления зависимости в WEB-INF/lib, что вызывает проблему с путем к классам.

Мое приложение запускается с помощью "mvn jetty:run-forked" и настраивается следующим образом:

    <plugin>
        <groupId>org.eclipse.jetty</groupId>
        <artifactId>jetty-maven-plugin</artifactId>
        <version>${jetty-version}</version>
        <configuration>
            <webAppSourceDirectory>${project.build.directory}/${project.name}</webAppSourceDirectory>
            <systemProperties>
                <force>true</force>
            </systemProperties>
            <scanIntervalSeconds>10</scanIntervalSeconds>
            <webAppConfig>
                <contextPath>/</contextPath>
            </webAppConfig>
            <jettyXml>../jetty.xml,../jetty-ssl.xml,../jetty-https.xml</jettyXml>
            <jvmArgs>-agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=5005 -Xbootclasspath/p:${settings.localRepository}/org/mortbay/jetty/alpn/alpn-boot/${alpn-version}/alpn-boot-${alpn-version}.jar</jvmArgs>
        </configuration>
    </plugin>

Любая помощь будет оценена!


person Guillaume D.    schedule 05.04.2015    source источник
comment
Зачем вам нужен доступ к внутреннему объекту Request Jetty? (этот объект может меняться с каждым выпуском Jetty)   -  person Joakim Erdfelt    schedule 08.04.2015
comment
Я работаю над экспериментальной поддержкой push-уведомлений сервера в веб-приложении, для которого требуется специфичный для сервера API. На Jetty я хочу получить доступ к PushBuilder API из класса Jetty Request.   -  person Guillaume D.    schedule 09.04.2015


Ответы (1)


Я исправил проблему, добавив файл конфигурации WebAppContext, который содержит:

<Configure class="org.eclipse.jetty.webapp.WebAppContext">
    <Set name="parentLoaderPriority">true</Set>
</Configure>

На файл нужно ссылаться в jetty-maven-plugin следующим образом:

<contextXml>../jetty-context.xml</contextXml>
person Guillaume D.    schedule 21.04.2015