4

我正在生成一个要放入商业软件产品的 jar。该 jar 符合商业软件的 api 并依赖于第二个 jar,其中包含(除其他外)一组从 XSD 生成的 POJO。但是,当我将它放入时尝试实例化 JAXBContext 时它会失败。

我得到:

"1 counts of IllegalAnnotationExceptions"
javax.xml.bind.JAXBElement does not have a no-arg default constructor.
  this problem is related to the following location: 
    at javax.xml.bind.JAXBElement
    at mypackage.MyClass
    ...
    JAXBContext.newInstance("mypackage"); 
    ...

我的 XSD(为简洁起见)如下所示:

<xsd:schema ... >
  <xsd:element name="MyClass" type="myType" />
  <xsd:complexType name="myType">
  ...
  </xsd:complextType>

</xsd:schema>

我认为问题可能在于“xsd:element”级别的类不存在,但即使我设置 XJC 以创建 MyClass 并且我已经验证 MyClass 具有公共的无参数构造函数,问题仍然存在。

因此,我查看了其他几个 SO 问题(事实上,在整个互联网上)。他们都没有给我足够的理解来解决这个问题,这可能只是对我的一个不好的反映。任何人都可以提供一些见解吗?或者给我进行其他测试来解决这个问题?

4

1 回答 1

3

最终,此问题是由已修复的错误引起的。我正在加载的系统使用库 JAXB-2.0,我认为我使用的是最新版本 (JAXB-2.2.5)。由于设计不佳的插件框架,我的版本被 2.0 jar 抢占了。

为了克服这个问题,我必须升级商业软件的库,或者尝试使用 Classloaders

感谢所有帮助我找到这个的人。

于 2013-10-29T21:38:40.693 回答