On Sat, Nov 11, 2017 at 3:40 AM, Dawid Weiss <[email protected]> wrote:
>> Unfortunately reading/writing Object Id values, references, requires
>> support by value (de)serializers
>
> Thanks Tatu. I sort of figured it out. I also tried to implement
> serialization inside
> my own handler based on the infrastructure provided by Jackson
> (annotations and ObjectIdReader, etc.),
> but there seemed to be always some piece missing -- browsing through the code
> those pieces are typically passed around but are not easily provided via the 
> contexts
> (serialization or deserialization).

This is quite possible in that access may have been added in a way
that just supports usage
via BeanDeserializer/BeanSerializer.

> I also checked the tests, but I didn't find any obvious example there.
>
> I would gladly resort to implementing my own id-resolution inside the
> serializer -- this seems the easiest way to go, actually,
> but I'd appreciate some help on understanding the lifecycle of the
> "per-serialization/deserialization" contexts inside the
> serializer and deserializer so that I can implement in in a nice way.

Ok. So, contexts in question are:

- DeserializationContext for deserialization
- SerializerProvider for serialization

(latter really should be `SerializationContext`, but that's since
serialization side was fully develop
(for something like 0.9.5 :-) ) before tackling deserialization --
this just for historical interest)

and they are constructed during initialization of `readValue()` /
`writeValue()` calls by `ObjectMapper`
(and `ObjectReader` / `ObjectWriter`).
Both contain attribute context, which you could use for keeping track
of ids; you do not have to clean
them up or anything as any values set are just dropped once
`readValue()`/`writeValue()` call finishes.

> I'll need a per-serialization (or deserialization) bidirectional
> mapping between object IDs and objects. I can hack this
> inside the serialize/deserialize methods and lazily check/ create a
> custom attribute in SerializerProvider and
> in DeserializationContext. Is there any nicer way of doing this you
> can thing of?

That sounds like a reasonable approach to me.

If you did want to see how `ObjectIdReader` etc worked, you could
check `BeanDeserializerBase`
(from its construction from `BeanDeserializerBuilder` to `createContextual`).

Actually one more thing that might be useful: if you could file an
issue for `jackson-databind` for
something like "Please include a test for Object Id handling for a
custom type", that'd be useful.
While I can't guarantee I'll do that, it's possible I might -- and I
do go through issues as sort of
todo list every now and then. I do think it should be doable and
documented, even if only via
unit tests: it is something that should be available for, say,
datatype libraries.

-+ Tatu +-

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