Thank you for suggesting this.

Attributes should also work, of course, but until that is resolved it
is good to know work around.

-+ Tatu +-


On Mon, Apr 30, 2018 at 12:25 AM, Rupert Madden-Abbott
<[email protected]> wrote:
> Okay I think I may have figured this out.
>
>
> You shouldn't/can't use an attribute for object key reference. So this will
> not work:
>
>
> <units>
>   <unit name="maths-101" points="120"/>
> </units>
>
> <students>
>   <student>
>     <unit name="maths-101"/>
>   </student>
> </students>
>
> However, you should/can use the value of an element. So this does work:
>
> <units>
>   <unit name="maths-101" points="120"/>
> </units>
>
> <students>
>   <student>
>     <unit>maths-101</unit>
>   </student>
> </students>
>
> Hopefully this is helpful to others!
>
> ________________________________
> From: [email protected] <[email protected]> on
> behalf of Rupert Madden-Abbott <[email protected]>
> Sent: 29 April 2018 18:01:14
> To: jackson-user
> Subject: Re: [jackson-user] How can I deserialize XML object references?
>
> Hi Tatu,
>
> Here is an 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]> 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.
>
> --
> 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.

-- 
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