pentaho/pentaho-kettle · error · KettleXMLException

JobMeta.Exception.UnableToLoadJobFromXMLNode

Error message

JobMeta.Exception.UnableToLoadJobFromXMLNode

What it means

JobMeta.loadXML(Node jobnode, ...) throws this KettleXMLException when any exception occurs while populating a JobMeta from an already-obtained XML DOM node: bad sub-elements, failing AttributesUtil.loadAttributes, or a throwing JobMetaLoaded extension point. Unlike error 730 the failure is in interpreting the node, not reading the file, and the original exception is chained.

Solutions

  1. Confirm the Node passed in is the <job> root element, not a parent document or sibling node
  2. Read the chained cause to find which element/extension point failed
  3. Disable or fix any JobMetaLoaded extension point plugins and retry
  4. Repair or re-export the job XML so all required sub-nodes (entries, hops, attributes) are present

Example fix

// before
Node jobNode = XMLHandler.getSubNode(doc, "wrong-tag");
jobMeta.loadXML(jobNode, null, null, metaStore, null, null);
// after
Node jobNode = XMLHandler.getSubNode(doc, XMLHandler.XML_TAG_JOB); // ensure the real <job> node
jobMeta.loadXML(jobNode, null, null, metaStore, null, null);
Defensive patterns

Strategy: try-catch

Validate before calling

Node jobNode = XMLHandler.getSubNode(doc, "job");
if (jobNode == null) throw new IllegalArgumentException("XML document has no <job> root node");

Try / catch

try {
  jobMeta.loadXML(jobnode, fname, rep, metaStore, prompter, null);
} catch (KettleXMLException e) {
  log.error("Job node could not be loaded: " + e.getCause(), e);
}

Prevention

When it happens

Trigger: Calling JobMeta.loadXML(Node jobnode, ...) with a node that is not a valid <job> element or whose children fail to parse; an extension point registered on KettleExtensionPoint.JobMetaLoaded throws; AttributesUtil.loadAttributes encounters malformed attributes XML.

Common situations: Parsing a job from an embedded XML string where the wrong sub-node was selected; a plugin's extension point crashing during job load; hand-built or edited job XML missing required child elements (job entries, hops, attributes map).

Understand the failure class

Background: Schema validation failed / invalid input schema: payload rejected because its shape doesn't match the expected schema — this error's family across 28 libraries.

Related errors


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

Appendix: source

Thrown at engine/src/main/java/org/pentaho/di/job/JobMeta.java:1340

      // Read the notes...
      Node notepadsnode = XMLHandler.getSubNode( jobnode, "notepads" );
      int nrnotes = XMLHandler.countNodes( notepadsnode, "notepad" );
      for ( int i = 0; i < nrnotes; i++ ) {
        Node notepadnode = XMLHandler.getSubNodeByNr( notepadsnode, "notepad", i );
        NotePadMeta ni = new NotePadMeta( notepadnode );
        notes.add( ni );
      }

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

      ExtensionPointHandler.callExtensionPoint( LogChannel.GENERAL, KettleExtensionPoint.JobMetaLoaded.id, this );

      clearChanged();
    } catch ( Exception e ) {
      throw new KettleXMLException( BaseMessages.getString( PKG, "JobMeta.Exception.UnableToLoadJobFromXMLNode" ), e );
    } finally {
      setInternalKettleVariables();
    }
  }

  /**
   * Gets the job entry copy.
   *
   * @param x        the x
   * @param y        the y
   * @param iconsize the iconsize
   * @return the job entry copy
   */
  public JobEntryCopy getJobEntryCopy( int x, int y, int iconsize ) {
    int i, s;
    s = nrJobEntries();
    for ( i = s - 1; i >= 0; i-- ) {
      // Back to front because drawing goes from start to end

View on GitHub (pinned to f3058517a1)