2013-11-25 2 views
0

Я пытаюсь добавить org.eclipse.jetty.annotations.AnnotationConfiguration к configurationClasses свойству org.eclipse.jetty.webapp.WebAppContext но (при вызове Jetty с sbt containe:start), получая:java.lang.reflect.InvocationTargetException в молы-web.xml при установке WebAppContext.configurationClasses

[warn] Config error at <Set name="configurationClasses"> 
[warn]   <Array type="java.lang.String"><Item>org.eclipse.jetty.webapp.WebInfConfiguration</Item><Item>org.eclipse.jetty.webapp.WebXmlConfiguration</Item><Item>org.eclipse.jetty.webapp.MetaInfConfiguration</Item><Item>org.eclipse.jetty.webapp.FragmentConfiguration</Item><Item>org.eclipse.jetty.plus.webapp.EnvConfiguration</Item><Item>org.eclipse.jetty.plus.webapp.PlusConfiguration</Item><Item>org.eclipse.jetty.annotations.AnnotationConfiguration</Item><Item>org.eclipse.jetty.webapp.JettyWebXmlConfiguration</Item></Array> 
[warn]  </Set>java.lang.reflect.InvocationTargetException in file:/Users/erik.allik/code/scala/webtest/src/main/webapp/WEB-INF/jetty-web.xml 
[warn] Failed startup of context [email protected]{/,[file:/Users/erik.allik/code/scala/webtest/src/main/webapp/],STARTING} 

Я попытался сменить <Set ...> на <Call name="setConfigurationClasses"> (с обоими String[], а также List<String> вариантов), но безуспешно, получая одинаковое исключение отражения каждый раз.

Моего jetty-web.xml выглядит следующим образом:

<?xml version="1.0" encoding="ISO-8859-1"?> 
<!DOCTYPE Configure PUBLIC "-//Jetty//Configure//EN" "http://www.eclipse.org/jetty/configure.dtd"> 
<Configure class="org.eclipse.jetty.webapp.WebAppContext"> 
    <Set name="configurationClasses"> 
     <Array type="java.lang.String"> 
      <Item>org.eclipse.jetty.webapp.WebInfConfiguration</Item> 
      <Item>org.eclipse.jetty.webapp.WebXmlConfiguration</Item> 
      <Item>org.eclipse.jetty.webapp.MetaInfConfiguration</Item> 
      <Item>org.eclipse.jetty.webapp.FragmentConfiguration</Item> 
      <Item>org.eclipse.jetty.plus.webapp.EnvConfiguration</Item> 
      <Item>org.eclipse.jetty.plus.webapp.PlusConfiguration</Item> 
      <Item>org.eclipse.jetty.annotations.AnnotationConfiguration</Item> 
      <Item>org.eclipse.jetty.webapp.JettyWebXmlConfiguration</Item> 
     </Array> 
    </Set> 
</Configure> 

ОТВЕТ: принятие решения по https://github.com/JamesEarlDouglas/xsbt-web-plugin/blob/master/src/jetty-9/scala/Jetty9Runner.scala, xsbt-веб-плагин устанавливает конфигурации свойства WebAppContext к закодированному значению, поэтому независимо от того, что нет в XML конфиге, вероятно, просто игнорируется (или, по-видимому, вызывает ошибку).

ответ

1

Классы конфигурации существуют для настройки самого WebAppContext.

Добавление конфигураций в jetty-web.xml или XML-коннекторе Jetty IoC. Развертывание слишком поздно на жизненном цикле.

Если посмотреть на вы увидите ...

<?xml version="1.0"?> 
<!DOCTYPE Configure PUBLIC "-//Jetty//Configure//EN" "http://www.eclipse.org/jetty/configure_9_0.dtd"> 

<Configure id="Server" class="org.eclipse.jetty.server.Server"> 
    <!-- =========================================================== --> 
    <!-- Add annotation Configuring classes to all webapps for this Server --> 
    <!-- =========================================================== --> 
    <Call class="org.eclipse.jetty.webapp.Configuration$ClassList" name="setServerDefault"> 
    <Arg><Ref refid="Server" /></Arg> 
    <Call name="addBefore"> 
     <Arg name="beforeClass">org.eclipse.jetty.webapp.JettyWebXmlConfiguration</Arg> 
     <Arg> 
     <Array type="String"> 
      <Item>org.eclipse.jetty.annotations.AnnotationConfiguration</Item> 
     </Array> 
     </Arg> 
    </Call> 
    </Call> 
</Configure> 

и etc/jetty-plus.xml вы увидите ...

<?xml version="1.0"?> 
<!DOCTYPE Configure PUBLIC "-//Jetty//Configure//EN" "http://www.eclipse.org/jetty/configure_9_0.dtd"> 

<!-- =============================================================== --> 
<!-- Configure extended support for webapps       --> 
<!-- =============================================================== --> 
<Configure id="Server" class="org.eclipse.jetty.server.Server"> 

    <!-- =========================================================== --> 
    <!-- Add plus Configuring classes to all webapps for this Server --> 
    <!-- =========================================================== --> 
    <Call class="org.eclipse.jetty.webapp.Configuration$ClassList" name="setServerDefault"> 
    <Arg><Ref refid="Server" /></Arg> 
    <Call name="addAfter"> 
     <Arg name="afterClass">org.eclipse.jetty.webapp.FragmentConfiguration</Arg> 
     <Arg> 
     <Array type="String"> 
      <Item>org.eclipse.jetty.plus.webapp.EnvConfiguration</Item> 
      <Item>org.eclipse.jetty.plus.webapp.PlusConfiguration</Item> 
     </Array> 
     </Arg> 
    </Call> 
    </Call> 
</Configure> 

Если вы заметили, вы увидите, что эти настроенных на уровне сервера и основанных на существующих значениях по умолчанию (для удовлетворения требований к порядку в конфигурациях).

+0

Как насчет раздела * «Применение конфигураций в одном веб-приложении» * в разделе http://wiki.eclipse.org/Jetty/Feature/Annotations? –

+1

Эта документация для Jetty 7 (aka Servlet 2.5) - Документация Jetty 9 (aka Servlet 3.1) находится по адресу http://www.eclipse.org/jetty/documentation/current/annotations.html - сканирование аннотаций для сервлетов/фильтров/websockets/etc ... (ack endpoints) не поддерживается в WebSocketContext. Напечатайте ошибку на bugs.eclipse.org (под RT/Jetty), если вы считаете, что это важно. –

+0

«не поддерживается в« WebAppContext », который вы хотели сказать? –

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