pentaho/pentaho-kettle · error · KettleStepException

XsdValidator.Exception.ErrorResultFieldMissing

Error message

XsdValidator.Exception.ErrorResultFieldMissing

What it means

XsdValidator.processRow requires a result field name in which to store the validation outcome (true/false). If meta.getResultfieldname() is null, it logs and throws this localized KettleStepException. This is a step configuration error detected at runtime before any row processing.

Solutions

  1. Open the XSD Validator step and set the 'Result fieldname' (e.g. result)
  2. Re-save and re-run the transformation
  3. Verify with the step's check/test that the configuration is complete

Example fix

// before
<Resultfieldname/>
// after
<Resultfieldname>validation_result</Resultfieldname>
Defensive patterns

Strategy: validation

Validate before calling

if (meta.getResultfieldname() == null || meta.getResultfieldname().isEmpty()) throw new IllegalStateException("XSD Validator result fieldname not set");

Type guard

boolean resultFieldSet = meta.getResultfieldname() != null && !meta.getResultfieldname().trim().isEmpty();

Try / catch

try { step.init(); step.processRow(); } catch (KettleStepException e) { log.error("Configure the XSD Validator result fieldname", e); }

Prevention

When it happens

Trigger: processRow on the first row when the 'Result fieldname' was never set in the XSD Validator step dialog (empty/blank field name).

Common situations: Freshly added XSD Validator step configured with only the XML and XSD fields but the result field left blank; result field cleared during a dialog edit.

Understand the failure class

Background: "missing required argument" and "the following required arguments were not provided": what required-argument errors mean and how to fix them — this error's family across 20 libraries.

Related errors


AI-assisted analysis of pentaho/pentaho-kettle@f3058517a1 (2026-09-13). Data as JSON: /api/errors/19f6dbe5572504e5. Report an issue: GitHub.

Appendix: source

Thrown at plugins/xml/core/src/main/java/org/pentaho/di/trans/steps/xsdvalidator/XsdValidator.java:103

      // Check if XML stream is given
      if ( meta.getXMLStream() != null ) {
        // Try to get XML Field index
        data.xmlindex = getInputRowMeta().indexOfValue( meta.getXMLStream() );
        // Let's check the Field
        if ( data.xmlindex < 0 ) {
          // The field is unreachable !
          logError( BaseMessages.getString( PKG, "XsdValidator.Log.ErrorFindingField" ) + "[" + meta.getXMLStream()
              + "]" );
          throw new KettleStepException( BaseMessages.getString( PKG, "XsdValidator.Exception.CouldnotFindField", meta
              .getXMLStream() ) );
        }

        // Let's check that Result Field is given
        if ( meta.getResultfieldname() == null ) {
          // Result field is missing !
          logError( BaseMessages.getString( PKG, "XsdValidator.Log.ErrorResultFieldMissing" ) );
          throw new KettleStepException( BaseMessages.getString( PKG, "XsdValidator.Exception.ErrorResultFieldMissing" ) );
        }

        // Is XSD file is provided?
        if ( meta.getXSDSource().equals( meta.SPECIFY_FILENAME ) ) {
          if ( meta.getXSDFilename() == null ) {
            logError( BaseMessages.getString( PKG, "XsdValidator.Log.ErrorXSDFileMissing" ) );
            throw new KettleStepException( BaseMessages.getString( PKG, "XsdValidator.Exception.ErrorXSDFileMissing" ) );
          } else {
            // Is XSD file exists ?
            FileObject xsdfile = null;
            try {
              xsdfile = KettleVFS.getInstance( getTransMeta().getBowl() ).getFileObject( environmentSubstitute( meta.getXSDFilename() ), getTransMeta() );
              if ( !xsdfile.exists() ) {
                logError( BaseMessages.getString( PKG, "XsdValidator.Log.Error.XSDFileNotExists" ) );
                throw new KettleStepException( BaseMessages.getString( PKG, "XsdValidator.Exception.XSDFileNotExists" ) );
              }

            } catch ( Exception e ) {

View on GitHub (pinned to f3058517a1)