JDOM + Jaxen + Websphere 7 = java.lang.NoClassDefFoundError: org.jaxen.BaseXPath - PullRequest
0 голосов
/ 02 июля 2011

Я хотел бы использовать JDOM в проекте Webapp.Это работает просто отлично.Но теперь я хочу добавить некоторые вещи, используя XPath, но если я пытаюсь работать с XPath, я просто получаю исключение:

com.ibm.ws.webcontainer.servlet.ServletWrapper service SRVE0068E: Uncaught exception created in one of the service methods of the servlet MyServlet in application MyProjectEAR. Exception created : java.lang.NoClassDefFoundError: org.jaxen.BaseXPath
    at java.lang.J9VMInternals.verifyImpl(Native Method)
    at java.lang.J9VMInternals.verify(J9VMInternals.java:72)
    at java.lang.J9VMInternals.initialize(J9VMInternals.java:134)
    at java.lang.Class.forNameImpl(Native Method)
    at java.lang.Class.forName(Class.java:136)
    at org.jdom.xpath.XPath.newInstance(XPath.java:126)
    at org.jdom.xpath.XPath.selectNodes(XPath.java:337)
    [..]

Caused by: java.lang.ClassNotFoundException: org.jaxen.BaseXPath
    at java.net.URLClassLoader.findClass(URLClassLoader.java:421)
    at com.ibm.ws.bootstrap.ExtClassLoader.findClass(ExtClassLoader.java:150)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:652)
    at com.ibm.ws.bootstrap.ExtClassLoader.loadClass(ExtClassLoader.java:90)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:618)
    at com.ibm.ws.classloader.ProtectionClassLoader.loadClass(ProtectionClassLoader.java:62)
    at com.ibm.ws.classloader.ProtectionClassLoader.loadClass(ProtectionClassLoader.java:58)
    at com.ibm.ws.classloader.CompoundClassLoader.loadClass(CompoundClassLoader.java:540)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:618)
    ... 35 more

jaxen.jar находится в моем classpath, а org.jaxenКласс .BaseXPath там просто отлично.Почему Websphere не находит его?Он работает со всеми остальными библиотеками, которые у меня есть.При поиске я нашел это , где кто-то говорит, что у него где-то конфликтующая версия, и я должен убедиться, что файлы jar из каталога моего веб-приложения имеют приоритет.В eclise 'Built Path Configuration я установил библиотеки веб-приложений выше библиотеки WebSphere (только каталог src теперь выше библиотек веб-приложений), но это ничего не изменило.К сожалению, я не совсем понял ту часть о EAR, которая кажется важной ...?

Обновление: тем временем это дало мне новую подсказку.В Консоли администрирования WebSphere я нашел путь к классам и список всех jar-файлов, которые рассматриваются загрузчиками классов.Их довольно много, и я искал их с помощью волшебства grep и unzip -l и понял, что файл /opt/ibm/WebSphere/PortalServer/wcm/prereq.wcm/wcm/shared/app/jdom.jar содержит jdom (без джексена).Может быть, этот jdom jar загружен, но jaxen в несовместимой версии загружен из моего каталога lib?

Кроме того, я нашел в консоли администрирования WebSphere настройку «родитель первый / последний» для моего приложения, но все отображается серым цветомиз!Я не могу переключиться на родительский последний: - (.

Что я могу сделать, чтобы найти и исправить проблему?

...