trying to get events from icloud calendar using java/com.github.caldav4j
19:13 07 May 2025

Using Java, I am trying to use com.github.caldav4j to download events from my iCloud calendar.

Using caldav4j i am successfully getting the principal_url and got a list of calendars and got the calender URL that i needed..

But now when I try to retrieve the events from the calendar i am getting a 400

A lot of articles say the 400 is an auth issue , but i am asssuming since I am using those same creds to get the calendar URL those creds are ok...

thanks in advance for any help.....

Trying to retrieve I first do

        ICAL_PROD_ID =  "-//Apple Inc.//iCloud Calendar//EN";

        //my calendar path is from the property find
        calendarPath = "/16*******/calendars/ad4****-****-481b-****-7f74****acfb/"

        this.calDAVCollection = new CalDAVCollection(
            calendarPath,
            httpHost,
            methodFactory,
            ICAL_PROD_ID);

I then do

            // Create calendar query directly instead of using GenerateQuery
        CalendarQuery calendarQuery = new CalendarQuery();

        // Create comp filter for VCALENDAR
        CompFilter calendarCompFilter = new CompFilter("VCALENDAR");

        // Create comp filter for VEVENT
        CompFilter eventCompFilter = new CompFilter(Component.VEVENT);

        // Set time range filter to specified dates
        DateTime startDateTime = new DateTime(startDate);
        DateTime endDateTime = new DateTime(endDate);
        TimeRange timeRange = new TimeRange(startDateTime, endDateTime);
        eventCompFilter.setTimeRange(timeRange);

        // Add VEVENT filter to VCALENDAR filter
        calendarCompFilter.addCompFilter(eventCompFilter);

        // Set the comp filter to the query
        calendarQuery.setCompFilter(calendarCompFilter);

        // Request calendar data
        CalendarData calendarData = new CalendarData();
        calendarQuery.setCalendarDataProp(calendarData);

        // Add debugging for query
        logger.debug("Executing calendar query for date range: {} to {}", startDate, endDate);



        // Execute the request using the collection's method
        List calendars = calDAVCollection.queryCalendars(httpClient, calendarQuery);

the error i get from calDAVCollection.queryCalendars is

            com.github.caldav4j.exceptions.CalDAV4JException: Problem executing method
            at com.github.caldav4j.CalDAVCollection.getCalDAVResources(CalDAVCollection.java:927) ~[caldav4j-1.0.5.jar:?]
            at com.github.caldav4j.CalDAVCollection.queryCalendars(CalDAVCollection.java:779) ~[caldav4j-1.0.5.jar:?]
            at com.unitnet.calendar.caldav.service.iCloudCalendarService.getEvents(iCloudCalendarService.java:189) ~[classes/:?]
            at com.unitnet.calendar.caldav.utils.CalDAVSyncThread.syncCalendar(CalDAVSyncThread.java:90) ~[classes/:?]
            at com.unitnet.calendar.caldav.utils.CalDAVSyncThread.run(CalDAVSyncThread.java:50) ~[classes/:?]
        Caused by: org.apache.jackrabbit.webdav.DavException
            at org.apache.jackrabbit.webdav.client.methods.BaseDavRequest.getResponseBodyAsMultiStatus(BaseDavRequest.java:93) ~[jackrabbit-webdav-2.20.3.jar:?]
            at com.github.caldav4j.CalDAVCollection.getCalDAVResources(CalDAVCollection.java:905) ~[caldav4j-1.0.5.jar:?]
            ... 4 more
        Caused by: java.io.IOException: XML parsing error
            at org.apache.jackrabbit.webdav.client.methods.BaseDavRequest.getResponseBodyAsDocument(BaseDavRequest.java:73) ~[jackrabbit-webdav-2.20.3.jar:?]
            at org.apache.jackrabbit.webdav.client.methods.BaseDavRequest.getResponseBodyAsMultiStatus(BaseDavRequest.java:87) ~[jackrabbit-webdav-2.20.3.jar:?]
            at com.github.caldav4j.CalDAVCollection.getCalDAVResources(CalDAVCollection.java:905) ~[caldav4j-1.0.5.jar:?]
            ... 4 more
        Caused by: org.xml.sax.SAXParseException: Premature end of file.
            at com.sun.org.apache.xerces.internal.util.ErrorHandlerWrapper.createSAXParseException(ErrorHandlerWrapper.java:204) ~[?:?]
            at com.sun.org.apache.xerces.internal.util.ErrorHandlerWrapper.fatalError(ErrorHandlerWrapper.java:178) ~[?:?]
            at com.sun.org.apache.xerces.internal.impl.XMLErrorReporter.reportError(XMLErrorReporter.java:400) ~[?:?]
            at com.sun.org.apache.xerces.internal.impl.XMLErrorReporter.reportError(XMLErrorReporter.java:327) ~[?:?]
            at com.sun.org.apache.xerces.internal.impl.XMLScanner.reportFatalError(XMLScanner.java:1465) ~[?:?]
            at com.sun.org.apache.xerces.internal.impl.XMLDocumentScannerImpl$PrologDriver.next(XMLDocumentScannerImpl.java:1013) ~[?:?]
            at com.sun.org.apache.xerces.internal.impl.XMLDocumentScannerImpl.next(XMLDocumentScannerImpl.java:605) ~[?:?]
            at com.sun.org.apache.xerces.internal.impl.XMLNSDocumentScannerImpl.next(XMLNSDocumentScannerImpl.java:112) ~[?:?]
            at com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl.scanDocument(XMLDocumentFragmentScannerImpl.java:542) ~[?:?]
            at com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(XML11Configuration.java:889) ~[?:?]
            at com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(XML11Configuration.java:825) ~[?:?]
            at com.sun.org.apache.xerces.internal.parsers.XMLParser.parse(XMLParser.java:141) ~[?:?]
            at com.sun.org.apache.xerces.internal.parsers.DOMParser.parse(DOMParser.java:247) ~[?:?]
            at com.sun.org.apache.xerces.internal.jaxp.DocumentBuilderImpl.parse(DocumentBuilderImpl.java:342) ~[?:?]
            at javax.xml.parsers.DocumentBuilder.parse(DocumentBuilder.java:122) ~[?:?]
            at org.apache.jackrabbit.webdav.xml.DomUtil.parseDocument(DomUtil.java:104) ~[jackrabbit-webdav-2.20.3.jar:?]
            at org.apache.jackrabbit.webdav.client.methods.BaseDavRequest.getResponseBodyAsDocument(BaseDavRequest.java:69) ~[jackrabbit-webdav-2.20.3.jar:?]
            at org.apache.jackrabbit.webdav.client.methods.BaseDavRequest.getResponseBodyAsMultiStatus(BaseDavRequest.java:87) ~[jackrabbit-webdav-2.20.3.jar:?]
            at com.github.caldav4j.CalDAVCollection.getCalDAVResources(CalDAVCollection.java:905) ~[caldav4j-1.0.5.jar:?]
            
java icloud caldav icloud-api