正在尝试将embedded Tomcat 5迁移到embedded Tomcat 7。在启动过程中获得NPE。
我扩展了嵌入式类,并按正确的顺序执行所有建议的初始化。
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)以下是抛出异常的方法的tomcat 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为null。似乎需要在Engine类上设置服务对象。
这是Tomcat7中的新功能吗?不确定需要配置什么才能避免此Service的空值。
发布于 2013-11-20 16:24:58
服务是将引擎与一个或多个连接器链接的对象。创建org.apache.catalina.core.StandardService的默认实例并使用该实例。使用addConnector()向其添加连接器,并使用addContainer()向其添加引擎。
https://stackoverflow.com/questions/20077352
复制相似问题