Skip to content

Commit ebf3e5d

Browse files
committed
Return bad request if job type is not registered
1 parent 3ff248d commit ebf3e5d

File tree

4 files changed

+23
-2
lines changed

4 files changed

+23
-2
lines changed

IntegrationEngine/Api/Controllers/CronTriggerController.cs

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -44,6 +44,8 @@ public IHttpActionResult PutCronTrigger(string id, CronTrigger trigger)
4444
{
4545
if (id != trigger.Id)
4646
return BadRequest();
47+
if (!EngineScheduler.IsJobTypeRegistered(trigger.JobType))
48+
return BadRequest("Job type is invalid: " + trigger.JobType);
4749
if (!trigger.CronExpressionString.IsValidCronExpression())
4850
return BadRequest("Cron expression is not valid: " + trigger.CronExpressionString);
4951
Repository.Update(trigger);
@@ -55,6 +57,8 @@ public IHttpActionResult PutCronTrigger(string id, CronTrigger trigger)
5557
[ResponseType(typeof(CronTrigger))]
5658
public IHttpActionResult PostCronTrigger(CronTrigger trigger)
5759
{
60+
if (!EngineScheduler.IsJobTypeRegistered(trigger.JobType))
61+
return BadRequest("Job type is invalid: " + trigger.JobType);
5862
if (!trigger.CronExpressionString.IsValidCronExpression())
5963
return BadRequest("Cron expression is not valid: " + trigger.CronExpressionString);
6064
var triggerWithId = Repository.Insert(trigger);

IntegrationEngine/Api/Controllers/SimpleTriggerController.cs

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -50,6 +50,8 @@ public IHttpActionResult PutSimpleTrigger(string id, SimpleTrigger trigger)
5050
{
5151
if (id != trigger.Id)
5252
return BadRequest();
53+
if (!EngineScheduler.IsJobTypeRegistered(trigger.JobType))
54+
return BadRequest("Job type is invalid: " + trigger.JobType);
5355
Repository.Update(trigger);
5456
EngineScheduler.ScheduleJobWithSimpleTrigger(trigger);
5557
return StatusCode(HttpStatusCode.NoContent);
@@ -59,6 +61,8 @@ public IHttpActionResult PutSimpleTrigger(string id, SimpleTrigger trigger)
5961
[ResponseType(typeof(SimpleTrigger))]
6062
public IHttpActionResult PostSimpleTrigger(SimpleTrigger trigger)
6163
{
64+
if (!EngineScheduler.IsJobTypeRegistered(trigger.JobType))
65+
return BadRequest("Job type is invalid: " + trigger.JobType);
6266
var triggerWithId = Repository.Insert(trigger);
6367
EngineScheduler.ScheduleJobWithSimpleTrigger(triggerWithId);
6468
return CreatedAtRoute("DefaultApi", new { id = triggerWithId.Id }, triggerWithId);

IntegrationEngine/Scheduler/EngineScheduler.cs

Lines changed: 13 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,17 @@ public void Start()
2222
Scheduler.Start();
2323
}
2424

25+
public Type GetRegisteredJobTypeByName(string jobTypeName)
26+
{
27+
var jobTypes = IntegrationJobTypes.Where(x => x.FullName == jobTypeName);
28+
return jobTypes.Any() ? jobTypes.Single() : null;
29+
}
30+
31+
public bool IsJobTypeRegistered(string jobTypeName)
32+
{
33+
return GetRegisteredJobTypeByName(jobTypeName) != null;
34+
}
35+
2536
public IJobDetail JobDetailFactory(Type jobType)
2637
{
2738
var integrationJob = Activator.CreateInstance(jobType) as IIntegrationJob;
@@ -36,15 +47,15 @@ public IJobDetail JobDetailFactory(Type jobType)
3647

3748
public virtual void ScheduleJobWithCronTrigger(CronTrigger triggerDefinition)
3849
{
39-
var jobType = IntegrationJobTypes.Where(x => x.FullName == triggerDefinition.JobType).First();
50+
var jobType = GetRegisteredJobTypeByName(triggerDefinition.JobType);
4051
var jobDetail = JobDetailFactory(jobType);
4152
var trigger = CronTriggerFactory(triggerDefinition, jobType, jobDetail);
4253
TryScheduleJobWithTrigger(trigger, jobType, jobDetail);
4354
}
4455

4556
public void ScheduleJobWithSimpleTrigger(SimpleTrigger triggerDefinition)
4657
{
47-
var jobType = IntegrationJobTypes.Where(x => x.FullName == triggerDefinition.JobType).First();
58+
var jobType = GetRegisteredJobTypeByName(triggerDefinition.JobType);
4859
var jobDetail = JobDetailFactory(jobType);
4960
var trigger = SimpleTriggerFactory(triggerDefinition, jobType, jobDetail);
5061
TryScheduleJobWithTrigger(trigger, jobType, jobDetail);

IntegrationEngine/Scheduler/IEngineScheduler.cs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,5 +10,7 @@ public interface IEngineScheduler
1010
void Start();
1111
void ScheduleJobWithCronTrigger(CronTrigger triggerDefinition);
1212
void ScheduleJobWithSimpleTrigger(SimpleTrigger triggerDefinition);
13+
bool IsJobTypeRegistered(string jobTypeName);
14+
Type GetRegisteredJobTypeByName(string jobTypeName);
1315
}
1416
}

0 commit comments

Comments
 (0)