i would like to have bidirectional navigation methods in classes between child object and parent object. IDREF is not enough in my case because I don't want to specify le id of parent. to be clear, from an xsd like that:
<complexType name="A">
<xs:sequence>
<element name="b" type="B" minOccurs="0" maxOccurs="unbounded"></element>
</xs:sequence>
<attribute name="id" type="ID"></attribute>
</complexType>
<complexType name="B">
<attribute name="id" type="ID"></attribute>
</complexType>
i would like classes looks like this:
class A {
...
public List<B> getB() { ...}
...
}
class B {
...
public A getA() {
...
}
and my xml must looks like this:
<a id="a1">
<b id="b1"/>
<b id="b2"/>
...
</a>
After unmarshal, I would like to be able to navigate A to Bs AND from B to A (via b.getA()) !! It a very basic feature, but I don't find a simple way to achieve that ...
Any idea ??
Thanks in advance
Try this...
You can create a method
void afterUnmarshal(Unmarshaller, Object parent)
that gets called... well, after unmarshalling and set up your object tree as you need it.Note: I'm the EclipseLink JAXB (MOXy) lead, and a member of the JAXB (JSR-222) expert group.
Eclipse JAXB (MOXy) offers the
@XmlInverseReference
extension to handle this use case. Currently it can not be generated by XJC and must be applied to the domain model directly:For More Information
In addition to musiKk answer in case you are using xjc to generate domain model classes from xsd. To add reference to parent class in all model classes you should:
Create base class which extends
Unmarshaller.Listener
Tell xjc that all model classes should extend your BaseClass by creating global xjc binding configuration