Не используйте java.beans.XMLDecoder
для десериализации пользовательских XML
полезных нагрузок.Это не было предназначено для этого.Прочитайте статью Долгосрочное постоянство компонентов JavaBeans: XML-схема .Он содержит несколько примеров XML
полезных нагрузок, которые могут быть десериализованы обратно с помощью XMLDecoder
:
<?xml version="1.0" encoding="UTF-8" ?>
<java version="1.4.0" class="java.beans.XMLDecoder">
<void id="myController" property="owner"/>
<object class="javax.swing.JButton">
<void method="addActionListener">
<object class="java.beans.EventHandler" method="create">
<class>java.awt.event.ActionListener</class>
<object idref="myController"/>
<string>doIt</string>
</object>
</void>
</object>
</java>
Если вам нужно десериализовать пользовательские XML
, используйте JAXB
или Jackson XML
.Вам необходимо создать модель POJO
с аннотациями JAXB
:
@XmlRootElement(name = "net")
@XmlAccessorType(XmlAccessType.FIELD)
class Net {
@XmlElement(name = "node")
private List<Node> nodes;
// getters, setters, toString
}
@XmlAccessorType(XmlAccessType.FIELD)
class Node {
@XmlAttribute
private String label;
// getters, setters, toString
}
Пример использования:
import javax.xml.bind.JAXBContext;
import javax.xml.bind.Unmarshaller;
import javax.xml.bind.annotation.XmlAccessType;
import javax.xml.bind.annotation.XmlAccessorType;
import javax.xml.bind.annotation.XmlAttribute;
import javax.xml.bind.annotation.XmlElement;
import javax.xml.bind.annotation.XmlRootElement;
import java.io.File;
import java.util.List;
public class JaxbApp {
public static void main(String[] args) throws Exception {
File xmlFile = new File("./resource/test.xml").getAbsoluteFile();
JAXBContext jaxbContext = JAXBContext.newInstance(Net.class);
Unmarshaller unmarshaller = jaxbContext.createUnmarshaller();
Object net = unmarshaller.unmarshal(xmlFile);
System.out.println(net);
}
}
отпечатков:
Net{nodes=[Node{label='A'}, Node{label='B'}, Node{label='C'}]}
См. Также: