2015-11-18 318 views
1

當我嘗試通過JDBC SQLXML對象傳遞給Oracle存儲過程在Weblogic上運行的Java 6應用程序,我收到以下錯誤:甲骨文JDBC的XMLType的NoClassDefFoundError

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。

我下載了xdb6.jarOracle site並且似乎將其添加到CLASSPATH中。

我還仔細檢查了oracle.xdb.XMLtype類文件存在於JAR中。

我仍然收到此錯誤。

有關進一步故障排除的任何建議?

編輯 [15年11月19日]:

我加Class.forName("oracle.xdb.XMLType")測試 「失蹤」 類的明確加載。在將xmlparserv2.jar添加到組合中後,我的測試代碼運行正常,但我在PhysicalConnection中遇到了同樣的異常。

我正在使用池連接,如果它很重要。

回答

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