jaxb - 奇怪的问题

时间:2009-09-16 13:44:59

标签: java 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>

我对上面所说的内容。

你能告诉我我需要注释的内容,因为我的OrQuery类期望只查看查询节点而不是!

请帮忙......

非常感谢

1 个答案:

答案 0 :(得分: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;