snowdrop-zen / quarkus

Quarkus: Supersonic Subatomic Java.
https://quarkus.io
Apache License 2.0
1 stars 0 forks source link

RESTEasy Reactive: empty 500 response when reader throws #230

Closed snowdrop-bot closed 3 years ago

snowdrop-bot commented 3 years ago

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;
    }
}
        <dependency>
            <groupId>io.quarkus</groupId>
            <artifactId>quarkus-resteasy-reactive</artifactId>
        </dependency>
        <dependency>
            <groupId>io.quarkus</groupId>
            <artifactId>quarkus-resteasy-reactive-jackson</artifactId>
        </dependency>

Now run:

$ curl -v --include -X PUT --data '{"name": "brie"}' --header 'Content-Type: application/json' http://localhost:8080/negotiated

You will get an empty 500.

The hidden exception is:

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)

https://github.com/quarkusio/quarkus/issues/13798


$upstream:13798$