eclipse-ee4j / eclipse-ee4j/yasson
SerializationContextImpl marshall fails if one attribute in record is Enum
- Dominant language
- Java
- Stars
- 218
- Forks
- 109
- Avg merge
- 1d 5h
- Merged PRs (30d)
- 9
Description
SerializationContextImpl marshall fails if one attribute in record is Enum.
Record ColoredPoint has two attributes: Point p and Enum Color c. Serialization to json fails "error accessing getter 'p' declared"
Example:
public record Point(int x, int y) {}
enum Color { BLACK, RED, GREEN, BLUE};
record ColoredPoint(Point p, Color c) {};
record Rectangle(ColoredPoint upperLeft, ColoredPoint lowerRight) {};
Works:
System.out.println("Point: " + p1);
jsonStr = json.toJson(p1);
System.out.println(jsonStr);
p1 = json.fromJson(jsonStr, Point.class);
System.out.println("Point2: " + p1);
Not works:
ColoredPoint cp1 = new ColoredPoint(p1, Color.BLUE);
System.out.println("ColoredPoint: " + cp1);
jsonStr = json.toJson(cp1);
System.out.println(jsonStr);
cp1 = json.fromJson(jsonStr, ColoredPoint.class);
System.out.println("Point2: " + cp1);
Exception:
apr. 03, 2023 8:04:14 DOP. org.eclipse.yasson.internal.SerializationContextImpl marshall
SEVERE: Generating incomplete JSON
Exception in thread "main" jakarta.json.bind.JsonbException: Error accessing getter 'p' declared in 'class si.izum.json.ColoredPoint'
at org.eclipse.yasson.internal.model.PropertyModel.createReadHandle(PropertyModel.java:500)
at org.eclipse.yasson.internal.model.PropertyModel.(PropertyModel.java:157)
at org.eclipse.yasson.internal.ClassParser.lambda$parseProperties$0(ClassParser.java:70)
at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197)
at java.base/java.util.HashMap$ValueSpliterator.forEachRemaining(HashMap.java:1761)
at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509)
at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499)
at java.base/java.util.stream.ReduceOps$ReduceOp.evaluateSequential(ReduceOps.java:921)
at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234)
at java.base/java.util.stream.ReferencePipeline.collect(ReferencePipeline.java:682)
at org.eclipse.yasson.internal.ClassParser.parseProperties(ClassParser.java:71)
at org.eclipse.yasson.internal.MappingContext.lambda$createParseClassModelFunction$1(MappingContext.java:104)
at java.base/java.util.concurrent.ConcurrentHashMap.computeIfAbsent(ConcurrentHashMap.java:1708)
at org.eclipse.yasson.internal.MappingContext.getOrCreateClassModel(MappingContext.java:77)
at org.eclipse.yasson.internal.serializer.SerializationModelCreator.serializerChain(SerializationModelCreator.java:93)
at org.eclipse.yasson.internal.SerializationContextImpl.getRootSerializer(SerializationContextImpl.java:208)
at org.eclipse.yasson.internal.SerializationContextImpl.serializeObject(SerializationContextImpl.java:196)
at org.eclipse.yasson.internal.SerializationContextImpl.marshall(SerializationContextImpl.java:133)
at org.eclipse.yasson.internal.SerializationContextImpl.marshall(SerializationContextImpl.java:159)
at org.eclipse.yasson.internal.JsonBinding.toJson(JsonBinding.java:121)
at si.izum.json.DemoJsonB.main(DemoJsonB.java:33)
Also not works:
Rectangle r = new Rectangle(new ColoredPoint(p1, Color.RED), new ColoredPoint(p2, Color.GREEN));
System.out.println("Rectangle: " + r);
jsonStr = json.toJson(r);
System.out.println(jsonStr);
r = json.fromJson(jsonStr, Rectangle.class);
System.out.println("Rectangle2: " + r);
Java 17, Windows 11
Yasson 3.0.2
jakarta.json.bind
jakarta.json.bind-api
3.0.0
org.eclipse
yasson
3.0.2
Contributor guide
Assessment
This issue has not been assessed yet.