diff --git a/service/scheduler/quartz/src/main/java/org/eclipse/kapua/service/scheduler/quartz/driver/QuartzTriggerDriver.java b/service/scheduler/quartz/src/main/java/org/eclipse/kapua/service/scheduler/quartz/driver/QuartzTriggerDriver.java index a42423e0601..f02bfde19f1 100644 --- a/service/scheduler/quartz/src/main/java/org/eclipse/kapua/service/scheduler/quartz/driver/QuartzTriggerDriver.java +++ b/service/scheduler/quartz/src/main/java/org/eclipse/kapua/service/scheduler/quartz/driver/QuartzTriggerDriver.java @@ -13,6 +13,7 @@ package org.eclipse.kapua.service.scheduler.quartz.driver; import com.google.common.base.Strings; +import org.eclipse.kapua.KapuaIllegalArgumentException; import org.eclipse.kapua.KapuaIllegalNullArgumentException; import org.eclipse.kapua.commons.model.id.KapuaEid; import org.eclipse.kapua.model.id.KapuaId; @@ -28,6 +29,7 @@ import org.eclipse.kapua.service.scheduler.quartz.job.KapuaJobLauncher; import org.eclipse.kapua.service.scheduler.trigger.Trigger; import org.eclipse.kapua.service.scheduler.trigger.definition.TriggerProperty; +import org.quartz.CronExpression; import org.quartz.CronScheduleBuilder; import org.quartz.JobBuilder; import org.quartz.JobDataMap; @@ -45,6 +47,7 @@ import org.slf4j.LoggerFactory; import javax.validation.constraints.NotNull; +import java.text.ParseException; import java.util.Date; import java.util.TimeZone; @@ -114,7 +117,7 @@ public static void createIntervalJobTrigger(@NotNull Trigger trigger) throws Kap } - public static void createCronJobTrigger(@NotNull Trigger trigger) throws KapuaIllegalNullArgumentException, QuartzTriggerDriverException { + public static void createCronJobTrigger(@NotNull Trigger trigger) throws KapuaIllegalArgumentException, QuartzTriggerDriverException { String cron = null; for (TriggerProperty tp : trigger.getTriggerProperties()) { @@ -128,12 +131,22 @@ public static void createCronJobTrigger(@NotNull Trigger trigger) throws KapuaIl throw new KapuaIllegalNullArgumentException("cronExpression"); } - createQuartzTriggerWithSchedule( - trigger, - CronScheduleBuilder.cronSchedule(cron) - .withMisfireHandlingInstructionFireAndProceed() // This option force a misfired trigger to be always fired - .inTimeZone(TimeZone.getTimeZone("UTC")) - ); + CronExpression cronExpression; + try { + cronExpression = new CronExpression(cron); + } + catch (ParseException pe) { + LOG.warn("Error while parsing cron {} expression for Trigger {} in scope {}", cron, trigger.getId(), trigger.getScopeId(), pe); + throw new KapuaIllegalArgumentException("cronExpression", cron); + } + + CronScheduleBuilder cronScheduleBuilder = + CronScheduleBuilder + .cronSchedule(cronExpression) + .withMisfireHandlingInstructionFireAndProceed() // This option force a misfired trigger to be always fired + .inTimeZone(TimeZone.getTimeZone("UTC")); + + createQuartzTriggerWithSchedule(trigger, cronScheduleBuilder); } public static void deleteTrigger(@NotNull Trigger trigger) throws CannotUnscheduleJobException { diff --git a/service/scheduler/test/src/test/resources/features/SchedulerService.feature b/service/scheduler/test/src/test/resources/features/SchedulerService.feature index 21be9a7e6fc..3b5dc1736d1 100644 --- a/service/scheduler/test/src/test/resources/features/SchedulerService.feature +++ b/service/scheduler/test/src/test/resources/features/SchedulerService.feature @@ -127,7 +127,7 @@ Feature: Scheduler Service And A regular trigger creator with the name "schedule0" is created And The trigger is set to start today at "10:00" Then I set cron expression to "12 1 ? ? *" - And I expect the exception "KapuaException" with the text "*" + And I expect the exception "KapuaIllegalArgumentException" with the text "An illegal value was provided for the argument cronExpression" And I create a new trigger from the existing creator with previously defined date properties Then An exception was thrown