users@jersey.java.net

Re: [Jersey] JAXB and object relationships

From: Paul Sandoz <Paul.Sandoz_at_Sun.COM>
Date: Tue, 06 Oct 2009 10:10:32 +0200

Hi Steve,

It is possible to do things explicitly using XML ID/IDREF. See here:

   http://weblogs.java.net/blog/2005/08/15/pluggable-ididref-handling-jaxb-20

You will need to use a JAXB related ContextResolver for Unmarshaller
for the types you require so that the Unmarshaller can be configured
with the ID resolver.

You will also need to re-arrange you XML so that you have the list of
children under the root then the parents make references to those
children, for example:

  <root>
    <parent1>
      <child1Ref ref="1"/>
      <child2Ref ref="2"/>
    </parent1>
    <parent2>
      <child2Ref ref="2"/>
      <child3Ref ref="3"/>
    </parent1>
    <children>
      <child1 id="1"/>
      <child2 id="2"/>
      <child3 id="3"/>
    </children>
  </root>


I am not sure how do to is more dynamically in your current example.
It might require more work as suggested by Moises.

Paul.

On Oct 6, 2009, at 6:53 AM, Steve Mactaggart wrote:

> We have been using Jersey for a project for the last few months and
> loving it. But this week have run into an issue that I think is with
> JAXB not Jersey.
> I'm posting the question here, as I guess others like me have probably
> run into the same issue and there might be a really simple answer.
>
> What I have is an element that has 2 children, each of them have
> children where some of their children reference each other.
>
> Let me show some code.
>
> Root root = new Root();
>
> Parent parent1 = new Parent();
> Parent parent2 = new Parent();
>
> root.add(parent1);
> root.add(parent2);
>
> Child child1 = new Child();
> Child child2 = new Child();
> Child child3 = new Child();
>
> parent1.add(child1);
> parent1.add(child2);
>
> parent2.add(child2);
> parent2.add(child3);
>
> So we have 1 root, 2 parents and 3 children.
>
> If I send this up and down the JAXB path, I seem to get back 4
> children. Each Parent has their own copy of child2. Is there anyway
> to get JAXB to serialise the relationship and show that both parent1
> and parent2 point to the same object?
>
> We only found this issue recently, when more complex elements were
> being transmitted.
>
> If there is no way to get JAXB to do this (thats what I believe at the
> moment), does anyone have any suggestions of a way I could do some
> magic in Jersey to re-instate the relationship?
>
> Cheers,
> Steve
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: users-unsubscribe_at_jersey.dev.java.net
> For additional commands, e-mail: users-help_at_jersey.dev.java.net
>