2012-03-13 9 views
1

JAXBエンティティを作成しています。JAXBなしオプションコレクション

public class Person { 

    public Collection<String> getNames() { 
     if (names == null) { 
      names = new ArrayList<String>(); 
     } 
    } 

    @XmlElement(required = true) 
    private int age; 

    @XmlElement(name = "name") 
    @XmlElementWrapper(required = true) 
    private Collection<String> names; 
} 

次のような例があります。私は、このインスタンスをマーシャリング

final Person person = new Person(); 
person.setAge(18); 

私は私が期待したものではありません

<person> 
    <age>18<age> 
</person> 

を得ました。私はgetNames()を呼び出した後にのみ、私は

<person> 
    <age>18</age> 
    <games/> 
<person> 

を得ることができ

はこの正常ですか?

+0

私は現在、内部で 'getGames'を呼び出す' beforeMarshal(Marshaller) 'メソッドを提供することでこの問題を解決しています。 –

+0

'@XmlElementWrapper'に' nillable = true'を追加すると、同じ解決法があります。私はこれが良いと思います。 –

答えて

1

名前をコンストラクタの新しいArrayListに設定するか、フィールド定義の静的割り当てに設定します。

+0

ありがとうございます。私は '@XmlElementWrapper'の' nillable = true'属性を使って解決しました。 –