powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Java [игнор отключен] [закрыт для гостей] / Jetty как поставить свой обработчик ErrorPage? (NoClassDefFoundError)
5 сообщений из 5, страница 1 из 1
Jetty как поставить свой обработчик ErrorPage? (NoClassDefFoundError)
    #38549214
chabapok
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Делаю по инструкции http://www.eclipse.org/jetty/documentation/current/custom-error-pages.html

jetty-env.xml :
Код: xml
1.
2.
3.
4.
5.
6.
7.
8.
<Configure class="org.eclipse.jetty.webapp.WebAppContext">
...

    <Set name="errorHandler">
        <New class="cool.CoolErrorHandler"/>
    </Set>

</Configure>



класс хандлера:
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
package cool;

import java.io.IOException;
import java.io.Writer;
import javax.servlet.http.HttpServletRequest;

public class CoolErrorHandler extends org.eclipse.jetty.server.handler.ErrorHandler{

    @Override
    protected void writeErrorPage(HttpServletRequest request, Writer writer, int code, String message, boolean showStacks) throws IOException {
        System.out.println("abcdef");
    }
}



Класс org.eclipse.jetty.server.handler.ErrorHandler содержится в jar-нике lib/jetty-server-9.1.0.v20131115.jar и его суперклассы в lib/jetty-util-9.1.0.v20131115.jar

При запуске java -jar start.jar --list-config, можно видеть строчки:
...
9: 9.1.0.v20131115 | ${jetty.home}/lib/jetty-server-9.1.0.v20131115.jar
...
11: 9.1.0.v20131115 | ${jetty.home}/lib/jetty-util-9.1.0.v20131115.jar

То есть, либы должны видеться.

Но при запуске jetty получаю java.lang.NoClassDefFoundError: org/eclipse/jetty/server/handler/ErrorHandler


При этом если jetty-env.xml конфигурирую так, то экзепшена нету, что косвенно подтверждает факт того, что jar с необходимым классом загрузился:

Код: xml
1.
2.
3.
4.
5.
6.
7.
<Configure class="org.eclipse.jetty.webapp.WebAppContext">
...

    <Set name="errorHandler">
        <New class="org.eclipse.jetty.server.handler.ErrorHandler"/>
    </Set>
</Configure>



Пробовал тупо перекинуть свой CoolErrorHandler.class из war внутрь jetty-server-9.1.0.v20131115.jar -- работает, нету экзепшена.
И c последним jetty 2014 та же проблема.

При этом если запускаю jetty так:
# java -verbose:class -jar start.jar |grep Error

то среди вывода есть строчка:
[Loaded org.eclipse.jetty.server.handler.ErrorHandler from file:/home/chabapok/jetty-distribution-9.1.0.v20131115/lib/jetty-server-9.1.0.v20131115.jar]

То есть грузится же!

Такое впечатление, что jvm не позволяет отнаследоваться от класса из другого jar. Но я уже пробовал не только отнаследоваться, но и создать инстанс ErrorHandler в сервлете, в обработчике put. Тоже не находит. ЧЯДНТ?
...
Рейтинг: 0 / 0
Jetty как поставить свой обработчик ErrorPage? (NoClassDefFoundError)
    #38549295
Basil A. Sidorov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
http://www.eclipse.org/jetty/documentation/current/jetty-classloading.html]Загрузчик и классов ?
...
Рейтинг: 0 / 0
Jetty как поставить свой обработчик ErrorPage? (NoClassDefFoundError)
    #38549308
chabapok
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Уже читаю/пробую, но пока добиться нужного эффекта не поулчается.

добавил в jetty-env.xml такое:
Код: xml
1.
2.
3.
    <Call name="addServerClass">
        <Arg>-org.eclipse.jetty.server.handler.</Arg>
    </Call>



но это не помогло.
...
Рейтинг: 0 / 0
Jetty как поставить свой обработчик ErrorPage? (NoClassDefFoundError)
    #38549399
chabapok
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Создал в webapps файл ROOT.xml следующего содержания:

Код: xml
1.
2.
3.
4.
5.
6.
7.
<Configure class="org.eclipse.jetty.webapp.WebAppContext">
  <Set name="contextPath">/</Set>
  <Set name="war"><Property name="jetty.webapps" />/ROOT.war</Set>
  <Set name="serverClasses">
    <Array type="String"><Item>-org.eclipse.jetty.server.handler.</Item></Array>
  </Set>
</Configure>



Заработало, но сломался автодеплой. Теперь чтобы jetty подхватил новый war, нужно перезапускать сервер.

Подскажите, как это починить?
...
Рейтинг: 0 / 0
Jetty как поставить свой обработчик ErrorPage? (NoClassDefFoundError)
    #38549506
chabapok
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Выяснил вот что: если файл ROOT.xml перезаписать, то jetty подхватывает новый war. Но для этого просто скопировать тот же контент недостаточно, надо где-нибудь внутри ROOT.xml что-нибудь поменять, например добавить пробел.

То есть можно задеплоить, добавив в скрипт после копирования war так:
echo " ">>ROOT.xml

извращение, конечно, но лучше пока не придумал.
...
Рейтинг: 0 / 0
5 сообщений из 5, страница 1 из 1
Форумы / Java [игнор отключен] [закрыт для гостей] / Jetty как поставить свой обработчик ErrorPage? (NoClassDefFoundError)
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]