我有一个超级抽象类:

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


该类有一个子类:

public abstract class MultiQuery extends Query {


最后一个超类还有两个子类:用@XmlRootNode注释的AndQuery和OrQuery。

我还有一个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类希望仅看到查询节点而不是!

请帮忙...

非常感谢

最佳答案

听起来您正在尝试使许多查询包含其他查询。假设您要让任何MultiQuery包含其他查询的列表。

如果只有Query类型的列表,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;

09-19 15:22