1

ical4jを使用してicsファイルからカレンダーをインポートする次のコードがあります。

CalendarBuilder calendarBuilder = new CalendarBuilder();
CompatibilityHints.setHintEnabled(CompatibilityHints.KEY_RELAXED_UNFOLDING, true);
net.fortuna.ical4j.model.Calendar iCalendar;
try {
  iCalendar = calendarBuilder.build(icalInputStream);
} catch (ParserException e) {
  if (logger.isDebugEnabled()) {
    logger.debug("ParserException occurs when building iCalendar object", e);
  }
  throw new ParserException("Cannot parsed the input stream to iCalendar object", e.getLineNo());
}   

コードは常に ParserException をスローします。ics ファイルのこの行から X-RESPONSE-COMMENT を削除すると、コードが次のようにパスすることがわかりました。

ATTENDEE;CUTYPE=INDIVIDUAL;ROLE=REQ-PARTICIPANT;PARTSTAT=TENTATIVE;CN=abc
def;X-NUM-GUESTS=0;X-RESPONSE-COMMENT="JUGSummerCamp.
Si j'arrive à trouver un coin tranquille, je viendrais.":mailto:
abc@gmail.com

したがって、問題は X-RESPONSE-COMMENT に起因する可能性があります。誰でも助けることができますか?ありがとう。

更新: 正確な例外は次のとおりです。

Caused by: java.net.URISyntaxException: Illegal character in path at index 2: Si j'arrive à trouver un coin tranquille, je viendrais.":mailto:slemeur@exoplatform.com
at java.net.URI$Parser.fail(URI.java:2810)
at java.net.URI$Parser.checkChars(URI.java:2983)
at java.net.URI$Parser.parseHierarchical(URI.java:3067)
at java.net.URI$Parser.parse(URI.java:3025)
at java.net.URI.<init>(URI.java:577)
at net.fortuna.ical4j.util.Uris.create(Uris.java:108)
at net.fortuna.ical4j.model.property.Attendee.setValue(Attendee.java:108)
at net.fortuna.ical4j.data.CalendarBuilder.propertyValue(CalendarBuilder.java:294)
at net.fortuna.ical4j.data.CalendarParserImpl.parseProperty(CalendarParserImpl.java:236)
at net.fortuna.ical4j.data.CalendarParserImpl.parsePropertyList(CalendarParserImpl.java:167)
at net.fortuna.ical4j.data.CalendarParserImpl.parseComponent(CalendarParserImpl.java:334)
at net.fortuna.ical4j.data.CalendarParserImpl.parsePropertyList(CalendarParserImpl.java:164)
at net.fortuna.ical4j.data.CalendarParserImpl.parse(CalendarParserImpl.java:107)
... 31 more

不正な文字を含む行は、ATTENDEE プロパティの最後の行です。ありがとう。

4

1 に答える 1

1

X-RESPONSE-COMMENT パラメータ値には、空白が続かない CRLF (または LF) があります。

JUGSummerCamp.<CRLF>Si j&#39;arrive &agrave; trouver un coin tranquille, je viendrais.

結果として、CRLF は行折りシーケンスとしてではなく、通常の文字シーケンスとして扱われます。ただし、RFC5545 によると、パラメーター値に制御文字を使用することはできません ( https://www.rfc-editor.org/rfc/rfc5545#section-3.1を参照)。

そのため、CRLF の前にスペースを追加する (折り畳み行にする) か、完全に削除することができます (ただし、行を別の場所で折り畳む必要がある場合があります - 行の最大長は 75 文字です)。

これは、意図した改行が失われることも意味します。比較的最近の RFC ( RFC6868 ) があり、パラメーター値で書式設定されたテキストの改行を許可する新しいエンコーディングが導入されていますが、私が覚えている限り、ical4j はまだサポートしていません。明らかに、あなたの icalendar ストリームを最初に生成したソフトウェアも、この RFC をサポートしていません。

于 2013-04-08T16:22:53.127 に答える