【问题标题】:iCal4j validation exception on empty calendar空日历上的 iCal4j 验证异常
【发布时间】:2012-05-28 22:06:06
【问题描述】:

我正在使用 iCal4j 库来生成 iCalendar 提要。

如果没有事件被添加到日历中(仅仅是因为没有任何即将发生的事件要添加),当需要将 iCalendar 数据写入输出流时,iCal4j 会引发验证异常:

net.fortuna.ical4j.model.ValidationException: Calendar must contain at least one component
    at net.fortuna.ical4j.model.Calendar.validate(Calendar.java:287)
    at net.fortuna.ical4j.model.Calendar.validate(Calendar.java:257)
    at net.fortuna.ical4j.data.CalendarOutputter.output(CalendarOutputter.java:96)
    at net.fortuna.ical4j.data.CalendarOutputter.output(CalendarOutputter.java:83)

那么根据 iCalendar 标准,没有事件的日历实际上是无效的,还是这只是 iCal4j 的验证过于严格? (如果后者适用,有什么办法可以放松验证?)

【问题讨论】:

    标签: icalendar ical4j


    【解决方案1】:

    从技术上讲,iCalendar 至少需要一个组件,如第 3.6 节所述:

    https://www.rfc-editor.org/rfc/rfc5545#section-3.6

       icalbody   = calprops component
    
       [snip..]
    
       component  = 1*(eventc / todoc / journalc / freebusyc /
                    timezonec / iana-comp / x-comp)
    

    您可以使用非验证 CalendarOutputter 来避免此异常,但目前无法在 iCal4j 中选择性地禁用空日历验证。

    【讨论】:

    • 感谢您的回答。您是否知道其他 ical feed 如何处理根本没有任何事件可添加的情况? (虽然我想我可以添加一些虚拟 x 组件来满足验证器...)
    • 我不确定其他实现如何处理空日历。我想如果他们接受空日历很常见,我们可以添加一个标志来选择性地关闭 ical4j 中的验证(为了兼容性)。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2010-12-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-11-01
    相关资源
    最近更新 更多