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 <kal...@hotmail.com> Sent: Tuesday, April 2, 2019 3:46 PM To: dev@johnzon.apache.org 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 <rmannibu...@gmail.com> Sent: Tuesday, April 2, 2019 3:17 PM To: dev@johnzon.apache.org 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 <kal...@hotmail.com> 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