ical4j
ical4j copied to clipboard
NullPointerException when calculating recurrence set
Hi,
I tried to generate recurrence set for this event and it seems like the frequency minutely (same for secondly and hourly) fails on NullPointerException when using BYDAY property, but according to doc it should work.
I was expecting that this will generate events every 15 minutes from 13:30 to 16:30 every Wednesday.
Thanks
BEGIN:VCALENDAR
VERSION:2.0
CALSCALE:GREGORIAN
BEGIN:VEVENT
DTSTAMP:20210225T141856Z
DTSTART:20210104T130000Z
SUMMARY:even
UID:9aaf74fd-b0d6-4958-84c1-01ee9e8e9eac
RRULE:FREQ=MINUTELY;INTERVAL=15;BYDAY=WE;BYHOUR=13,14,15,16
EXRULE:FREQ=MINUTELY;INTERVAL=15;BYHOUR=16;BYMINUTE=30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59
EXRULE:FREQ=MINUTELY;INTERVAL=15;BYHOUR=13;BYMINUTE=0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29
END:VEVENT
END:VCALENDAR
Exception in thread "main" java.lang.NullPointerException
at net.fortuna.ical4j.transform.recurrence.ByDayRule.transform(ByDayRule.java:41)
at net.fortuna.ical4j.transform.recurrence.ByDayRule.transform(ByDayRule.java:19)
at net.fortuna.ical4j.model.Recur.getCandidates(Recur.java:924)
at net.fortuna.ical4j.model.Recur.getDates(Recur.java:736)
at net.fortuna.ical4j.model.Recur.getDates(Recur.java:643)
at net.fortuna.ical4j.model.Component.lambda$calculateRecurrenceSet$11(Component.java:362)
at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:195)
at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1655)
at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:484)
at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:474)
at java.base/java.util.stream.ReduceOps$ReduceOp.evaluateSequential(ReduceOps.java:913)
at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234)
at java.base/java.util.stream.ReferencePipeline.collect(ReferencePipeline.java:578)
at net.fortuna.ical4j.model.Component.calculateRecurrenceSet(Component.java:364)
at app.Application.generateEvents(main.java:85)
at app.Application.main(main.java:71)

Update: This code should help to reproduce it. application.zip
In my opinion, this method in Recur.java should not return null for other frequencies than daily, weekly, monthly, yearly, when in documentation also secondly, minutely and hourly are supported.
private Frequency deriveFilterType() {
if (frequency == Frequency.DAILY || !getYearDayList().isEmpty() || !getMonthDayList().isEmpty()) {
return Frequency.DAILY;
} else if (frequency == Frequency.WEEKLY || !getWeekNoList().isEmpty()) {
return Frequency.WEEKLY;
} else if (frequency == Frequency.MONTHLY || !getMonthList().isEmpty()) {
return Frequency.MONTHLY;
} else if (frequency == Frequency.YEARLY) {
return Frequency.YEARLY;
}
return null;
}