{"record":{"id":"940bb00f7d423991","repo":"pentaho/pentaho-kettle","slug":"valuemapper0004-valuemappermeta-runtimeerror-unabletoreadxml","errorCode":"VALUEMAPPER0004","errorMessage":"ValueMapperMeta.RuntimeError.UnableToReadXML.VALUEMAPPER0004","messagePattern":"ValueMapperMeta\\.RuntimeError\\.UnableToReadXML\\.VALUEMAPPER0004","errorType":"exception","errorClass":"KettleXMLException","httpStatus":null,"severity":"error","filePath":"engine/src/main/java/org/pentaho/di/trans/steps/valuemapper/ValueMapperMeta.java","lineNumber":146,"sourceCode":"  private void readData( Node stepnode ) throws KettleXMLException {\n    try {\n      fieldToUse = XMLHandler.getTagValue( stepnode, \"field_to_use\" );\n      targetField = XMLHandler.getTagValue( stepnode, \"target_field\" );\n      nonMatchDefault = XMLHandler.getTagValue( stepnode, \"non_match_default\" );\n\n      Node fields = XMLHandler.getSubNode( stepnode, \"fields\" );\n      int count = XMLHandler.countNodes( fields, \"field\" );\n\n      allocate( count );\n\n      for ( int i = 0; i < count; i++ ) {\n        Node fnode = XMLHandler.getSubNodeByNr( fields, \"field\", i );\n\n        sourceValue[i] = XMLHandler.getTagValue( fnode, \"source_value\" );\n        targetValue[i] = XMLHandler.getTagValue( fnode, \"target_value\" );\n      }\n    } catch ( Exception e ) {\n      throw new KettleXMLException( BaseMessages.getString(\n        PKG, \"ValueMapperMeta.RuntimeError.UnableToReadXML.VALUEMAPPER0004\" ), e );\n    }\n  }\n\n  @Override\n  public void setDefault() {\n    int count = 0;\n\n    allocate( count );\n\n    for ( int i = 0; i < count; i++ ) {\n      sourceValue[i] = \"field\" + i;\n      targetValue[i] = \"\";\n    }\n  }\n\n  @Override\n  public void getFields( Bowl bowl, RowMetaInterface r, String name, RowMetaInterface[] info, StepMeta nextStep,","sourceCodeStart":128,"sourceCodeEnd":164,"githubUrl":"https://github.com/pentaho/pentaho-kettle/blob/f3058517a153da500bf4551f46d79b91bf8ec552/engine/src/main/java/org/pentaho/di/trans/steps/valuemapper/ValueMapperMeta.java#L128-L164","documentation":"ValueMapperMeta.loadXML -> readData wraps XML parsing of the step's <fields> definitions in a try/catch and rethrows any Exception as a KettleXMLException with message VALUEMAPPER0004 ('Unable to read XML'). It indicates the step's serialized configuration in the .ktr file could not be parsed.","triggerScenarios":"loadXML calls readData(stepnode); XMLHandler.getTagValue/getSubNodeByNr throws (malformed XML structure, unexpected node types) while reading field/source_value/target_value nodes.","commonSituations":"Corrupt or hand-edited .ktr file; schema mismatch after a PDI version upgrade; truncated file transfer; XML entities that break parsing.","solutions":["Open the .ktr in a text editor and check the ValueMapper step's <fields> XML block for malformed or truncated nodes.","Restore the transformation from backup or version control.","Re-create the ValueMapper step in Spoon and re-enter mappings.","Check the wrapped cause 'e' in the stack trace for the exact parse error position."],"exampleFix":"// before (malformed)\n<fields><field><source_value>A<target_value>B</field></fields>\n// after\n<fields><field><source_value>A</source_value><target_value>B</target_value></field></fields>","handlingStrategy":"try-catch","validationCode":"// Before loading, sanity-check XML well-formedness:\nDocumentBuilderFactory.newInstance().newDocumentBuilder().parse(new File(ktrPath));","typeGuard":null,"tryCatchPattern":"try {\n  transMeta.loadXML(new FileInputStream(ktr), null, this);\n} catch (KettleXMLException e) {\n  logError(\"Corrupt step XML: \" + e.getMessage(), e);\n  // fall back to backup file\n}","preventionTips":["Don't hand-edit .ktr files; use Spoon","Keep transformations in version control for easy restore","Validate XML after transferring files between systems"],"tags":["pdi","kettle","xml-parse","valuemapper","serialization"],"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"}