apache/pulsar · error · IllegalArgumentException

Trigger Data is not provided

Error message

Trigger Data is not provided

What it means

Thrown by the trigger-request validation in ComponentImpl when neither trigger data (input string) nor an uploaded input stream is supplied. Triggering a function means feeding it data, so at least one of the two must be present. Topic may be null, but the trigger payload itself cannot.

Solutions

  1. Provide the trigger data as the request body (e.g. curl --data 'payload').
  2. Or attach the input via multipart file upload (uploadedInputStream).
  3. If programmatically calling, assert at least one of input/uploadedInputStream is non-null first.

Example fix

// before
curl -X POST /admin/v3/functions/public/default/my-fn/trigger
// after
curl -X POST /admin/v3/functions/public/default/my-fn/trigger --data 'test-message'
Defensive patterns

Strategy: validation

Validate before calling

if ((input == null || input.isEmpty()) && uploadedInputStream == null) throw new IllegalArgumentException("trigger data (input or file) required");

Type guard

boolean hasTriggerData(String input, java.io.InputStream stream) { return (input != null && !input.isEmpty()) || stream != null; }

Try / catch

try { admin.functions().triggerFunction(t, ns, fn, topic, input, is); }
catch (IllegalArgumentException e) { /* log missing trigger data */ }

Prevention

When it happens

Trigger: POST to /functions/{tenant}/{namespace}/{functionName}/trigger with an empty body and no multipart uploadedInputStream, or ComponentImpl.triggerFunction called with input == null && uploadedInputStream == null.

Common situations: curl POST with no --data body; multipart form missing the data field; scripts testing functions that forget to attach the trigger input.

Understand the failure class

Background: Missing required parameter errors: what 'X is required' and 'the required X param is missing' mean, and how to fix them — this error's family across 27 libraries.

Related errors


AI-assisted analysis of apache/pulsar@820761864e (2026-09-06). Data as JSON: /api/errors/096853656f0666c5. Report an issue: GitHub.

Appendix: source

Thrown at pulsar-functions/worker/src/main/java/org/apache/pulsar/functions/worker/rest/api/ComponentImpl.java:1661

    private void validateTriggerRequestParams(final String tenant,
                                              final String namespace,
                                              final String functionName,
                                              final String topic,
                                              final String input,
                                              final InputStream uploadedInputStream) {
        // Note : Checking topic is not required it can be null

        if (tenant == null) {
            throw new IllegalArgumentException("Tenant is not provided");
        }
        if (namespace == null) {
            throw new IllegalArgumentException("Namespace is not provided");
        }
        if (functionName == null) {
            throw new IllegalArgumentException("Function name is not provided");
        }
        if (uploadedInputStream == null && input == null) {
            throw new IllegalArgumentException("Trigger Data is not provided");
        }
    }

    private void throwStateStoreUnvailableResponse() {
        throw new RestException(Status.SERVICE_UNAVAILABLE,
                "State storage client is not done initializing. " + "Please try again in a little while.");
    }

    public static String createPackagePath(String tenant, String namespace, String functionName, String fileName) {
        return String.format("%s/%s/%s/%s", tenant, namespace, Codec.encode(functionName),
                getUniquePackageName(Codec.encode(fileName)));
    }

    /**
     * @deprecated use {@link #isAuthorizedRole(String, String, AuthenticationParameters)} instead.
     */
    @Deprecated
    public boolean isAuthorizedRole(String tenant, String namespace, String clientRole,

View on GitHub (pinned to 820761864e)