Jordi
Jordi

Reputation: 23277

quarkus mutiny: neo4j type mismatch compilation handling

This is my code:

@Path("/hello")
@AllArgsConstructor
public class GreetingResource {

    private final Driver driver;

    @GET
    @Produces(MediaType.TEXT_PLAIN)
    public Uni<String> hello() {
        return Multi.createFrom().resource(
            driver::rxSession,
            session -> session.readTransaction(tx -> {
                RxResult result = tx.run("MATCH (f:Fruit) RETURN f.name as name ORDER BY f.name");
                return Multi.createFrom().publisher(result.records()).map(record -> record.get("name").asString());
            })
        ).withFinalizer(session -> {
            return Multi.createFrom().publisher(session.close());
        });
    }

}

I'm getting those two compilation messages:

Type mismatch: cannot convert from Multi<Object> to Uni<String>
Type mismatch: cannot convert from Multi<Object> to Uni<Void>

I don't quite figure since record.get("name").asString returns me an String...

Any ideas?

Upvotes: 0

Views: 122

Answers (1)

Clement
Clement

Reputation: 3222

The finalizer function must return a Uni<Void>. In your code, it returns a Publisher<Object>. Also, your method is going to return a Multi and not a Uni.

Try the following approach:

@GET
@Produces(MediaType.TEXT_PLAIN)
public Multi<String> hello() {
    return Multi.createFrom().resource(
            driver::rxSession,
            session -> session.readTransaction(tx -> {
                RxResult result = tx.run(
                  "MATCH (f:Fruit) RETURN f.name as name ORDER BY f.name");
                return Multi.createFrom().publisher(result.records())
                   .map(record -> record.get("name").asString());
            })
    ).withFinalizer(session -> {
        return Uni.createFrom().publisher(session.close());
    });
}

Upvotes: 0

Related Questions