2016-10-06 5 views
0

생성자에 10 개 이상의 매개 변수가있는 클래스가 있으며 작성자 패턴을 구현하고 싶습니다. 동시에 간단한 XML 직렬화를 사용하여 XML 파일에서 객체를 만들고 싶습니다. 이를 수행 할 방법이 있습니까?Simple XML Serialization + Builder 패턴

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 라이브러리에 대한 특정 선택 사항이 없습니다. GitHub에서 제공되는 Scilca XML Progression (SXP) 패키지를 사용하는 것이 좋습니다. 나는를 사용해야하기 때문에 유효 아니다 (당신이 작성 될 오브젝트 알고) 객체 직렬화에 대한 코드를 작성하려면, 여기에 간단한 구현,

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

아니, 미안, 즉 라이브러리 내가 언급 한 개체가 어디에 만들어 지는지 신경 쓰지 않아야합니다. –