[
https://issues.apache.org/jira/browse/JOHNZON-335?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=17279131#comment-17279131
]
Romain Manni-Bucau commented on JOHNZON-335:
--------------------------------------------
Hello Trevor,
Normally mvn [clean] install is sufficient to build and you can do PR on github
on @apache/johnzon repository.
> JsonGeneratorImpl.prepareValue throws JsonGenerationException when
> JsonGenerator.write is called from a nested JsonbSerializer
> ------------------------------------------------------------------------------------------------------------------------------
>
> Key: JOHNZON-335
> URL: https://issues.apache.org/jira/browse/JOHNZON-335
> Project: Johnzon
> Issue Type: Bug
> Components: JSON-B
> Affects Versions: 1.2.9, 1.2.10
> Reporter: Trevor Kerby
> Priority: Major
> Attachments: JohnzonNestedSerializerTest.java
>
>
> When using two JsonbSerializers registered in JsonbConfig, with one
> serializer - the _outer serializer_ - calling SerializationContext.serialize
> on an object annotated to be serialized with the other serializer - the
> _inner serializer_ - Johnzon fails to write the expected json and throws a
> JsonGenerationException. This seems to happen upon any JsonGenerator.write
> method called inside the _inner serializer_.
> {code:java}
> public static class OuterTestSerializer implements
> JsonbSerializer<OuterTestModel> {
> @Override
> public void serialize(OuterTestModel obj, JsonGenerator
> generator, SerializationContext ctx) {
> generator.writeStartObject();
> generator.write("foo", "generated in outer serializer");
> ctx.serialize("inner", new InnerTestModel(), generator);
> generator.writeEnd();
> }
> }
> public static class InnerTestSerializer implements
> JsonbSerializer<InnerTestModel> {
> @Override
> public void serialize(InnerTestModel obj, JsonGenerator
> generator, SerializationContext ctx) {
> generator.writeStartObject();
> generator.write("bar", "generated in inner serializer");
> generator.writeEnd();
> }
> }
> {code}
> Below is the formatted version of the json that's expected
> {code:json}
> {
> "foo": "generated in outer serializer",
> "inner":
> {
> "bar": "generated in inner serializer"
> }
> }
> {code}
> However Johnzon throws this expection
> {code}
> javax.json.stream.JsonGenerationException: state IN_OBJECT does not accept a
> value
> at
> org.apache.johnzon.core.JsonGeneratorImpl.prepareValue(JsonGeneratorImpl.java:643)
> at
> org.apache.johnzon.core.JsonGeneratorImpl.writeStartObject(JsonGeneratorImpl.java:137)
> at
> org.apache.johnzon.mapper.DynamicMappingGenerator$InObjectOrPrimitiveJsonGenerator.writeStartObject(DynamicMappingGenerator.java:109)
> at
> org.apache.johnzon.mapper.DynamicMappingGenerator$InObjectOrPrimitiveJsonGenerator.ensureStart(DynamicMappingGenerator.java:99)
> at
> org.apache.johnzon.mapper.DynamicMappingGenerator$InObjectOrPrimitiveJsonGenerator.writeStartObject(DynamicMappingGenerator.java:106)
> at
> usa.kerby.tk.jhal.JohnzonNestedSerializerTest$InnerTestSerializer.serialize(JohnzonNestedSerializerTest.java:55)
> at
> usa.kerby.tk.jhal.JohnzonNestedSerializerTest$InnerTestSerializer.serialize(JohnzonNestedSerializerTest.java:52)
> at
> org.apache.johnzon.jsonb.JohnzonBuilder.lambda$null$24(JohnzonBuilder.java:313)
> at
> org.apache.johnzon.mapper.MappingGeneratorImpl.writeObject(MappingGeneratorImpl.java:97)
> at
> org.apache.johnzon.mapper.DynamicMappingGenerator.writeObject(DynamicMappingGenerator.java:53)
> at
> org.apache.johnzon.jsonb.serializer.JohnzonSerializationContext.serialize(JohnzonSerializationContext.java:36)
> at
> usa.kerby.tk.jhal.JohnzonNestedSerializerTest$OuterTestSerializer.serialize(JohnzonNestedSerializerTest.java:46)
> at
> usa.kerby.tk.jhal.JohnzonNestedSerializerTest$OuterTestSerializer.serialize(JohnzonNestedSerializerTest.java:41)
> at
> org.apache.johnzon.jsonb.JohnzonBuilder.lambda$null$24(JohnzonBuilder.java:313)
> at
> org.apache.johnzon.mapper.MappingGeneratorImpl.doWriteObject(MappingGeneratorImpl.java:174)
> at org.apache.johnzon.mapper.Mapper.writeObject(Mapper.java:235)
> at
> org.apache.johnzon.mapper.Mapper.writeObjectWithGenerator(Mapper.java:208)
> at org.apache.johnzon.mapper.Mapper.writeObject(Mapper.java:203)
> at org.apache.johnzon.mapper.Mapper.writeObjectAsString(Mapper.java:252)
> at org.apache.johnzon.jsonb.JohnzonJsonb.toJson(JohnzonJsonb.java:268)
> at
> usa.kerby.tk.jhal.JohnzonNestedSerializerTest.testNestedSerializer(JohnzonNestedSerializerTest.java:28)
> {code}
> Tested against Yasson 1.0.8, Johnzon 1.2.9, and Johnzon 1.2.10. Yasson
> produces the expected JSON. Am I right in thinking this is a bug?
--
This message was sent by Atlassian Jira
(v8.3.4#803005)