2015-04-05 6 views
1

В моем ServletFilter я хочу использовать конкретный API причала, открытый в реализации HttpServletRequest.Как использовать org.eclipse.jetty.server.Request в webapp?

Я начал это так:

final Request jettyRequest = Request.getBaseRequest(request) 

Если я хочу, чтобы избежать ClassNotFoundException, я должен добавить артефакт Пристань-сервера для моих зависимостей Maven. Но если я это сделаю, getBaseRequest вернет null, потому что «request instanceof Request» возвращает false вместо true.

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

Мое приложение запускается с «МВН причалу: вводного раздвоенным» и настроен так:

<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> 

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

+0

Зачем вам нужен доступ к внутренний объект '' запрос' Jetty? (этот объект может быть изменен при каждой выпуске Jetty) –

+0

Я работаю над экспериментальной поддержкой поддержки сервера в веб-приложении, которое нуждается в API для конкретного сервера. На Jetty я хочу получить доступ к API PushBuilder из класса Jetty Request. –

ответ

0

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

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

Файл должен содержать ссылки на молы-Maven-плагин так:

<contextXml>../jetty-context.xml</contextXml>