Обработка DOM с использованием Java-клиента marklogic - PullRequest
0 голосов
/ 26 апреля 2018

Я новичок в Java API MarkLogic и пытаюсь создать XML-документ, где Document создается с использованием DocumentBuilderFactory и DocumentBuilder, и все работает нормально со следующим кодом.

 DocumentBuilderFactory factory=DocumentBuilderFactory.newInstance();
 DocumentBuilder docBuilder=factory.newDocumentBuilder();
 Document doc=docBuilder.newDocument();  //Works fine

Теперь, когда у меня есть ссылка на документ, я могу позвонить doc.CreateElement(), чтобы создать структурированный документ XML.

Точно так же, если я ссылаюсь на документ, используя DOMHandle из com.marklogic.client.io.DOMHandle;

 DOMHandle handle=new DOMHandle();
 Document doc=handle.get();
 doc.createElement();         //NULL POINTER EXCEPTION

Теперь ссылка на документ, созданная из дескриптора, дает исключение нулевого указателя. Я понял, что получаю документ из метода получения, который возвращает пустой документ, но я не пытаюсь получить доступ к чему-либо из пустого документа. Вместо этого пытайтесь создать элемент документа, используя doc.createElement(), где возникает исключение нулевого указателя.

Пожалуйста, объясните проблему.

1 Ответ

0 голосов
/ 28 апреля 2018

A DOMHandle представляет содержимое XML в виде документа DOM. Это не фабрика, которая создаст документ DOM. Дескриптор - это просто адаптер, который упаковывает документ, который мы читаем из базы данных или создаем на Java. Если явно не задать конструктор DOMHandle(Document content) или метод public void set(Document content), содержимое DOMHandle будет нулевым и, следовательно, NullPointerException. Вы, вероятно, должны сделать один из этих

DocumentBuilderFactory factory=DocumentBuilderFactory.newInstance();
DocumentBuilder docBuilder=factory.newDocumentBuilder();
Document doc=docBuilder.newDocument();
// Build the Document completely and assign it to the handle and use the handle
DOMHandle handle = new DOMHandle(); 
handle.set(doc);
// or DOMHandle handle = new DOMHandle(doc); 
// or DOMHandle handle = new DOMHandle().with(doc);
...