{"record":{"id":"5cc6131b9a395c2c","repo":"pentaho/pentaho-kettle","slug":"abortmeta-exception","errorCode":null,"errorMessage":"AbortMeta.Exception.UnexpectedErrorInReadingStepInfoFromRepository","messagePattern":"AbortMeta\\.Exception\\.UnexpectedErrorInReadingStepInfoFromRepository","errorType":"exception","errorClass":"KettleXMLException","httpStatus":null,"severity":"error","filePath":"plugins/core/impl/src/main/java/org/pentaho/di/trans/steps/abort/AbortMeta.java","lineNumber":143,"sourceCode":"\n  private void readData( Node stepnode ) throws KettleXMLException {\n    try {\n      rowThreshold = XMLHandler.getTagValue( stepnode, \"row_threshold\" );\n      message = XMLHandler.getTagValue( stepnode, \"message\" );\n      alwaysLogRows = \"Y\".equalsIgnoreCase( XMLHandler.getTagValue( stepnode, \"always_log_rows\" ) );\n      String abortOptionString = XMLHandler.getTagValue( stepnode, \"abort_option\" );\n      if ( !isEmpty( abortOptionString ) ) {\n        abortOption = AbortOption.valueOf( abortOptionString );\n      } else {\n        // Backwards compatibility\n        String awe = XMLHandler.getTagValue( stepnode, \"abort_with_error\" );\n        if ( awe == null ) {\n          awe = \"Y\"; // existing transformations will have to maintain backward compatibility with yes\n        }\n        abortOption = \"Y\".equalsIgnoreCase( awe ) ? AbortOption.ABORT_WITH_ERROR : AbortOption.ABORT;\n      }\n    } catch ( Exception e ) {\n      throw new KettleXMLException( BaseMessages.getString(\n        PKG, \"AbortMeta.Exception.UnexpectedErrorInReadingStepInfoFromRepository\" ), e );\n    }\n  }\n\n  public void readRep( Repository rep, IMetaStore metaStore, ObjectId id_step, List<DatabaseMeta> databases ) throws KettleException {\n    try {\n      rowThreshold = rep.getStepAttributeString( id_step, \"row_threshold\" );\n      message = rep.getStepAttributeString( id_step, \"message\" );\n      alwaysLogRows = rep.getStepAttributeBoolean( id_step, \"always_log_rows\" );\n\n      String abortOptionString = rep.getStepAttributeString( id_step, 0, \"abort_option\" );\n      if ( !isEmpty( abortOptionString ) ) {\n        abortOption = AbortOption.valueOf( abortOptionString );\n      } else {\n        // Backward compatibility\n        // existing transformations will have to maintain backward compatibility with yes\n        boolean abortWithError = rep.getStepAttributeBoolean( id_step, 0, \"abort_with_error\", true );\n        abortOption = abortWithError ? AbortOption.ABORT_WITH_ERROR : AbortOption.ABORT;","sourceCodeStart":125,"sourceCodeEnd":161,"githubUrl":"https://github.com/pentaho/pentaho-kettle/blob/f3058517a153da500bf4551f46d79b91bf8ec552/plugins/core/impl/src/main/java/org/pentaho/di/trans/steps/abort/AbortMeta.java#L125-L161","documentation":"AbortMeta.readData (invoked by loadXML) throws KettleXMLException with this message when any unexpected Exception occurs while reading the Abort step's settings (row_threshold, message, always_log_rows, abort_option) from XML. It signals the transformation step metadata could not be deserialized.","triggerScenarios":"loadXML on a <step> node where attributes like <abort_option> are missing/corrupt or attribute parsing throws; readData is the shared parser both loadXML paths go through.","commonSituations":"Hand-edited .ktr files, transformations produced by newer plugin versions read by older ones, XML truncated by bad merges or incomplete file transfer.","solutions":["Open the .ktr in Spoon and re-create or repair the Abort step whose XML is malformed.","Validate XML well-formedness and confirm required attributes (row_threshold, abort_option) exist.","Check version compatibility of the transformation file with the Pentaho/PDI runtime."],"exampleFix":"// before\nabortOption = \"Y\".equalsIgnoreCase( awe ) ? AbortOption.ABORT_WITH_ERROR : AbortOption.ABORT;\n// after\nabortOption = \"Y\".equalsIgnoreCase( Const.NVL( awe, \"Y\" ) ) ? AbortOption.ABORT_WITH_ERROR : AbortOption.ABORT;","handlingStrategy":"validation","validationCode":"// validate transformation XML before loading metadata\nDocument doc = XMLHandler.loadXMLFile( new File( ktrPath ) );\nif ( doc == null ) throw new IllegalStateException( \"unreadable ktr file\" );","typeGuard":null,"tryCatchPattern":"try { stepMeta.getStepMetaInterface().loadXML( stepnode, databases, metaStore ); } catch ( KettleXMLException e ) { logError( \"Abort step metadata unreadable: \" + e.getMessage(), e ); }","preventionTips":["Do not hand-edit .ktr files; use Spoon.","Transfer transformation files in binary-safe mode to avoid truncation.","Check plugin/version compatibility when loading old transformations."],"tags":["xml","step-metadata","deserialization","transformation"],"backgroundTag":"xml-parse-error","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"}