我正在尝试将我的应用程序从Liberty 18.0.0.1升级到18.0.0.2,但是它们现在都失败了:
java.lang.NoClassDefFoundError: javax.xml.bind.annotation.adapters.XmlJavaTypeAdapter
...
问题似乎出在ldapRegistry-3.0上-一旦启用该功能,所有jax-rs请求都将失败。删除ldapRegistry后,代码可以正常工作,但我的应用程序需要此功能...
我什至用单个RestEndpoint / v1 / api / employee构建了一个小例子来演示它:Sample project server config
这是一个错误,可以在某处报告吗?还是我在这里做错了什么?
这里是server dump
谢谢
答案 0 :(得分:1)
这似乎是由细微的拆分包类加载冲突引起的。我能够使用Liberty 18.0.0.2重现此问题,并且潜在的异常看起来像这样:
java.lang.NoSuchMethodException:javax.xml.bind.annotation.W3CDomHandler.createUnmarshaller(javax.xml.bind.ValidationEventHandler)
在这种情况下,似乎javax.xml.bind.annotation.W3CDomHandler
是从类加载器A加载的,javax.xml.bind.ValidationEventHandler
被加载了两次-一次是从类加载器A加载的,一次是从类加载器B加载的。我们在这里得到的错误是由JVM在两个类都来自类加载器A的地方寻找javax.xml.bind.annotation.W3CDomHandler.createUnmarshaller(javax.xml.bind.ValidationEventHandler)
,但是它寻找一个createUnmarshaller(ValidationEventHandler)
来自类加载器B的ValidationEventHandler
方法。
此错误将在下一个版本的Liberty(18.0.0.3)中解决