Fixed NPE on destroy of invalid Servlet error. This is a weird corner case caused by shutdown hook from the servlet container destroying GuiceFilter when one of its filters or servlets was "out of service", i.e. bound incorrectly.
git-svn-id: https://google-guice.googlecode.com/svn/trunk@825 d779f126-a31b-0410-b53b-1d3aecad763e
diff --git a/servlet/src/com/google/inject/servlet/FilterDefinition.java b/servlet/src/com/google/inject/servlet/FilterDefinition.java
index 58c15ff..18805a2 100755
--- a/servlet/src/com/google/inject/servlet/FilterDefinition.java
+++ b/servlet/src/com/google/inject/servlet/FilterDefinition.java
@@ -89,8 +89,16 @@
}
public void destroy() {
- //filters are always singletons
- filter.get().destroy();
+ // filters are always singletons
+ Filter reference = filter.get();
+
+ // Do nothing if this Filter was invalid (usually due to not being scoped
+ // properly). According to Servlet Spec: it is "out of service", and does not
+ // need to be destroyed.
+ if (null == reference) {
+ return;
+ }
+ reference.destroy();
}
public void doFilter(ServletRequest servletRequest,
diff --git a/servlet/src/com/google/inject/servlet/ServletDefinition.java b/servlet/src/com/google/inject/servlet/ServletDefinition.java
index d2e1a71..932f825 100755
--- a/servlet/src/com/google/inject/servlet/ServletDefinition.java
+++ b/servlet/src/com/google/inject/servlet/ServletDefinition.java
@@ -92,7 +92,15 @@
}
public void destroy() {
- httpServlet.get().destroy();
+ HttpServlet reference = httpServlet.get();
+
+ // Do nothing if this Servlet was invalid (usually due to not being scoped
+ // properly). According to Servlet Spec: it is "out of service", and does not
+ // need to be destroyed.
+ if (null == reference) {
+ return;
+ }
+ reference.destroy();
}
/**