RESTEasy / Yasson throwing JsonbException: ... No default constructor found on EAP 7.4
Issue
- We are using the JDK17 record definition as shown and RESTEasy / Yasson and getting this exception below:
public record RecordExample(String message) {
}
Caused by: javax.json.bind.JsonbException: Cannot create instance of a class: class test.RecordExample, No default constructor found.
at org.eclipse.yasson@1.0.10.redhat-00001//org.eclipse.yasson.internal.serializer.ObjectDeserializer.getInstance(ObjectDeserializer.java:101)
at org.eclipse.yasson@1.0.10.redhat-00001//org.eclipse.yasson.internal.serializer.AbstractContainerDeserializer.deserialize(AbstractContainerDeserializer.java:65)
at org.eclipse.yasson@1.0.10.redhat-00001//org.eclipse.yasson.internal.Unmarshaller.deserializeItem(Unmarshaller.java:62)
at org.eclipse.yasson@1.0.10.redhat-00001//org.eclipse.yasson.internal.Unmarshaller.deserialize(Unmarshaller.java:51)
at org.eclipse.yasson@1.0.10.redhat-00001//org.eclipse.yasson.internal.JsonBinding.deserialize(JsonBinding.java:59)
at org.eclipse.yasson@1.0.10.redhat-00001//org.eclipse.yasson.internal.JsonBinding.fromJson(JsonBinding.java:66)
at deployment.example.war//test.SampleResrouce.getJsonBind(SampleResrouce.java:49)
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77)
at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.base/java.lang.reflect.Method.invoke(Method.java:568)
at org.jboss.resteasy.resteasy-jaxrs@3.15.7.Final-redhat-00001//org.jboss.resteasy.core.MethodInjectorImpl.invoke(MethodInjectorImpl.java:138)
at org.jboss.resteasy.resteasy-jaxrs@3.15.7.Final-redhat-00001//org.jboss.resteasy.core.ResourceMethodInvoker.internalInvokeOnTarget(ResourceMethodInvoker.java:546)
...
- Using RESTEasy / Yasson and getting this exception below with this class:
public class ClassExample {
private String message;
public ClassExample(String message) {
this.message = message;
}
public String getMessage() {
return message;
}
public void setMessage(String message) {
this.message = message;
}
}
This exception is thrown when jsonb tries to deserialize the class:
Caused by: javax.json.bind.JsonbException: Cannot create instance of a class: class test.ClassExample, No default constructor found.
at org.eclipse.yasson@1.0.10.redhat-00001//org.eclipse.yasson.internal.serializer.ObjectDeserializer.getInstance(ObjectDeserializer.java:101)
at org.eclipse.yasson@1.0.10.redhat-00001//org.eclipse.yasson.internal.serializer.AbstractContainerDeserializer.deserialize(AbstractContainerDeserializer.java:65)
at org.eclipse.yasson@1.0.10.redhat-00001//org.eclipse.yasson.internal.Unmarshaller.deserializeItem(Unmarshaller.java:62)
at org.eclipse.yasson@1.0.10.redhat-00001//org.eclipse.yasson.internal.Unmarshaller.deserialize(Unmarshaller.java:51)
at org.eclipse.yasson@1.0.10.redhat-00001//org.eclipse.yasson.internal.JsonBinding.deserialize(JsonBinding.java:59)
at org.eclipse.yasson@1.0.10.redhat-00001//org.eclipse.yasson.internal.JsonBinding.fromJson(JsonBinding.java:66)
at deployment.example.war//test.SampleResrouce.getJsonBindClass(SampleResrouce.java:40)
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77)
at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.base/java.lang.reflect.Method.invoke(Method.java:568)
at org.jboss.resteasy.resteasy-jaxrs@3.15.7.Final-redhat-00001//org.jboss.resteasy.core.MethodInjectorImpl.invoke(MethodInjectorImpl.java:138)
Environment
- Red Hat JBoss Enterprise Application Platform (EAP) 7.4
Subscriber exclusive content
A Red Hat subscription provides unlimited access to our knowledgebase, tools, and much more.