Jelajahi Sumber

fix #537 : remove npe from ContainerNotAvailableException

Shinsuke Sugaya 9 tahun lalu
induk
melakukan
26df9e49b0

+ 17 - 1
src/main/java/org/codelibs/fess/exception/ContainerNotAvailableException.java

@@ -19,8 +19,24 @@ public class ContainerNotAvailableException extends FessSystemException {
 
     private static final long serialVersionUID = 1L;
 
+    private String componentName;
+
+    public ContainerNotAvailableException(final String componentName) {
+        super(componentName + " is not available.");
+    }
+
+    public ContainerNotAvailableException(final String componentName, final Throwable cause) {
+        super(componentName + " is not available.", cause);
+        this.componentName = componentName;
+    }
+
     public ContainerNotAvailableException(final Throwable cause) {
-        super(cause);
+        super("Container is not avaiable.");
+        this.componentName = "container";
+    }
+
+    public String getComponentName() {
+        return componentName;
     }
 
 }

+ 10 - 0
src/main/java/org/codelibs/fess/indexer/IndexUpdater.java

@@ -40,6 +40,7 @@ import org.codelibs.fess.crawler.util.EsResultList;
 import org.codelibs.fess.es.client.FessEsClient;
 import org.codelibs.fess.es.log.exbhv.ClickLogBhv;
 import org.codelibs.fess.es.log.exbhv.FavoriteLogBhv;
+import org.codelibs.fess.exception.ContainerNotAvailableException;
 import org.codelibs.fess.exception.FessSystemException;
 import org.codelibs.fess.helper.IndexingHelper;
 import org.codelibs.fess.helper.IntervalControlHelper;
@@ -287,9 +288,18 @@ public class IndexUpdater extends Thread {
             if (logger.isDebugEnabled()) {
                 logger.debug("Finished indexUpdater.");
             }
+        } catch (final ContainerNotAvailableException e) {
+            if (logger.isDebugEnabled()) {
+                logger.error("IndexUpdater is terminated.", e);
+            } else if (logger.isInfoEnabled()) {
+                logger.info("IndexUpdater is terminated.");
+            }
+            forceStop();
         } catch (final Throwable t) {
             if (ComponentUtil.available()) {
                 logger.error("IndexUpdater is terminated.", t);
+            } else if (logger.isDebugEnabled()) {
+                logger.error("IndexUpdater is terminated.", t);
             } else if (logger.isInfoEnabled()) {
                 logger.info("IndexUpdater is terminated.");
             }

+ 13 - 2
src/main/java/org/codelibs/fess/util/ComponentUtil.java

@@ -61,8 +61,11 @@ import org.lastaflute.di.core.factory.SingletonLaContainerFactory;
 import org.lastaflute.di.core.smart.hot.HotdeployUtil;
 import org.lastaflute.job.JobManager;
 import org.lastaflute.web.servlet.request.RequestManager;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 
 public final class ComponentUtil {
+    private static final Logger logger = LoggerFactory.getLogger(ComponentUtil.class);
 
     private static final String PERMISSION_HELPER = "permissionHelper";
 
@@ -345,7 +348,11 @@ public final class ComponentUtil {
         try {
             return SingletonLaContainer.getComponent(clazz);
         } catch (final NullPointerException e) {
-            throw new ContainerNotAvailableException(e);
+            if (logger.isDebugEnabled()) {
+                throw new ContainerNotAvailableException(clazz.getCanonicalName(), e);
+            } else {
+                throw new ContainerNotAvailableException(clazz.getCanonicalName());
+            }
         }
     }
 
@@ -353,7 +360,11 @@ public final class ComponentUtil {
         try {
             return SingletonLaContainer.getComponent(componentName);
         } catch (final NullPointerException e) {
-            throw new ContainerNotAvailableException(e);
+            if (logger.isDebugEnabled()) {
+                throw new ContainerNotAvailableException(componentName, e);
+            } else {
+                throw new ContainerNotAvailableException(componentName);
+            }
         }
     }