WebSphere中的XML.loadString抛出java.lang.VerifyError

时间:2011-08-04 01:51:29

标签: java scala websphere classloader linkage

我在WebSphere 6.1 ND中的MDB中调用XML.loadString(...)。我收到java.lang.VerifyError,类似于this question中描述的内容。

堆栈跟踪是:

java.lang.VerifyError: class loading constraint violated (class: scala/collection/mutable/StringBuilder method: toSeq()Lscala/collection/Seq;) at pc: 0
    at java.lang.J9VMInternals.verifyImpl(Native Method)
    at java.lang.J9VMInternals.verify(J9VMInternals.java:59)
    at java.lang.J9VMInternals.initialize(J9VMInternals.java:120)
    at scala.xml.parsing.FactoryAdapter.<init>(FactoryAdapter.scala:40)
    at scala.xml.parsing.NoBindingFactoryAdapter.<init>(NoBindingFactoryAdapter.scala:18)
    at scala.xml.factory.XMLLoader$class.adapter(XMLLoader.scala:24)
    at scala.xml.XML$.adapter(XML.scala:40)
    at scala.xml.factory.XMLLoader$class.loadXML(XMLLoader.scala:37)
    at scala.xml.XML$.loadXML(XML.scala:40)
    at scala.xml.factory.XMLLoader$class.loadString(XMLLoader.scala:59)
    at scala.xml.XML$.loadString(XML.scala:40)
    at my code

如果我也使用ConstructingParser,也会发生这种情况:

java.lang.VerifyError: class loading constraint violated (class: scala/collection/mutable/StringBuilder method: toSeq()Lscala/collection/Seq;) at pc: 0
    at java.lang.J9VMInternals.verifyImpl(Native Method)
    at java.lang.J9VMInternals.verify(J9VMInternals.java:59)
    at java.lang.J9VMInternals.initialize(J9VMInternals.java:120)
    at scala.xml.parsing.MarkupParser$class.$init$(MarkupParser.scala:102)
    at scala.xml.parsing.ConstructingParser.<init>(ConstructingParser.scala:47)
    at scala.xml.parsing.ConstructingParser$.fromSource(ConstructingParser.scala:22)

我正在使用Scala v2.9.0.1

如何诊断此类链接问题?

编辑#1

在一些反思中,我意识到问题发生在无关的变化之后。在预感中,我完全从WAS卸载了应用程序,然后重新安装它。问题消失了。下一个应用程序更新(即覆盖)后问题再次出现。

经过几个小时,以及其他未经处理的Scala XML解析更改,我忘记卸载/重新安装并进行了更新。这个问题没有再发生。我再也无法复制这个问题了。

编辑#2

问题又回来了,单靠卸载/重新安装无法解决。用Scala 2.8.1重试,但问题仍然存在。现在尝试卸载/关闭服务器/删除临时文件/重新安装/重启服务器。祝我好运。

2 个答案:

答案 0 :(得分:1)

好吧,我不能提供比我在答案中给出的更多建议:-),但在你的情况下,scala类似乎是问题所在。你们都有scala课程吗?如果您不确定,我建议启用JVM详细类加载跟踪,然后您至少要知道JAR的位置。

如果MDB遇到问题,那么您必须将应用程序类加载器设置为“父最后一个”,因此可能在应用程序和服务器关联的共享库或其他服务器类路径中都有scala类。您需要在JAR中包含所有相关的scala类,否则您将需要停止使用“parent last”。

答案 1 :(得分:0)

这是WebSphere 6 ND中的一个错误。通过应用fixpack 37.固定。就像你一样。

编辑:事实上,WAS 6的IBM JRE中存在一个错误,因为使用scalac时错误会被重现。