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();
   }
 
   /**