yasson
yasson copied to clipboard
Fails to serialize generic class annotated with @JsonbTypeSerializer
Yasson 1.0.9 and 2.0.2 both fail running the following code, but succeed once @JsonbTypeSerializer
annotation is removed:
public class Yasson {
public static void main(String[] args) {
System.out.println(JsonbBuilder.create().toJson(new MyClass<String>()));
}
@JsonbTypeSerializer(MySerializer.class)
public static class MyClass<T> {
}
public static class MySerializer<T> implements JsonbSerializer<MyClass<T>> {
@Override
public void serialize(MyClass<T> o, JsonGenerator generator, SerializationContext context) {
context.serialize(new Object(), generator);
}
}
}
Stack trace:
Exception in thread "main" jakarta.json.bind.JsonbException: Internal error: Generic bound not found for type T declared in class java.lang.Class.
at org.eclipse.yasson.internal.Marshaller.marshall(Marshaller.java:79)
at org.eclipse.yasson.internal.Marshaller.marshall(Marshaller.java:101)
at org.eclipse.yasson.internal.JsonBinding.toJson(JsonBinding.java:126)
at _SANDBOX.Yasson.main(Yasson.java:11)
Caused by: java.lang.IllegalStateException: Generic bound not found for type T declared in class java.lang.Class.
at org.eclipse.yasson.internal.ReflectionUtils.resolveTypeArguments(ReflectionUtils.java:220)
at org.eclipse.yasson.internal.ComponentMatcher.resolveTypeArg(ComponentMatcher.java:351)
at org.eclipse.yasson.internal.ComponentMatcher.introspectSerializerBinding(ComponentMatcher.java:337)
at org.eclipse.yasson.internal.AnnotationIntrospector.getSerializerBinding(AnnotationIntrospector.java:319)
at org.eclipse.yasson.internal.AnnotationIntrospector.introspectCustomization(AnnotationIntrospector.java:737)
at org.eclipse.yasson.internal.MappingContext.lambda$createParseClassModelFunction$1(MappingContext.java:91)
at java.util.concurrent.ConcurrentHashMap.computeIfAbsent(ConcurrentHashMap.java:1660)
at org.eclipse.yasson.internal.MappingContext.getOrCreateClassModel(MappingContext.java:81)
at org.eclipse.yasson.internal.Marshaller.getRootSerializer(Marshaller.java:161)
at org.eclipse.yasson.internal.Marshaller.serializeRoot(Marshaller.java:142)
at org.eclipse.yasson.internal.Marshaller.marshall(Marshaller.java:73)
... 3 more