pentaho/pentaho-kettle · error · KettleXMLException

ERROR_0001_Cannot_Load_Job_Entry_From_Xml_Node

ERROR_0001_Cannot_Load_Job_Entry_From_Xml_Node

Error message

JobEntryWebServiceAvailable.ERROR_0001_Cannot_Load_Job_Entry_From_Xml_Node

What it means

KettleXMLException (code ERROR_0001) thrown by JobEntryWebServiceAvailable.loadXML when parsing the job entry's XML node fails with a KettleXMLException. It indicates the 'web service available' entry could not be loaded from the .kjb XML. The original parse error is preserved as the cause.

Solutions

  1. Validate the .kjb XML is well-formed (xmllint or an XML editor)
  2. Restore the job file from version control or backup
  3. Recreate the 'Check webservice availability' job entry in Spoon
  4. Check the cause chain for the exact parse offset/character error

Example fix

// before
entry.loadXML(entrynode, databases, slaveServers); // throws
// after
try {
  entry.loadXML(entrynode, databases, slaveServers);
} catch (KettleXMLException e) {
  logError("Bad XML for web-service-available entry: " + e.getCause(), e);
}
Defensive patterns

Strategy: try-catch

Validate before calling

// before loadXML
Document doc = XMLHandler.loadXMLFile(inputStream);
if (doc == null || XMLHandler.getSubNode(doc, "entry") == null) {
  throw new IllegalArgumentException("not a valid job entry XML node");
}

Try / catch

try {
  entry.loadXML(entrynode, databases, slaveServers);
} catch (KettleXMLException e) {
  logError("XML load failed: " + e.getCause(), e);
  // restore from backup or recreate entry
}

Prevention

When it happens

Trigger: Calling loadXML with a malformed or unexpected XML node — missing required tags, invalid XML characters, or a corrupted .kjb file — where XMLHandler.getTagValue or super.loadXML throws KettleXMLException.

Common situations: Hand-edited kjb files; XML truncated by a failed transfer/checkout; wrong file passed to loadXML; encoding issues after editing XML in a non-UTF-8 editor.

Understand the failure class

Background: JSON parse error: "Unexpected token" / "not valid JSON" / "failed to parse" — what JSON parsers are really complaining about — this error's family across 45 libraries.

Related errors


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

Appendix: source

Thrown at engine/src/main/java/org/pentaho/di/job/entries/webserviceavailable/JobEntryWebServiceAvailable.java:88

  public String getXML() {
    StringBuilder retval = new StringBuilder( 50 );

    retval.append( super.getXML() );
    retval.append( "      " ).append( XMLHandler.addTagValue( "url", url ) );
    retval.append( "      " ).append( XMLHandler.addTagValue( "connectTimeOut", connectTimeOut ) );
    retval.append( "      " ).append( XMLHandler.addTagValue( "readTimeOut", readTimeOut ) );
    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 );
      url = XMLHandler.getTagValue( entrynode, "url" );
      connectTimeOut = XMLHandler.getTagValue( entrynode, "connectTimeOut" );
      readTimeOut = XMLHandler.getTagValue( entrynode, "readTimeOut" );
    } catch ( KettleXMLException xe ) {
      throw new KettleXMLException( BaseMessages.getString(
        PKG, "JobEntryWebServiceAvailable.ERROR_0001_Cannot_Load_Job_Entry_From_Xml_Node" ), xe );
    }
  }

  public void loadRep( Repository rep, IMetaStore metaStore, ObjectId id_jobentry, List<DatabaseMeta> databases,
    List<SlaveServer> slaveServers ) throws KettleException {
    try {
      url = rep.getJobEntryAttributeString( id_jobentry, "url" );
      connectTimeOut = rep.getJobEntryAttributeString( id_jobentry, "connectTimeOut" );
      readTimeOut = rep.getJobEntryAttributeString( id_jobentry, "readTimeOut" );
    } catch ( KettleException dbe ) {
      throw new KettleException( BaseMessages.getString(
        PKG, "JobEntryWebServiceAvailable.ERROR_0002_Cannot_Load_Job_From_Repository", "" + id_jobentry ), dbe );
    }
  }

  public void saveRep( Repository rep, IMetaStore metaStore, ObjectId id_job ) throws KettleException {
    try {

View on GitHub (pinned to f3058517a1)