Apple iCloud Calendarに照会するのにSardineを使用しようとしています。しかし、Sardineが適切に応答を解析していないように思えます。SardineがCalDavの応答を解析できない
これは私のCalDAV時間範囲クエリです:
<?xml version="1.0" encoding="utf-8" ?>
<c:calendar-query xmlns:d="DAV:" xmlns:c="urn:ietf:params:xml:ns:caldav">
<d:prop>
<d:getetag/>
<c:calendar-data/>
</d:prop>
<c:filter>
<c:comp-filter name="VCALENDAR">
<c:comp-filter name="VEVENT">
<c:time-range start="20170501T000000Z" end="20170630T000000Z"/>
</c:comp-filter>
</c:comp-filter>
</c:filter>
</c:calendar-query>
HTTPクライアント(不眠症)を使用して、このクエリを焼成した場合、私は何の問題もなく私の3つのテストイベントで私の返事をもらいます。
<?xml version='1.0' encoding='UTF-8'?>
<multistatus
xmlns='DAV:'>
<response>
<href>/2003926771/calendars/home/DF4C980C-C189-4DAB-80CE-991A4636593D.ics</href>
<propstat>
<prop>
<getetag>"[email protected]=974e7f83-44fb-4eb2-8386-46012509f5af"</getetag>
<calendar-data
xmlns='urn:ietf:params:xml:ns:caldav'>
<![CDATA[BEGIN:VCALENDAR
VERSION:2.0
BEGIN:VEVENT
UID:DF4C980C-C189-4DAB-80CE-991A4636593D
DTSTART;TZID=Europe/Zurich:20170522T150000
DTEND;TZID=Europe/Zurich:20170522T160000
SUMMARY:Test event
END:VEVENT
END:VCALENDAR
]]>
</calendar-data>
</prop>
<status>HTTP/1.1 200 OK</status>
</propstat>
</response>
<response>
<href>/2003926771/calendars/home/4A9F9785-A8A4-4E61-A600-D5A5C041950E.ics</href>
<propstat>
<prop>
<getetag>"[email protected]=974e7f83-44fb-4eb2-8386-46012509f5af"</getetag>
<calendar-data
xmlns='urn:ietf:params:xml:ns:caldav'>
<![CDATA[BEGIN:VCALENDAR
VERSION:2.0
PRODID:-//CALENDARSERVER.ORG//NONSGML Version 1//EN
BEGIN:VEVENT
UID:4A9F9785-A8A4-4E61-A600-D5A5C041950E
DTSTART;TZID=Europe/Zurich:20170601T120000
DTEND;TZID=Europe/Zurich:20170601T130000
SUMMARY:test event in June
END:VEVENT
END:VCALENDAR
]]>
</calendar-data>
</prop>
<status>HTTP/1.1 200 OK</status>
</propstat>
</response>
<response>
<href>/2003926771/calendars/home/33D1A876-87E6-4165-8AE6-EDD2FA588964.ics</href>
<propstat>
<prop>
<getetag>"[email protected]=974e7f83-44fb-4eb2-8386-46012509f5af"</getetag>
<calendar-data
xmlns='urn:ietf:params:xml:ns:caldav'>
<![CDATA[BEGIN:VCALENDAR
VERSION:2.0
PRODID:-//CALENDARSERVER.ORG//NONSGML Version 1//EN
BEGIN:VEVENT
UID:33D1A876-87E6-4165-8AE6-EDD2FA588964
DTSTART;TZID=Europe/Zurich:20170530T120000
DTEND;TZID=Europe/Zurich:20170530T130000
LAST-MODIFIED:20170530T071831Z
SUMMARY:another test event
END:VEVENT
END:VCALENDAR
]]>
</calendar-data>
</prop>
<status>HTTP/1.1 200 OK</status>
</propstat>
</response>
</multistatus>
しかし、私はイワシ報告書を通じて、まったく同じクエリを送信するとき、私はcalendat-data
内容を読み取ることができないです:私は)それを短くするカレンダーデータの一部を削除しますのでご注意ください。
さらに詳しくは、以下のコードを実行すると、getAny
は空のリストを返します。私のGoogleの調査によると、これはpropの下にxmlノードを持つリストを含んでいるはずです(いくつかの事前定義されたもの以外のノードで、Propの下に別のオブジェクトの下に格納されています、etag
のように)。
@Override
public List<VEvent> fromMultistatus(Multistatus multistatus) {
List<VEvent> events = new ArrayList<>(multistatus.getResponse().size());
for (Response response : multistatus.getResponse()) {
for (Propstat propstat : response.getPropstat()) {
System.out.println(propstat.getProp().getAny().get(0).getFirstChild().getTextContent());
}
}
return events;
}
私はさらに応答を含むmultistatus
オブジェクト全体をデバッグしました。私のカレンダーデータの信号はありません。
サディインとは何ですか? – hnh
[Sardine](https://github.com/lookfirst/sardine)はJava WebDavクライアントライブラリです。 CalDavベースのサーバーにアクセスするためのJavaライブラリを探すときに見つけました。 caldav4jがもう古くて、もうメンテナンスされていないようだから、プロトコルの面で「一段階下がって」、WebDavライブラリを探すことに決めました。 [Apache's Jack Rabbit wiki](https://wiki.apache.org/jackrabbit/WebDAV)のSardineを使用するための推奨が見つかりました –
他の投稿でも見つけました。 [投稿へのリンク](https://stackoverflow.com/questions/38057038/using-sardines-report-method-to-query-events-from-caldav-server) –