pentaho/pentaho-kettle · error · KettleException

AvroInput.Error.NoPathSet

AvroInput.Error.NoPathSet

Error message

AvroInput.Error.NoPathSet

What it means

fieldInit initializes one Avro output field. It first validates that avroInputField.getAvroFieldName() (the Avro path) is non-empty; an empty path means the field cannot be located in the record, so a KettleException with localized message 'AvroInput.Error.NoPathSet' is thrown.

Solutions

  1. Set the Avro field path for every entry in the step's fields list
  2. Remove empty/placeholder field rows from the mapping grid
  3. Re-open the step dialog, fill all paths, and re-save the transformation

Example fix

// before
AvroInputField f = new AvroInputField();
f.setPentahoFieldName("out"); // no avro path
// after
AvroInputField f = new AvroInputField();
f.setPentahoFieldName("out");
f.setAvroFieldName("$.customer.name");
Defensive patterns

Strategy: validation

Validate before calling

for (AvroInputField f : fields) {
  if (Const.isEmpty(f.getAvroFieldName())) {
    throw new KettleException("Field '" + f.getPentahoFieldName() + "' has no Avro path set");
  }
}

Type guard

boolean hasAvroPath(AvroInputField f) {
  return f.getAvroFieldName() != null && !f.getAvroFieldName().trim().isEmpty();
}

Try / catch

try {
  nestedReader.init();
} catch (KettleException e) {
  logError("An Avro field mapping is missing its path: " + e.getMessage());
  setErrors(1);
}

Prevention

When it happens

Trigger: A configured Avro input field whose 'path in Avro record' (avroFieldName) is blank when init() calls fieldInit for each field.

Common situations: Adding a row to the fields grid but leaving the path column empty; fields created programmatically without setAvroFieldName; a failed XML/repository load that dropped path values.

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/193f11bcd9b54cee. Report an issue: GitHub.

Appendix: source

Thrown at plugins/avro-format/core/src/main/java/org/pentaho/di/trans/steps/avro/input/AvroNestedReader.java:259

    for ( String part : avroInputField.getPathParts() ) {
      if ( space == null ) {
        avroInputField.getTempParts().add( part );
      } else {
        avroInputField.getTempParts().add( space.environmentSubstitute( part ) );
      }
    }
  }

  /**
   * Initialize this field by parsing the path etc.
   *
   * @param outputIndex the index in the output row structure for this field
   * @throws KettleException if a problem occurs
   */
  public void fieldInit(AvroInputField avroInputField, int outputIndex ) throws KettleException {
    if ( Const.isEmpty( avroInputField.getAvroFieldName() ) ) {
      throw new KettleException( BaseMessages.getString( PKG, "AvroInput.Error.NoPathSet" ) );
    }
    if ( avroInputField.getPathParts() != null ) {
      return;
    }

    String fieldPath = cleansePath( avroInputField.getAvroFieldName() );

    String[] temp = fieldPath.split( "\\." );
    List<String> pathParts = new ArrayList<>();
    avroInputField.setPathParts( pathParts );
    for ( String part : temp ) {
      pathParts.add( part );
    }

    if ( pathParts.get( 0 ).equals( "$" ) ) {
      pathParts.remove( 0 ); // root record indicator
    } else if ( pathParts.get( 0 ).startsWith( "$[" ) ) {

View on GitHub (pinned to f3058517a1)