{"record":{"id":"6e9dbd8dd0bcc2c1","repo":"pentaho/pentaho-kettle","slug":"the-specified-object-location-specification-method","errorCode":null,"errorMessage":"The specified object location specification method '<specificationMethod>' is not yet supported in this <friendlyMetaType> entry.","messagePattern":"The specified object location specification method '<specificationMethod>' is not yet supported in this <friendlyMetaType> entry\\.","errorType":"exception","errorClass":"KettleException","httpStatus":null,"severity":"error","filePath":"engine/src/main/java/org/pentaho/di/base/MetaFileLoaderImpl.java","lineNumber":269,"sourceCode":"\n          if ( rep != null ) {\n            theMeta = attemptCacheRead( metaObjectId.toString() ); //try to get from the cache first\n            if ( theMeta == null ) {\n              // Load the last revision\n              if ( isTransMeta() ) {\n                theMeta = (T) rep.loadTransformation( metaObjectId, null );\n              } else {\n                theMeta = (T) rep.loadJob( metaObjectId, null );\n              }\n              idContainer[ 0 ] = metaObjectId.toString();\n            }\n          } else {\n            throw new KettleException(\n              \"Could not execute \" + friendlyMetaType + \" specified in a repository since we're not connected to one\" );\n          }\n          break;\n        default:\n          throw new KettleException( \"The specified object location specification method '\"\n            + specificationMethod + \"' is not yet supported in this \" + friendlyMetaType + \" entry.\" );\n      }\n\n      cacheMeta( idContainer[ 0 ], theMeta );\n      // Re-seed the internal directory variables on the returned meta from the freshly resolved tmpSpace.\n      // The cache may return an instance whose internal vars were last set in a different context\n      // (e.g. from a step loader using getVarSpaceOnlyWithRequiredParentVars, or with rep==null),\n      // which would otherwise leak the wrong Internal.Entry.Current.Directory into the child execution.\n      reseedInternalDirectoryVars( theMeta, tmpSpace );\n      return theMeta;\n    } catch ( final KettleException ke ) {\n      // if we get a KettleException, simply re-throw it\n      throw ke;\n    } catch ( Exception e ) {\n      throw new KettleException( BaseMessages.getString( persistentClass, \"JobTrans.Exception.MetaDataLoad\" ), e );\n    }\n  }\n","sourceCodeStart":251,"sourceCodeEnd":287,"githubUrl":"https://github.com/pentaho/pentaho-kettle/blob/f3058517a153da500bf4551f46d79b91bf8ec552/engine/src/main/java/org/pentaho/di/base/MetaFileLoaderImpl.java#L251-L287","documentation":"getMetaForEntry dispatches on the entry's specificationMethod (FILENAME, REPOSITORY_BY_NAME, REPOSITORY_BY_REFERENCE). If the stored value is none of these — typically a corrupted, future-version, or invalid enum value — the switch's default branch throws a KettleException saying that object-location specification method is not yet supported in this entry. It is a defensive guard against an unknown enum state rather than a normal user error.","triggerScenarios":"JobEntryTrans/JobEntryJob instance whose specificationMethod field holds a value outside the supported enum (e.g. deserialized from a kjb written by a newer Pentaho version, a manually edited XML value, or an uninitialized/legacy constant).","commonSituations":"Opening jobs exported from a newer Pentaho/PDI release into older code; hand-editing the 'reference_type'/'specification_method' attribute in a kjb; third-party tools generating job XML with unsupported values; plugins that set custom specification methods.","solutions":["Open the kjb in Spoon, re-set the transformation/job reference on the entry dialog (this resets specificationMethod to a supported value), and re-save.","Inspect the kjb XML and correct the specification-method attribute to 'FILENAME', 'REPOSITORY_BY_NAME', or 'REPOSITORY_BY_REFERENCE'.","Align PDI runtime and design-tool versions (regenerate the file with the same version that reads it).","If building entries in code, only assign values from the supported SPECIFICATION_METHOD enum; never raw integers/strings."],"exampleFix":"// before (hand-edited kjb / legacy value)\n<reference_type>99</reference_type>\n\n// after\n<reference_type>3</reference_type> <!-- REPOSITORY_BY_REFERENCE -->\n// or in code:\njet.setSpecificationMethod( JobEntryInterface.SPECIFICATION_METHOD.REPOSITORY_BY_NAME );","handlingStrategy":"validation","validationCode":"// reject unsupported specification methods before execution\nObject method = jobEntry.getSpecificationMethod();\nif ( method != SPECIFICATION_METHOD.FILENAME\n  && method != SPECIFICATION_METHOD.REPOSITORY_BY_NAME\n  && method != SPECIFICATION_METHOD.REPOSITORY_BY_REFERENCE ) {\n  throw new IllegalStateException( \"Unsupported specification method: \" + method );\n}","typeGuard":"boolean isSupportedSpecificationMethod( Object method ) {\n  return method == SPECIFICATION_METHOD.FILENAME\n    || method == SPECIFICATION_METHOD.REPOSITORY_BY_NAME\n    || method == SPECIFICATION_METHOD.REPOSITORY_BY_REFERENCE;\n}","tryCatchPattern":"try {\n  meta = loader.getMetaForEntry( bowl, rep, metaStore, space );\n} catch ( KettleException ke ) {\n  if ( String.valueOf( ke.getMessage() ).contains( \"not yet supported\" ) ) {\n    throw new JobExecutionException( \"Unsupported reference type in kjb — reopen in the matching PDI version and re-save\", ke );\n  }\n  throw ke;\n}","preventionTips":["Keep the PDI runtime version >= the version that authored the job files.","Never hand-edit specification-method values in kjb XML.","Only assign specificationMethod from the supported enum constants in plugins/code.","Validate imported job files by loading all entries and checking their specification methods."],"tags":["kettle","job-entry","unsupported-operation","enum","version-compatibility"],"backgroundTag":"unsupported-enum-value","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"}