Jetzt ist es eine Möglichkeit, vielleicht nicht billiger als Überprüfungvon Hand - Schreiben if
für jeden GETTER
über Unterklassen (null == obj.getProductTypeX()
), aber hier ist es:
Nehmen wir an, dass Sie mit JAXBElement<ProductType> productType
am Ende wenn du dich entkommst.
Jetzt müssen Sie mit einem Element
(org.w3c.dom.Element) -Objekt enden. Welche kann wie folgt geschehen:
DOMResult res = new DOMResult();
marshaller.marshal(productType, res);
Element elt = ((Document)res.getNode()).getDocumentElement();
Nun ist die Schnittstelle Element
erweitert die Schnittstelle Node
aus dem wir zum Schluss gekommen, dass wir es hier mit einem TREE
Strukturobjekt am Ende und wir können wie seine bestehenden Kinder bekommen:
NodeList nodeList = elt.getChildNodes();
Jetzt können Sie den Typ überprüfen und den Wert jedes Node
aber Sie müssen überprüfen, ob der Knoten ein ELEMENT_NODE
oder ATTRIBUTE_NODE
in den meisten Fällen:
for (int i = 0; i < nodeList.getLength(); i++) {
Node currentNode = nodeList.item(i);
if (currentNode.getNodeType() == Node.ELEMENT_NODE) {
currentNode.getNodeName();
currentNode.getTextContent();
//And whatever you like
}
}
Ich hoffe, das wird Ihnen helfen oder Ihnen eine Wegbeschreibung geben, wie Sie bekommen, was Sie brauchen.
Gut nach einem erfolgreichen unmarshall können Sie nicht einfach überprüfen, welche Getter Null zurückgeben? Oder ich habe die Frage nicht verstanden. –
@lazarov I __think__, es soll als ProduktType pt = new ProductTypeN() 'nicht marmoriert werden, wobei N X, Y ** oder ** Z sein könnte ... korrigiere mich wenn falsch, Robert. – Fildor
@lazarov Das wäre möglich. Ich habe nicht erwähnt, dass es zehn mögliche "Produkttypen" gibt, das würde also eine Menge "Wiederholung" bedeuten, wenn geprüft wird, welcher Getter "null" zurückgibt. Vielleicht gibt es einen besseren Weg? –