Liberty 18.0.0.2:jaxrs-2.0不适用于ldapRegistry-3.0

时间:2018-07-31 16:00:39

标签: jax-rs classnotfoundexception websphere-liberty open-liberty

我正在尝试将我的应用程序从Liberty 18.0.0.1升级到18.0.0.2,但是它们现在都失败了:

 java.lang.NoClassDefFoundError: javax.xml.bind.annotation.adapters.XmlJavaTypeAdapter
 ...

stacktrace

问题似乎出在ldapRegistry-3.0上-一旦启用该功能,所有jax-rs请求都将失败。删除ldapRegistry后,代码可以正常工作,但我的应用程序需要此功能...

我什至用单个RestEndpoint / v1 / api / employee构建了一个小例子来演示它:Sample project server config

这是一个错误,可以在某处报告吗?还是我在这里做错了什么?

这里是server dump

谢谢

1 个答案:

答案 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)中解决