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がそれを見つけられないのはなぜですか?それは私がそこに持っている他のすべてのライブラリで動作します。グーグルで調べたところ、誰かがどこかでバージョンが競合していると言っているのを見つけました。私のWebアプリディレクトリのjarファイルが優先されることを確認する必要があります。ecliseのビルドパス構成では、Web AppライブラリをWebSphereライブラリの上に設定しました(srcディレクトリのみがWebアプリライブラリの上にあります)が、何も変更されませんでした。残念ながら、EARの重要と思われる部分がよくわかりませんでした…?
更新:その間に、これは私に新しい手がかりを与えました。WebSphereの管理コンソールで、クラスパスと、クラスローダーによって考慮されるすべてのjarのリストを見つけました。これらはかなりの数であり、少しのgrepとunzip -lマジックで検索し、ファイル/opt/ibm/WebSphere/PortalServer/wcm/prereq.wcm/wcm/shared/app/jdom.jarにjdom( jaxenのものなし)。したがって、このjdom jarはロードされますが、互換性のないバージョンのjaxenは私のlibディレクトリからロードされますか?
さらに、WebSphereの管理コンソールで、アプリケーションの「親の最初/最後」の設定を見つけましたが、すべてがグレー表示されています。最後に親に切り替えることはできません:-(。
問題を見つけて修正するにはどうすればよいですか?