2009-09-16 240 views
0

我有一個超級抽象類:JAXB - 奇怪的問題

@XmlSeeAlso({AndQuery.class, OrQuery.class, NotQuery.class, PropertyQuery.class, MultiQuery.class}) 
@XmlRootElement 
public abstract class Query { 

這個類有一個子類:

public abstract class MultiQuery extends Query { 

這最後的超類也具有兩個子類:AndQuery和OrQuery註解爲@ XmlRootNode。

我也有一個PropertyQuery類,它擴展了Query超類。

所有它的確定當我做了後是這樣的:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?> 
         <orQuery> 
          <query xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="propertyQuery"> 
           <propertyName>SenderContractNumber</propertyName> 
           <propertyValue>D*</propertyValue> 
          </query> 
          <query xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="propertyQuery"> 
           <propertyName>SenderContractNumber</propertyName> 
           <propertyValue>A*</propertyValue> 
          </query> 
    <query xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="andQuery"> 
          <query xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="propertyQuery"> 
           <propertyName>documentNumber</propertyName> 
           <propertyValue>222</propertyValue> 
          </query> 
          <query xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="propertyQuery"> 
           <propertyName>documentNumber</propertyName> 
           <propertyValue>222</propertyValue> 
          </query> 

</query> 
</orQuery> 

我要的是張貼這樣一個xml:

<orQuyery> 
    <query>...</query> 
    <andQuery> 
     <query>...</query> 
    </andQuery> 
</orQuery> 

insteand什麼,我把上面。

你能告訴我什麼我必須註釋,因爲我的OrQuery類期望看到只有查詢節點不!

請幫助...

非常感謝

+0

我們需要OrQuery的源代碼 – skaffman 2009-09-16 13:48:41

回答

1

這聽起來像你想有許多您的查詢包含其他查詢。讓我們說,你想讓任何MultiQuery包含其他查詢列表。

如果您只有一個類型爲Query的List,那麼JAXB將無法確定要將哪些類型的查詢放入列表中。您可以指定列表可包含的所有選項。這種方式生成的模式允許任何指定的類型。

實施例:

@XmlElements({ 
    @XmlElement(type=AndQuery.class), 
    @XmlElement(type=OrQuery.class), 
    @XmlElement(type=NotQuery.class), 
    @XmlElement(type=PropertyQuery.class), 
    @XmlElement(type=MultiQuery.class) 
}) 
List<Query> queries;