我正在使用的系统已经使用ical4j库将用户的google日历与我们的内置日历同步了一段时间,并且可以正常工作,直到几个星期前他们的日历停止同步。快速查看日志将显示以下堆栈跟踪:

=75213399 2016-01-15 14:37:33,574 [task-scheduler-5] INFO  org.springframework.integration.mail.ImapMailReceiver  - attempting to receive mail from folder [INBOX]
=75214067 2016-01-15 14:37:34,242 [calendar-9] INFO  com.starfish.batch.integration.GoogleCalendarParser  - Using temp dir /var/log/starfish/starfish-batch-stage
=75214070 2016-01-15 14:37:34,245 [calendar-9] ERROR com.starfish.batch.integration.GoogleCalendarParser  - Exception getting user google cal for 4829on try number 2 trying again.
net.fortuna.ical4j.data.ParserException: Error at line 841:Invalid parameter name: FILENAME
    at net.fortuna.ical4j.data.CalendarParserImpl.parse(CalendarParserImpl.java:148)
    at net.fortuna.ical4j.data.CalendarBuilder.build(CalendarBuilder.java:211)
    at net.fortuna.ical4j.data.CalendarBuilder.build(CalendarBuilder.java:192)
    at.....


我使用了基于同一库的在线ical验证工具(http://severinghaus.org/projects/icv/)来验证错误。

ical产生解析异常的部分是(省略了客户端信息):

ATTACH;FILENAME=Reading Day Holiday Lunch 2015.docx:https://drive.google.co
 m/a/ZZZZ.edu/file/d/ZZZZZZZZZZZZZZZZZZZZZZZZ/view?usp=drive_web


我们的系统使用ical4j版本1.0-rc3-SNAPSHOT。

我研究了google是否更改了其生成文档的方式,但是找不到任何东西。我可能在错误的地方搜索。有人遇到过这个问题吗?如果是,该如何解决?

有谁知道谷歌所做的任何更改都会导致此异常?

用户的附件位置是否与此有关?

最佳答案

默认情况下,ical4j严格遵守RFC5545中定义的默认注册属性集。这意味着未在RFC5545中定义的任何属性或参数都应以X-作为前缀。

您正在使用的特定参数(FILENAME)已作为https://tools.ietf.org/html/draft-daboo-caldav-attachments-03#section-4.2的一部分添加。

为了克服这个问题,您需要设置

ical4j.parsing.relaxed = true

可以在ical4j.properties中(它本身应该在ical4j.jar jar文件的根目录中)或作为系统属性。

现在,我不是100%确定您使用的ical4j版本是否为此包含正确的修复程序,因此您可能还想从https://github.com/ical4j/ical4j升级到更高版本。

10-05 21:14