2010-12-02 7 views
7

この質問にはさまざまな疑問がありますが、これをさらにカタログ化する余地があると感じています。でJaxbで生成されたクラスでは、指定されたタイプの代わりにJAXBElementが使用されました。

<xs:element name="lastXdigits" type="xs:string" nillable="true" minOccurs="1"/> 

結果:

protected String date; 
@XmlElement(name = "lastXdigits", required = true, nillable = true) 
protected String lastXDigits; 
にXSDを変更

protected String date; 
@XmlElementRef(name = "lastXdigits", namespace = "http://xxxxxxx", type = JAXBElement.class) 
protected JAXBElement<String> lastXDigits; 

私は2つの要素の定義

<xs:complexType name="elementA"> 
    <xs:sequence> 
     <xs:element name="date" type="xs:string" minOccurs="0"/> 
     <xs:element name="lastXdigits" type="xs:string" nillable="true" minOccurs="0"/> 
    </xs:sequence> 
</xs:complexType> 

これが発生してXSDを持っています

と使用:中

<xs:element name="lastXdigits" type="xs:string" minOccurs="0"/> 

結果:

protected String date; 
@XmlElement(name = "lastXdigits") 
protected String lastXDigits; 

は、これは私には非常に奇妙に思えます。最初のケースでlastXDigitsがJAXBElement型として生成されるのはなぜですか?また、すべての場合にString型で十分ではないのはなぜですか?また、jaxbは、名前とは別の定義が同じ場合、これらの2つの要素を別々に扱うべきですか?

私はjaxb 2.0.5のjaxb-xjc antタスクを使用しています。

これは疑わしいと思われますか、またはこれらの違いについては正当な理由がありますか?

答えて

6

nillable="true"minOccurs="0"を一緒に使用している場合は、Stringで値を表すことはできません。 nullの意味は?それがヌルか0回発生したことを意味しますか?しかし、私はそれがちょうどストリングになるといくらか疑問に思う。

空のリストと比較してください。ヌルリストは、空のリストとはまったく異なります。

+1

私は存在しない要素とnullの値の区別に興味がある場合はこれが関係すると思いますが、ほとんどの場合、誰も本当に気にせず、間接的なレベルの間接化は単なる迷惑です。 – Ellis

+1

はい、しかし、私はいくつかの例では、それが有効な区別をするかもしれないと思います。 –

関連する問題