メッセージを含むxmlファイルがあります:
<bus>
<message id="58afdb36-9080-4dd8-922e-ee516b2b5073">
<retrievedDate>Mon Feb 18 14:43:23 GMT 2013</retrievedDate>
<addedDate>Mon Feb 18 14:43:23 GMT 2013</addedDate>
<state>initialised</state>
<content>content placeholder</content>
</message>
</bus>
特定の ID のメッセージの状態を変更するメソッドを作成しています。
ただし、必要な ID を持つノードを取得しようとすると、NullPointerException が発生し続けます。getElementByIdとgetElementsByTagNameを試してみましたが、必要なノードではなく常に null になります。
public static int updateMessageState(UUID messageID, String newState)
throws ParserConfigurationException,
SAXException, IOException, TransformerException {
String filepath = "data.xml";
DocumentBuilderFactory docFactory = DocumentBuilderFactory.newInstance();
DocumentBuilder docBuilder = docFactory.newDocumentBuilder();
Document doc = docBuilder.parse(filepath);
// Get Message
Node message = doc.getElementById(messageID.toString());
// Find and update the state
NamedNodeMap atrMap = message.getAttributes();
Node nodeAtr = atrMap.getNamedItem("state");
nodeAtr.setTextContent(newState);
// Save write to XML
TransformerFactory transformerFactory = TransformerFactory.newInstance();
Transformer transformer = transformerFactory.newTransformer();
DOMSource source = new DOMSource(doc);
StreamResult result = new StreamResult(new File(filepath));
transformer.transform(source, result);
return 0;
}