JDOM + Jaxen + Websphere 7 = java.lang.NoClassDefFoundError:org.jaxen.BaseXPath

时间:2011-07-01 20:23:03

标签: websphere classpath jdom

我想在Webapp项目中使用JDOM。这很好用。但是现在我想用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在我的类路径中,而org.jaxen.BaseXPath类就可以了。为什么Websphere找不到它?它适用于我在那里的所有其他库。当谷歌搜索我发现this,有人说他在某处有一个冲突的版本,我应该确保我的网络应用程序目录中的罐子具有优先权。在eclise的“内置路径配置”中,我将Web应用程序库设置在WebSphere库之上(现在只有src目录位于Web应用程序库之上),但这并没有改变任何内容。不幸的是,我并不真正理解关于EAR的部分,这似乎很重要......?

更新:与此同时this给了我一个新线索。我在WebSphere的管理控制台上找到了类路径和包含类加载器所考虑的所有jar的列表。这些都是一个数字,我用一个小grep和unzip -l魔法搜索它们,并认为文件/opt/ibm/WebSphere/PortalServer/wcm/prereq.wcm/wcm/shared/app/jdom.jar包含jdom(没有jaxen的东西)。也许这个jdom jar是加载的,但是从我的lib目录加载了一个不兼容版本的jaxen?

此外,我在WebSphere的管理控制台中找到了我的应用程序的“父优先/最后”设置,但所有内容都显示为灰色!我最后无法切换到父级: - (。

我该怎么做才能找到并解决问题?

0 个答案:

没有答案