2016-10-06 16 views
0

コンストラクタに10以上のパラメータを持つクラスがあり、Builderパターンを実装したいと思います。同時に、単純なXMLシリアル化を使用して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; 
     [...] 
    } 

} 

答えて

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

はありません、申し訳ありませんが、それはあります私が言及したライブラリーで、オブジェクトの作成場所は気にしないでください。 –

関連する問題