我有一个超级抽象类:
@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;