quarkusio/quarkus · error · RuntimeException

Not implemented yet

Error message

Not implemented yet

What it means

ReactiveRestDataResource is a default interface whose methods are meant to be implemented by generated resource classes at build time (the generated subclass overrides list(Page, Sort) with real Hibernate Reactive/Panache code). If the raw default implementation is ever invoked, it throws 'Not implemented yet' — it exists only to define the REST contract, not to run.

Source

Thrown at extensions/panache/rest-data-panache/runtime/src/main/java/io/quarkus/rest/data/panache/ReactiveRestDataResource.java:30

 * <p>
 * User shouldn't use this interface directly but rather its sub-interfaces defined by the data store specific extensions.
 *
 * @param <Entity> Entity type that is handled by this resource.
 * @param <ID> ID type of the entity.
 */
public interface ReactiveRestDataResource<Entity, ID> {

    /**
     * Return entities as a JSON array.
     * The response is paged by default, but that could be disabled with {@link ResourceProperties} annotation.
     * Response content type: application/json.
     *
     * @param page Panache page instance that should be used in a query. Will be null if pagination is disabled.
     * @param sort Panache sort instance that should be used in a query.
     * @return A response with an entities JSON array.
     */
    default Uni<List<Entity>> list(Page page, Sort sort) {
        throw new RuntimeException("Not implemented yet");
    }

    /**
     * @return the total number of entities.
     */
    default Uni<Long> count() {
        throw new RuntimeException("Not implemented yet");
    }

    /**
     * Return an entity as a JSON object.
     * Response content type: application/json.
     *
     * @param id Entity identifier.
     * @return A response with a JSON object representing an entity.
     */
    default Uni<Entity> get(ID id) {
        throw new RuntimeException("Not implemented yet");

View on GitHub (pinned to e1c734241f)

Solutions

  1. Annotate your Panache entity/repository resource for generation (quarkus REST Data Panache setup) so the implementation is generated at build time, rather than implementing the interface yourself.
  2. Override list(Page, Sort) in your resource with a real implementation (e.g. PanacheQuery.page(...).list()).
  3. Rebuild the app (mvn clean package) to regenerate resources if generation was skipped.

Example fix

// before
class MyResource implements ReactiveRestDataResource<Person, Long> { }
// after
public class PersonResource implements ReactiveRestDataResource<Person, Long> {
    @Override
    public Uni<List<Person>> list(Page page, Sort sort) {
        return Person.findAll(sort).page(page).list();
    }
}
Defensive patterns

Strategy: try-catch

Validate before calling

// ensure the resource is generated (deployment-time), not hand-implemented
if (getClass().getMethod("list", Page.class, Sort.class)
        .getDeclaringClass() == ReactiveRestDataResource.class) {
    throw new IllegalStateException("list(Page, Sort) is not generated/overridden");
}

Try / catch

try {
    return resource.list(page, sort);
} catch (RuntimeException e) {
    if ("Not implemented yet".equals(e.getMessage())) {
        return fallbackList(page, sort); // custom Panache query
    }
    throw e;
}

Prevention

When it happens

Trigger: Runtime: a GET on the generated collection endpoint calls default list(Page, Sort) because the resource was NOT generated/overridden — e.g. using the interface directly in a custom resource, a generator regression that skipped method implementation, or calling the method on an anonymous/manual implementation.

Common situations: Developer implements ReactiveRestDataResource manually (or extends it partially) instead of using the generated resource; version change or build issue prevented method generation; a custom JAX-RS resource delegates to the interface defaults.

Related errors


AI-assisted analysis of quarkusio/quarkus@e1c734241f (2026-09-05). Data as JSON: /api/errors/506ef5c08513370d. Report an issue: GitHub.