{"record":{"id":"7748da7522f11600","repo":"pentaho/pentaho-kettle","slug":"creditcardvalidatormeta-exception-unabletoreadstepinfo","errorCode":"CreditCardValidatorMeta.Exception.UnableToReadStepInfo","errorMessage":"CreditCardValidatorMeta.Exception.UnableToReadStepInfo","messagePattern":"CreditCardValidatorMeta\\.Exception\\.UnableToReadStepInfo","errorType":"exception","errorClass":"KettleXMLException","httpStatus":null,"severity":"error","filePath":"plugins/credit-card-validator/impl/src/main/java/org/pentaho/di/trans/steps/creditcardvalidator/CreditCardValidatorMeta.java","lineNumber":207,"sourceCode":"    retval.append( \"    \" ).append( XMLHandler.addTagValue( \"fieldname\", fieldname ) );\n    retval.append( \"    \" ).append( XMLHandler.addTagValue( \"resultfieldname\", resultfieldname ) );\n    retval.append( \"    \" ).append( XMLHandler.addTagValue( \"cardtype\", cardtype ) );\n    retval.append( \"    \" ).append( XMLHandler.addTagValue( \"onlydigits\", onlydigits ) );\n    retval.append( \"    \" ).append( XMLHandler.addTagValue( \"notvalidmsg\", notvalidmsg ) );\n\n    return retval.toString();\n  }\n\n  private void readData( Node stepnode ) throws KettleXMLException {\n    try {\n      fieldname = XMLHandler.getTagValue( stepnode, \"fieldname\" );\n      resultfieldname = XMLHandler.getTagValue( stepnode, \"resultfieldname\" );\n      cardtype = XMLHandler.getTagValue( stepnode, \"cardtype\" );\n      notvalidmsg = XMLHandler.getTagValue( stepnode, \"notvalidmsg\" );\n      onlydigits = \"Y\".equalsIgnoreCase( XMLHandler.getTagValue( stepnode, \"onlydigits\" ) );\n\n    } catch ( Exception e ) {\n      throw new KettleXMLException( BaseMessages.getString(\n        PKG, \"CreditCardValidatorMeta.Exception.UnableToReadStepInfo\" ), e );\n    }\n  }\n\n  public void readRep( Repository rep, IMetaStore metaStore, ObjectId id_step, List<DatabaseMeta> databases ) throws KettleException {\n    try {\n      fieldname = rep.getStepAttributeString( id_step, \"fieldname\" );\n      resultfieldname = rep.getStepAttributeString( id_step, \"resultfieldname\" );\n      cardtype = rep.getStepAttributeString( id_step, \"cardtype\" );\n      notvalidmsg = rep.getStepAttributeString( id_step, \"notvalidmsg\" );\n      onlydigits = rep.getStepAttributeBoolean( id_step, \"onlydigits\" );\n\n    } catch ( Exception e ) {\n      throw new KettleException( BaseMessages.getString(\n        PKG, \"CreditCardValidatorMeta.Exception.UnexpectedErrorReadingStepInfo\" ), e );\n    }\n  }\n","sourceCodeStart":189,"sourceCodeEnd":225,"githubUrl":"https://github.com/pentaho/pentaho-kettle/blob/f3058517a153da500bf4551f46d79b91bf8ec552/plugins/credit-card-validator/impl/src/main/java/org/pentaho/di/trans/steps/creditcardvalidator/CreditCardValidatorMeta.java#L189-L225","documentation":"CreditCardValidatorMeta.loadXML reads step configuration from a transformation XML node via readData. If any XMLHandler.getTagValue call or parsing throws, the exception is wrapped in a KettleXMLException with UnableToReadStepInfo, chained to the original cause, indicating the step's saved XML could not be parsed.","triggerScenarios":"Loading a .ktr whose CreditCardValidator step node is malformed, contains an unexpected child, or XMLHandler throws while reading tags like fieldname/resultfieldname/cardtype.","commonSituations":"Hand-edited or truncated transformation files; transformations exported from a newer Pentaho version and opened in an older one; corrupted repository export.","solutions":["Open the .ktr and inspect the <credit_card_validator> XML node for malformed tags","Re-create the step in Spoon and re-save the transformation","Compare the XML against a working transformation from the same PDI version"],"exampleFix":"// before\n<credit_card_validator><fieldname\n// after (well-formed XML)\n<credit_card_validator><fieldname>card</fieldname></credit_card_validator>","handlingStrategy":"try-catch","validationCode":"// validate XML before loading\nDocument d = XMLHandler.loadXMLFile(new File(\"trans.ktr\")); // fails fast on malformed XML","typeGuard":null,"tryCatchPattern":"try { meta.loadXML(stepnode, databases, metaStore); } catch (KettleXMLException e) { logError(\"Corrupt step XML: \" + e.getCause()); }","preventionTips":["Never hand-edit transformation XML without validating well-formedness","Keep export/import between the same or compatible PDI versions","Back up .ktr files before manual edits"],"tags":["kettle","pdi","xml","deserialization"],"backgroundTag":"xml-parse-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"}