{"record":{"id":"72dbea0f917bfabd","repo":"pentaho/pentaho-kettle","slug":"rssoutput-log-geopointlatempty","errorCode":null,"errorMessage":"RssOutput.Log.GeoPointLatEmpty","messagePattern":"RssOutput\\.Log\\.GeoPointLatEmpty","errorType":"exception","errorClass":"KettleException","httpStatus":null,"severity":"error","filePath":"plugins/rss/impl/src/main/java/org/pentaho/di/trans/steps/rssoutput/RssOutput.java","lineNumber":263,"sourceCode":"            logError( BaseMessages.getString( PKG, \"RssOutput.Log.ErrorFindingField\", meta.getItemTitle() ) );\n            throw new KettleException( BaseMessages.getString( PKG, \"RssOutput.Log.ErrorFindingField\", meta\n              .getItemTitle() ) );\n          }\n        }\n\n        if ( !Utils.isEmpty( meta.getItemDescription() ) ) {\n          // Let's take the index of item description field ...\n          data.indexOfFielditemdescription = data.inputRowMeta.indexOfValue( meta.getItemDescription() );\n          if ( data.indexOfFielditemdescription < 0 ) {\n            // The field is unreachable !\n            logError( BaseMessages.getString( PKG, \"RssOutput.Log.ErrorFindingField\", meta.getItemDescription() ) );\n            throw new KettleException( BaseMessages.getString( PKG, \"RssOutput.Log.ErrorFindingField\", meta\n              .getItemDescription() ) );\n          }\n        }\n        if ( meta.AddGeoRSS() ) {\n          if ( Utils.isEmpty( meta.getGeoPointLong() ) ) {\n            throw new KettleException( BaseMessages.getString( PKG, \"RssOutput.Log.GeoPointLatEmpty\" ) );\n          }\n          if ( Utils.isEmpty( meta.getGeoPointLong() ) ) {\n            throw new KettleException( BaseMessages.getString( PKG, \"RssOutput.Log.GeoPointLongEmpty\" ) );\n          }\n\n          // Let's take the index of item geopointX field ...\n          data.indexOfFielditempointx = data.inputRowMeta.indexOfValue( meta.getGeoPointLat() );\n          if ( data.indexOfFielditempointx < 0 ) {\n            // The field is unreachable !\n            logError( BaseMessages.getString( PKG, \"RssOutput.Log.ErrorFindingField\", meta.getGeoPointLat() ) );\n            throw new KettleException( BaseMessages.getString( PKG, \"RssOutput.Log.ErrorFindingField\", meta\n              .getGeoPointLat() ) );\n          }\n          // Let's take the index of item geopointY field ...\n          data.indexOfFielditempointy = data.inputRowMeta.indexOfValue( meta.getGeoPointLong() );\n          if ( data.indexOfFielditempointy < 0 ) {\n            // The field is unreachable !\n            logError( BaseMessages.getString( PKG, \"RssOutput.Log.ErrorFindingField\", meta.getGeoPointLong() ) );","sourceCodeStart":245,"sourceCodeEnd":281,"githubUrl":"https://github.com/pentaho/pentaho-kettle/blob/f3058517a153da500bf4551f46d79b91bf8ec552/plugins/rss/impl/src/main/java/org/pentaho/di/trans/steps/rssoutput/RssOutput.java#L245-L281","documentation":"The RSS Output step throws this during processRow when AddGeoRSS is enabled but the Geo point latitude field name configured in the step metadata is empty. It is a fail-fast validation of the step's GeoRSS settings before any row processing, so the transformation stops immediately. Note the surrounding code actually calls Utils.isEmpty(meta.getGeoPointLong()) in both checks (a copy-paste bug), but the message key reports the latitude setting as the problem.","triggerScenarios":"meta.AddGeoRSS() is true and Utils.isEmpty(meta.getGeoPointLong()) returns true — i.e. the GeoRSS option is checked in the RSS Output step dialog while the geopoint latitude (lat) field is left blank. Raised as KettleException from processRow, invoked by runStep when the first row arrives.","commonSituations":"Users enable the 'Add GeoRSS' checkbox in the RSS Output step but forget to select the latitude/longitude field mappings; importing a transformation from another environment where the field dropdown resolved to an empty value; programmatically building StepMeta without calling setGeoPointLat().","solutions":["Open the RSS Output step settings, ensure 'Add GeoRSS' is either unchecked or the Geo point latitude field is set to an existing input field.","In code, call meta.setGeoPointLat(\"latField\") before the transformation runs when AddGeoRSS is enabled.","If you only want GeoRSS output occasionally, conditionally enable AddGeoRSS based on whether lat/long fields exist in the stream.","Be aware of the upstream bug: both checks test getGeoPointLong(), so setting only the latitude may not clear the error on affected versions — set both fields."],"exampleFix":"// before (dialog/step meta with GeoRSS enabled but no lat field)\nmeta.setAddGeoRSS( true );\nmeta.setGeoPointLat( \"\" );\n\n// after\nmeta.setAddGeoRSS( true );\nmeta.setGeoPointLat( \"latitude\" );\nmeta.setGeoPointLong( \"longitude\" );","handlingStrategy":"validation","validationCode":"// Before adding the RSS Output step meta to the transformation:\nif ( rssOutputMeta.AddGeoRSS() ) {\n  if ( rssOutputMeta.getGeoPointLat() == null || rssOutputMeta.getGeoPointLat().isEmpty() ) {\n    throw new IllegalStateException( \"AddGeoRSS enabled but Geo point latitude field is empty\" );\n  }\n}","typeGuard":null,"tryCatchPattern":null,"preventionTips":["Whenever enabling AddGeoRSS, immediately set both lat and long fields.","Use the step dialog's field dropdowns rather than hand-editing the ktr XML.","Run the transformation with a preview on the hop feeding RSS Output before production."],"tags":["pentaho-kettle","rss-output","configuration","georss"],"backgroundTag":"empty-required-field","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"}