Oracle JDBC XMLType NoClassDefFoundError

时间:2015-11-18 20:58:50

标签: 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类文件。

我仍然收到此错误。

有关进一步排查的建议吗?

编辑 [2015年11月19日]:

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

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

1 个答案:

答案 0 :(得分:0)

假设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