quarkusio/quarkus · error · RuntimeException

There are no functions to process lambda

Error message

There are no functions to process lambda

What it means

Funqy's Google Cloud Functions binding throws RuntimeException when quarkus.funqy.export is unset and the function registry contains zero invokers, i.e. no @Funq functions were found to process requests.

Source

Thrown at extensions/funqy/funqy-google-cloud-functions/runtime/src/main/java/io/quarkus/funqy/gcp/functions/FunqyCloudFunctionsBindingRecorder.java:68

                JavaType javaOutputType = objectMapper.constructType(invoker.getOutputType());
                ObjectWriter writer = objectMapper.writerFor(javaOutputType);
                invoker.getBindingContext().put(ObjectWriter.class.getName(), writer);
            }
        }

        FunctionConstructor.CONTAINER = bc;
    }

    public void chooseInvoker() {
        // this is done at Runtime so that we can change it with an environment variable.
        if (config.getValue().export().isPresent()) {
            invoker = FunctionRecorder.registry.matchInvoker(config.getValue().export().get());
            if (invoker == null) {
                throw new RuntimeException(
                        "quarkus.funqy.export does not match a function: " + config.getValue().export().get());
            }
        } else if (FunctionRecorder.registry.invokers().size() == 0) {
            throw new RuntimeException("There are no functions to process lambda");

        } else if (FunctionRecorder.registry.invokers().size() > 1) {
            throw new RuntimeException("Too many functions.  You need to set quarkus.funqy.export");
        } else {
            invoker = FunctionRecorder.registry.invokers().iterator().next();
        }
        if (invoker.hasInput()) {
            reader = (ObjectReader) invoker.getBindingContext().get(ObjectReader.class.getName());
        }
        if (invoker.hasOutput()) {
            writer = (ObjectWriter) invoker.getBindingContext().get(ObjectWriter.class.getName());
        }
    }

    /**
     * Handle RawBackgroundFunction
     *
     * @param event

View on GitHub (pinned to e1c734241f)

Solutions

  1. Add at least one class with a @Funq method plus the funqy-google-cloud-functions dependency
  2. Verify the function class is a discovered CDI bean in a scanned package
  3. Do not rely on the export setting when no functions exist

Example fix

// before: no functions in project
// after
import io.quarkus.funqy.Funq;
public class GreetingResource {
    @Funq
    public String greet(String name) { return "Hello " + name; }
}
Defensive patterns

Strategy: validation

Validate before calling

// before deploy, confirm at least one @Funq method exists
grep -rn "@Funq" src/main/java || echo "no funq functions"

Try / catch

try {
    binding.init();
} catch (RuntimeException e) {
    log.error("No @Funq functions registered", e);
}

Prevention

When it happens

Trigger: chooseInvoker runs at startup with no export configured and FunctionRecorder.registry.invokers() is empty — the application contains no @Funq methods or the beans defining them were never registered.

Common situations: Deploying a project with no funq methods; missing funqy dependency/bean discovery so functions never register; deploying an empty scaffold project by mistake.

Related errors


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