Google calendar api 如何使iCal4j在解析错误时不失败(如0000121T0000000Z)

Google calendar api 如何使iCal4j在解析错误时不失败(如0000121T0000000Z),google-calendar-api,ical4j,Google Calendar Api,Ical4j,我试图让iCal4j解析导出的Google.ics日历文件。不幸的是,解析器阻塞了特定值(000012311000000z)并抛出异常。我的问题是,如何让解析器在数据不好的情况下继续运行?我即将编辑源代码,但没有办法将其配置为不会在日期解析错误时失败 我使用的是ical4j-1.0.5-SNAPSHOT,我相信这是基于最新的代码 我的数据包含以下事件(似乎是重复发生的事件): 当它试图解析这个日期值(这似乎是一个胡说八道/糟糕的值)时,它就死了 我并不特别关心创建的字段是设置还是设置为伪值。我关

我试图让iCal4j解析导出的Google.ics日历文件。不幸的是,解析器阻塞了特定值(000012311000000z)并抛出异常。我的问题是,如何让解析器在数据不好的情况下继续运行?我即将编辑源代码,但没有办法将其配置为不会在日期解析错误时失败

我使用的是ical4j-1.0.5-SNAPSHOT,我相信这是基于最新的代码

我的数据包含以下事件(似乎是重复发生的事件):

当它试图解析这个日期值(这似乎是一个胡说八道/糟糕的值)时,它就死了

我并不特别关心创建的字段是设置还是设置为伪值。我关心的是解析器继续运行,而不是阻塞坏数据

我曾尝试将解析设置为放松,但不知何故,这种情况似乎没有发生

        CompatibilityHints.setHintEnabled(
            CompatibilityHints.KEY_RELAXED_PARSING, true);

那么,我怎样才能使这段代码更健壮地解析错误呢?我可以提供自己的解析器吗?我可以让它跳过有错误的记录吗?

我复制了CalendarBuilder类,并用try/catch包装了属性集方法,如下所示。我仍然有兴趣听到其他解决方案。我真的不喜欢复制整个类来修复这样的问题

    public void propertyValue(final String value)
            throws URISyntaxException, ParseException, IOException {

        assertProperty(property);

        try {
            if (property instanceof Escapable) {
                property.setValue(Strings.unescape(value));
            } else {
                property.setValue(value);
            }
        } catch (Exception e) {
            Logger.warn("Could not set propety: " + property.getName()
                    + " to " + value);
        }
    }

你有没有试过把这些都放在一起

ical4j.unfolding.relaxed=true
ical4j.parsing.relaxed=true
ical4j.validation.relaxed=true
ical4j.compatibility.outlook=true

这实际上是一种倒退。轻松解析应该涵盖这种情况。我刚刚在branch和tip()中都修复了它。

我只是尝试了这些,但仍然没有解决解析异常错误。尽管如此,还是感谢您的建议。1.0.5版的夜间睡眠可在以下位置获得:
    public void propertyValue(final String value)
            throws URISyntaxException, ParseException, IOException {

        assertProperty(property);

        try {
            if (property instanceof Escapable) {
                property.setValue(Strings.unescape(value));
            } else {
                property.setValue(value);
            }
        } catch (Exception e) {
            Logger.warn("Could not set propety: " + property.getName()
                    + " to " + value);
        }
    }
ical4j.unfolding.relaxed=true
ical4j.parsing.relaxed=true
ical4j.validation.relaxed=true
ical4j.compatibility.outlook=true