pentaho/pentaho-kettle · error · KettleXMLException

Unable to load base info for job entry

Error message

Unable to load base info for job entry

What it means

JobEntryBase.loadXML() throws this KettleXMLException when loading the job entry's base information fails — most notably when AttributesUtil.loadAttributes cannot parse the <attributes> group node. The generic message hides the specific failure, which is available via getCause().

Solutions

  1. Inspect getCause() on the KettleXMLException for the exact failure inside AttributesUtil.loadAttributes
  2. Fix or remove the malformed <attributes> node in the .kjb file (back it up first)
  3. Re-create/re-save the job entry in Spoon to regenerate valid base XML
  4. If migrating between PDI versions, re-export the job from the source version or run migration tooling

Example fix

// before: malformed attributes node
<attributes><group key="a"><entry><unclosed></group></attributes>
// after: well-formed
<attributes><group key="a"><entry key="x">1</entry></group></attributes>
Defensive patterns

Strategy: try-catch

Validate before calling

// validate the attributes subtree before loadXML
Node attrs = XMLHandler.getSubNode( entrynode, AttributesUtil.XML_TAG );
if ( attrs != null ) {
  // ensure it parses by round-tripping through loadAttributes
  try { AttributesUtil.loadAttributes( attrs ); }
  catch ( Exception e ) { throw new KettleXMLException( "Corrupt <attributes> section", e ); }
}

Type guard

boolean hasValidAttributes( Node entrynode ) {
  Node n = XMLHandler.getSubNode( entrynode, AttributesUtil.XML_TAG );
  if ( n == null ) return true; // optional section
  try { AttributesUtil.loadAttributes( n ); return true; }
  catch ( Exception e ) { return false; }
}

Try / catch

try {
  jobEntry.loadXML( entrynode, databases, slaveServers, rep, metaStore );
} catch ( KettleXMLException e ) {
  Throwable cause = e.getCause();
  logError( "Base info load failed: " + ( cause != null ? cause.getMessage() : e.getMessage() ), e );
  // re-create the entry or strip the <attributes> node and retry
}

Prevention

When it happens

Trigger: Calling loadXML on a job entry node whose <attributes> subtree is malformed or whose attribute entries fail to parse, or any other Exception thrown during base-info loading.

Common situations: Hand-edited .kjb files with corrupted <attributes> sections; job files generated by third-party tools with invalid attribute-group XML; version mismatch where attribute XML format changed between PDI releases.

Related errors


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

Appendix: source

Thrown at engine/src/main/java/org/pentaho/di/job/entry/JobEntryBase.java:444

   *          the top-level XML node
   * @param databases
   *          the list of databases
   * @param slaveServers
   *          the list of slave servers
   * @throws KettleXMLException
   *           if any errors occur during the loading of the XML
   */
  public void loadXML( Node entrynode, List<DatabaseMeta> databases, List<SlaveServer> slaveServers ) throws KettleXMLException {
    try {
      setName( XMLHandler.getTagValue( entrynode, "name" ) );
      setDescription( XMLHandler.getTagValue( entrynode, "description" ) );

      // Load the attribute groups map
      //
      attributesMap = AttributesUtil.loadAttributes( XMLHandler.getSubNode( entrynode, AttributesUtil.XML_TAG ) );

    } catch ( Exception e ) {
      throw new KettleXMLException( "Unable to load base info for job entry", e );
    }
  }

  /**
   * @deprecated use {@link #loadXML(Node, List, List, Repository, IMetaStore)}
   * @param entrynode
   * @param databases
   * @param slaveServers
   * @param repository
   * @throws KettleXMLException
   */
  @Deprecated
  public void loadXML( Node entrynode, List<DatabaseMeta> databases, List<SlaveServer> slaveServers,
    Repository repository ) throws KettleXMLException {
    // Provided for compatibility with v4 code
  }

  public void loadXML( Node entrynode, List<DatabaseMeta> databases, List<SlaveServer> slaveServers,

View on GitHub (pinned to f3058517a1)