pentaho/pentaho-kettle · error · KettleException

GetXMLData.Log.NoField (localized message)

Error message

GetXMLData.Log.NoField (localized message)

What it means

Thrown by ReadNextString when the step's XML source field name (meta.getXMLField()) is empty. GetXMLData in 'field' input mode reads XML content from a field of the incoming row; if no field name was configured, the step cannot know where the XML comes from and aborts after logging the localized 'NoField' message.

Solutions

  1. Open the GetXMLData step dialog and set the 'XML field' (field containing the XML string) to an existing input field name.
  2. If using a variable/parameter for the field name, define it in the transformation settings or the job that calls it.
  3. Switch the step to file/URL-based input if the XML actually comes from files rather than a row field.

Example fix

// before
meta.setXMLField( "" ); // field name never set
// after
if ( Utils.isEmpty( meta.getXMLField() ) ) {
  throw new KettleException( "XML field name must be configured before running" );
}
meta.setXMLField( "xml_content" );
Defensive patterns

Strategy: validation

Validate before calling

if (meta.getXMLField() == null || meta.getXMLField().trim().isEmpty()) {
  throw new IllegalStateException("GetXMLData: XML field name must be set");
}

Try / catch

try {
  step.init(meta, data);
} catch (KettleException e) {
  if (e.getMessage().contains("NoField")) {
    logError("Configure the 'XML field' in GetXMLData settings");
  } else { throw e; }
}

Prevention

When it happens

Trigger: The step is configured to read XML from a field ('Get XML from field' / XML source defined in a field) but the 'XML field' name box was left blank; a saved transformation lost the field setting via parameter substitution yielding an empty value.

Common situations: Copying a step between transformations and forgetting to re-enter the field name; a variable like ${XML_FIELD} not defined at runtime so it resolves to empty; user filled the file tab instead of the field tab while field-based input was selected.

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/476cb63e603d4211. Report an issue: GitHub.

Appendix: source

Thrown at plugins/xml/core/src/main/java/org/pentaho/di/trans/steps/getxmldata/GetXMLData.java:368

        // Get total previous fields
        data.totalpreviousfields = data.inputRowMeta.size();

        // Create convert meta-data objects that will contain Date & Number formatters
        data.convertRowMeta = new RowMeta();
        for ( ValueMetaInterface valueMeta : data.convertRowMeta.getValueMetaList() ) {
          data.convertRowMeta
              .addValueMeta( ValueMetaFactory.cloneValueMeta( valueMeta, ValueMetaInterface.TYPE_STRING ) );
        }

        // For String to <type> conversions, we allocate a conversion meta data row as well...
        //
        data.convertRowMeta = data.outputRowMeta.cloneToType( ValueMetaInterface.TYPE_STRING );

        // Check is XML field is provided
        if ( Utils.isEmpty( meta.getXMLField() ) ) {
          logError( BaseMessages.getString( PKG, "GetXMLData.Log.NoField" ) );
          throw new KettleException( BaseMessages.getString( PKG, "GetXMLData.Log.NoField" ) );
        }

        // cache the position of the field
        if ( data.indexOfXmlField < 0 ) {
          data.indexOfXmlField = getInputRowMeta().indexOfValue( meta.getXMLField() );
          if ( data.indexOfXmlField < 0 ) {
            // The field is unreachable !
            logError( BaseMessages.getString( PKG, "GetXMLData.Log.ErrorFindingField", meta.getXMLField() ) );
            throw new KettleException( BaseMessages.getString( PKG, "GetXMLData.Exception.CouldnotFindField", meta
                .getXMLField() ) );
          }
        }
      }

      if ( meta.isInFields() ) {
        // get XML field value
        String Fieldvalue = getInputRowMeta().getString( data.readrow, data.indexOfXmlField );

View on GitHub (pinned to f3058517a1)