JAXB / XJC父子父导航
我想在子对象和父对象之间的类中使用双向导航方法。 在我的情况下,IDREF是不够的,因为我不想指定父项的le id。 要清楚,从这样的xsd:
我希望课程看起来像这样:
class A { ... public List getB() { ...} ... } class B { ... public A getA() { ... }
我的xml必须如下所示:
...
在unmarshal之后,我希望能够将A导航到Bs并从B导航到A(通过b.getA())!! 这是一个非常基本的function,但我找不到一种简单的方法来实现这一目标……
任何的想法 ??
提前致谢
你可以创建一个方法 void afterUnmarshal(Unmarshaller, Object parent)
被调用…好吧,在解组并根据需要设置你的对象树之后。
注意:我是EclipseLink JAXB(MOXy)的负责人,也是JAXB( JSR-222 )专家组的成员。
Eclipse JAXB(MOXy)提供了@XmlInverseReference
扩展来处理这个用例。 目前它不能由XJC生成,必须直接应用于域模型:
class A { ... public List getB() { ...} ... } class B { ... @XmlInverseReference(mappedBy="b") public A getA() { ... }
了解更多信息
除了使用xjc从xsd生成域模型类之外, 还有musiKk的答案。 要在所有模型类中添加对父类的引用,您应该:
-
创建扩展
Unmarshaller.Listener
基类public abstract class BaseClass extends Unmarshaller.Listener { protected Object parent; public void afterUnmarshal(Unmarshaller unmarshaller, Object parent) { this.parent = parent; } public Object getParent(){ return parent; } }
-
告诉xjc所有模型类都应该通过创建全局xjc绑定配置来扩展BaseClass
尝试这个…