我现在正在使用JAXB,我正在努力注释我的前置条件查询的复合概念,以便JAXB会满意。
前提条件查询可以是:
当然,复合查询可以由复合查询组成,就像下面的例子一样:
<precondition>
<or>
<and>
<query>foo</query>
<query>bar</query>
</and>
<query>baz</query>
</or>
</precondition>
在我的Java模型中,我有一个带注释的接口PreconditionQuery(实际上是一个抽象类,因为JAXB似乎对接口不满意),有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;
}
}
对于化合物(化合物或前提条件查询基本相同):
@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;
}
}
最后,在封闭bean级别,我进行了如下映射:
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
不做这项工作,什么会做?
请尝试添加
@XmlSeeAlso({PreconditionQuery.class})
到您的CompoundAndPreoffictionQuery
类。
然后,尝试使用@XmlRootElement
注释您的所有PreoffictionQuery
类/子类。
另外,@XmlAccessorType
要更加小心 - 有时你有它,有时没有。最好用它为包添加注释。
最后,您可能需要一个带有@Xml注册表
和@XmlElementDecl
的ObjectFactory
,但我认为它不是绝对必需的。
我认为问题是缺少@XmlRootElement
/@XmlSeeAlso
注释。
众所周知,@XmlElementRef
很棘手,但它确实有效。:)
祝你好运,并致以最良好的祝愿。
继JAXB和复合模式之后,我设法映射: 但我想绘制: 我的JAXB类层次结构如下: 有几种类型的查询: 复合词(和/或)非常相似: 和封闭bean: JAXB不允许我只在上映射。为什么以及有什么替代方案?
问题内容: 我必须设计一个数据模型(在Java EE 6应用程序中),该数据模型将通过JPA持久化,并且还需要通过JAXB进行序列化。上一次,我有一组带有JAXB批注的实体类,另一组带有JPA批注的实体类。这意味着我必须有很多样板代码才能在两者之间进行翻译。我正在考虑将它们组合在一起,以便每个类都具有两种类型的注释。我知道 可以 做到,但是我的问题是, 应该 吗?会引起什么问题吗? 问题答案: 这
我正在尝试创建一个可以同时包含元素和值的java/jaxb类。 我想在A类的列表中读取一个类的属性,并作为A类本身的值输出。 这是XML: 我必须阅读: 并生产: 这是我的错误类-工作正常: 我的设备类别: Jaxb 抱怨我不能在同一类中同时拥有 xml 元素(错误 )和 xml 值 如何正确建模/注释此内容,以允许我读取 error xml 标记的属性并将其生成为设备标记的值?
复合模式用于需要以与单个对象类似的方式处理一组对象的位置。 复合模式根据树结构组成对象,以表示部分以及整个层次结构。 这种类型的设计模式属于结构模式,因为此模式创建了一组对象的树结构。 此模式创建一个包含其自己的对象组的类。 此类提供了修改其相同对象组的方法。 我们通过以下示例演示复合模式的使用,其中我们将显示组织的员工层次结构。 实现 (Implementation) 我们有一个Employee
这是我在PHP中的JSON构建代码,它在没有compositeTemplate部分的情况下工作,但是只要我添加了这个部分,就会出现一个错误。 信封不完整。一个完整的信封需要文档、收件人、标签和主题行。
问题内容: 我正在尝试使用JAXB解组以下XML: 我已经使用XJC生成了所有类。如果要访问Composers集合,则必须执行以下操作: 有什么办法可以代替我吗? 我理解需要一个从XML派生的Composers对象,但是在使用Java进行交易时,拥有一个用于存储集合的中间POJO似乎有点多余。 我的XSD是: 问题答案: 该 @XmlElementWrapper 插件不正是你想要的。