Tanzu Data Flow Dashboard and REST API /jobs/executions return 500 error due to Date Deserialization Failure
search cancel

Tanzu Data Flow Dashboard and REST API /jobs/executions return 500 error due to Date Deserialization Failure

book

Article ID: 438475

calendar_today

Updated On:

Products

VMware Tanzu Spring Essentials

Issue/Introduction

When attempting to access the Jobs view in the VMware Tanzu Data Flow Dashboard or calling the /jobs/executions REST API endpoint, the request fails with an HTTP 500 error.

The server logs for Tanzu Data Flow will contain a ConversionFailedException similar to the following: 

Failed to convert from type [java.lang.String] to type [java.util.Date] for value [2026-04-22T11:41:46.713Z]

Environment

  • Product: VMware Tanzu Data Flow
  • Version: 2.0.4
  • Component: Spring Cloud Data Flow Server / JdbcSearchableJobExecutionDao
  • Database: Any supported backend (e.g., MariaDB, MySQL, PostgreSQL)

Cause

The issue is caused by a Spring Batch job execution parameter stored in the BATCH_JOB_EXECUTION_PARAMS metadata table. When a parameter is stored with PARAMETER_TYPE = java.util.Date and a PARAMETER_VALUE in ISO-8601 format containing a Z (Zulu/UTC) suffix (e.g., 2026-04-22T11:41:46.713Z), the JdbcSearchableJobExecutionDao fails to deserialize it.

The internal date parser used by Tanzu Data Flow in this specific path does not support the ISO-8601 UTC timestamp format with the Z suffix when converting back to a java.util.Date object, resulting in a 500 error that breaks the UI and API.

Resolution

 The issue is planned to be fixed in VMware Tanzu Data Flow 2.0.5 and 2.1.1 that will be released in May 19th. 


In the meantime, you can use the Data Flow REST API with action=CLEANUP,REMOVE_DATA against the affected task execution ID(s) to remove the execution and its data as a workaround, following below instructions.

1. Get a CF/UAA OAuth token

Log in to CF first if needed:

cf login -a https://api.<system-domain> --sso
Then get the token:
 
AUTH="$(cf oauth-token)"
 
 

3. Identify the affected task execution ID

Using the dashboard or the shell. E.g
dataflow:>task execution list
╔═════════════════════╤══╤══════════════════════════╤══════════════════════════╤═════════╗
║      Task Name      │ID│        Start Time        │         End Time         │Exit Code║
╠═════════════════════╪══╪══════════════════════════╪══════════════════════════╪═════════╣
║scenario-date-repro-2│5 │2026-04-29T10:15:55.527541│2026-04-29T10:15:56.128531│0        ║
║scenario-date-repro-2│4 │2026-04-29T10:14:12.545661│2026-04-29T10:14:12.832808│1        ║
║scenario-date-repro  │3 │2026-04-29T10:08:30.565065│2026-04-29T10:08:30.892126│1        ║
╚═════════════════════╧══╧══════════════════════════╧══════════════════════════╧═════════╝
 

4. Remove the affected execution data

Run:

curl -k -v \
-H "Authorization: $AUTH" \
-X DELETE \
"https://<data-flow-server-route>/tasks/executions/<task-execution-id>?action=CLEANUP,REMOVE_DATA"

Example:

curl -k -v \
-H "Authorization: $AUTH" \
-X DELETE \
"https://dataflow.example.com/tasks/executions/5?action=CLEANUP,REMOVE_DATA"
 

5. Verify that /jobs/executions works again

 
curl -k \
-H "Authorization: $AUTH" \
"https://<data-flow-server-route>/jobs/executions"
 

Prevention

For future launches, avoid storing ISO-8601 UTC timestamps ending in Z as java.util.Date job parameters.

Use java.lang.String instead:

 
run.date=2026-04-22T11:41:46.713Z,java.lang.String,true

instead of:

run.date=2026-04-22T11:41:46.713Z,java.util.Date,true