mattcasters commented on issue #8711: URL: https://github.com/apache/hop/issues/8711#issuecomment-5918850515
## JSON implementation plan — part 3 of 3 [Plan index / part 1](https://github.com/apache/hop/issues/8711#issuecomment-5918849385) --- #### Migration batch: `core` - `core/src/main/java/org/apache/hop/core/row/IValueMeta.java` - `core/src/main/java/org/apache/hop/core/row/JsonRowMeta.java` - `core/src/main/java/org/apache/hop/core/row/value/ValueMetaAvroRecord.java` - `core/src/main/java/org/apache/hop/core/row/value/ValueMetaBase.java` - `core/src/main/java/org/apache/hop/core/row/value/ValueMetaFactory.java` - `core/src/main/java/org/apache/hop/core/variables/Variables.java` - `core/src/main/java/org/apache/hop/metadata/serializer/json/JsonMetadataParser.java` - `core/src/main/java/org/apache/hop/metadata/serializer/json/JsonMetadataSerializer.java` - `core/src/test/java/org/apache/hop/core/row/value/ValueMetaAvroRecordTest.java` ```bash ./tools/with-isolated-display.sh ./mvnw -pl core -am -Pskip-uitest -DskipTests=false -Dspotless.skip=true -Drat.skip=true install ``` Expected after this batch: real module tests executed, zero failures/errors, `BUILD SUCCESS`; source-usage guard for this module green. Commit this module's listed files and its guard/behavior tests only, message `Migrate core JSON values from json-simple to Jackson`. Exact new guard path: `core/src/test/java/org/apache/hop/jsonmigration/JsonSimpleUsageTest.java`. After this batch is GREEN: ```bash git add -- core/src/main/java/org/apache/hop/core/row/IValueMeta.java core/src/main/java/org/apache/hop/core/row/JsonRowMeta.java core/src/main/java/org/apache/hop/core/row/value/ValueMetaAvroRecord.java core/src/main/java/org/apache/hop/core/row/value/ValueMetaBase.java core/src/main/java/org/apache/hop/core/row/value/ValueMetaFactory.java core/src/main/java/org/apache/hop/core/variables/Variables.java core/src/main/java/org/apache/hop/metadata/serializer/json/JsonMetadataParser.java core/src/main/java/org/apache/hop/metadata/serializer/json/JsonMetadataSerializer.java core/src/test/java/org/apache/hop/core/row/value/ValueMetaAvroRecordTest.java core/src/test/java/org/apache/hop/jsonmigration/JsonSimpleUsageTest.java git commit -m "Migrate core JSON values from json-simple to Jackson" ``` #### Migration batch: `engine` - `engine/src/main/java/org/apache/hop/core/metadata/SerializableMetadataProvider.java` - `engine/src/main/java/org/apache/hop/pipeline/PipelineConfiguration.java` - `engine/src/main/java/org/apache/hop/workflow/WorkflowConfiguration.java` - `engine/src/main/java/org/apache/hop/www/RegisterPipelineServlet.java` - `engine/src/main/java/org/apache/hop/www/RegisterWorkflowServlet.java` - `engine/src/main/java/org/apache/hop/www/api/v1/resources/MetadataResource.java` - `engine/src/main/java/org/apache/hop/www/async/AsyncRunServlet.java` ```bash ./tools/with-isolated-display.sh ./mvnw -pl engine -am -Pskip-uitest -DskipTests=false -Dspotless.skip=true -Drat.skip=true install ``` Expected after this batch: real module tests executed, zero failures/errors, `BUILD SUCCESS`; source-usage guard for this module green. Commit this module's listed files and its guard/behavior tests only, message `Migrate engine JSON values from json-simple to Jackson`. Exact new guard path: `engine/src/test/java/org/apache/hop/jsonmigration/JsonSimpleUsageTest.java`. After this batch is GREEN: ```bash git add -- engine/src/main/java/org/apache/hop/core/metadata/SerializableMetadataProvider.java engine/src/main/java/org/apache/hop/pipeline/PipelineConfiguration.java engine/src/main/java/org/apache/hop/workflow/WorkflowConfiguration.java engine/src/main/java/org/apache/hop/www/RegisterPipelineServlet.java engine/src/main/java/org/apache/hop/www/RegisterWorkflowServlet.java engine/src/main/java/org/apache/hop/www/api/v1/resources/MetadataResource.java engine/src/main/java/org/apache/hop/www/async/AsyncRunServlet.java engine/src/test/java/org/apache/hop/jsonmigration/JsonSimpleUsageTest.java git commit -m "Migrate engine JSON values from json-simple to Jackson" ``` #### Migration batch: `plugins/engines/beam` - `plugins/engines/beam/src/main/java/org/apache/hop/beam/core/transform/TransformFn.java` - `plugins/engines/beam/src/main/java/org/apache/hop/beam/transforms/bigtable/BeamBigtableInputMeta.java` - `plugins/engines/beam/src/main/java/org/apache/hop/beam/transforms/bigtable/BeamBigtableOutputMeta.java` - `plugins/engines/beam/src/main/java/org/apache/hop/beam/transforms/bigtable/BigtableRowToHopRowFn.java` - `plugins/engines/beam/src/main/java/org/apache/hop/beam/transforms/bigtable/HopToBigtableFn.java` ```bash ./tools/with-isolated-display.sh ./mvnw -pl plugins/engines/beam -am -Pskip-uitest -DskipTests=false -Dspotless.skip=true -Drat.skip=true install ``` Expected after this batch: real module tests executed, zero failures/errors, `BUILD SUCCESS`; source-usage guard for this module green. Commit this module's listed files and its guard/behavior tests only, message `Migrate plugins/engines/beam JSON values from json-simple to Jackson`. Exact new guard path: `plugins/engines/beam/src/test/java/org/apache/hop/jsonmigration/JsonSimpleUsageTest.java`. After this batch is GREEN: ```bash git add -- plugins/engines/beam/src/main/java/org/apache/hop/beam/core/transform/TransformFn.java plugins/engines/beam/src/main/java/org/apache/hop/beam/transforms/bigtable/BeamBigtableInputMeta.java plugins/engines/beam/src/main/java/org/apache/hop/beam/transforms/bigtable/BeamBigtableOutputMeta.java plugins/engines/beam/src/main/java/org/apache/hop/beam/transforms/bigtable/BigtableRowToHopRowFn.java plugins/engines/beam/src/main/java/org/apache/hop/beam/transforms/bigtable/HopToBigtableFn.java plugins/engines/beam/src/test/java/org/apache/hop/jsonmigration/JsonSimpleUsageTest.java git commit -m "Migrate plugins/engines/beam JSON values from json-simple to Jackson" ``` #### Migration batch: `plugins/misc/git` - `plugins/misc/git/src/main/java/org/apache/hop/git/provider/BitbucketRepositoryBrowser.java` - `plugins/misc/git/src/main/java/org/apache/hop/git/provider/BitbucketResourceClient.java` - `plugins/misc/git/src/main/java/org/apache/hop/git/provider/GitApiHttp.java` - `plugins/misc/git/src/main/java/org/apache/hop/git/provider/GitHubRepositoryBrowser.java` - `plugins/misc/git/src/main/java/org/apache/hop/git/provider/GitHubResourceClient.java` - `plugins/misc/git/src/main/java/org/apache/hop/git/provider/GitIssueActivityMapper.java` - `plugins/misc/git/src/main/java/org/apache/hop/git/provider/GitJsonLists.java` - `plugins/misc/git/src/main/java/org/apache/hop/git/provider/GitLabRepositoryBrowser.java` - `plugins/misc/git/src/main/java/org/apache/hop/git/provider/GitLabResourceClient.java` - `plugins/misc/git/src/main/java/org/apache/hop/git/provider/GiteaRepositoryBrowser.java` - `plugins/misc/git/src/main/java/org/apache/hop/git/provider/GiteaResourceClient.java` - `plugins/misc/git/src/main/java/org/apache/hop/git/provider/LocalGitResourceClient.java` - `plugins/misc/git/src/test/java/org/apache/hop/git/provider/GitHubResourceClientTest.java` - `plugins/misc/git/src/test/java/org/apache/hop/git/provider/GitJsonListsTest.java` ```bash ./tools/with-isolated-display.sh ./mvnw -pl plugins/misc/git -am -Pskip-uitest -DskipTests=false -Dspotless.skip=true -Drat.skip=true install ``` Expected after this batch: real module tests executed, zero failures/errors, `BUILD SUCCESS`; source-usage guard for this module green. Commit this module's listed files and its guard/behavior tests only, message `Migrate plugins/misc/git JSON values from json-simple to Jackson`. Exact new guard path: `plugins/misc/git/src/test/java/org/apache/hop/jsonmigration/JsonSimpleUsageTest.java`. After this batch is GREEN: ```bash git add -- plugins/misc/git/src/main/java/org/apache/hop/git/provider/BitbucketRepositoryBrowser.java plugins/misc/git/src/main/java/org/apache/hop/git/provider/BitbucketResourceClient.java plugins/misc/git/src/main/java/org/apache/hop/git/provider/GitApiHttp.java plugins/misc/git/src/main/java/org/apache/hop/git/provider/GitHubRepositoryBrowser.java plugins/misc/git/src/main/java/org/apache/hop/git/provider/GitHubResourceClient.java plugins/misc/git/src/main/java/org/apache/hop/git/provider/GitIssueActivityMapper.java plugins/misc/git/src/main/java/org/apache/hop/git/provider/GitJsonLists.java plugins/misc/git/src/main/java/org/apache/hop/git/provider/GitLabRepositoryBrowser.java plugins/misc/git/src/main/java/org/apache/hop/git/provider/GitLabResourceClient.java plugins/misc/git/src/main/java/org/apache/hop/git/provider/GiteaRepositoryBrowser.java plugins/misc/git/src/main/java/org/apache/hop/git/provider/GiteaResourceClient.java plugins/misc/git/src/main/java/org/apache/hop/git /provider/LocalGitResourceClient.java plugins/misc/git/src/test/java/org/apache/hop/git/provider/GitHubResourceClientTest.java plugins/misc/git/src/test/java/org/apache/hop/git/provider/GitJsonListsTest.java plugins/misc/git/src/test/java/org/apache/hop/jsonmigration/JsonSimpleUsageTest.java git commit -m "Migrate plugins/misc/git JSON values from json-simple to Jackson" ``` #### Migration batch: `plugins/misc/projects` - `plugins/misc/projects/src/main/java/org/apache/hop/projects/git/BitbucketRepositoryBrowser.java` - `plugins/misc/projects/src/main/java/org/apache/hop/projects/git/GitHubRepositoryBrowser.java` - `plugins/misc/projects/src/main/java/org/apache/hop/projects/git/GitLabRepositoryBrowser.java` ```bash ./tools/with-isolated-display.sh ./mvnw -pl plugins/misc/projects -am -Pskip-uitest -DskipTests=false -Dspotless.skip=true -Drat.skip=true install ``` Expected after this batch: real module tests executed, zero failures/errors, `BUILD SUCCESS`; source-usage guard for this module green. Commit this module's listed files and its guard/behavior tests only, message `Migrate plugins/misc/projects JSON values from json-simple to Jackson`. Exact new guard path: `plugins/misc/projects/src/test/java/org/apache/hop/jsonmigration/JsonSimpleUsageTest.java`. After this batch is GREEN: ```bash git add -- plugins/misc/projects/src/main/java/org/apache/hop/projects/git/BitbucketRepositoryBrowser.java plugins/misc/projects/src/main/java/org/apache/hop/projects/git/GitHubRepositoryBrowser.java plugins/misc/projects/src/main/java/org/apache/hop/projects/git/GitLabRepositoryBrowser.java plugins/misc/projects/src/test/java/org/apache/hop/jsonmigration/JsonSimpleUsageTest.java git commit -m "Migrate plugins/misc/projects JSON values from json-simple to Jackson" ``` #### Migration batch: `plugins/resolvers/pipeline` - `plugins/resolvers/pipeline/src/main/java/org/apache/hop/resolvers/pipeline/VariableResolverPipeline.java` ```bash ./tools/with-isolated-display.sh ./mvnw -pl plugins/resolvers/pipeline -am -Pskip-uitest -DskipTests=false -Dspotless.skip=true -Drat.skip=true install ``` Expected after this batch: real module tests executed, zero failures/errors, `BUILD SUCCESS`; source-usage guard for this module green. Commit this module's listed files and its guard/behavior tests only, message `Migrate plugins/resolvers/pipeline JSON values from json-simple to Jackson`. Exact new guard path: `plugins/resolvers/pipeline/src/test/java/org/apache/hop/jsonmigration/JsonSimpleUsageTest.java`. After this batch is GREEN: ```bash git add -- plugins/resolvers/pipeline/src/main/java/org/apache/hop/resolvers/pipeline/VariableResolverPipeline.java plugins/resolvers/pipeline/src/test/java/org/apache/hop/jsonmigration/JsonSimpleUsageTest.java git commit -m "Migrate plugins/resolvers/pipeline JSON values from json-simple to Jackson" ``` #### Migration batch: `plugins/tech/ai` - `plugins/tech/ai/src/main/java/org/apache/hop/ai/engine/AiAdvisorMetadataContext.java` ```bash ./tools/with-isolated-display.sh ./mvnw -pl plugins/tech/ai -am -Pskip-uitest -DskipTests=false -Dspotless.skip=true -Drat.skip=true install ``` Expected after this batch: real module tests executed, zero failures/errors, `BUILD SUCCESS`; source-usage guard for this module green. Commit this module's listed files and its guard/behavior tests only, message `Migrate plugins/tech/ai JSON values from json-simple to Jackson`. Exact new guard path: `plugins/tech/ai/src/test/java/org/apache/hop/jsonmigration/JsonSimpleUsageTest.java`. After this batch is GREEN: ```bash git add -- plugins/tech/ai/src/main/java/org/apache/hop/ai/engine/AiAdvisorMetadataContext.java plugins/tech/ai/src/test/java/org/apache/hop/jsonmigration/JsonSimpleUsageTest.java git commit -m "Migrate plugins/tech/ai JSON values from json-simple to Jackson" ``` #### Migration batch: `plugins/tech/avro` - `plugins/tech/avro/src/main/java/org/apache/hop/avro/transforms/avrodecode/AvroDecodeFieldFinder.java` ```bash ./tools/with-isolated-display.sh ./mvnw -pl plugins/tech/avro -am -Pskip-uitest -DskipTests=false -Dspotless.skip=true -Drat.skip=true install ``` Expected after this batch: real module tests executed, zero failures/errors, `BUILD SUCCESS`; source-usage guard for this module green. Commit this module's listed files and its guard/behavior tests only, message `Migrate plugins/tech/avro JSON values from json-simple to Jackson`. Exact new guard path: `plugins/tech/avro/src/test/java/org/apache/hop/jsonmigration/JsonSimpleUsageTest.java`. After this batch is GREEN: ```bash git add -- plugins/tech/avro/src/main/java/org/apache/hop/avro/transforms/avrodecode/AvroDecodeFieldFinder.java plugins/tech/avro/src/test/java/org/apache/hop/jsonmigration/JsonSimpleUsageTest.java git commit -m "Migrate plugins/tech/avro JSON values from json-simple to Jackson" ``` #### Migration batch: `plugins/tech/databricks` - `plugins/tech/databricks/src/main/java/org/apache/hop/databricks/client/RestDatabricksFilesClient.java` - `plugins/tech/databricks/src/main/java/org/apache/hop/databricks/client/RestDatabricksJobsClient.java` - `plugins/tech/databricks/src/main/java/org/apache/hop/databricks/deploy/DatabricksJobSpecFactory.java` ```bash ./tools/with-isolated-display.sh ./mvnw -pl plugins/tech/databricks -am -Pskip-uitest -DskipTests=false -Dspotless.skip=true -Drat.skip=true install ``` Expected after this batch: real module tests executed, zero failures/errors, `BUILD SUCCESS`; source-usage guard for this module green. Commit this module's listed files and its guard/behavior tests only, message `Migrate plugins/tech/databricks JSON values from json-simple to Jackson`. Exact new guard path: `plugins/tech/databricks/src/test/java/org/apache/hop/jsonmigration/JsonSimpleUsageTest.java`. After this batch is GREEN: ```bash git add -- plugins/tech/databricks/src/main/java/org/apache/hop/databricks/client/RestDatabricksFilesClient.java plugins/tech/databricks/src/main/java/org/apache/hop/databricks/client/RestDatabricksJobsClient.java plugins/tech/databricks/src/main/java/org/apache/hop/databricks/deploy/DatabricksJobSpecFactory.java plugins/tech/databricks/src/test/java/org/apache/hop/jsonmigration/JsonSimpleUsageTest.java git commit -m "Migrate plugins/tech/databricks JSON values from json-simple to Jackson" ``` #### Migration batch: `plugins/tech/elastic` - `plugins/tech/elastic/src/main/java/org/apache/hop/execution/elastic/ElasticExecutionInfoLocation.java` ```bash ./tools/with-isolated-display.sh ./mvnw -pl plugins/tech/elastic -am -Pskip-uitest -DskipTests=false -Dspotless.skip=true -Drat.skip=true install ``` Expected after this batch: real module tests executed, zero failures/errors, `BUILD SUCCESS`; source-usage guard for this module green. Commit this module's listed files and its guard/behavior tests only, message `Migrate plugins/tech/elastic JSON values from json-simple to Jackson`. Exact new guard path: `plugins/tech/elastic/src/test/java/org/apache/hop/jsonmigration/JsonSimpleUsageTest.java`. After this batch is GREEN: ```bash git add -- plugins/tech/elastic/src/main/java/org/apache/hop/execution/elastic/ElasticExecutionInfoLocation.java plugins/tech/elastic/src/test/java/org/apache/hop/jsonmigration/JsonSimpleUsageTest.java git commit -m "Migrate plugins/tech/elastic JSON values from json-simple to Jackson" ``` #### Migration batch: `plugins/tech/neo4j` - `plugins/tech/neo4j/src/main/java/org/apache/hop/neo4j/core/data/GraphData.java` - `plugins/tech/neo4j/src/main/java/org/apache/hop/neo4j/core/data/GraphNodeData.java` - `plugins/tech/neo4j/src/main/java/org/apache/hop/neo4j/core/data/GraphPropertyData.java` - `plugins/tech/neo4j/src/main/java/org/apache/hop/neo4j/core/data/GraphRelationshipData.java` - `plugins/tech/neo4j/src/main/java/org/apache/hop/neo4j/model/GraphModel.java` - `plugins/tech/neo4j/src/main/java/org/apache/hop/neo4j/model/arrows/ArrowsAppImporter.java` - `plugins/tech/neo4j/src/main/java/org/apache/hop/neo4j/model/sw/SolutionsWorkbenchImporter.java` - `plugins/tech/neo4j/src/main/java/org/apache/hop/neo4j/shared/NeoHopData.java` - `plugins/tech/neo4j/src/main/java/org/apache/hop/neo4j/transforms/cypher/Cypher.java` ```bash ./tools/with-isolated-display.sh ./mvnw -pl plugins/tech/neo4j -am -Pskip-uitest -DskipTests=false -Dspotless.skip=true -Drat.skip=true install ``` Expected after this batch: real module tests executed, zero failures/errors, `BUILD SUCCESS`; source-usage guard for this module green. Commit this module's listed files and its guard/behavior tests only, message `Migrate plugins/tech/neo4j JSON values from json-simple to Jackson`. Exact new guard path: `plugins/tech/neo4j/src/test/java/org/apache/hop/jsonmigration/JsonSimpleUsageTest.java`. After this batch is GREEN: ```bash git add -- plugins/tech/neo4j/src/main/java/org/apache/hop/neo4j/core/data/GraphData.java plugins/tech/neo4j/src/main/java/org/apache/hop/neo4j/core/data/GraphNodeData.java plugins/tech/neo4j/src/main/java/org/apache/hop/neo4j/core/data/GraphPropertyData.java plugins/tech/neo4j/src/main/java/org/apache/hop/neo4j/core/data/GraphRelationshipData.java plugins/tech/neo4j/src/main/java/org/apache/hop/neo4j/model/GraphModel.java plugins/tech/neo4j/src/main/java/org/apache/hop/neo4j/model/arrows/ArrowsAppImporter.java plugins/tech/neo4j/src/main/java/org/apache/hop/neo4j/model/sw/SolutionsWorkbenchImporter.java plugins/tech/neo4j/src/main/java/org/apache/hop/neo4j/shared/NeoHopData.java plugins/tech/neo4j/src/main/java/org/apache/hop/neo4j/transforms/cypher/Cypher.java plugins/tech/neo4j/src/test/java/org/apache/hop/jsonmigration/JsonSimpleUsageTest.java git commit -m "Migrate plugins/tech/neo4j JSON values from json-simple to Jackson" ``` #### Migration batch: `plugins/tech/opensearch` - `plugins/tech/opensearch/src/main/java/org/apache/hop/execution/opensearch/OpenSearchExecutionInfoLocation.java` ```bash ./tools/with-isolated-display.sh ./mvnw -pl plugins/tech/opensearch -am -Pskip-uitest -DskipTests=false -Dspotless.skip=true -Drat.skip=true install ``` Expected after this batch: real module tests executed, zero failures/errors, `BUILD SUCCESS`; source-usage guard for this module green. Commit this module's listed files and its guard/behavior tests only, message `Migrate plugins/tech/opensearch JSON values from json-simple to Jackson`. Exact new guard path: `plugins/tech/opensearch/src/test/java/org/apache/hop/jsonmigration/JsonSimpleUsageTest.java`. After this batch is GREEN: ```bash git add -- plugins/tech/opensearch/src/main/java/org/apache/hop/execution/opensearch/OpenSearchExecutionInfoLocation.java plugins/tech/opensearch/src/test/java/org/apache/hop/jsonmigration/JsonSimpleUsageTest.java git commit -m "Migrate plugins/tech/opensearch JSON values from json-simple to Jackson" ``` #### Migration batch: `plugins/tech/salesforce` - `plugins/tech/salesforce/src/main/java/org/apache/hop/pipeline/transforms/salesforce/SalesforceConnection.java` - `plugins/tech/salesforce/src/test/java/org/apache/hop/pipeline/transforms/salesforce/SalesforceConnectionRecordExtractionTest.java` ```bash ./tools/with-isolated-display.sh ./mvnw -pl plugins/tech/salesforce -am -Pskip-uitest -DskipTests=false -Dspotless.skip=true -Drat.skip=true install ``` Expected after this batch: real module tests executed, zero failures/errors, `BUILD SUCCESS`; source-usage guard for this module green. Commit this module's listed files and its guard/behavior tests only, message `Migrate plugins/tech/salesforce JSON values from json-simple to Jackson`. Exact new guard path: `plugins/tech/salesforce/src/test/java/org/apache/hop/jsonmigration/JsonSimpleUsageTest.java`. After this batch is GREEN: ```bash git add -- plugins/tech/salesforce/src/main/java/org/apache/hop/pipeline/transforms/salesforce/SalesforceConnection.java plugins/tech/salesforce/src/test/java/org/apache/hop/pipeline/transforms/salesforce/SalesforceConnectionRecordExtractionTest.java plugins/tech/salesforce/src/test/java/org/apache/hop/jsonmigration/JsonSimpleUsageTest.java git commit -m "Migrate plugins/tech/salesforce JSON values from json-simple to Jackson" ``` #### Migration batch: `plugins/transforms/execinfo` - `plugins/transforms/execinfo/src/main/java/org/apache/hop/pipeline/transforms/execinfo/ExecInfo.java` ```bash ./tools/with-isolated-display.sh ./mvnw -pl plugins/transforms/execinfo -am -Pskip-uitest -DskipTests=false -Dspotless.skip=true -Drat.skip=true install ``` Expected after this batch: real module tests executed, zero failures/errors, `BUILD SUCCESS`; source-usage guard for this module green. Commit this module's listed files and its guard/behavior tests only, message `Migrate plugins/transforms/execinfo JSON values from json-simple to Jackson`. Exact new guard path: `plugins/transforms/execinfo/src/test/java/org/apache/hop/jsonmigration/JsonSimpleUsageTest.java`. After this batch is GREEN: ```bash git add -- plugins/transforms/execinfo/src/main/java/org/apache/hop/pipeline/transforms/execinfo/ExecInfo.java plugins/transforms/execinfo/src/test/java/org/apache/hop/jsonmigration/JsonSimpleUsageTest.java git commit -m "Migrate plugins/transforms/execinfo JSON values from json-simple to Jackson" ``` #### Migration batch: `plugins/transforms/http` - `plugins/transforms/http/src/main/java/org/apache/hop/pipeline/transforms/http/Http.java` - `plugins/transforms/http/src/test/java/org/apache/hop/pipeline/transforms/http/HttpTest.java` ```bash ./tools/with-isolated-display.sh ./mvnw -pl plugins/transforms/http -am -Pskip-uitest -DskipTests=false -Dspotless.skip=true -Drat.skip=true install ``` Expected after this batch: real module tests executed, zero failures/errors, `BUILD SUCCESS`; source-usage guard for this module green. Commit this module's listed files and its guard/behavior tests only, message `Migrate plugins/transforms/http JSON values from json-simple to Jackson`. Exact new guard path: `plugins/transforms/http/src/test/java/org/apache/hop/jsonmigration/JsonSimpleUsageTest.java`. After this batch is GREEN: ```bash git add -- plugins/transforms/http/src/main/java/org/apache/hop/pipeline/transforms/http/Http.java plugins/transforms/http/src/test/java/org/apache/hop/pipeline/transforms/http/HttpTest.java plugins/transforms/http/src/test/java/org/apache/hop/jsonmigration/JsonSimpleUsageTest.java git commit -m "Migrate plugins/transforms/http JSON values from json-simple to Jackson" ``` #### Migration batch: `plugins/transforms/httppost` - `plugins/transforms/httppost/src/main/java/org/apache/hop/pipeline/transforms/httppost/HttpPost.java` ```bash ./tools/with-isolated-display.sh ./mvnw -pl plugins/transforms/httppost -am -Pskip-uitest -DskipTests=false -Dspotless.skip=true -Drat.skip=true install ``` Expected after this batch: real module tests executed, zero failures/errors, `BUILD SUCCESS`; source-usage guard for this module green. Commit this module's listed files and its guard/behavior tests only, message `Migrate plugins/transforms/httppost JSON values from json-simple to Jackson`. Exact new guard path: `plugins/transforms/httppost/src/test/java/org/apache/hop/jsonmigration/JsonSimpleUsageTest.java`. After this batch is GREEN: ```bash git add -- plugins/transforms/httppost/src/main/java/org/apache/hop/pipeline/transforms/httppost/HttpPost.java plugins/transforms/httppost/src/test/java/org/apache/hop/jsonmigration/JsonSimpleUsageTest.java git commit -m "Migrate plugins/transforms/httppost JSON values from json-simple to Jackson" ``` #### Migration batch: `plugins/transforms/json` - `plugins/transforms/json/src/main/java/org/apache/hop/pipeline/transforms/jsonoutput/JsonOutput.java` - `plugins/transforms/json/src/main/java/org/apache/hop/pipeline/transforms/jsonoutput/JsonOutputData.java` - `plugins/transforms/json/src/test/java/org/apache/hop/pipeline/transforms/jsonoutput/JsonOutputTest.java` ```bash ./tools/with-isolated-display.sh ./mvnw -pl plugins/transforms/json -am -Pskip-uitest -DskipTests=false -Dspotless.skip=true -Drat.skip=true install ``` Expected after this batch: real module tests executed, zero failures/errors, `BUILD SUCCESS`; source-usage guard for this module green. Commit this module's listed files and its guard/behavior tests only, message `Migrate plugins/transforms/json JSON values from json-simple to Jackson`. Exact new guard path: `plugins/transforms/json/src/test/java/org/apache/hop/jsonmigration/JsonSimpleUsageTest.java`. After this batch is GREEN: ```bash git add -- plugins/transforms/json/src/main/java/org/apache/hop/pipeline/transforms/jsonoutput/JsonOutput.java plugins/transforms/json/src/main/java/org/apache/hop/pipeline/transforms/jsonoutput/JsonOutputData.java plugins/transforms/json/src/test/java/org/apache/hop/pipeline/transforms/jsonoutput/JsonOutputTest.java plugins/transforms/json/src/test/java/org/apache/hop/jsonmigration/JsonSimpleUsageTest.java git commit -m "Migrate plugins/transforms/json JSON values from json-simple to Jackson" ``` #### Migration batch: `plugins/transforms/mergerows` - `plugins/transforms/mergerows/src/main/java/org/apache/hop/pipeline/transforms/mergerows/MergeRows.java` ```bash ./tools/with-isolated-display.sh ./mvnw -pl plugins/transforms/mergerows -am -Pskip-uitest -DskipTests=false -Dspotless.skip=true -Drat.skip=true install ``` Expected after this batch: real module tests executed, zero failures/errors, `BUILD SUCCESS`; source-usage guard for this module green. Commit this module's listed files and its guard/behavior tests only, message `Migrate plugins/transforms/mergerows JSON values from json-simple to Jackson`. Exact new guard path: `plugins/transforms/mergerows/src/test/java/org/apache/hop/jsonmigration/JsonSimpleUsageTest.java`. After this batch is GREEN: ```bash git add -- plugins/transforms/mergerows/src/main/java/org/apache/hop/pipeline/transforms/mergerows/MergeRows.java plugins/transforms/mergerows/src/test/java/org/apache/hop/jsonmigration/JsonSimpleUsageTest.java git commit -m "Migrate plugins/transforms/mergerows JSON values from json-simple to Jackson" ``` #### Migration batch: `plugins/transforms/metadata` - `plugins/transforms/metadata/src/main/java/org/apache/hop/pipeline/transforms/metainput/MetadataInput.java` ```bash ./tools/with-isolated-display.sh ./mvnw -pl plugins/transforms/metadata -am -Pskip-uitest -DskipTests=false -Dspotless.skip=true -Drat.skip=true install ``` Expected after this batch: real module tests executed, zero failures/errors, `BUILD SUCCESS`; source-usage guard for this module green. Commit this module's listed files and its guard/behavior tests only, message `Migrate plugins/transforms/metadata JSON values from json-simple to Jackson`. Exact new guard path: `plugins/transforms/metadata/src/test/java/org/apache/hop/jsonmigration/JsonSimpleUsageTest.java`. After this batch is GREEN: ```bash git add -- plugins/transforms/metadata/src/main/java/org/apache/hop/pipeline/transforms/metainput/MetadataInput.java plugins/transforms/metadata/src/test/java/org/apache/hop/jsonmigration/JsonSimpleUsageTest.java git commit -m "Migrate plugins/transforms/metadata JSON values from json-simple to Jackson" ``` #### Migration batch: `plugins/transforms/rest` - `plugins/transforms/rest/src/main/java/org/apache/hop/pipeline/transforms/rest/Rest.java` ```bash ./tools/with-isolated-display.sh ./mvnw -pl plugins/transforms/rest -am -Pskip-uitest -DskipTests=false -Dspotless.skip=true -Drat.skip=true install ``` Expected after this batch: real module tests executed, zero failures/errors, `BUILD SUCCESS`; source-usage guard for this module green. Commit this module's listed files and its guard/behavior tests only, message `Migrate plugins/transforms/rest JSON values from json-simple to Jackson`. Exact new guard path: `plugins/transforms/rest/src/test/java/org/apache/hop/jsonmigration/JsonSimpleUsageTest.java`. After this batch is GREEN: ```bash git add -- plugins/transforms/rest/src/main/java/org/apache/hop/pipeline/transforms/rest/Rest.java plugins/transforms/rest/src/test/java/org/apache/hop/jsonmigration/JsonSimpleUsageTest.java git commit -m "Migrate plugins/transforms/rest JSON values from json-simple to Jackson" ``` #### Migration batch: `plugins/transforms/tika` - `plugins/transforms/tika/src/main/java/org/apache/hop/pipeline/transforms/tika/Tika.java` ```bash ./tools/with-isolated-display.sh ./mvnw -pl plugins/transforms/tika -am -Pskip-uitest -DskipTests=false -Dspotless.skip=true -Drat.skip=true install ``` Expected after this batch: real module tests executed, zero failures/errors, `BUILD SUCCESS`; source-usage guard for this module green. Commit this module's listed files and its guard/behavior tests only, message `Migrate plugins/transforms/tika JSON values from json-simple to Jackson`. Exact new guard path: `plugins/transforms/tika/src/test/java/org/apache/hop/jsonmigration/JsonSimpleUsageTest.java`. After this batch is GREEN: ```bash git add -- plugins/transforms/tika/src/main/java/org/apache/hop/pipeline/transforms/tika/Tika.java plugins/transforms/tika/src/test/java/org/apache/hop/jsonmigration/JsonSimpleUsageTest.java git commit -m "Migrate plugins/transforms/tika JSON values from json-simple to Jackson" ``` ### 6.7 Remove dependency declarations only after every consumer gate is green (3 minutes) - In `core/pom.xml`, delete the entire `com.googlecode.json-simple:json-simple` dependency block including its exclusions (observed lines 74–83). - In `lib/pom.xml`, delete `json-simple.version` and the matching dependency-management entry. Do not delete `json-smart.version` or Jayway dependencies. - Scan packaging manifests and license-attribution inputs for the artifact; update only references that ship the removed jar. Do not erase historical NOTICE/license material merely because a source import vanished. RED before deletion: the final classpath still contains the deprecated jar. GREEN after deletion: no direct or resolved runtime dependency, all modules compile/test and distributions stage without it. Commands (future execution): ```bash ./tools/with-isolated-display.sh ./mvnw clean install -DskipTests=false ./mvnw -pl core dependency:tree -Dincludes=com.googlecode.json-simple:json-simple ./mvnw -pl plugins/transforms/json dependency:tree -Dincludes=com.googlecode.json-simple:json-simple ``` Expected: full build success with tests actually executed; dependency-tree commands list **no matching dependency**. Scan the built client and optional plugin distributions too; a transitive copy in a staged plugin is not removed merely because core's tree is clean. Stage only the two POMs and verified packaging inputs; commit message `Remove the deprecated json-simple dependency after caller migration`. ## Phase 7 — final validation and issue close-out ### 7.1 Focused commands (2 minutes to launch each independent gate) These literal selectors correspond to methods supplied above; run each once for its RED and after its minimal fix for GREEN. No angle-bracket method-name placeholders are needed. ```bash json_test RowOutputConverterNullTest json_test 'JsonEOutputMetaTest#missingGroupKeyNamesTheMissingField' json_test 'JsonEOutputBehaviorTest#missingRuntimeGroupKeyIsAnActionableError' json_test 'JsonInputTest#literalRootArrayPathExtractsTheFirstValue' json_test 'JsonInputTest#serializedLiteralPathModeStillExtractsRootArray' json_test 'JsonEOutputBehaviorTest#keySuggestionsExcludeLiveOutputAndExistingKeys' json_test 'JsonEOutputBehaviorTest#bothKeepsRowShapeAndWritesEveryGroup' json_test 'JsonEOutputBehaviorTest#legacyAppendHasNoNewSeparators' json_test 'JsonEOutputBehaviorTest#ndjsonAppendEscapesEmbeddedNewlines' json_test 'JsonEOutputBehaviorTest#ndjsonSplitsRecordsWithoutOuterArrays' json_test 'JsonEOutputBehaviorTest#ndjsonWrapsEachCompleteGroup' json_test 'JsonEOutputBehaviorTest#ndjsonRejectsPrettyPrintingBeforeOpeningFile' json_test 'JsonEOutputBehaviorTest#ndjsonRejectsAppendWithoutFinalLf' json_test 'JsonEOutputBehaviorTest#disposalClosesAnActiveFileGenerator' json_ui_test JsonInputPathOptionsDialogTest json_ui_test JsonEOutputDialogTest core_test 'HopJsonValueTest,JsonRowMetaMapTest,ValueMetaAvroRecordTest' core_test 'SimpleTimestampFormatTest,ValueMetaTimestampTest,ValueMetaBaseLocaleMinusTest' ``` Expected for final runs: every selected test executed, exit 0, failures/errors zero. Legacy append, already-supported timestamp, and native JSON source characterizations may start green; do not make speculative production changes merely to get a RED. ### 7.2 Full quality and distribution gates ```bash ./mvnw spotless:apply git diff --check ./tools/with-isolated-display.sh ./mvnw clean install apache-rat:check -DskipTests=false ./mvnw spotless:check ``` Expected: Spotless/RAT clean, test reports actually populated, build successful. Use the final assembled distribution, not stale installed jars. Ordinary unit tests and SWT UI tests are separate evidence; a passing `-Pskip-uitest` run does not establish GUI behavior. ### 7.3 Run the JSON integration project using the existing supported harness After the full distribution build, use the documented Docker harness from the repository root: ```bash bash integration-tests/scripts/run-tests-docker.sh PROJECT_NAME=json KEEP_IMAGES=true ``` For a narrower streaming gate: ```bash bash integration-tests/scripts/run-tests-docker.sh PROJECT_NAME=json \ TEST_FILTER='0018-enhanced-json-output-streaming,0019-enhanced-json-output-grouped-file' KEEP_IMAGES=true ``` Expected: the selected workflows pass; verify XML reports under `integration-tests/surefire-reports/` because the shell exit alone may not capture an individual workflow failure. The JSON project currently contains cases 0001–0017, including more than one 0002-named workflow; do not invent a total from the highest numeric prefix. Count report testcases programmatically. If Docker is unavailable, first extract the newly built client distribution and supply its **verified real directory** as `HOP_LOCATION`, then run `TEST_FILTER='0018-enhanced-json-output-streaming,0019-enhanced-json-output-grouped-file' bash integration-tests/scripts/run-tests.sh json`. The script writes output and uses system `/tmp` internally; use the Docker harness if the environment forbids host `/tmp` writes. Do not edit the integration harness under this umbrella simply to bypass its established setup. ### 7.4 Strengthen memory evidence without introducing a second streaming implementation In `integration-tests/json/main-0018-enhanced-json-output-streaming.hwf`, replace its row count 1000000 with 4000000, the last ID with 4000000, the object count with 4000001, and its exact byte-size expectation with **510888906**. These are computed from the reviewed UTF-8 fixture, not estimated. Keep `-Xmx128m`, `ExitOnOutOfMemoryError`, timeout and failure detection. The required file is larger than the heap; the original retained-tree implementation should fail and the row-streaming implementation should succeed. After any schema/pretty-print change, recompute bytes from the fixture rather than copying an obsolete number. This is one separate fixture commit after its pre-/post-PR behavior is actually observed, message `Prove enhanced JSON file output exceeds a bounded heap`. The current-group buffering limitation still applies and must be documented honestly. ### 7.5 Release-style regression matrix (one 3-minute setup slice per case) - JSON null, empty String, quoted `"null"`, missing path, repeat fields: both system settings, both String-source and JSON-source routes. #4373 must preserve actual null, not merely a null-looking preview. - Root-array JsonPath: index 0 and a nonzero index; flag false; default true still resolves `${PARAM_PATH}`; original metadata path remains unchanged; Preview and saved/reloaded pipeline agree. - Missing key: runtime + metadata discovery + validation diagnostic; valid grouping and input metadata remain intact. A name-bearing expected Hop error, not a generic index exception. - Enhanced output: zero/one/many items, forced arrays, grouped rows, forced single-group arrays, JSON fragments, BOTH versus file-only passthrough, key aliases, normal append, split exact boundary and remainder, JSON-size field present/absent, non-ASCII values, cancellation and write failure. - NDJSON: append twice, embedded CR/LF escaped, invalid boundary rejected without modifying bytes, compact output, UTF-8 required, completed groups stay together, no trailing empty split file, flag absent retains old behavior, enabled XML/JSON round-trip uses the new mode, GUI OK/Cancel/disable state. - Scheduler locale: run JSON Input, Calculator constant and Filter Rows under nb-NO with ASCII negative inputs, not only in GUI. The existing shared conversion test is the unit gate; confirm the release build's hop-run actually contains the merged fix. - Timestamp: exact six-digit value with matching mask; required-but-missing offset fails with conversion error; both JSON Input and Select Values preview close without freezing. Leave the freeze portion open if it still reproduces. - Migration: metadata save/load and exports, graph/Avro data, HTTP/REST header lists, local/synthetic Git provider payloads, Databricks request JSON, Bigtable/Beam serialization, JSON Output goldens, native `TYPE_JSON`. No secret payloads in failure reports. ### 7.6 Record dispositions and close the umbrella only with evidence (3 minutes per issue) For each child, record: implementation/decision link, current SHA or merged PR, exact command, observed outcome, and remaining release limitation. Request permission before posting comments, changing checkboxes, or closing issues. Future read-back commands are: ```bash for issue in 2569 2570 2572 2929 4344 4373 4395 4644 4907 5167 5313 5953 7995 8444 8593; do gh issue view "$issue" --repo apache/hop --json number,state,url done gh issue view 8711 --repo apache/hop --json body,state ``` Every checkbox requires either a verified resolution or a deliberately accepted decline; an open PR or a proposed workaround is not a completed item. #4395's decline, #7995's API policy, and any residual #4907 freeze must be explicit. If any item remains unresolved, leave #8711 open and report that honestly. Do not infer that merging a PR has updated all tracker state; read back the exact targets after any authorized external write. ## Risks, tradeoffs, and open questions 1. **Source baseline anomaly:** literal invalid accessor token must be explained/repaired explicitly; passing remote checks cannot substitute for the local baseline. None of this plan's snippets has been compiled in plan mode. 2. **API migration gate:** changing JSONObject public signatures breaks binary plugins. Maintainer/release approval is necessary; no compatibility shim was invented to hide that cost. 3. **Current-group memory:** #8713 solves whole-file accumulation for its streaming path, but a huge group/forced merged item/output field still grows. A fully bounded grouped writer would be another design (incremental group arrays/spooling) with separate acceptance criteria, not a casual claim under this plan. 4. **Split semantics:** rows versus complete groups is user-visible. Require release documentation and fixture evidence; don't bury it as an implementation detail. 5. **NDJSON format choices:** UTF-8/compact-only and final-LF append boundary are proposed conservative semantics. Existing concatenated documents are not automatically repaired. VFS append boundary inspection can involve a scan when the provider cannot seek. 6. **Object index access:** JSON objects have no portable positional contract. Declining custom syntax is a recommendation requiring an accepted disposition, not a unilateral tracker action. 7. **UI scope:** reuse #8588's helpers, distinguish failure from successful-empty fetch, and avoid an unrelated full-form migration. Register annotated methods as well as fields in GUI tests. 8. **Blocked attachment:** #2569's ZIP has not been inspected; no sample-specific fix is asserted. Require approved access or the user-supplied pipeline before closure. 9. **Old reports versus current requirements:** native JSON source support, timestamp guards/precision and locale parsing already exist in the inspected revision. Verify/reproduce before applying redundant fixes. 10. **Wire compatibility:** Jackson may serialize key order/slashes/non-finite numbers/large numbers differently. Pin semantic and byte-sensitive consumers explicitly, retain exception causes, and avoid payload logging or default typing. 11. **Planning completeness boundary:** code for the localized features is supplied; the migration's repeated method recipe is gated on public-API approval and existing consumer contracts. Where a new payload shape or an untested freeze appears, stop for a new scoped test/decision rather than guess. ## Appendix D — complete remaining format compatibility tests Add these methods to `plugins/transforms/json/src/test/java/org/apache/hop/pipeline/transforms/jsonoutputenhanced/JsonEOutputBehaviorTest.java`, one test at a time after its preceding slice is green. All helpers are provided in Appendix A; the fully qualified XML calls below avoid missing imports. ```java @Test void ndjsonRejectsUtf16BeforeOpeningFile() throws Exception { JsonEOutputMeta meta = meta(JsonEOutputMeta.OperationType.WRITE_TO_FILE); meta.setNewlineDelimited(true); meta.setEncoding("UTF-16"); meta.getFileSettings().setDoNotOpenNewFileInit(false); try (Harness h = new Harness(meta, rowMeta("payload"), new Object[] {"x"})) { assertFalse(h.transform.init()); } try (FileObject file = HopVfs.getFileObject(base + "/out.json")) { assertFalse(file.exists()); } } @Test void deferredEmptyInputDoesNotCreateAnNdjsonFile() throws Exception { JsonEOutputMeta meta = meta(JsonEOutputMeta.OperationType.WRITE_TO_FILE); meta.setNewlineDelimited(true); try (Harness h = new Harness(meta, rowMeta("payload"))) { h.run(); assertEquals(0, h.written.size()); } try (FileObject file = HopVfs.getFileObject(base + "/out.json")) { assertFalse(file.exists()); } } @Test void eagerEmptyInputCreatesAnEmptyNdjsonFile() throws Exception { JsonEOutputMeta meta = meta(JsonEOutputMeta.OperationType.WRITE_TO_FILE); meta.setNewlineDelimited(true); meta.getFileSettings().setDoNotOpenNewFileInit(false); try (Harness h = new Harness(meta, rowMeta("payload"))) { h.run(); } assertEquals("", read(base + "/out.json")); } @Test void ndjsonExactSplitDoesNotCreateAnEmptyRemainder() throws Exception { JsonEOutputMeta meta = meta(JsonEOutputMeta.OperationType.WRITE_TO_FILE); meta.setNewlineDelimited(true); meta.getFileSettings().setSplitOutputAfter(2); try (Harness h = new Harness(meta, rowMeta("payload"), new Object[] {"x"}, new Object[] {"y"})) { h.run(); } assertEquals(payload("x") + "\n" + payload("y") + "\n", read(base + "/out_0.json")); try (FileObject extra = HopVfs.getFileObject(base + "/out_1.json")) { assertFalse(extra.exists()); } } @Test void jsonSizeMetadataMatchesItsGeneratedValue() throws Exception { JsonEOutputMeta meta = meta(JsonEOutputMeta.OperationType.OUTPUT_VALUE); meta.setJsonSizeFieldName("size"); try (Harness h = new Harness(meta, rowMeta("payload"), new Object[] {"é"})) { h.run(); assertEquals(1, h.written.size()); var row = h.written.getFirst(); assertEquals(row.getRowMeta().size(), row.getData().length); assertEquals((long) ((String) row.getData()[0]).length(), row.getData()[1]); } } private static JsonEOutputMeta loadXmlMeta(String xml) throws Exception { JsonEOutputMeta loaded = new JsonEOutputMeta(); org.apache.hop.metadata.serializer.xml.XmlMetadataUtil.deSerializeFromXml( org.apache.hop.core.xml.XmlHandler.loadXmlString("<transform>" + xml + "</transform>", org.apache.hop.pipeline.transform.TransformMeta.XML_TAG), JsonEOutputMeta.class, loaded, new org.apache.hop.metadata.serializer.memory.MemoryMetadataProvider()); return loaded; } @Test void missingNdjsonPropertyKeepsTheRegularJsonFileFormat() throws Exception { JsonEOutputMeta original = meta(JsonEOutputMeta.OperationType.WRITE_TO_FILE); String xml = org.apache.hop.metadata.serializer.xml.XmlMetadataUtil.serializeObjectToXml(original) .replaceAll("(?s)<newline_delimited>.*?</newline_delimited>", "") .replaceAll("<newline_delimited\\s*/>", ""); assertFalse(xml.contains("newline_delimited")); JsonEOutputMeta loaded = loadXmlMeta(xml); try (Harness h = new Harness(loaded, rowMeta("payload"), new Object[] {"x"})) { h.run(); } assertEquals(payload("x"), read(base + "/out.json")); } @Test void enabledNdjsonPropertySurvivesSerializationAndChangesTheWrittenFile() throws Exception { JsonEOutputMeta original = meta(JsonEOutputMeta.OperationType.WRITE_TO_FILE); original.setNewlineDelimited(true); JsonEOutputMeta loaded = loadXmlMeta( org.apache.hop.metadata.serializer.xml.XmlMetadataUtil.serializeObjectToXml(original)); try (Harness h = new Harness(loaded, rowMeta("payload"), new Object[] {"x"})) { h.run(); } assertEquals(payload("x") + "\n", read(base + "/out.json")); } ``` Exact commands (RED before the corresponding behavior, GREEN afterward): ```bash json_test 'JsonEOutputBehaviorTest#ndjsonRejectsUtf16BeforeOpeningFile' json_test 'JsonEOutputBehaviorTest#deferredEmptyInputDoesNotCreateAnNdjsonFile' json_test 'JsonEOutputBehaviorTest#eagerEmptyInputCreatesAnEmptyNdjsonFile' json_test 'JsonEOutputBehaviorTest#ndjsonExactSplitDoesNotCreateAnEmptyRemainder' json_test 'JsonEOutputBehaviorTest#jsonSizeMetadataMatchesItsGeneratedValue' json_test 'JsonEOutputBehaviorTest#missingNdjsonPropertyKeepsTheRegularJsonFileFormat' json_test 'JsonEOutputBehaviorTest#enabledNdjsonPropertySurvivesSerializationAndChangesTheWrittenFile' ``` Empty-input/legacy characterizations can already pass; no production edit is needed in that case. Stage this exact test path and only a necessary runtime/meta fix; commit each green case with `Verify NDJSON encoding before file creation`, `Verify deferred empty NDJSON output`, `Verify eager empty NDJSON output`, `Avoid an empty NDJSON split remainder`, `Verify enhanced JSON size row metadata`, `Preserve legacy enhanced JSON format defaults`, or `Round-trip the NDJSON file format` respectively. ## Appendix E — literal staging/commit commands for localized green slices Run only after the named tests and formatting gate pass. These are future implementation instructions, not actions authorized or performed in plan mode. ```bash # #4373 git add -- plugins/transforms/json/src/main/java/org/apache/hop/pipeline/transforms/jsoninput/reader/RowOutputConverter.java plugins/transforms/json/src/test/java/org/apache/hop/pipeline/transforms/jsoninput/reader/RowOutputConverterNullTest.java git commit -m 'Preserve JSON null when empty strings differ from null' # #2570 metadata boundary git add -- plugins/transforms/json/src/main/java/org/apache/hop/pipeline/transforms/jsonoutputenhanced/JsonEOutputMeta.java plugins/transforms/json/src/test/java/org/apache/hop/pipeline/transforms/jsonoutputenhanced/JsonEOutputMetaTest.java plugins/transforms/json/src/main/resources/org/apache/hop/pipeline/transforms/jsonoutputenhanced/messages/messages_en_US.properties git commit -m 'Validate enhanced JSON group keys during metadata discovery' # #2570 runtime boundary git add -- plugins/transforms/json/src/main/java/org/apache/hop/pipeline/transforms/jsonoutputenhanced/JsonEOutput.java plugins/transforms/json/src/test/java/org/apache/hop/pipeline/transforms/jsonoutputenhanced/JsonEOutputBehaviorTest.java git commit -m 'Report missing enhanced JSON group keys before runtime lookup' # #8444 GUI-backed vertical slice git add -- plugins/transforms/json/src/main/java/org/apache/hop/pipeline/transforms/jsoninput/JsonInput.java plugins/transforms/json/src/main/java/org/apache/hop/pipeline/transforms/jsoninput/JsonInputMeta.java plugins/transforms/json/src/main/java/org/apache/hop/pipeline/transforms/jsoninput/JsonInputDialog.java plugins/transforms/json/src/test/java/org/apache/hop/pipeline/transforms/jsoninput/JsonInputTest.java plugins/transforms/json/src/test/java/org/apache/hop/pipeline/transforms/jsoninput/JsonInputPathOptionsDialogTest.java plugins/transforms/json/src/main/resources/org/apache/hop/pipeline/transforms/jsoninput/messages/messages_en_US.properties docs/hop-user-manual/modules/ROOT/pages/pipeline/transforms/jsoninput.adoc git commit -m 'Allow literal JSONPath expressions without changing legacy resolution' # #5167 / #5313 git add -- plugins/transforms/json/src/main/java/org/apache/hop/pipeline/transforms/jsonoutputenhanced/JsonEOutputMeta.java plugins/transforms/json/src/main/java/org/apache/hop/pipeline/transforms/jsonoutputenhanced/JsonEOutputDialog.java plugins/transforms/json/src/test/java/org/apache/hop/pipeline/transforms/jsonoutputenhanced/JsonEOutputBehaviorTest.java plugins/transforms/json/src/test/java/org/apache/hop/pipeline/transforms/jsonoutputenhanced/JsonEOutputDialogTest.java plugins/transforms/json/src/main/resources/org/apache/hop/pipeline/transforms/jsonoutputenhanced/messages/messages_en_US.properties docs/hop-user-manual/modules/ROOT/pages/pipeline/transforms/enhancedjsonoutput.adoc git commit -m 'Offer unmapped incoming fields as enhanced JSON group keys' # #4344 first file-format slice; later runtime slices stage only the runtime/test paths git add -- plugins/transforms/json/src/main/java/org/apache/hop/pipeline/transforms/jsonoutputenhanced/JsonEOutput.java plugins/transforms/json/src/main/java/org/apache/hop/pipeline/transforms/jsonoutputenhanced/JsonEOutputMeta.java plugins/transforms/json/src/main/java/org/apache/hop/pipeline/transforms/jsonoutputenhanced/JsonEOutputDialog.java plugins/transforms/json/src/test/java/org/apache/hop/pipeline/transforms/jsonoutputenhanced/JsonEOutputBehaviorTest.java plugins/transforms/json/src/test/java/org/apache/hop/pipeline/transforms/jsonoutputenhanced/JsonEOutputDialogTest.java plugins/transforms/json/src/main/resources/org/apache/hop/pipeline/transforms/jsonoutputenhanced/messages/messages_en_US.properties docs/hop-user-manual/modules/ROOT/pages/pipeline/transforms/enhancedjsonoutput.adoc git commit -m 'Add compact NDJSON output' # Shared utility, after its focused tests pass git add -- core/src/main/java/org/apache/hop/core/json/HopJson.java core/src/test/java/org/apache/hop/core/json/HopJsonValueTest.java git commit -m 'Provide Jackson JSON-value parsing and serialization for migration' ``` **Metadata API caller cohort:** changing `JsonMetadataParser.getJsonObject`'s return type must be committed with its typed callers, not left as a non-compiling downstream tree. The exact cohort is `core/src/main/java/org/apache/hop/metadata/serializer/json/JsonMetadataParser.java`, `core/src/main/java/org/apache/hop/metadata/serializer/json/JsonMetadataSerializer.java`, `engine/src/main/java/org/apache/hop/core/metadata/SerializableMetadataProvider.java`, `engine/src/main/java/org/apache/hop/www/api/v1/resources/MetadataResource.java`, `plugins/transforms/metadata/src/main/java/org/apache/hop/pipeline/transforms/metainput/MetadataInput.java`, and `plugins/tech/ai/src/main/java/org/apache/hop/ai/engine/AiAdvisorMetadataContext.java`. Each uses the container/serialization replacements in 6.4. Verify that entire cohort before its commit: ```bash ./tools/with-isolated-display.sh ./mvnw -pl core,engine,plugins/transforms/metadata,plugins/tech/ai -am -Pskip-uitest -DskipTests=false -Dspotless.skip=true -Drat.skip=true install ``` Expected: every cohort module compiles and its behavior tests run green. Rebuild dependent modules after public API changes; a previously installed binary compiled against JSONObject return signatures is not compatible. The module inventory describes scope, not permission to commit a broken caller halfway through a signature change. ## Definition of done - All 15 child obligations are accounted for with evidence or accepted decisions. - New behavior has an observed RED before its minimal implementation and a real GREEN after it; pure-refactor characterizations remain green and dependency/source guards prove removal. - Old XML keys/IDs/defaults load unchanged; new flags are editable, previewed, saved and reloaded through the GUI. - Unit, UI, integration, stress, formatting, license and distribution gates are recorded from actual runs. - No direct json-simple code/dependency or unintended staged runtime copy remains if #7995 is approved for implementation; otherwise its deliberate deferral/decline is recorded and umbrella closure is not claimed prematurely. - Tracker updates are authorized and verified by reading back the exact issues; no commits, pushes, merges or remote writes are implied by this plan. -- This is an automated message from the Apache Git Service. To respond to the message, please log on to GitHub and use the URL above to go to the specific comment. To unsubscribe, e-mail: [email protected] For queries about this service, please contact Infrastructure at: [email protected]
