This is an automated email from the ASF dual-hosted git repository.

hansva pushed a commit to branch 2.18.1-patch
in repository https://gitbox.apache.org/repos/asf/hop.git


The following commit(s) were added to refs/heads/2.18.1-patch by this push:
     new 0ce1821f13 Metadata Injection Error instead of Warning for deleted 
target keys, fixes  #7279 (#7280)
0ce1821f13 is described below

commit 0ce1821f13b9a29aa5a8d1ea14a1a37c82dac1f0
Author: Hans Van Akelyen <[email protected]>
AuthorDate: Fri Jun 12 11:55:48 2026 +0200

    Metadata Injection Error instead of Warning for deleted target keys, fixes  
#7279 (#7280)
---
 .../pipeline/transforms/metainject/MetaInject.java | 12 ++++---
 .../metainject/messages/messages_en_US.properties  |  1 +
 .../transforms/metainject/MetaInjectTest.java      | 39 ++++++++++++++++++++++
 3 files changed, 47 insertions(+), 5 deletions(-)

diff --git 
a/plugins/transforms/metainject/src/main/java/org/apache/hop/pipeline/transforms/metainject/MetaInject.java
 
b/plugins/transforms/metainject/src/main/java/org/apache/hop/pipeline/transforms/metainject/MetaInject.java
index 58abda44b1..0e1b5ba5c0 100644
--- 
a/plugins/transforms/metainject/src/main/java/org/apache/hop/pipeline/transforms/metainject/MetaInject.java
+++ 
b/plugins/transforms/metainject/src/main/java/org/apache/hop/pipeline/transforms/metainject/MetaInject.java
@@ -369,7 +369,7 @@ public class MetaInject extends 
BaseTransform<MetaInjectMeta, MetaInjectData> {
     }
   }
 
-  private void collectDataForOneMapping(
+  void collectDataForOneMapping(
       String targetTransformName,
       MetaInjectMapping mapping,
       Map<String, Set<String>> injectionKeyGroupMap,
@@ -407,10 +407,12 @@ public class MetaInject extends 
BaseTransform<MetaInjectMeta, MetaInjectData> {
           targetMetaClass, mapping.getTargetAttributeKey())) {
         collectInjectionKeyValue(this, mapping, sourceRows, injectionKeyData);
       } else {
-        throw new HopTransformException(
-            "The injection group key for target key '"
-                + mapping.getTargetAttributeKey()
-                + "' was not found.");
+        logBasic(
+            BaseMessages.getString(
+                PKG,
+                "MetaInject.TargetKeyNotFound.Warning",
+                mapping.getTargetAttributeKey(),
+                targetTransformName));
       }
     } else {
       // A simple property from the first row.
diff --git 
a/plugins/transforms/metainject/src/main/resources/org/apache/hop/pipeline/transforms/metainject/messages/messages_en_US.properties
 
b/plugins/transforms/metainject/src/main/resources/org/apache/hop/pipeline/transforms/metainject/messages/messages_en_US.properties
index ba10deeca9..eab42cafdc 100644
--- 
a/plugins/transforms/metainject/src/main/resources/org/apache/hop/pipeline/transforms/metainject/messages/messages_en_US.properties
+++ 
b/plugins/transforms/metainject/src/main/resources/org/apache/hop/pipeline/transforms/metainject/messages/messages_en_US.properties
@@ -46,6 +46,7 @@ MetaInject.Name=ETL metadata injection
 MetaInject.SourceFieldIsNotDefined.Message=Source field ''{0}'' is not defined 
in ''{1}'' pipeline!
 MetaInject.SourceTransformIsNotAvailable.Message=Source transform ''{0}'' is 
not available in ''{1}'' pipeline!
 MetaInject.TargetKeyIsNotDefined.Message=Target key ''{0}'' is not defined in 
''{1}'' pipeline!
+MetaInject.TargetKeyNotFound.Warning=WARNING: injection target key ''{0}'' was 
not found in transform ''{1}'' and is ignored. It may have been removed in a 
newer version of Apache Hop.
 MetaInject.TargetTransformIsNotDefined.Message=Target transform ''{0}'' is not 
defined in ''{1}'' pipeline!
 MetaInject.TargetTransformIsNotUsed.Message=Target transform ''{0}'' is not 
used in ''{1}'' pipeline!
 MetaInjectDialog.Browse.Label=Browse...
diff --git 
a/plugins/transforms/metainject/src/test/java/org/apache/hop/pipeline/transforms/metainject/MetaInjectTest.java
 
b/plugins/transforms/metainject/src/test/java/org/apache/hop/pipeline/transforms/metainject/MetaInjectTest.java
index 09d69dc333..8c41d5d922 100644
--- 
a/plugins/transforms/metainject/src/test/java/org/apache/hop/pipeline/transforms/metainject/MetaInjectTest.java
+++ 
b/plugins/transforms/metainject/src/test/java/org/apache/hop/pipeline/transforms/metainject/MetaInjectTest.java
@@ -234,6 +234,45 @@ class MetaInjectTest {
     assertEquals("resolved-value", buffer.getBuffer().getFirst()[0]);
   }
 
+  /**
+   * Regression test: a mapping to a target key that no longer exists in the 
template transform
+   * (e.g. an option removed in a newer Hop version, such as CSV Input's 
{@code INPUT_IF_NULL}) must
+   * NOT fail the whole injection. The mapping is logged as a warning and 
skipped, so a pipeline
+   * built against an older Hop version keeps running. Before the fix this 
threw a
+   * HopTransformException and the transform aborted.
+   */
+  @Test
+  void collectDataForOneMapping_unknownTargetKey_warnsInsteadOfThrowing() {
+    MetaInjectMapping mapping = new MetaInjectMapping();
+    mapping.setTargetTransformName(TEST_TARGET_TRANSFORM_NAME);
+    mapping.setTargetAttributeKey("INPUT_IF_NULL"); // a key that no longer 
exists in the target
+    mapping.setTargetDetail(true);
+    mapping.setSourceTransformName(null);
+    mapping.setSourceField("anything");
+
+    Map<String, Set<String>> injectionKeyGroupMap = new HashMap<>(); // key is 
in no group
+    Map<String, List<MetaInject.GroupColumn>> groupColumnsMap = new 
HashMap<>();
+    Map<String, RowBuffer> injectionGroupData = new HashMap<>();
+    Map<String, Object> injectionKeyData = new HashMap<>();
+
+    metaInject.getData().rowMap = new HashMap<>();
+
+    assertDoesNotThrow(
+        () ->
+            metaInject.collectDataForOneMapping(
+                TEST_TARGET_TRANSFORM_NAME,
+                mapping,
+                injectionKeyGroupMap,
+                groupColumnsMap,
+                injectionGroupData,
+                injectionKeyData,
+                InjectableTestTransformMeta.class));
+
+    // The unknown key is skipped: nothing is collected for injection.
+    assertTrue(injectionKeyData.isEmpty());
+    assertTrue(injectionGroupData.isEmpty());
+  }
+
   /**
    * Regression test for <a 
href="https://github.com/apache/hop/issues/7246";>#7246</a>: when an
    * injection group mixes a streamed key and a constant key, the constant 
value must be merged into

Reply via email to