diff --git a/xxl-job-admin/src/main/java/com/xxl/job/admin/core/thread/JobCompleteHelper.java b/xxl-job-admin/src/main/java/com/xxl/job/admin/core/thread/JobCompleteHelper.java index 5698926a..57f4b632 100644 --- a/xxl-job-admin/src/main/java/com/xxl/job/admin/core/thread/JobCompleteHelper.java +++ b/xxl-job-admin/src/main/java/com/xxl/job/admin/core/thread/JobCompleteHelper.java @@ -9,6 +9,7 @@ import com.xxl.job.core.biz.model.ReturnT; import com.xxl.job.core.util.DateUtil; import org.slf4j.Logger; import org.slf4j.LoggerFactory; +import org.springframework.util.CollectionUtils; import java.util.Date; import java.util.List; @@ -21,7 +22,7 @@ import java.util.concurrent.*; */ public class JobCompleteHelper { private static Logger logger = LoggerFactory.getLogger(JobCompleteHelper.class); - + private static JobCompleteHelper instance = new JobCompleteHelper(); public static JobCompleteHelper getInstance(){ return instance; @@ -98,15 +99,15 @@ public class JobCompleteHelper { } } - try { - TimeUnit.SECONDS.sleep(60); - } catch (Exception e) { - if (!toStop) { - logger.error(e.getMessage(), e); - } - } + try { + TimeUnit.SECONDS.sleep(60); + } catch (Exception e) { + if (!toStop) { + logger.error(e.getMessage(), e); + } + } - } + } logger.info(">>>>>>>>>>> xxl-job, JobLosedMonitorHelper stop"); @@ -136,10 +137,15 @@ public class JobCompleteHelper { // ---------------------- helper ---------------------- public ReturnT callback(List callbackParamList) { + // If the collection is null, a null exception is thrown + if (CollectionUtils.isEmpty(callbackParamList)) { + return ReturnT.SUCCESS; + } callbackThreadPool.execute(new Runnable() { @Override public void run() { + // If the collection is null, a null exception is thrown for (HandleCallbackParam handleCallbackParam: callbackParamList) { ReturnT callbackResult = callback(handleCallbackParam); logger.debug(">>>>>>>>> JobApiController.callback {}, handleCallbackParam={}, callbackResult={}", diff --git a/xxl-job-admin/src/test/java/com/xxl/job/adminbiz/AdminBizTest.java b/xxl-job-admin/src/test/java/com/xxl/job/adminbiz/AdminBizTest.java index 6fb89e7f..c63607b0 100644 --- a/xxl-job-admin/src/test/java/com/xxl/job/adminbiz/AdminBizTest.java +++ b/xxl-job-admin/src/test/java/com/xxl/job/adminbiz/AdminBizTest.java @@ -7,8 +7,10 @@ import com.xxl.job.core.biz.model.RegistryParam; import com.xxl.job.core.biz.model.ReturnT; import com.xxl.job.core.context.XxlJobContext; import com.xxl.job.core.enums.RegistryConfig; +import com.xxl.job.core.util.GsonTool; import org.junit.jupiter.api.Test; +import javax.servlet.http.HttpServletRequest; import java.util.Arrays; import java.util.List; @@ -72,4 +74,32 @@ public class AdminBizTest { } + /** + * + * {@link com.xxl.job.admin.controller.JobApiController#api(HttpServletRequest, String, String)} + * if ("callback".equals(uri)) + * + * ERROR c.x.j.a.c.r.WebExceptionResolver - WebExceptionResolver:{} + * java.lang.NullPointerException: null + * at com.xxl.job.admin.service.impl.AdminBizImpl.callback(AdminBizImpl.java:67) + * at com.xxl.job.admin.service.impl.AdminBizImpl.callback(AdminBizImpl.java:47) + * at com.xxl.job.admin.controller.JobApiController.api(JobApiController.java:59) + * + * @throws Exception + */ + @Test + public void callbackNullException() throws Exception { + String data1 = ""; + + List callbackParamList1 = GsonTool.fromJson(data1, List.class, HandleCallbackParam.class); + + try { + for (HandleCallbackParam handleCallbackParam : callbackParamList1) { + System.out.println("item:"+handleCallbackParam); + } + } catch (Exception e) { + System.out.println(e.getMessage()); + } + + } }