Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Quartz Cron Year Pattern is not fully supported - i.e. increments on years are not supported #154

Closed
meincs opened this issue Feb 20, 2017 · 3 comments

Comments

@meincs
Copy link
Contributor

meincs commented Feb 20, 2017

The Quartz cron expression specification allows increments for the year field, see
http://www.quartz-scheduler.org/documentation/quartz-1.x/tutorials/crontrigger

e.g.
even years starting from 2017, year field => 2018/2
even years starting from 2017 until 2027 => 2018-2026/2
every decade starting from 2017, year field => 2017/10

Currently the use of yearly increments results in an exception:

Exception in thread "main" java.lang.IllegalArgumentException: Failed to parse '0 0 0 ? * 1 2017/10'. Value 10 not in range [1970, 2099]
	at com.cronutils.parser.CronParser.parse(CronParser.java:95)
Caused by: java.lang.IllegalArgumentException: Value 10 not in range [1970, 2099]
	at com.cronutils.model.field.expression.visitor.ValidationFieldExpressionVisitor.isInRange(ValidationFieldExpressionVisitor.java:152)
	at com.cronutils.model.field.expression.visitor.ValidationFieldExpressionVisitor.visit(ValidationFieldExpressionVisitor.java:119)
	at com.cronutils.model.field.expression.visitor.ValidationFieldExpressionVisitor.visit(ValidationFieldExpressionVisitor.java:60)
	at com.cronutils.model.field.expression.FieldExpression.accept(FieldExpression.java:42)
	at com.cronutils.model.Cron.validate(Cron.java:81)
	at com.cronutils.parser.CronParser.parse(CronParser.java:93)
	... 2 more
@jmrozanec
Copy link
Owner

@meincs thank you for reporting this. May we ask you to contribute a test for this bug? We will be eager to merge it back to master. Thanks!

@meincs
Copy link
Contributor Author

meincs commented Feb 21, 2017

   @Test
    public void supportQuartzCronExpressionIncrementsOnYears() {
        final String[] sampleCronExpressions = {
                "0 0 0 1 * ? 2017/2",
                "0 0 0 1 * ? 2017/3",
                "0 0 0 1 * ? 2017/10",
                "0 0 0 1 * ? 2017-2047/2",
        };

        final CronParser quartzCronParser = new CronParser(CronDefinitionBuilder.instanceDefinitionFor(CronType.QUARTZ));
        try {
            for (final String cronExpression: sampleCronExpressions) {
                final Cron quartzCron = quartzCronParser.parse(cronExpression);
                quartzCron.validate();
            }
        }
        catch (final IllegalArgumentException exceptionNotToThrow) {
            fail("WHOOPS! Threw IllegalArgumentException: " + exceptionNotToThrow.getMessage());
        }
    }

If parsing no longer fails, additional tests on semantics can be provided.

@jmrozanec
Copy link
Owner

@meincs seems to be a duplicate of #148. Will close this one and continue on the original report issue.

@jmrozanec jmrozanec added this to the 6.0.0-SNAPSHOT milestone Mar 11, 2017
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests

2 participants