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

Reply via email to