I need to extract data from a Sybase source and then use this data to extract values from an SQL Server source.
I am using these drivers:
// Database drivers
// https://mvnrepository.com/artifact/jdbc.sybase/jconn4
implementation("jdbc.sybase:jconn4:16.0")
// https://mvnrepository.com/artifact/com.microsoft.sqlserver/mssql-jdbc
implementation("com.microsoft.sqlserver:mssql-jdbc:13.2.0.jre11")
My program will run in debug, but fails to run normally. This is the Sybase call
package gov.usdohud.chums;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.LinkedHashSet;
import org.apache.logging.log4j.core.Logger;
import com.sybase.jdbc4.jdbc.SybDataSource;
import gov.usdohud.dao.CaseData;
import gov.usdohud.model.ConfigData;
public class GetCases {
Logger LOGGER;
ConfigData config;
public GetCases(Logger LOGGER, ConfigData config) {
this.config = config;
this.LOGGER = LOGGER;
}
/**
* Get case data from the warehouse
* @return
*/
public LinkedHashSet<CaseData> getCaseData() {
LinkedHashSet<CaseData> cases = new LinkedHashSet<>();
// Query SFDW for cases
String sqlString = "select top 20 b.case_nbr, b.loan_nbr, b.score_dt, b.undrwrtr_id from idb_1 a, total_scorecard_data_final b "
+ "where a.case_nbr = b.case_nbr and endrsmnt_cy = ?";
SybDataSource datasource = new SybDataSource();
datasource.setServerName(config.getSfdwServer().getName());
datasource.setPortNumber(Integer.valueOf(config.getSfdwServer().getPort()));
datasource.setDatabaseName(config.getSfdwServer().getDatabase());
datasource.setUser(config.getSfdwServer().getUserId());
datasource.setPassword(config.getSfdwServer().getAuthentication());
try (Connection conn = datasource.getConnection();) {
PreparedStatement stmt = conn.prepareStatement(sqlString);
stmt.setLong(1, config.getFiscalYear());
ResultSet rs = stmt.executeQuery();
while (rs.next()) {
CaseData thisRow = new CaseData();
thisRow.setCase_nbr(rs.getString("case_nbr"));
thisRow.setLoan_nbr(rs.getString("loan_nbr"));
thisRow.setScore_dt(rs.getString("score_dt"));
thisRow.setUndrwrtr_id(rs.getString("undrwrtr_id"));
cases.add(thisRow);
}
LOGGER.info("Preparring to process {} scoring records.", cases.size());
} catch (SQLException e) {
LOGGER.error("SQL Exception raised: {}",e.getMessage());
}
return cases;
}
}
After making the Sybase call, this is the mess that dumps out on the creation of the SQL server datasource object.
2025-09-30 13:36:39:174 ERROR [main] (com.salientcrgt.chums.util.LogStandardOutput$2.print(LogStandardOutput.java:45)) serr: Exception in thread "main"
2025-09-30 13:36:44:225 ERROR [main] (com.salientcrgt.chums.util.LogStandardOutput$2.print(LogStandardOutput.java:45)) serr: java.lang.NoClassDefFoundError: Could not initialize class sun.security.x509.OIDMap
2025-09-30 13:36:49:235 ERROR [main] (com.salientcrgt.chums.util.LogStandardOutput$2.print(LogStandardOutput.java:45)) serr: at java.base/sun.security.x509.CertificateExtensions.parseExtension(CertificateExtensions.java:97)
2025-09-30 13:36:54:238 ERROR [main] (com.salientcrgt.chums.util.LogStandardOutput$2.print(LogStandardOutput.java:45)) serr: at java.base/sun.security.x509.CertificateExtensions.init(CertificateExtensions.java:88)
2025-09-30 13:36:59:237 ERROR [main] (com.salientcrgt.chums.util.LogStandardOutput$2.print(LogStandardOutput.java:45)) serr: at java.base/sun.security.x509.CertificateExtensions.<init>(CertificateExtensions.java:78)
2025-09-30 13:36:59:259 ERROR [main] (com.salientcrgt.chums.util.LogStandardOutput$2.print(LogStandardOutput.java:45)) serr: at java.base/sun.security.x509.X509CertInfo.parse(X509CertInfo.java:709)
2025-09-30 13:37:04:247 ERROR [main] (com.salientcrgt.chums.util.LogStandardOutput$2.print(LogStandardOutput.java:45)) serr: at java.base/sun.security.x509.X509CertInfo.<init>(X509CertInfo.java:169)
2025-09-30 13:37:04:266 ERROR [main] (com.salientcrgt.chums.util.LogStandardOutput$2.print(LogStandardOutput.java:45)) serr: at java.base/sun.security.x509.X509CertImpl.parse(X509CertImpl.java:1787)
2025-09-30 13:37:09:256 ERROR [main] (com.salientcrgt.chums.util.LogStandardOutput$2.print(LogStandardOutput.java:45)) serr: at java.base/sun.security.x509.X509CertImpl.<init>(X509CertImpl.java:178)
2025-09-30 13:37:09:284 ERROR [main] (com.salientcrgt.chums.util.LogStandardOutput$2.print(LogStandardOutput.java:45)) serr: at java.base/sun.security.provider.X509Factory.engineGenerateCertificate(X509Factory.java:102)
2025-09-30 13:37:14:289 ERROR [main] (com.salientcrgt.chums.util.LogStandardOutput$2.print(LogStandardOutput.java:45)) serr: at java.base/java.security.cert.CertificateFactory.generateCertificate(CertificateFactory.java:355)
2025-09-30 13:37:19:298 ERROR [main] (com.salientcrgt.chums.util.LogStandardOutput$2.print(LogStandardOutput.java:45)) serr: at java.base/sun.security.pkcs.PKCS7.parseSignedData(PKCS7.java:305)
2025-09-30 13:37:24:302 ERROR [main] (com.salientcrgt.chums.util.LogStandardOutput$2.print(LogStandardOutput.java:45)) serr: at java.base/sun.security.pkcs.PKCS7.parse(PKCS7.java:162)
2025-09-30 13:37:29:306 ERROR [main] (com.salientcrgt.chums.util.LogStandardOutput$2.print(LogStandardOutput.java:45)) serr: at java.base/sun.security.pkcs.PKCS7.parse(PKCS7.java:126)
2025-09-30 13:37:34:295 ERROR [main] (com.salientcrgt.chums.util.LogStandardOutput$2.print(LogStandardOutput.java:45)) serr: at java.base/sun.security.pkcs.PKCS7.<init>(PKCS7.java:108)
2025-09-30 13:37:34:322 ERROR [main] (com.salientcrgt.chums.util.LogStandardOutput$2.print(LogStandardOutput.java:45)) serr: at java.base/sun.security.util.SignatureFileVerifier.<init>(SignatureFileVerifier.java:125)
2025-09-30 13:37:39:304 ERROR [main] (com.salientcrgt.chums.util.LogStandardOutput$2.print(LogStandardOutput.java:45)) serr: at java.base/java.util.jar.JarVerifier.processEntry(JarVerifier.java:308)
2025-09-30 13:37:39:332 ERROR [main] (com.salientcrgt.chums.util.LogStandardOutput$2.print(LogStandardOutput.java:45)) serr: at java.base/java.util.jar.JarVerifier.update(JarVerifier.java:239)
2025-09-30 13:37:44:342 ERROR [main] (com.salientcrgt.chums.util.LogStandardOutput$2.print(LogStandardOutput.java:45)) serr: at java.base/java.util.jar.JarFile.initializeVerifier(JarFile.java:761)
2025-09-30 13:37:49:351 ERROR [main] (com.salientcrgt.chums.util.LogStandardOutput$2.print(LogStandardOutput.java:45)) serr: at java.base/java.util.jar.JarFile.ensureInitialization(JarFile.java:1037)
2025-09-30 13:37:54:349 ERROR [main] (com.salientcrgt.chums.util.LogStandardOutput$2.print(LogStandardOutput.java:45)) serr: at java.base/java.util.jar.JavaUtilJarAccessImpl.ensureInitialization(JavaUtilJarAccessImpl.java:72)
2025-09-30 13:37:54:370 ERROR [main] (com.salientcrgt.chums.util.LogStandardOutput$2.print(LogStandardOutput.java:45)) serr: at java.base/jdk.internal.loader.URLClassPath$JarLoader$2.getManifest(URLClassPath.java:883)
2025-09-30 13:37:59:363 ERROR [main] (com.salientcrgt.chums.util.LogStandardOutput$2.print(LogStandardOutput.java:45)) serr: at java.base/jdk.internal.loader.BuiltinClassLoader.defineClass(BuiltinClassLoader.java:848)
2025-09-30 13:37:59:389 ERROR [main] (com.salientcrgt.chums.util.LogStandardOutput$2.print(LogStandardOutput.java:45)) serr: at java.base/jdk.internal.loader.BuiltinClassLoader.findClassOnClassPathOrNull(BuiltinClassLoader.java:760)
2025-09-30 13:38:04:370 ERROR [main] (com.salientcrgt.chums.util.LogStandardOutput$2.print(LogStandardOutput.java:45)) serr: at java.base/jdk.internal.loader.BuiltinClassLoader.loadClassOrNull(BuiltinClassLoader.java:681)
2025-09-30 13:38:04:396 ERROR [main] (com.salientcrgt.chums.util.LogStandardOutput$2.print(LogStandardOutput.java:45)) serr: at java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:639)
2025-09-30 13:38:09:397 ERROR [main] (com.salientcrgt.chums.util.LogStandardOutput$2.print(LogStandardOutput.java:45)) serr: at java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(ClassLoaders.java:188)
2025-09-30 13:38:09:427 ERROR [main] (com.salientcrgt.chums.util.LogStandardOutput$2.print(LogStandardOutput.java:45)) serr: at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:525)
2025-09-30 13:38:14:433 ERROR [main] (com.salientcrgt.chums.util.LogStandardOutput$2.print(LogStandardOutput.java:45)) serr: at gov.usdohud.chums.GetCreditReports.getSQLCon(GetCreditReports.java:85)
2025-09-30 13:38:19:430 ERROR [main] (com.salientcrgt.chums.util.LogStandardOutput$2.print(LogStandardOutput.java:45)) serr: at gov.usdohud.chums.GetCreditReports.main(GetCreditReports.java:54)
This is the SQL Server connection code.
/**
* Get SQL Server connection
* @return
* @throws InterruptedException
*/
private final Connection getSQLCon() {
Connection conn = null;
try {
final SQLServerDataSource dataSource = new SQLServerDataSource();
dataSource.setTrustServerCertificate(true);
dataSource.setSendStringParametersAsUnicode(false);
dataSource.setConnectRetryCount(5);
dataSource.setServerName(config.getAusNatServer().getName());
dataSource.setPortNumber(Integer.parseInt(config.getAusNatServer().getPort()));
dataSource.setDatabaseName(config.getAusNatServer().getDatabase());
dataSource.setUser(config.getAusNatServer().getUserId());
dataSource.setPassword(config.getAusNatServer().getAuthentication());
conn = dataSource.getConnection();
} catch (SQLException e) {
LOGGER.error("Unable to connect to aus_national :{}",e);
}
return conn;
}
I can comment out the call to the Sybase server and build a compatible LinkedHashSet and the program runs.
What do I need to do to get these drivers to work together?