【发布时间】:2013-10-30 20:16:01
【问题描述】:
我有一个库,它是商业产品的插入式扩展。该产品已有数年历史,使用 Sun 的 JAXB-2.0 库。
我的库使用 JAXB,但我遇到了一个非常奇怪的错误。 What might cause "JAXBElement Does not have a no-arg default constructor"?
我发现这是由旧库中的错误引起的。我可以抢占加载的类以强制我的扩展使用“正确”版本的类吗?
编辑:连同我的插件,我正在打包 JAXB-2.2.5(在我的插件的类路径中引用),但我怀疑现有的 JVM 已经加载了该类的 2.0 版本,导致我心痛.
【问题讨论】:
-
您可以使用自定义类加载器隐藏加载的类路径,该类加载器不委托给其父级,而是尝试自行加载尽可能多的类。这样,您至少可以找出是否是原因。
-
@raphw 我对 JVM 的理解比我的理解要深一些。你能稍微扩展一下吗?
-
为了这个目的,评论字段有点短。请参阅下面的答案。