pentaho/pentaho-kettle · error · KettleXMLException
JobEntryConnectedToRepository.Meta.UnableToLoadFromXML
Error message
JobEntryConnectedToRepository.Meta.UnableToLoadFromXML
What it means
JobEntryConnectedToRepository.loadXML wraps any exception while parsing the job entry's XML node (<isspecificrep>, <repname>, <isspecificuser>, <username> tags) into a KettleXMLException whose message is the localized key 'JobEntryConnectedToRepository.Meta.UnableToLoadFromXML'. It means the job entry could not be deserialized from the .kjb XML.
Solutions
- Open the .kjb in a text editor and verify the <entry type='CONNECTED_TO_REPOSITORY'> node contains isspecificrep, repname, isspecificuser, username tags
- Restore the job file from backup or version control
- Recreate the job entry in Spoon and re-save the job
- Check the wrapped cause exception in the log for the precise parse error
Example fix
// before (corrupt job XML) <entry><isspecificrep>Y</isspecificrep></entry> <!-- repname/username tags missing or malformed --> // after <entry> <isspecificrep>Y</isspecificrep> <repname>myRepo</repname> <isspecificuser>Y</isspecificuser> <username>admin</username> </entry>
Defensive patterns
Strategy: try-catch
Validate before calling
// validate the .kjb entry node before load
Node entry = XMLHandler.getSubNode( jobNode, "entry" );
for ( String tag : new String[]{ "isspecificrep", "repname", "isspecificuser", "username" } ) {
if ( XMLHandler.getTagValue( entry, tag ) == null ) {
throw new ValidationException( "Missing tag: " + tag );
}
} Try / catch
try {
entry.loadXML( node, databases, slaveServers, rep, metaStore );
} catch ( KettleXMLException e ) {
logError( "Corrupt job entry XML: " + e.getMessage(), e );
// recreate entry or restore file from backup
} Prevention
- Never hand-edit .kjb files without validating XML afterward
- Keep plugin versions consistent between save and load environments
- Store job files in version control for easy restore
- Validate XML well-formedness before loading
When it happens
Trigger: Calling loadXML (during job file load) on a node with malformed or missing child tags, or when XMLHandler.getTagValue throws on a corrupt/invalid XML document.
Common situations: Hand-edited or truncated .kjb file; job saved by an incompatible plugin/server version with changed tag names; XML encoding corruption during file transfer.
Understand the failure class
Background: "failed to unmarshal" / json.Unmarshal errors: why parsing a response into a Go struct fails and how to fix it — this error's family across 23 libraries.
Related errors
- JobEntryAbort.UnableToLoadFromXml.Label
- JobEntryAddResultFilenames.UnableToLoadFromXml
- JobEntryCheckFilesLocked.UnableToLoadFromXml
- JobEntryColumnsExist.Meta.UnableLoadXml
- JobEntryEval.UnableToLoadFromXml
AI-assisted analysis of pentaho/pentaho-kettle@f3058517a1 (2026-09-13).
Data as JSON: /api/errors/aa14a1776de2ed42.
Report an issue: GitHub.
Appendix: source
Thrown at plugins/connected-to-repository/impl/src/main/java/org/pentaho/di/job/entries/connectedtorepository/JobEntryConnectedToRepository.java:125
retval.append( " " ).append( XMLHandler.addTagValue( "isspecificuser", isspecificuser ) );
retval.append( " " ).append( XMLHandler.addTagValue( "username", username ) );
retval.append( super.getXML() );
return retval.toString();
}
public void loadXML( Node entrynode, List<DatabaseMeta> databases, List<SlaveServer> slaveServers,
Repository rep, IMetaStore metaStore ) throws KettleXMLException {
try {
super.loadXML( entrynode, databases, slaveServers );
isspecificrep = "Y".equalsIgnoreCase( XMLHandler.getTagValue( entrynode, "isspecificrep" ) );
repname = XMLHandler.getTagValue( entrynode, "repname" );
isspecificuser = "Y".equalsIgnoreCase( XMLHandler.getTagValue( entrynode, "isspecificuser" ) );
username = XMLHandler.getTagValue( entrynode, "username" );
} catch ( Exception e ) {
throw new KettleXMLException( BaseMessages.getString(
PKG, "JobEntryConnectedToRepository.Meta.UnableToLoadFromXML" ), e );
}
}
public void loadRep( Repository rep, IMetaStore metaStore, ObjectId id_jobentry, List<DatabaseMeta> databases,
List<SlaveServer> slaveServers ) throws KettleException {
try {
isspecificrep = rep.getJobEntryAttributeBoolean( id_jobentry, "isspecificrep" );
repname = rep.getJobEntryAttributeString( id_jobentry, "repname" );
isspecificuser = rep.getJobEntryAttributeBoolean( id_jobentry, "isspecificuser" );
username = rep.getJobEntryAttributeString( id_jobentry, "username" );
} catch ( KettleDatabaseException dbe ) {
throw new KettleException( BaseMessages.getString(
PKG, "JobEntryConnectedToRepository.Meta.UnableToLoadFromRep" )
+ id_jobentry, dbe );
}View on GitHub (pinned to f3058517a1)