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的答案。 要在所有模型类中添加对父类的引用,您应该:

  1. 创建扩展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; } } 
  2. 告诉xjc所有模型类都应该通过创建全局xjc绑定配置来扩展BaseClass

        
                 

尝试这个…