{"record":{"id":"5f7ff5b7c17efb9c","repo":"pentaho/pentaho-kettle","slug":"combinationlookupmeta-exception-unabletoloadstepinfo","errorCode":null,"errorMessage":"CombinationLookupMeta.Exception.UnableToLoadStepInfo","messagePattern":"CombinationLookupMeta\\.Exception\\.UnableToLoadStepInfo","errorType":"exception","errorClass":"KettleXMLException","httpStatus":null,"severity":"error","filePath":"plugins/core/impl/src/main/java/org/pentaho/di/trans/steps/combinationlookup/CombinationLookupMeta.java","lineNumber":447,"sourceCode":"      // Read keys to dimension\n      for ( int i = 0; i < nrkeys; i++ ) {\n        Node knode = XMLHandler.getSubNodeByNr( keys, \"key\", i );\n        keyField[ i ] = XMLHandler.getTagValue( knode, \"name\" );\n        keyLookup[ i ] = XMLHandler.getTagValue( knode, \"lookup\" );\n      }\n\n      // If this is empty: use auto-increment field!\n      sequenceFrom = XMLHandler.getTagValue( stepnode, \"sequence\" );\n\n      Node fields = XMLHandler.getSubNode( stepnode, \"fields\" );\n      Node retkey = XMLHandler.getSubNode( fields, \"return\" );\n      technicalKeyField = XMLHandler.getTagValue( retkey, \"name\" );\n      useAutoinc = !\"N\".equalsIgnoreCase( XMLHandler.getTagValue( retkey, \"use_autoinc\" ) );\n      lastUpdateField = XMLHandler.getTagValue( stepnode, \"last_update_field\" );\n\n      setTechKeyCreation( XMLHandler.getTagValue( retkey, \"creation_method\" ) );\n    } catch ( Exception e ) {\n      throw new KettleXMLException( BaseMessages.getString(\n        PKG, \"CombinationLookupMeta.Exception.UnableToLoadStepInfo\" ), e );\n    }\n  }\n\n  @Override\n  public void setDefault() {\n    schemaName = \"\";\n    tablename = BaseMessages.getString( PKG, \"CombinationLookupMeta.DimensionTableName.Label\" );\n    databaseMeta = null;\n    commitSize = 100;\n    cacheSize = DEFAULT_CACHE_SIZE;\n    replaceFields = false;\n    preloadCache = false;\n    useHash = false;\n    hashField = \"hashcode\";\n    int nrkeys = 0;\n\n    allocate( nrkeys );","sourceCodeStart":429,"sourceCodeEnd":465,"githubUrl":"https://github.com/pentaho/pentaho-kettle/blob/f3058517a153da500bf4551f46d79b91bf8ec552/plugins/core/impl/src/main/java/org/pentaho/di/trans/steps/combinationlookup/CombinationLookupMeta.java#L429-L465","documentation":"KettleXMLException thrown by CombinationLookupMeta.readData when parsing the <step> XML node for a CombinationLookup fails for any reason. It wraps the original exception with the localized message 'Unable to load step info from XML layer', indicating the saved step definition in the .ktr file could not be deserialized.","triggerScenarios":"loadXML -> readData encounters malformed or missing XML tags (e.g. corrupted retkey node, missing 'name'/'use_autoinc' attributes) or any exception while reading tags like last_update_field or creation_method.","commonSituations":"Hand-edited or truncated .ktr files; transformations from newer PDI versions opened in older versions; XML encoding corruption; missing required tags after manual merge of step definitions.","solutions":["Open the .ktr file and inspect the <combination_lookup> XML block for malformed/missing tags; fix or remove the broken step.","Re-add the CombinationLookup step in Spoon and reconfigure it, then save a fresh copy.","Open the transformation in the PDI version it was created with (check version mismatch).","Keep a backup of the .ktr before manual edits."],"exampleFix":"// before (broken ktr fragment):\n// <returnvalue><name>customer_tk</name></returnvalue>   <!-- missing use_autoinc attr etc. -->\n// after:\n// <returnvalue><name>customer_tk</name><use_autoinc>Y</use_autoinc></returnvalue>\n// plus all expected tags (last_update_field, creation_method, ...).","handlingStrategy":"try-catch","validationCode":"// validate ktr XML before load: check required tags exist\n// if (XMLHandler.getTagValue(stepnode, \"connection\") == null)\n//   throw new KettleXMLException(\"Step XML missing required tags\");","typeGuard":null,"tryCatchPattern":"try {\n  transMeta.loadXML(file, null, null, null, null, true, observer);\n} catch (KettleXMLException e) {\n  log.error(\"Failed to parse CombinationLookup step XML: \" + e.getCause(), e);\n}","preventionTips":["Never hand-edit ktr files without a backup and XML validation.","Match PDI versions between designers and runtime.","Validate ktr files after merges or version-control conflicts.","Re-add misconfigured steps in the UI rather than patching XML."],"tags":["xml","serialization","kettle","metadata-load"],"backgroundTag":"json-unmarshal-failed","analyzedSha":"f3058517a153da500bf4551f46d79b91bf8ec552","analyzedAt":"2026-09-13T14:04:16.340Z","contentChangedAt":"2026-09-13T14:04:16.340Z","schemaVersion":2},"datasetVersion":"2026-09-20T23:17:15.980Z"}