2017-06-15 8 views
0

私の現在のオブジェクト構造と構造が異なる古いxmlファイルのアンマーシャリングに苦労しています。クラス構造が変更された後に古いxmlをアンマーシャリングする問題に直面しています

前の構造

@xmlRootElement("configData") 
public class configData{ 
private string name; 
private string age; 
private customObject obj; 
} 

私の現在のデータ構造は、それが古いxmlファイルを動作させるためにどのよう

@xmlRootElement("configData") 
public class configData{ 
    List<SampleData> sampleDatas;; 

} 

public class SampleData{ 
    private string name; 
    private string age; 
    private customObject obj; 

} 

です。助けてください。

+0

あなたは 'configData''にアクセサメソッドを委譲し、リストをマークすることができ@ XmlTransient' ... –

+0

JAXBマッピングが初めてです。この場合、** @ xmlTransient **はどのように役立ちますか?少し具体的にお聞かせください –

答えて

0

あなたの古い構造

おかげでSampleDataの一組だけがXMLファイルに存在することを示唆しています。 CONFIGDATAにおけるファサードのsetterメソッドは、リストの最初の項目にthier値を格納

@XmlRootElement 
public class ConfigData 
{ 
    // This will hide the list from JAXB 
    @XmlTransient 
    private final List<SampleData> sampleDatas = new ArrayList<>(); 

    private SampleData getFirstSample() 
    { 
    if(sampleDatas.isEmpty()) 
     sampleDatas.add(new SampleData()); 
    return sampleDatas.get(0); 
    } 

    // Façade methods to delegate functionality to the list's first item... 
    // Only setters are required, if you just want to read in an old format. 
    // However this would not be optional, if you want to save to the new format... 
    public void setName(String name) 
    { 
    getFirstSample().setName(name); 
    } 

    public void seAge(String age) 
    { 
    getFirstSample().setAge(age); 
    } 

    public void setObj(CustomObject obj) 
    { 
    getFirstSample().setObj(obj); 
    } 
} 

public class SampleData 
{ 
    private String name; 
    private String age; 
    private CustomObject obj; 
    // Accessor methods... 
} 


だから、あなたはこのような何かを試してみてください。あなたが@XmlTransientを削除し、保存したいフィールドへpublicゲッターを提供する必要があり、保存するための可能性を提供するために、

...

+0

私の問題を解決する時間を与えてくれてありがとう。はい、あなたは正しいです。古いXMLファイルには1セットのサンプルデータがあります。しかし、 'configData'クラスのプロパティもコピーしない限り、最初の' sampleData'オブジェクトのプロパティの値はどのように取得されますか?私は新しい形式でデータを保存する必要があります。 –

+0

私は最初の 'SampleData'オブジェクトにプロパティ値を取得しません。古いXMLファイルの場合は常にnullです。 –

+0

ありがとう!!!それは働いている。 '@ xmlElement'アノテーションを' configData'クラスのすべてのセッターに適用しました –

関連する問題