Browse Source

NPE隐患处理。

xuxueli 5 years ago
parent
commit
6e86a7e499

+ 49 - 46
xxl-job-core/src/main/java/com/xxl/job/core/executor/impl/XxlJobSpringExecutor.java

@@ -78,59 +78,62 @@ public class XxlJobSpringExecutor extends XxlJobExecutor implements ApplicationC
 
         // init job handler from method
         String[] beanDefinitionNames = applicationContext.getBeanDefinitionNames();
-        for (String beanDefinitionName : beanDefinitionNames) {
-            Object bean = applicationContext.getBean(beanDefinitionName);
-            Method[] methods = bean.getClass().getDeclaredMethods();
-            for (Method method: methods) {
-                XxlJob xxlJob = AnnotationUtils.findAnnotation(method, XxlJob.class);
-                if (xxlJob != null) {
-
-                    // name
-                    String name = xxlJob.value();
-                    if (name.trim().length() == 0) {
-                        throw new RuntimeException("xxl-job method-jobhandler name invalid, for[" + bean.getClass() + "#"+ method.getName() +"] .");
-                    }
-                    if (loadJobHandler(name) != null) {
-                        throw new RuntimeException("xxl-job jobhandler[" + name + "] naming conflicts.");
-                    }
+        if (beanDefinitionNames!=null && beanDefinitionNames.length>0) {
+            for (String beanDefinitionName : beanDefinitionNames) {
+                Object bean = applicationContext.getBean(beanDefinitionName);
+                Method[] methods = bean.getClass().getDeclaredMethods();
+                for (Method method: methods) {
+                    XxlJob xxlJob = AnnotationUtils.findAnnotation(method, XxlJob.class);
+                    if (xxlJob != null) {
+
+                        // name
+                        String name = xxlJob.value();
+                        if (name.trim().length() == 0) {
+                            throw new RuntimeException("xxl-job method-jobhandler name invalid, for[" + bean.getClass() + "#"+ method.getName() +"] .");
+                        }
+                        if (loadJobHandler(name) != null) {
+                            throw new RuntimeException("xxl-job jobhandler[" + name + "] naming conflicts.");
+                        }
 
-                    // execute method
-                    if (!(method.getParameterTypes()!=null && method.getParameterTypes().length==1 && method.getParameterTypes()[0].isAssignableFrom(String.class))) {
-                        throw new RuntimeException("xxl-job method-jobhandler param-classtype invalid, for[" + bean.getClass() + "#"+ method.getName() +"] , " +
-                                "The correct method format like \" public ReturnT<String> execute(String param) \" .");
-                    }
-                    if (!method.getReturnType().isAssignableFrom(ReturnT.class)) {
-                        throw new RuntimeException("xxl-job method-jobhandler return-classtype invalid, for[" + bean.getClass() + "#"+ method.getName() +"] , " +
-                                "The correct method format like \" public ReturnT<String> execute(String param) \" .");
-                    }
-                    method.setAccessible(true);
-
-                    // init and destory
-                    Method initMethod = null;
-                    Method destroyMethod = null;
-
-                    if(xxlJob.init().trim().length() > 0) {
-                        try {
-                            initMethod = bean.getClass().getDeclaredMethod(xxlJob.init());
-                            initMethod.setAccessible(true);
-                        } catch (NoSuchMethodException e) {
-                            throw new RuntimeException("xxl-job method-jobhandler initMethod invalid, for[" + bean.getClass() + "#"+ method.getName() +"] .");
+                        // execute method
+                        if (!(method.getParameterTypes()!=null && method.getParameterTypes().length==1 && method.getParameterTypes()[0].isAssignableFrom(String.class))) {
+                            throw new RuntimeException("xxl-job method-jobhandler param-classtype invalid, for[" + bean.getClass() + "#"+ method.getName() +"] , " +
+                                    "The correct method format like \" public ReturnT<String> execute(String param) \" .");
                         }
-                    }
-                    if(xxlJob.destroy().trim().length() > 0) {
-                        try {
-                            destroyMethod = bean.getClass().getDeclaredMethod(xxlJob.destroy());
-                            destroyMethod.setAccessible(true);
-                        } catch (NoSuchMethodException e) {
-                            throw new RuntimeException("xxl-job method-jobhandler destroyMethod invalid, for[" + bean.getClass() + "#"+ method.getName() +"] .");
+                        if (!method.getReturnType().isAssignableFrom(ReturnT.class)) {
+                            throw new RuntimeException("xxl-job method-jobhandler return-classtype invalid, for[" + bean.getClass() + "#"+ method.getName() +"] , " +
+                                    "The correct method format like \" public ReturnT<String> execute(String param) \" .");
+                        }
+                        method.setAccessible(true);
+
+                        // init and destory
+                        Method initMethod = null;
+                        Method destroyMethod = null;
+
+                        if(xxlJob.init().trim().length() > 0) {
+                            try {
+                                initMethod = bean.getClass().getDeclaredMethod(xxlJob.init());
+                                initMethod.setAccessible(true);
+                            } catch (NoSuchMethodException e) {
+                                throw new RuntimeException("xxl-job method-jobhandler initMethod invalid, for[" + bean.getClass() + "#"+ method.getName() +"] .");
+                            }
+                        }
+                        if(xxlJob.destroy().trim().length() > 0) {
+                            try {
+                                destroyMethod = bean.getClass().getDeclaredMethod(xxlJob.destroy());
+                                destroyMethod.setAccessible(true);
+                            } catch (NoSuchMethodException e) {
+                                throw new RuntimeException("xxl-job method-jobhandler destroyMethod invalid, for[" + bean.getClass() + "#"+ method.getName() +"] .");
+                            }
                         }
-                    }
 
-                    // registry jobhandler
-                    registJobHandler(name, new MethodJobHandler(bean, method, initMethod, destroyMethod));
+                        // registry jobhandler
+                        registJobHandler(name, new MethodJobHandler(bean, method, initMethod, destroyMethod));
+                    }
                 }
             }
         }
+
     }
 
     // ---------------------- applicationContext ----------------------