Partial Execution of Error Catcher Flow Following Type Mismatch Error

I am experiencing an issue where an Error Catcher stops processing after the first task. The main flow triggers the Error Catcher due to a Data Mapping/Transformation error (attempting to parse an empty array string [] into a non-conforming JSON schema).

While the Error Catcher successfully initiates, it only executes the initial task within the error-handling flow and terminates immediately after, leaving subsequent tasks unexecuted. There are no edge conditions preventing the flow.

Error Step 1 Task didnt raise any error by itself and so the next task must have been executed. However I see the error coming from the main integration flow prevents it from executing. This design (or probably a bug) defeats the purpose of catching an error and do some post processing on it inside Error Catcher steps (for example, logging error details to a db).

The task step which raises the error -

As seen, only the first step under error catcher got executed and not afterwards.

Pasting the application integration code below -

{
“name”: (PII Removed by Staff)
“updateTime”: “2026-02-25T04:29:00.487Z”,
“createTime”: “2026-02-25T04:28:53.709Z”,
“lastModifierEmail”: “abc@xyz-works.com”,
“triggerConfigs”: [{
“label”: “API Trigger”,
“startTasks”: [{
“taskId”: “26”
}],
“properties”: {
“Trigger name”: “Test-Catch-Block-Duplicate”,
“Scheduled Time spec”: “2 21 * * *”
},
“triggerType”: “API”,
“triggerNumber”: “1”,
“triggerId”: “api_trigger/Test-Catch-Block-Duplicate”,
“position”: {
“x”: 140,
“y”: 45
},
“errorCatcherId”: “ErrorCatcher_2”,
“inputVariables”: {
},
“outputVariables”: {
}
}],
“taskConfigs”: [{
“task”: “JavaScriptTask”,
“taskId”: “24”,
“parameters”: {
“javaScriptEngine”: {
“key”: “javaScriptEngine”,
“value”: {
“stringValue”: “V8”
}
},
“script”: {
“key”: “script”,
“value”: {
“stringValue”: “\n/\n * Function that is called during the JavaScript Task execution.\n * @paramparam {IntegrationEvent} event\n */\nfunction executeScript(event) {\n}"
}
}
},
“nextTasks”: [{
“taskId”: “25”
}],
“taskExecutionStrategy”: “WHEN_ALL_SUCCEED”,
“displayName”: “Error Step 1 (Do Nothing)”,
“externalTaskType”: “ERROR_TASK”,
“position”: {
“x”: 620,
“y”: 181
}
}, {
“task”: “JavaScriptTask”,
“taskId”: “25”,
“parameters”: {
“javaScriptEngine”: {
“key”: “javaScriptEngine”,
“value”: {
“stringValue”: “V8”
}
},
“script”: {
“key”: “script”,
“value”: {
“stringValue”: "\n/
\n * Function that is called during the JavaScript Task execution.@paramn * @param {IntegrationEvent} event\n */\nfunction executeScript(event) {\n}”
}
}
},
“taskExecutionStrategy”: “WHEN_ALL_SUCCEED”,
“displayName”: “Error Step 2 (Do Nothing)”,
“externalTaskType”: “ERROR_TASK”,
“position”: {
“x”: 620,
“y”: 317
}
}, {
“task”: “JavaScriptTask”,
“taskId”: “26”,
“parameters”: {
“javaScriptEngine”: {
“key”: “javaScriptEngine”,
“value”: {
“stringValue”: “V8”
}
},
“script”: {
“key”: “script”,
“value”: {
“stringValue”: “\n/**\n * Function that is called during the JavaScript Task execu@paramion.\n * @param {IntegrationEvent} event\n */\nfunction executeScript(event) {\n}”
}
}
},
“nextTasks”: [{
“taskId”: “27”
}],
“taskExecutionStrategy”: “WHEN_ANY_SUCCEED”,
“displayName”: “Step 1 - Do Nothing”,
“externalTaskType”: “NORMAL_TASK”,
“position”: {
“x”: 140,
“y”: 181
}
}, {
“task”: “FieldMappingTask”,
“taskId”: “27”,
“parameters”: {
“FieldMappingConfigTaskParameterKey”: {
“key”: “FieldMappingConfigTaskParameterKey”,
“value”: {
“json@typealue”: “{\n “@type”: “type.googleapis.com/enterprise.crm.eventbus.proto.FieldMappingConfig”,\n “mappedFields”: [{\n “inputField”: {\n “fieldType”: “JSON_VALUE”,\n “transformExpression”: {\n “initialValue”: {\n “literalValue”: {\n “stringValue”: “”\n }\n },\n “transformationFunctions”: [{\n “functionType”: {\n “stringFunction”: {\n “functionName”: “TO_JSON”\n }\n }\n }]\n }\n },\n “outputField”: {\n “referenceKey”: “$someJSON$”,\n “fieldType”: “JSON_VALUE”,\n “cardinality”: “OPTIONAL”\n }\n }]\n}”
}
}
},
“taskExecutionStrategy”: “WHEN_ALL_SUCCEED”,
“displayName”: “Step 2 - Convert Empty Array String (Raise Error)”,
“externalTaskType”: “NORMAL_TASK”,
“position”: {
“x”: 140,
“y”: 317
}
}],
“integrationParameters”: [{
“key”: “ExecutionMode”,
“dataType”: “STRING_VALUE”,
“defaultValue”: {
“stringValue”: “”
},
“displayName”: “ExecutionMode”,
“isTransient”: true
}, {
“key”: “ErrorInfo”,
“dataType”: “JSON_VALUE”,
“defaultValue”: {
“jsonValue”: “{\n “message”: “”,\n “code”: 0.0\n}”
},
“displayName”: “ErrorInfo”,
“isTransient”: true,
“jsonSchema”: “{\n “type”: “object”,\n “properties”: {\n “code”: {\n “type”: “number”\n },\n “message”: {\n “type”: “string”\n }\n }\n}”
}, {
“key”: “ExecutionId”,
“dataType”: “STRING_VALUE”,
“defaultValue”: {
“stringValue”: “”
},
“displayName”: “ExecutionId”,
“isTransient”: true
}, {
“key”: “IntegrationName”,
“dataType”: “STRING_VALUE”,
“defaultValue”: {
“stringValue”: “”
},
“displayName”: “IntegrationName”,
“isTransient”: true
}, {
“key”: “Region”,
“dataType”: “STRING_VALUE”,
“defaultValue”: {
“stringValue”: “”
},
“displayName”: “Region”,
“isTransient”: true
}, {
“key”: “ProjectId”,
“dataType”: “STRING_VALUE”,
“defaultValue”: {
“stringValue”: “”
},
“displayName”: “ProjectId”,
“isTransient”: true
}, {
“key”: “someJSON”,
“dataType”: “JSON_VALUE”,
“displayName”: “someJSON”,
“jsonSchema”: “{\n “type”: “object”,\n “properties”: {\n “var1”: {\n “type”: “string”\n },\n “var2”: {\n “type”: “string”\n }\n }\n}”
}],
“databasePersistencePolicy”: “DATABASE_PERSISTENCE_ASYNC”,
“errorCatcherConfigs”: [{
“label”: “ErrorCatcher”,
“errorCatcherNumber”: “2”,
“startErrorTasks”: [{
“taskId”: “24”
}],
“position”: {
“x”: 620,
“y”: 45
},
“errorCatcherId”: “ErrorCatcher_2”
}]
}

Thank you.

Hey, thanks for your question :slight_smile:

We’ll keep it on our radar to ensure it gets noticed and we encourage the community to share their thoughts.

In the meantime, check out the Application Integration knowledge hub, where you’ll find curated content from Googlers :right_arrow: Knowledge Hub - Google Developer forums

Is there any update on this bug? Thank you.

The behavior described here usually happens when a type mismatch error occurs before the integration flow completes its execution logic. In Google Cloud Application Integration, when a task throws a runtime error such as a type mismatch, the system may partially execute earlier steps but then redirect the flow to the configured error catcher once the failure is detected. This can give the impression that the flow executed only partially. It’s important to review the data mapping and variable types used in the affected task, since mismatched data types can interrupt normal execution and trigger the error-handling mechanism instead. Proper validation of input data and consistent type definitions across the flow can help prevent this issue.