Excellent, thank you!

One thing that could help would be simply sample test code -- I don't
(and won't) add it in codebase prior to usual CLA, but I could write
local test for my own verification at least. I think fix is easy
enough.

The reason I ask this is just due to timing: 2.9.0 is coming up fast
so it'd be great to have the fix (which I'm happy to add), even if
verification test took longer (assuming permission takes a while,
perhaps it won't).

-+ Tatu +-



On Tue, Jun 27, 2017 at 3:31 AM, Michael Liedtke <[email protected]> wrote:
> I'll work on a PR if I can. It would be my first time going through the
> process so it might take a little while to setup but I'd love to contribute
> (also need work approvals to contribute).
>
> For now I have opened an issue
> (https://github.com/FasterXML/jackson-dataformats-binary/issues/97) and will
> see if I can start working on a PR.
>
> On Tuesday, June 27, 2017 at 12:53:18 AM UTC+1, Tatu Saloranta wrote:
>>
>> On Mon, Jun 26, 2017 at 1:08 PM, Michael Liedtke <[email protected]>
>> wrote:
>> > Hi Tatu,
>> > The example was using the ClassNameIdResolver as the default resolver
>> > (it
>> > was buried in the linked test case, sorry about the obscurity).
>>
>> Ah. That makes sense then.
>>
>> > I took a deeper look at the Jackson-dataformat-ion code and think I
>> > found
>> > the issue. It seems Jackson does provide all the options necessary to
>> > make
>> > this work like you had thought. However, the IonAnnotationTypeSerializer
>> > didn't implement the "writeTypePrefixForScalar" method so the
>> > opportunity to
>> > write the ion annotation for @JsonValue types was ignored. After adding
>> > the
>> > necessary code to write the ion annotation to this method (copying from
>> > "writeTypePrefixForObject" method), it works as expected and the
>> > annotation
>> > is written on serialization.
>>
>> Could you file an issue for `jackson-dataformats-binary` please? Ion
>> backend just moved there.
>> (or PR for extra points -- a test case would definitely make sense).
>>
>> -+ Tatu +-
>>
>> >
>> > Michael
>> >
>> >
>> > On Monday, June 26, 2017 at 6:39:34 PM UTC+1, Tatu Saloranta wrote:
>> >>
>> >> I haven't quite read the whole thing, but first things first: I think
>> >> that you should not try to combine `@JsonValue` with polymorphic type
>> >> handling. This is problematic because of ambiguity (during processing)
>> >> between type of Java Object being returned by method, and logical type
>> >> it represents (that is, POJO that has @JsonValue-annotated method).
>> >> Similar problem affects Delegating `@JsonCreator` approach.
>> >>
>> >> Jackson internals will try to handle this case best it can, but as
>> >> things are I am not 100% confident things work end-to-end.
>> >> Specific issues relate to TypeSerializer/TypeDeserializer not having
>> >> proper context to know the distinction (here's the Object for which
>> >> type id; and here's Object with contents to serialize), as well as
>> >> possibly differing representations for the two ("shape" in JSON).
>> >>
>> >> Having said all of above, code included seems to be missing actual
>> >> `@JsonTypeInfo` on `ClassA`.
>> >> Is this intentional? (possible default typing is enabled)
>> >>
>> >> -+ Tatu +-
>> >>
>> >>
>> >> On Sun, Jun 25, 2017 at 10:05 AM, Michael Liedtke <[email protected]>
>> >> wrote:
>> >> > Hello,
>> >> > I was hoping for some feedback on the following problem involving
>> >> > Type
>> >> > Resolvers during serialization of classes that use @JsonValue. The
>> >> > example I
>> >> > will give will use the upcoming Ion data-format. Specifically, using
>> >> > Ion
>> >> > type annotations to resolve types via the
>> >> > IonAnnotationTypeResolverBuilder
>> >> > much like the PolymorphicRoundTripTest.
>> >> >
>> >> > Given a mapper configured with a module much like in the linked test:
>> >> >
>> >> > IonObjectMapper mapper = new IonObjectMapper();
>> >> > mapper.registerModule(new IonAnnotationModule());
>> >> >
>> >> >
>> >> > And the following classes:
>> >> >
>> >> >
>> >> > @JsonTypeResolver(IonAnnotationTypeResolverBuilder.class)
>> >> > public static class ClassA {}
>> >> > public static class SubClassB extends ClassA {
>> >> >     public final String value;
>> >> >     @JsonCreator
>> >> >     public SubClassB(String value) {
>> >> >         this.value = value;
>> >> >     }
>> >> >     @JsonValue
>> >> >     public String getValue() {
>> >> >         return value;
>> >> >     }
>> >> >
>> >> >
>> >> >
>> >> >     @Override
>> >> >
>> >> >     public String toString() {
>> >> >
>> >> >         return "SubClassB[value=" + value + "]";
>> >> >
>> >> >     }
>> >> >
>> >> > }
>> >> >
>> >> >
>> >> > I can successfully deserialize to the correct type:
>> >> >
>> >> > ClassA a =
>> >> > mapper.readValue("'some.test.package.SubClassB'::\"some_value\"",
>> >> > ClassA.class);
>> >> >
>> >> > System.out.println(a); //Output: SubClassB[value=some_value]
>> >> >
>> >> >
>> >> > But cannot seem to include type information when serialization:
>> >> >
>> >> > System.out.println(mapper.writeValueAsString(a)); //Output:
>> >> > "some_value"
>> >> >
>> >> >
>> >> > The desired output would be:
>> >> > 'some.test.package.SubClassB'::"some_value". Is
>> >> > this possible? I  see a potential option in the JsonValueSerializer
>> >> > class
>> >> > but unsure if/how this would be used to solve the problem.
>> >> >
>> >> > Thank you,
>> >> > Michael
>> >> >
>> >> >
>> >> > --
>> >> > 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.

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