pentaho/pentaho-kettle · error · SAPException
SapInputDialog.JCoLibNotFound
Error message
SapInputDialog.JCoLibNotFound
What it means
SAPException thrown by SAPConnectionFactory.create() when the SAP Java Connector (JCo) native library is not available on the classpath/library path. SAPLibraryTester.isJCoLibAvailable() checks for the JCo jar (sapjco3.jar); without it no SAP connection can be created.
Solutions
- Download sapjco3.jar (and the matching native library) from the SAP Service Marketplace for your OS/JVM.
- Place sapjco3.jar in the plugins/sap folder (or PDI lib) and restart Spoon.
- Ensure the JCo native library (libsapjco3.so / sapjco3.dll) is on java.library.path and matches your JVM bitness.
- Verify with java -version vs the downloaded JCo architecture (x86_64 vs aarch64).
- Confirm the jar is readable by the user running PDI (permissions).
Example fix
// environment fix, not code # before $ ls plugins/sap/*.jar lib-kettle-core... (no sapjco3.jar) # after cp ~/downloads/sapjco3.jar plugins/sap/ cp ~/downloads/libsapjco3.so $JAVA_HOME/lib/amd64/ # or set -Djava.library.path
Defensive patterns
Strategy: validation
Validate before calling
// before invoking SAP steps, check the JCo jar is present
Class.forName("com.sap.conn.jco.JCoDestinationManager"); Type guard
boolean jCoLibAvailable() {
try { Class.forName("com.sap.conn.jco.JCo"); return true; }
catch ( ClassNotFoundException e ) { return false; }
} Try / catch
try { SAPConnection c = SAPConnectionFactory.create(); } catch ( SAPException e ) { // show dialog telling admin to install sapjco3.jar and restart } Prevention
- Include sapjco3.jar in the PDI deployment package for all environments.
- Document the SAP-licensed jar installation step in setup runbooks.
- After JVM or OS changes, re-verify JCo availability.
- Add a startup check/job that fails fast when JCo is missing.
When it happens
Trigger: create() is called (e.g. from SapInputDialog 'Test connection') while sapjco3.jar is absent from PDI's lib or plugins/sap directories.
Common situations: Fresh PDI install without the SAP JCo driver (not bundled due to SAP licensing); copying plugins/sap between machines without the JCo jar; using an incompatible JCo version for the OS/JVM; 32/64-bit native lib mismatch.
Understand the failure class
Background: "not installed", "pip install", "required for": how missing-dependency errors surface across open-source libraries — this error's family across 34 libraries.
Related errors
- SapInputDialog.JCoImplNotFound
- Could not initialize from codeSnippets.xml
- ScriptValuesMod.Log.CouldNotAttachAdditionalScripts
- Trans.Exception.ErrorInDatabase
- Trans.Exception.UnableToGetDependencyInfoFromDB
AI-assisted analysis of pentaho/pentaho-kettle@f3058517a1 (2026-09-13).
Data as JSON: /api/errors/ef35c8d299bd67d1.
Report an issue: GitHub.
Appendix: source
Thrown at plugins/sap/core/src/main/java/org/pentaho/di/trans/steps/sapinput/sap/SAPConnectionFactory.java:31
package org.pentaho.di.trans.steps.sapinput.sap;
import org.pentaho.di.core.Const;
import org.pentaho.di.core.database.DatabaseFactoryInterface;
import org.pentaho.di.core.database.DatabaseMeta;
import org.pentaho.di.core.database.DatabaseTestResults;
import org.pentaho.di.core.exception.KettleDatabaseException;
import org.pentaho.di.i18n.BaseMessages;
import org.pentaho.di.trans.steps.sapinput.SapInputMeta;
import org.pentaho.di.trans.steps.sapinput.sap.impl.SAPConnectionImpl;
public class SAPConnectionFactory implements DatabaseFactoryInterface {
public static SAPConnection create() throws SAPException {
if ( !SAPLibraryTester.isJCoLibAvailable() ) {
String message = BaseMessages.getString( SapInputMeta.class, "SapInputDialog.JCoLibNotFound" );
throw new SAPException( message );
}
if ( !SAPLibraryTester.isJCoImplAvailable() ) {
String message = BaseMessages.getString( SapInputMeta.class, "SapInputDialog.JCoImplNotFound" );
throw new SAPException( message );
}
return new SAPConnectionImpl();
}
/**
* The SAP connection to test
*/
public String getConnectionTestReport( DatabaseMeta databaseMeta ) throws KettleDatabaseException {
StringBuilder report = new StringBuilder();
SAPConnection sc = null;
try {View on GitHub (pinned to f3058517a1)