Oracle JDBC XMLType NoClassDefFoundError

Когда я пытаюсь передать объект SQLXML в хранимую процедуру Oracle через JDBC в приложении Java 6, работающем на Weblogic, я получаю следующую ошибку:

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();

В этой статье ошибка приписывается отсутствует xdb.jar.

Я скачал xdb6.jar с сайта Oracle. и, по-видимому, добавил его в CLASSPATH.

Я также дважды проверил, что файл класса oracle.xdb.XMLtype присутствует в JAR.

Я все еще получаю эту ошибку.

Любые предложения по дальнейшему устранению неполадок?

ИЗМЕНИТЬ [19.11.15]:

Я добавил Class.forName("oracle.xdb.XMLType"), чтобы проверить явную загрузку «отсутствующего» класса. После добавления в смесь xmlparserv2.jar мой тестовый код работал нормально, но я получил такое же исключение в PhysicalConnection.

Я использую объединенное соединение, если это имеет значение.


person PM 77-1    schedule 18.11.2015    source источник


Ответы (1)


Предполагая, что 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
person Mario.Cadiz    schedule 25.08.2016