pentaho/pentaho-kettle · error · KettleException

RssOutput.Log.GeoPointLongEmpty

Error message

RssOutput.Log.GeoPointLongEmpty

What it means

The RSS Output step throws this during processRow when AddGeoRSS is enabled but the Geo point longitude field name in the step metadata is empty. Like the latitude check, it is a startup validation meant to stop the transformation before producing an RSS feed missing geo coordinates. The twin check directly above it throws GeoPointLatEmpty.

Solutions

  1. Set the Geo point longitude field in the RSS Output step settings to a valid input field name.
  2. In code, call meta.setGeoPointLong("longitude") whenever AddGeoRSS is true.
  3. If GeoRSS is not needed, uncheck/disable AddGeoRSS so the validation is skipped entirely.
  4. Ensure both latitude and longitude are set, since the adjacent latitude check has a bug that also tests getGeoPointLong().

Example fix

// before
meta.setAddGeoRSS( true );
meta.setGeoPointLong( null );

// after
meta.setAddGeoRSS( true );
meta.setGeoPointLat( "latitude" );
meta.setGeoPointLong( "longitude" );
Defensive patterns

Strategy: validation

Validate before calling

if ( rssOutputMeta.AddGeoRSS() ) {
  if ( rssOutputMeta.getGeoPointLong() == null || rssOutputMeta.getGeoPointLong().isEmpty() ) {
    throw new IllegalStateException( "AddGeoRSS enabled but Geo point longitude field is empty" );
  }
}

Prevention

When it happens

Trigger: meta.AddGeoRSS() is true and Utils.isEmpty(meta.getGeoPointLong()) is true — the Geo point longitude field was left blank in the RSS Output step configuration. Thrown from processRow (called by runStep) on first row processing.

Common situations: Enabling GeoRSS in the step dialog without picking a longitude field; a duplicated step configuration where only latitude was filled in; scripting step metadata where setGeoPointLong() was never called; note the latitude check above also reads getGeoPointLong() (copy-paste bug), so an empty longitude can surface as either message depending on version.

Understand the failure class

Background: "must not be empty", "cannot be empty" — required-field validation errors across open-source libraries — this error's family across 41 libraries.

Related errors


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

Appendix: source

Thrown at plugins/rss/impl/src/main/java/org/pentaho/di/trans/steps/rssoutput/RssOutput.java:266

          }
        }

        if ( !Utils.isEmpty( meta.getItemDescription() ) ) {
          // Let's take the index of item description field ...
          data.indexOfFielditemdescription = data.inputRowMeta.indexOfValue( meta.getItemDescription() );
          if ( data.indexOfFielditemdescription < 0 ) {
            // The field is unreachable !
            logError( BaseMessages.getString( PKG, "RssOutput.Log.ErrorFindingField", meta.getItemDescription() ) );
            throw new KettleException( BaseMessages.getString( PKG, "RssOutput.Log.ErrorFindingField", meta
              .getItemDescription() ) );
          }
        }
        if ( meta.AddGeoRSS() ) {
          if ( Utils.isEmpty( meta.getGeoPointLong() ) ) {
            throw new KettleException( BaseMessages.getString( PKG, "RssOutput.Log.GeoPointLatEmpty" ) );
          }
          if ( Utils.isEmpty( meta.getGeoPointLong() ) ) {
            throw new KettleException( BaseMessages.getString( PKG, "RssOutput.Log.GeoPointLongEmpty" ) );
          }

          // Let's take the index of item geopointX field ...
          data.indexOfFielditempointx = data.inputRowMeta.indexOfValue( meta.getGeoPointLat() );
          if ( data.indexOfFielditempointx < 0 ) {
            // The field is unreachable !
            logError( BaseMessages.getString( PKG, "RssOutput.Log.ErrorFindingField", meta.getGeoPointLat() ) );
            throw new KettleException( BaseMessages.getString( PKG, "RssOutput.Log.ErrorFindingField", meta
              .getGeoPointLat() ) );
          }
          // Let's take the index of item geopointY field ...
          data.indexOfFielditempointy = data.inputRowMeta.indexOfValue( meta.getGeoPointLong() );
          if ( data.indexOfFielditempointy < 0 ) {
            // The field is unreachable !
            logError( BaseMessages.getString( PKG, "RssOutput.Log.ErrorFindingField", meta.getGeoPointLong() ) );
            throw new KettleException( BaseMessages.getString( PKG, "RssOutput.Log.ErrorFindingField", meta
              .getGeoPointLong() ) );
          }

View on GitHub (pinned to f3058517a1)