Простая сериализация XML шаблон построения

#java #xml #serialization #builder #simple-framework

#java #xml #сериализация #Конструктор #simple-framework

Вопрос:

У меня есть класс с более чем 10 параметрами в конструкторе, и я хотел бы реализовать шаблон Builder. В то же время я хочу использовать простую сериализацию XML для создания объектов из XML-файлов. Есть ли какой-нибудь способ добиться этого?

 import org.simpleframework.xml.*;

public class Example {

    @Element(name = "field-1", required = false)
    private final int field1;
    @Element(name = "field-2")
    private final int field2;
    [...]

    public simpleXMLConstructor(
            @Element(name = "field-1", required = false) int field1,
            @Element(name = "field-2") int field2,
            [...]) {
        this.field1 = field1;
        this.field2 = field2;
        [...]
    }

}
  

Ответ №1:

Насколько я понимаю, у вас нет какого-либо конкретного выбора для какой-либо библиотеки XML. Я бы рекомендовал использовать пакет Scilca XML Progression (SXP), доступный на GitHub. Чтобы написать код для сериализации объектов (где вы знаете, какой объект должен быть создан), вот простая реализация,

 import org.scilca.sxp.*; 
import org.scilca.sxp.exceptions.*;

public class main{
    class XmlSerialization{.....} // We'll serialize this and
    class XmlS2 {}

    public static void main(String[] args){
        // Write Data
        Node rootNode = new XMLNode("ObjectSerializationData");

        XMLNode firstObject = rootNode.add("XmlSerialization");
        firstObject.add("IntField1").setValue("1");
        firstObject.add("StringField2").setValue("strObject");

        XMLNode secondObject = rootNode.add("XmlS2");
        secondObject.add("IntField1").setValue("2"); // Added a element with a value
        secondObject.add("BoolField2").setValue("false");

        XMLNode thirdObject = rootNode.add("XmlSerialization");
        thirdObject.add("IntField1").setValue("@null");
        thirdObject.add("StringField2").setValue("str");

        Document XmlDocument = new Document(rootNode);
        Writer w = (Writer) XmlDocument.getWriter();
        w.saveXML("D:/file.txt");

        System.gc();

        // Read and Deserialize

        XMLReader xr = new XMLReader("D:/file.txt");
        Document newXml = xr.parseDocument();

        List<Node> XmlS1Nodes = newXml.searchMatches("XmlSerialization");
        List<Node> XmlS2Nodes = newXml.searchMatches("XmlS2");


        Node firstObject = XmlS1Nodes.get(0);
        int field1 = (int) Double.parseDouble(firstObject.getAllChildren().get(0));

        // Like this get all field and construct objects

        }
  

}

Комментарии:

1. Нет, извините, это недопустимо, поскольку я должен использовать библиотеку, о которой я упоминал, и меня не должно волновать, где создаются объекты.