eclipse-ee4j / eclipse-ee4j/yasson

@JsonbTypeAdapter recognized but not used for record classes

Open
#607 2 comments 0 reactions 0 assignees View on GitHub
bug
Dominant language
Java
Stars
218
Forks
109
Avg merge
1d 5h
Merged PRs (30d)
9

Description

**Describe the bug**

```
record MyClass(@JsonbProperty("my_set_field") @JsonbTypeAdapter(SetAdapter.class) Set entries) {};

public class SetAdapter implements JsonbAdapter> { /* ... */ }
```

Exception:

```
Caused by: jakarta.json.bind.JsonbException: Adapter of runtime type class java.lang.String does not match property type interface java.util.Set
at org.eclipse.yasson@2.0.4/org.eclipse.yasson.internal.AnnotationIntrospector.getAdapterBindingFromAnnotation(AnnotationIntrospector.java:247)
at org.eclipse.yasson@2.0.4/org.eclipse.yasson.internal.AnnotationIntrospector.getAdapterBinding(AnnotationIntrospector.java:221)
at org.eclipse.yasson@2.0.4/org.eclipse.yasson.internal.model.PropertyModel.introspectCustomization(PropertyModel.java:272)
at org.eclipse.yasson@2.0.4/org.eclipse.yasson.internal.model.PropertyModel.(PropertyModel.java:171)
at org.eclipse.yasson@2.0.4/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:1787)
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@2.0.4/org.eclipse.yasson.internal.ClassParser.parseProperties(ClassParser.java:71)
at org.eclipse.yasson@2.0.4/org.eclipse.yasson.internal.MappingContext.lambda$createParseClassModelFunction$1(MappingContext.java:97)
at java.base/java.util.concurrent.ConcurrentHashMap.computeIfAbsent(ConcurrentHashMap.java:1740)
at org.eclipse.yasson@2.0.4/org.eclipse.yasson.internal.MappingContext.getOrCreateClassModel(MappingContext.java:81)
at org.eclipse.yasson@2.0.4/org.eclipse.yasson.internal.Unmarshaller.deserializeItem(Unmarshaller.java:60)
at org.eclipse.yasson@2.0.4/org.eclipse.yasson.internal.Unmarshaller.deserialize(Unmarshaller.java:51)
at org.eclipse.yasson@2.0.4/org.eclipse.yasson.internal.JsonBinding.deserialize(JsonBinding.java:59)
at org.eclipse.yasson@2.0.4/org.eclipse.yasson.internal.JsonBinding.fromJson(JsonBinding.java:66)
```

**To Reproduce**

See classes above

**Expected behavior**

The 2nd parameter is used for comparison as it is for POJOs.

**System information:**
- OS: Mac
- Java Version: 17, 20
- Yasson Version: 2.0.4

**Additional context**

./.

Contributor guide

Open the contributing guide

Assessment

This issue has not been assessed yet.

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.