Hi Tatu,

Here is an example 
<https://github.com/rupert654/xml-object-reference-example>.

Note that the Unit class is annotated with JsonIdentityInfo.

When I run the main method, I get this exception:

Exception in thread "main" 
com.fasterxml.jackson.databind.JsonMappingException: Already had POJO for 
id (java.lang.String) [[ObjectId: key=maths-101, 
type=com.fasterxml.jackson.databind.deser.impl.PropertyBasedObjectIdGenerator, 
scope=Unit]] (through reference chain: 
School["students"]->java.util.ArrayList[0]->Student["unit"]->java.util.ArrayList[0]->Unit["name"])
at 
com.fasterxml.jackson.databind.JsonMappingException.wrapWithPath(JsonMappingException.java:391)


When I remove that annotation, I get no exception but the units that make 
up a student only have their name populated, and not their points.


On Sunday, April 29, 2018 at 4:17:38 AM UTC+1, Tatu Saloranta wrote:
>
> On Fri, Apr 27, 2018 at 1:53 AM, Rupert Madden-Abbott 
> <[email protected] <javascript:>> wrote: 
> > How can I turn this XML: 
> > 
> > <units> 
> >   <unit name="maths-101" points="120"/> 
> >   <unit name="english-101" points="60"/> 
> > </units> 
> > 
> > <students> 
> >   <student> 
> >     <unit name="maths-101"/> 
> >     <unit name="english-101"/> 
> >   </student> 
> >   <student> 
> >     <unit name="english-101"/> 
> >   </student> 
> > </students> 
> > 
> > into something like this Java: 
> > class Student { 
> >   private List<Unit> units; 
> > 
> >   public List<Unit> getUnits() { 
> >     return units; 
> >   } 
> > 
> >   public void setUnits(final List<Unit> units) { 
> >     this.units = units; 
> >   } 
> > } 
> > 
> > class Unit { 
> >   private String name; 
> > 
> >   private Integer points; 
> > 
> >   public String getName() { 
> >     return name; 
> >   } 
> > 
> >   public void setName(final String name) { 
> >     this.name = name; 
> >   } 
> > 
> >   public Integer getPoints() { 
> >     return points; 
> >   } 
> > 
> >   public void setPoints(final Integer points) { 
> >     this.points = points; 
> >   } 
> > } 
> > 
> > 
> > After deserializing, I want to be able to retrieve the points for a 
> Unit, 
> > directly from a student (e.g. student.getUnit().getPoints()) and do not 
> want 
> > to have to look up the unit by name from a separate list of units. 
> > 
> > I have tried the solution suggested in this StackOverflow Answer but I 
> get 
> > an error saying "Already had POJO for id (java.lang.String) [[ObjectId: 
> > key=foo, 
> > 
> type=com.fasterxml.jackson.databind.deser.impl.PropertyBasedObjectIdGenerator,
>  
>
> > scope=Unit]]. I'm not sure if that only works for JSON or if I need a 
> > slightly different XML/Java structure to get this working? 
>
> Perhaps you could share code you are using, as it sounds like you are 
> half way there. 
> It is true that much of more advanced functionality has been mostly 
> tested on JSON side, 
> and that XML is unfortunately bit tricky to get to work due to model 
> differences. 
> But Object Identity support should work similarly and it does work at 
> least in some cases; 
> there are unit test for `jackson-dataformat-xml` that work. 
>
> -+ Tatu +- 
>

-- 
You received this message because you are subscribed to the Google Groups 
"jackson-user" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
To post to this group, send email to [email protected].
For more options, visit https://groups.google.com/d/optout.

Reply via email to