我現在正在與JAXB一起工作,並且我正在努力註釋我的複合前置條件查詢的概念,以便JAXB會很高興。JAXB和複合模式
的前提條件的查詢可以是:
- 簡單:僅包含查詢
- 化合物
- 或文本節點:1個前提查詢的先決條件或其他比賽
- AND: 1前提條件查詢AND其他匹配的前提條件
當然,複合查詢可製成複合查詢的,就像下面的例子:
<precondition>
<or>
<and>
<query>foo</query>
<query>bar</query>
</and>
<query>baz</query>
</or>
</precondition>
在我的Java模型,我已經得到了,因爲JAXB註釋PreconditionQuery(實際上是一個抽象類,單一界面似乎對界面不滿意)與3個實現SimplePreconditionQuery,CompoundOrPreconditionQuery和CompoundAndPreconditionQuery。
@XmlSeeAlso(PreconditionQuery.class)
@XmlRootElement(name = "query")
public class SimplePreconditionQuery extends PreconditionQuery {
private String query;
@XmlValue
public String getQuery() {
return query;
}
public void setQuery(String query) {
this.query = query;
}
}
對於化合物酮(CompoundOrPreconditionQuery基本相同):
@XmlSeeAlso(PreconditionQuery.class)
@XmlRootElement(name = "and")
public class CompoundAndPreconditionQuery extends PreconditionQuery {
private Collection<PreconditionQuery> preconditionQueries = newArrayList();
@XmlElementRef(name = "query")
public Collection<PreconditionQuery> getPreconditionQueries() {
return preconditionQueries;
}
public void setPreconditionQueries(Collection<PreconditionQuery> preconditionQueries) {
this.preconditionQueries = preconditionQueries;
}
}
最後,在包圍豆水平,我映射是這樣的:
public class Precondition {
private PreconditionQuery query;
@XmlElementRef(required = true)
public PreconditionQuery getQuery() {
return query;
}
public void setQuery(PreconditionQuery query) {
this.query = query;
}
}
最後, JAXB抱怨無法解決此問題:
Caused by: com.sun.xml.internal.bind.v2.runtime.IllegalAnnotationsException: 1 counts of IllegalAnnotationExceptions
Invalid @XmlElementRef : Type "class xxx.PreconditionQuery" or any of its subclasses are not known to this context.
this problem is related to the following location:
at public xxx.PreconditionQuery xxx.Precondition.getQuery()
at xxx.Precondition
如果@XmlElementRef
不做這項工作,會有什麼?
謝謝,我馬上就試試看。 – Rolf 2014-11-01 09:23:06
我更新了初始代碼示例以符合您的建議。 – Rolf 2014-11-02 15:33:26
現在,JAXB不再抱怨了,但'query'總是'null'。 – Rolf 2014-11-02 15:52:32