Similar to #13797, if an exception occurs while reading stuff, the server throws a 500 with no body and doesn't print anything on stderr either, so the error is hidden from the user:
package org.acme.rest;
import javax.ws.rs.Consumes;
import javax.ws.rs.GET;
import javax.ws.rs.PUT;
import javax.ws.rs.Path;
import javax.ws.rs.Produces;
import javax.ws.rs.core.MediaType;
class FroMage {
public String name;
// required for Jackson
// public FroMage() {}
public FroMage(String name) {
this.name = name;
}
@Override
public String toString() {
return "Cheese: " + name;
}
}
@Path("negotiated")
public class Endpoint {
@Consumes(MediaType.APPLICATION_JSON)
@PUT
public FroMage putJson(FroMage fromage){
return fromage;
}
}
com.fasterxml.jackson.databind.exc.MismatchedInputException: Cannot construct instance of `org.acme.rest.FroMage` (although at least one Creator exists): cannot deserialize from Object value (no delegate- or property-based Creator)
at [Source: (ByteArrayInputStream); line: 1, column: 2]
at com.fasterxml.jackson.databind.exc.MismatchedInputException.from(MismatchedInputException.java:63)
at com.fasterxml.jackson.databind.DeserializationContext.reportInputMismatch(DeserializationContext.java:1455)
at com.fasterxml.jackson.databind.DeserializationContext.handleMissingInstantiator(DeserializationContext.java:1081)
at com.fasterxml.jackson.databind.deser.BeanDeserializerBase.deserializeFromObjectUsingNonDefault(BeanDeserializerBase.java:1332)
at com.fasterxml.jackson.databind.deser.BeanDeserializer.deserializeFromObject(BeanDeserializer.java:331)
at com.fasterxml.jackson.databind.deser.BeanDeserializer.deserialize(BeanDeserializer.java:164)
at com.fasterxml.jackson.databind.ObjectReader._bindAndClose(ObjectReader.java:2079)
at com.fasterxml.jackson.databind.ObjectReader.readValue(ObjectReader.java:1453)
at io.quarkus.resteasy.reactive.jackson.runtime.serialisers.JacksonMessageBodyReader.doReadFrom(JacksonMessageBodyReader.java:57)
at io.quarkus.resteasy.reactive.jackson.runtime.serialisers.JacksonMessageBodyReader.readFrom(JacksonMessageBodyReader.java:49)
at org.jboss.resteasy.reactive.server.handlers.RequestDeserializeHandler.readFrom(RequestDeserializeHandler.java:96)
at org.jboss.resteasy.reactive.server.handlers.RequestDeserializeHandler.handle(RequestDeserializeHandler.java:60)
at org.jboss.resteasy.reactive.server.handlers.RequestDeserializeHandler.handle(RequestDeserializeHandler.java:22)
at org.jboss.resteasy.reactive.common.core.AbstractResteasyReactiveContext.run(AbstractResteasyReactiveContext.java:108)
at io.netty.util.concurrent.AbstractEventExecutor.safeExecute(AbstractEventExecutor.java:164)
at io.netty.util.concurrent.SingleThreadEventExecutor.runAllTasks(SingleThreadEventExecutor.java:472)
at io.netty.channel.nio.NioEventLoop.run(NioEventLoop.java:500)
at io.netty.util.concurrent.SingleThreadEventExecutor$4.run(SingleThreadEventExecutor.java:989)
at io.netty.util.internal.ThreadExecutorMap$2.run(ThreadExecutorMap.java:74)
at io.netty.util.concurrent.FastThreadLocalRunnable.run(FastThreadLocalRunnable.java:30)
at java.base/java.lang.Thread.run(Thread.java:834)
Similar to #13797, if an exception occurs while reading stuff, the server throws a 500 with no body and doesn't print anything on stderr either, so the error is hidden from the user:
Now run:
You will get an empty 500.
The hidden exception is:
https://github.com/quarkusio/quarkus/issues/13798
$upstream:13798$