Yep, only fixed serializer
Do you want to do a PR for the other side?
Le mar. 2 avr. 2019 à 19:19, Xavier Dury <[email protected]> a écrit :
> Hi Romain,
>
> I tested your modification and it's working for serialization but it fails
> for deserialization:
>
> public static class UUIDSerializer implements
> JsonbSerializer<UUID> {
> public void serialize(UUID obj, JsonGenerator generator,
> SerializationContext ctx) {
> generator.write(obj.toString());
> }
> }
>
> public static class UUIDDeserializer implements
> JsonbDeserializer<UUID> {
> public UUID deserialize(JsonParser parser,
> DeserializationContext ctx, Type rtType) {
> return UUID.fromString(parser.getString());
> }
> }
>
> public static class UUIDHolder {
> @JsonbTypeSerializer(UUIDSerializer.class)
> @JsonbTypeDeserializer(UUIDDeserializer.class)
> public UUID uuid = UUID.randomUUID();
> }
>
> @Test
> public void testIt() {
> Jsonb jsonb = JsonbBuilder.create();
> StringWriter w = new StringWriter();
> jsonb.toJson(new UUIDHolder(), w);
> jsonb.fromJson(w.toString(), UUIDHolder.class);
> }
>
> java.lang.UnsupportedOperationException: Array handling with
> ObjectConverter currently not implemented
> at
> org.apache.johnzon.mapper.MappingParserImpl.toValue(MappingParserImpl.java:736)
> at
> org.apache.johnzon.mapper.MappingParserImpl.buildObject(MappingParserImpl.java:338)
> at
> org.apache.johnzon.mapper.MappingParserImpl.readObject(MappingParserImpl.java:141)
> at
> org.apache.johnzon.mapper.MappingParserImpl.readObject(MappingParserImpl.java:133)
> at
> org.apache.johnzon.mapper.MappingParserImpl.readObject(MappingParserImpl.java:125)
> at org.apache.johnzon.mapper.Mapper.mapObject(Mapper.java:328)
> at org.apache.johnzon.mapper.Mapper.readObject(Mapper.java:267)
> at org.apache.johnzon.mapper.Mapper.readObject(Mapper.java:262)
> at
> org.apache.johnzon.jsonb.JohnzonJsonb.fromJson(JohnzonJsonb.java:60)
>
> Xavier
>
> ________________________________________
> From: Xavier Dury <[email protected]>
> Sent: Tuesday, April 2, 2019 3:46 PM
> To: [email protected]
> Subject: Re: Possible problem with JsonbSerializer
>
> Hi Romain,
>
> yes it is a duplicate... I sent the first mail before confirming my
> subscription to the mailing list (first time posting) then sent it a second
> time not knowing the first one would be sent anyway after the
> confirmation... sorry about that.
>
> Xavier
>
> ________________________________________
> From: Romain Manni-Bucau <[email protected]>
> Sent: Tuesday, April 2, 2019 3:17 PM
> To: [email protected]
> Subject: Re: Possible problem with JsonbSerializer
>
> Hi Xavier,
>
> is it a duplicate - or did I mess up my inbox?
>
> In any case i opened https://issues.apache.org/jira/browse/JOHNZON-207 and
> pushed a first fix if you want to have a look.
>
> Romain Manni-Bucau
> @rmannibucau <https://twitter.com/rmannibucau> | Blog
> <https://rmannibucau.metawerx.net/> | Old Blog
> <http://rmannibucau.wordpress.com> | Github <
> https://github.com/rmannibucau> |
> LinkedIn <https://www.linkedin.com/in/rmannibucau> | Book
> <
> https://www.packtpub.com/application-development/java-ee-8-high-performance
> >
>
>
> Le mar. 2 avr. 2019 à 14:00, Xavier Dury <[email protected]> a écrit :
>
> > Hi,
> >
> > When trying the following code on Johnzon 1.1.12-SNAPSHOT:
> >
> > public class UUIDSerializer implements JsonbSerializer<UUID> {
> > public void serialize(UUID obj, JsonGenerator generator,
> > SerializationContext ctx) {
> > generator.flush();
> > System.out.println("!!!");
> > generator.write(obj.toString());
> > }
> > }
> >
> > public class UUIDHolder {
> > @JsonbTypeSerializer(UUIDSerializer.class)
> > public UUID uuid = UUID.randomUUID();
> > }
> >
> > JsonbBuilder.create().toJson(new UUIDHolder(), System.out);
> >
> > I get the following printed on System.out:
> >
> > {"uuid":{!!!
> >
> > and an exception:
> >
> > javax.json.stream.JsonGenerationException: write(param) is only valid in
> > arrays
> > at
> >
> org.apache.johnzon.core.JsonGeneratorImpl.checkArray(JsonGeneratorImpl.java:623)
> > at
> >
> org.apache.johnzon.core.JsonGeneratorImpl.write(JsonGeneratorImpl.java:384)
> > at
> >
> org.apache.johnzon.jsonb.SerializerTest$ConcreteSerializer.serialize(SerializerTest.java:249)
> > at
> >
> org.apache.johnzon.jsonb.SerializerTest$ConcreteSerializer.serialize(SerializerTest.java:1)
> > at
> >
> org.apache.johnzon.jsonb.JsonbAccessMode$WriterConverters.lambda$0(JsonbAccessMode.java:793)
> > at
> >
> org.apache.johnzon.mapper.MappingGeneratorImpl.writeValue(MappingGeneratorImpl.java:381)
> >
> > This looks kinda strange to me because, it seems that Johnzon tries to
> > start a new object (hence the opening bracket in the output in front of
> the
> > '!!!') before it passes control to the serializer. Why does Johnzon do
> > that? The serializer could decide that the object could be stored as an
> > object ({}), an array ([]) or a primitive value.
> >
> > Should I report an issue?
> >
> > Regards,
> > Xavier
>