Частичное извлечение событий CalDAV по временному диапазону; Ошибка пространства имен

В настоящее время я пытаюсь реализовать клиент CalDAV, используя Jackrabbit Libery и информацию из RFC 4791 CalDAV

На основе примера из RFC для частичного извлечения событий по временному диапазону я реализовал следующий код для выполнения ReportMethod.

 public void test(String strUri, String strXMLFile) {
  try {
   Document docXMLRequest = XMLUtilities.loadXMLFile(strXMLFile);           
   ReportInfo repInfo = new ReportInfo(docXMLRequest.getDocumentElement(), DavConstants.DEPTH_INFINITY);

   ReportMethod repMethod = new ReportMethod(strUri, repInfo);
  } catch (DavException | IOException e) {
   e.printStackTrace();
  }
 }

Используемое содержимое XML, которое содержится в docXMLRequest, является следующим:

<?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>
      <C:comp name="VCALENDAR">
        <C:prop name="VERSION"/>
        <C:comp name="VEVENT">
          <C:prop name="SUMMARY"/>
          <C:prop name="UID"/>
          <C:prop name="DTSTART"/>
          <C:prop name="DTEND"/>
          <C:prop name="DURATION"/>
          <C:prop name="RRULE"/>
          <C:prop name="RDATE"/>
          <C:prop name="EXRULE"/>
          <C:prop name="EXDATE"/>
          <C:prop name="RECURRENCE-ID"/>
        </C:comp>
        <C:comp name="VTIMEZONE"/>
      </C:comp>
    </C:calendar-data>
  </D:prop>
  <C:filter>
    <C:comp-filter name="VCALENDAR">
      <C:comp-filter name="VEVENT">
        <C:time-range start="20060104T000000Z" end="20060105T000000Z"/>
      </C:comp-filter>
    </C:comp-filter>
  </C:filter>
</C:calendar-query>

Когда я пытаюсь выполнить запрос к серверу, я всегда получаю следующую ошибку:

Exception in thread "main" org.w3c.dom.DOMException: NAMESPACE_ERR: An attempt is made to create or change an object in a way which is incorrect with regard to namespaces.
    at com.sun.org.apache.xerces.internal.dom.ElementNSImpl.setName(Unknown Source)
    at com.sun.org.apache.xerces.internal.dom.ElementNSImpl.<init>(Unknown Source)
    at com.sun.org.apache.xerces.internal.dom.CoreDocumentImpl.createElementNS(Unknown Source)
    at org.apache.jackrabbit.webdav.xml.DomUtil.createElement(DomUtil.java:549)
    at org.apache.jackrabbit.webdav.version.report.ReportInfo.toXml(ReportInfo.java:250)
    at org.apache.jackrabbit.webdav.client.methods.DavMethodBase.setRequestBody(DavMethodBase.java:204)
    at org.apache.jackrabbit.webdav.client.methods.ReportMethod.<init>(ReportMethod.java:44)
    at webDAVStuff.ManageWebDAV.test(ManageWebDAV.java:117)
    at mainTestRuns.MainTestSyncCalender.main(MainTestSyncCalender.java:24)

Следуя XMLUtilities (соответствующий метод):

static public Document loadXMLFile(String strXMLFile) {
try {
    Status.printStatusToConsole("Load: "+ strXMLFile);

    File fileXMLFile = new File(strXMLFile);
    DocumentBuilderFactory dbFactory = DocumentBuilderFactory.newInstance();
    DocumentBuilder dBuilder;

    dBuilder = dbFactory.newDocumentBuilder();
    dbFactory.setNamespaceAware(true);
    Document docXMLFile = dBuilder.parse(fileXMLFile);
    docXMLFile.getDocumentElement().normalize();

    return docXMLFile;
} catch (ParserConfigurationException e) {
    e.printStackTrace();
} catch (SAXException e) {
    e.printStackTrace();
} catch (IOException e) {
    e.printStackTrace();
}

return null;
}

Может у кого-нибудь есть идея?

Спасибо и хорошего вечера!

1 ответ

Из какого пакета работает XMLUtilities? Анализирует ли он XML-документ в методе, учитывающем пространство имен? (SetNamespaceAware(истина)).

Кроме того, не используйте DavConstants.DEPTH_INFINITY здесь. Используйте DEPTH_1.

Другие вопросы по тегам