2016-10-06 7 views
0

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

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; 
     [...] 
    } 

} 

ответ

0

От моего понимания у вас нет конкретного выбора для любой библиотеки XML. Я бы порекомендовал использовать пакет SXP для Scilca XML, доступный в 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 

     } 

}

+0

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