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.
