2013-06-04 89 views
0

這是與相關WSDL相關聯的XSD片段。JAXB-RI從XmlElementRefs註釋成員生成意外的客戶端代碼

<complexType name="ValueMapEntry"> 
    <complexContent> 
    <restriction base="{http://www.w3.org/2001/XMLSchema}anyType"> 
     <sequence> 
     <choice maxOccurs="unbounded" minOccurs="0"> 
      <element ref="{namespace...}bi"/> 
      <element ref="{namespace...}a"/> 
      <element ref="{namespace...}s"/> 
      <element ref="{namespace...}b"/> 
      <element ref="{namespace...}t"/> 
      <element ref="{namespace...}d"/> 
      <element ref="{namespace...}dt"/> 
      <element ref="{namespace...}dur"/> 
      <element ref="{namespace...}de"/> 
      <element ref="{namespace...}l"/> 
      <element ref="{namespace...}f"/> 
     </choice> 
     </sequence> 
     <attribute name="k" use="required" type="{http://www.w3.org/2001/XMLSchema}string" /> 
    </restriction> 
    </complexContent> 
</complexType> 

因此,我們有一個複雜類型,包含了一些其他複雜類型所有的擴展相同的基類(稱爲數)

這一切都是好的,在客戶端的Java代碼生成此列表.....

@XmlElements({ 
    @XmlElement(name = "de", namespace = "namespace...", type = ValueDecimal.class), 
    @XmlElement(name = "l", namespace = "namespace...", type = ValueLong.class), 
    @XmlElement(name = "d", namespace = "namespace...", type = ValueDate.class), 
    @XmlElement(name = "dt", namespace = "namespace...", type = ValueDateTime.class), 
    @XmlElement(name = "dur", namespace = "namespace...", type = ValueDuration.class), 
    @XmlElement(name = "a", namespace = "namespace...", type = ValueAnySimpleType.class), 
    @XmlElement(name = "f", namespace = "namespace...", type = ValueDouble.class), 
    @XmlElement(name = "t", namespace = "namespace...", type = ValueTime.class), 
    @XmlElement(name = "s", namespace = "namespace...", type = ValueString.class), 
    @XmlElement(name = "b", namespace = "namespace...", type = ValueBoolean.class), 
    @XmlElement(name = "bi", namespace = "namespace...", type = ValueBinary.class) 
}) 
protected List<Value> biOrAOrSOrB.....; 

但是如果我更改了服務器端的類,因此WSDL包含選擇的maxOccurs的< <選擇>反而是一個單一的項目,而不是即列表=「無界」的minOccurs =「0 「>

然後,而不是客戶端我得到一個變量的每一個可能的選擇選項

@XmlElement(namespace = "namespace...") 
protected ValueBinary bi; 

@XmlElement(namespace = "namespace...") 
protected ValueAnySimpleType a; 

@XmlElement(namespace = "namespace...") 
protected ValueString s; 

@XmlElement(namespace = "namespace...") 
protected ValueBoolean b; 

等,你得到的概貌。現在因爲xs:choice只允許選擇列表中的其中一個項目,所以生成的第二批代碼是不正確的,因爲我仍然只能得到一個變量?

我試過更新到最新的JAXB-RI & JAX-WS,它沒有任何區別。

我是啞巴還是這是一個JAXB-RI錯誤?

非常感謝提前。 歐文

回答