Попытка миграции встроенного Tomcat 5 в встроенный Tomcat 7. Получение NPE во время запуска.migrate embedded tomcat 5 to tomcat 7
Я расширяю класс Embedded и выполняю всю предлагаемую инициализацию в правильной последовательности.
NPE происходит здесь:
Caused by: java.lang.NullPointerException
at org.apache.catalina.core.ApplicationContext.populateSessionTrackingModes(ApplicationContext.java:1187)
at org.apache.catalina.core.ApplicationContext.<init>(ApplicationContext.java:126)
at org.apache.catalina.core.StandardContext.getServletContext(StandardContext.java:2344)
at org.apache.catalina.core.StandardContext.postWorkDirectory(StandardContext.java:6283)
at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5251)
at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150)
Вот источник кот 7 для метода метания исключение:
private void populateSessionTrackingModes() {
// URL re-writing is always enabled by default
defaultSessionTrackingModes = EnumSet.of(SessionTrackingMode.URL);
supportedSessionTrackingModes = EnumSet.of(SessionTrackingMode.URL);
if (context.getCookies()) {
defaultSessionTrackingModes.add(SessionTrackingMode.COOKIE);
supportedSessionTrackingModes.add(SessionTrackingMode.COOKIE);
}
// SSL not enabled by default as it can only used on its own
// Context > Host > Engine > Service
Service s = ((Engine) context.getParent().getParent()).getService();
Connector[] connectors = s.findConnectors();
// Need at least one SSL enabled connector to use the SSL session ID.
for (Connector connector : connectors) {
if (Boolean.TRUE.equals(connector.getAttribute("SSLEnabled"))) {
supportedSessionTrackingModes.add(SessionTrackingMode.SSL);
break;
}
}
}
Проблема здесь происходит:
Service s = ((Engine) context.getParent().getParent()).getService();
Служба переменная s равна нулю. Похоже, что объект сервиса должен быть установлен в классе Engine.
Это что-то новое в Tomcat 7? Не уверен, что нужно настроить, чтобы избежать этого значения null для службы.
Какая линия 1187? Это 'Сервис s = ((Engine) context.getParent(). GetParent()). GetService();' или 'Connector [] connector = s.findConnectors();'? – dcsohl
s.findConnectors() - строка 1187. Переменная установлена в значение null в строке 1186, а затем используется в 1187, которая вызывает NPE. – user2040457