java - Oracle JDBC XMLType NoClassDefFoundError

标签 java oracle jdbc sqlxml xmltype

当我尝试在 Weblogic 上运行的 Java 6 应用程序中通过 JDBC 将 SQLXML 对象传递到 Oracle 存储过程时,出现以下错误:

Cause: java.lang.NoClassDefFoundError 
Location: javax.servlet.ServletException: java.lang.NoClassDefFoundError: oracle/xdb/XMLType 
 java.lang.NoClassDefFoundError: oracle/xdb/XMLType
       at oracle.jdbc.driver.PhysicalConnection.createSQLXML(PhysicalConnection.java:9724)
       at weblogic.jdbc.wrapper.Connection.createSQLXML(Connection.java:1034)

代码的相关部分:

    String sql = "{call " + procedureName + "(?)}";
    CallableStatement callableStatement = mOracleConnection.prepareCall(sql);
    SQLXML sqlxml = mOracleConnection.createSQLXML();
    DOMResult dr = new DOMResult();
    sqlxml.setResult(DOMResult.class);
    dr.setNode(parameter);
    callableStatement.setSQLXML(1, sqlxml);
    callableStatement.executeUpdate();
    callableStatement.close();

This article将错误归因于缺少的 xdb.jar。

我从 Oracle site 下载了 xdb6.jar并似乎将其添加到 CLASSPATH 中。

我还仔细检查了 JAR 中是否存在 oracle.xdb.XMLtype 类文件。

我仍然收到此错误。

有关进一步故障排除的任何建议?

编辑 [15年11月19日]:

我添加了 Class.forName("oracle.xdb.XMLType") 来测试“缺失”类的显式加载。将 xmlparserv2.jar 添加到组合中后,我的测试代码运行良好,但在 PhysicalConnection 中遇到了相同的异常。

如果重要的话,我正在使用池连接。

最佳答案

假设 oracle/xdb/XMLType 是 xdb.jar 的一部分,您应该确保该 jar 是 CLASSPATH 的一部分,或者确保它是 WAR 文件的一部分。

为了了解类加载如何工作以及为什么找不到您的类,您可以使用这些调试标志启动 WLS 实例:

-Dweblogic.utils.classloaders.GenericClassLoader.Verbose=true 
-Dweblogic.utils.classloaders.ChangeAwareClassLoader.Verbose=true 
-Dweblogic.utils.classloaders.ClasspathClassFinder=true 
-Dweblogic.utils.classloaders.DefaultFilteringClassLoader.Verbose=true 
-Dweblogic.utils.classloaders.FilteringClassLoader.Verbose=true 
-Dweblogic.utils.classloaders.FilteringClassLoader.ResourceDump=true 
-Dweblogic.utils.classloaders.URLClassFinder.Verbose=true 
-Dweblogic.log.StdoutSeverity=Debug 
-Dweblogic.log.RedirectStdoutToServerLogEnabled=true 
-Dweblogic.log.RedirectStderrToServerLogEnabled=true

关于java - Oracle JDBC XMLType NoClassDefFoundError,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33790239/

相关文章:

java - Android 10 (Q) ACCESS_BACKGROUND_LOCATION 权限

java - JPA/Eclipselink @Cache 过期被忽略

java - Lombok 和 Java 静态构造函数对象创建

java - 部署 war 文件时设置 unix 权限的更好方法

Oracle PL/SQL : How to write a loop in order to print all the components of a variable of Oracle customized type?

apache-spark - 使用 PySpark JDBC 将数据帧写入 Azure SQL 数据库时性能缓慢

java - 如何在java中将矩阵添加到ArrayList

java - 使用 JDBC JAVA 进行分页

java - 如何在不使用事务的情况下使用 JDBC/jTDS 执行存储过程?

sql - 正则表达式中的多种模式