Here’s the solution to an obscure error that I couldn’t find an existing explanation for. When using a @MultipartForm parameter on a RestEasy JAX-RS endpoint, for example …
public class TestForm {
@FormParam("id")
@PartType("text/plain")
private String id;
public TestForm(String id) {
this.id = id;
}
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
}
… I was receiving this error any time I submitted a form to that endpoint:
JBWEB000065: HTTP Status 400 - JBWEB000309: type JBWEB000067: Status report JBWEB000068: message JBWEB000069: description JBWEB000120: The request sent by the client was syntactically incorrect. JBoss Web/7.4.8.Final-redhat-4
The JBoss server logs were no more enlightening, leaving only this as a clue:
18:22:36,686 WARN [org.jboss.resteasy.core.SynchronousDispatcher] (http-/0.0.0.0:8080-5) Failed executing POST /AudioMessages: org.jboss.resteasy.spi.ReaderException at org.jboss.resteasy.plugins.providers.multipart.MultipartFormAnnotationReader.readFrom(MultipartFormAnnotationReader.java:64) [resteasy-multipart-provider-2.3.8.Final-redhat-3.jar:] at org.jboss.resteasy.core.interception.MessageBodyReaderContextImpl.proceed(MessageBodyReaderContextImpl.java:106) [resteasy-jaxrs-2.3.8.Final-redhat-3.jar:] at org.jboss.resteasy.plugins.interceptors.encoding.GZIPDecodingInterceptor.read(GZIPDecodingInterceptor.java:63) [resteasy-jaxrs-2.3.8.Final-redhat-3.jar:] at org.jboss.resteasy.core.interception.MessageBodyReaderContextImpl.proceed(MessageBodyReaderContextImpl.java:109) [resteasy-jaxrs-2.3.8.Final-redhat-3.jar:]
Looking at the source code for that class and line-number (MultipartFormAnnotationReader.java:64) led to this:
...
58 try
59 {
60 obj = type.newInstance();
61 }
62 catch (InstantiationException e)
63 {
64 throw new ReaderException(e.getCause());
65 }
...
It should have been obvious at this point, but it wasn’t until I stopped thinking about it and my subconscious brain took over that I realised what was happening. I must have introduced a constructor to my @MultipartForm pojo and inadvertently removed the default constructor, causing line 64 above to fail.
Sure enough, revision history confirmed the change and the solution was simple. Add a default constructor to the TestForm class to solve the issue:
public class TestForm {
@FormParam("id")
@PartType("text/plain")
private String id;
public TestForm() {
}
...
}
Ironically I added the constructor for the purpose of integration testing, which didn’t seem to pick up the error it introduced.
?ell? ?ll, gu??! ? kn?w, my m?ss?ge ma? be to? ?pecific,
)
?ut m? s??ter f?und n??? man h?re ?nd the? marr?ed, so how about m???
I am 23 ?ears old, Elen?, from Rom?ni?, ? kn?w ?ngli?h and German languag?? also
?nd… I h?v? ?p?cif?c d???ase, named nym?h?man?a. Who know what ?? th??, can under?t?nd me (b?tt?r t? ??? it ?mm?di?tely)
?h ??s, I cook v?ry t??t?! ?nd ? lov? not only ?o?k
Im r??l girl, n?t pr??titute, and l?oking f?r serious ?nd hot rel?tion?h?p…
?n?w?y, ??u ??n find my prof?le her?: http://enencotilowland.tk/idl-63802/
Our AI-powered solution sends precise visitors to your site, costing significantly less than expensive paid ads. Learn how to increase your reach today.
https://ow.ly/f9zB50XSIGy