{"record":{"id":"74a79f985d137e78","repo":"apache/seatunnel","slug":"common-02-74a79f","errorCode":"COMMON-02","errorMessage":"Json JSON convert/parse '<payload>' operation failed.","messagePattern":"Json JSON convert/parse '<payload>' operation failed\\.","errorType":"error_code","errorClass":"SeaTunnelRuntimeException","httpStatus":null,"severity":"error","filePath":"seatunnel-formats/seatunnel-format-json/src/main/java/org/apache/seatunnel/format/json/ogg/OggJsonDeserializationSchema.java","lineNumber":237,"sourceCode":"                                String.format(REPLICA_IDENTITY_EXCEPTION, \"DELETE\"));\n                    }\n                    beforeDelete.setRowKind(RowKind.DELETE);\n                    if (tablePath != null) {\n                        beforeDelete.setTableId(tablePath.toString());\n                    }\n                    if (tsNode != null) {\n                        MetadataUtil.setEventTime(beforeDelete, ts);\n                    }\n                    out.collect(beforeDelete);\n                    break;\n                default:\n                    throw new IllegalStateException(\n                            String.format(\"Unknown operation type '%s'.\", op));\n            }\n\n        } catch (RuntimeException e) {\n            if (!ignoreParseErrors) {\n                throw CommonError.jsonOperationError(FORMAT, jsonNode.toString(), e);\n            }\n        }\n    }\n\n    private ObjectNode convertBytes(byte[] message) throws SeaTunnelRuntimeException {\n        try {\n            return (ObjectNode) jsonDeserializer.deserializeToJsonNode(message);\n        } catch (Throwable t) {\n            throw CommonError.jsonOperationError(FORMAT, new String(message), t);\n        }\n    }\n\n    @Override\n    public void deserialize(byte[] message, Collector<SeaTunnelRow> out) {\n        TablePath tablePath =\n                Optional.ofNullable(catalogTable).map(CatalogTable::getTablePath).orElse(null);\n        deserializeMessage(message, out, tablePath);\n    }","sourceCodeStart":219,"sourceCodeEnd":255,"githubUrl":"https://github.com/apache/seatunnel/blob/cf67b549a7a6c35fa0beb12d83c62892427ea919/seatunnel-formats/seatunnel-format-json/src/main/java/org/apache/seatunnel/format/json/ogg/OggJsonDeserializationSchema.java#L219-L255","documentation":"OggJsonDeserializationSchema.deserializeMessage wraps any RuntimeException raised while parsing an Oracle GoldenGate (Ogg) JSON message into a SeaTunnelRow, unless ignoreParseErrors is enabled. The parsed JSON node's toString is embedded in the message. It indicates the message's envelope (op/before/after/ table keys) or values did not match the expected Ogg format.","triggerScenarios":"deserializeMessage processes an Ogg JSON message where the operation 'op' value is unrecognized (hits IllegalStateException) or row conversion of before/after fields throws a RuntimeException (type mismatch, missing 'table'/'op_type' keys).","commonSituations":"GoldenGate trail files configured with unsupported op_type values; schema drift on the Oracle source changing column types; Ogg replicat emitting extra/renamed metadata keys; heartbeats/markers routed into the data topic.","solutions":["Inspect jsonNode in the error message and verify op/op_type values are among the supported set (I/U/D etc.)","Adjust the Ogg replicat configuration so it emits the expected JSON structure and only supported operations","Update the connector's Oracle table schema to match upstream DDL changes","Set ignore-parse-errors=true to skip non-conforming messages rather than fail the job"],"exampleFix":"// before: message with op \"TRUNCATE\" reaches parser -> Unknown operation type 'TRUNCATE'\n// after: filter unsupported ops upstream\n[metrics: op_type in ('I','U','D')] // exclude TRUNCATE in Ogg handler or enable ignore-parse-errors","handlingStrategy":"validation","validationCode":"JsonNode root = mapper.readTree(message);\nString op = root.path(\"op_type\").asText(\"\");\nboolean supported = op.equals(\"I\") || op.equals(\"U\") || op.equals(\"D\");","typeGuard":"boolean isSupportedOggOp(JsonNode n) {\n    String op = n == null ? null : n.path(\"op_type\").asText(null);\n    return \"I\".equals(op) || \"U\".equals(op) || \"D\".equals(op);\n}","tryCatchPattern":"try {\n    schema.deserialize(message, out);\n} catch (SeaTunnelRuntimeException e) {\n    log.warn(\"Skip malformed ogg message: {}\", message, e);\n}","preventionTips":["Configure Ogg replicat to emit only I/U/D operations","Enable ignore-parse-errors for noisy streams","Keep Oracle table schema in the connector current","Verify op_type key names match the Ogg JSON handler version"],"tags":["json","cdc","ogg","oracle"],"backgroundTag":"json-parse-error","analyzedSha":"cf67b549a7a6c35fa0beb12d83c62892427ea919","analyzedAt":"2026-09-10T21:44:55.265Z","contentChangedAt":"2026-09-10T21:44:55.265Z","schemaVersion":2},"datasetVersion":"2026-09-14T11:17:12.474Z"}