当前位置: 首页 > 面试题库 >

是什么原因导致“ JAXBElement没有无参数的默认构造函数”?

公良育
2023-03-14
问题内容

我正在生成一个罐子,将其放入商业软件产品中。该jar符合商业软件的api,并依赖于第二个jar,该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问题(实际上是整个Internet)。他们都没有给我足够的理解来解决这个问题,这可能只是对我的反省。谁能透露一些见识?还是给我另类测试来进行分解?


问题答案:

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

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

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



 类似资料:
  • 问题内容: 如果父类中有带参数的构造函数,为什么需要默认构造函数(显式) 这将是一个错误。 问题答案: 这里有两个方面的工作: 如果 确实 明确指定了构造函数(如中所述),则Java编译器将 不会 为您创建无参数构造函数。 如果您未明确指定构造函数(如所示),则Java编译器将为您创建一个无参数的构造函数,如下所示: (可访问性取决于类本身的可访问性。) 试图调用超类无参数构造函数-因此它必须存在

  • 当Java中给出参数构造函数时,为什么默认的无参数构造函数会失败? 这个设计有什么意义? 例如:

  • 在C#中,当我创建一个空类时,它提供了一个默认的构造函数,但是当我提供一个带有参数的构造函数时,默认的构造函数不再被创建。 我的问题是: 为什么编译器不再给我默认的构造函数呢 这些问题来自于WCF,我需要默认构造函数,但也希望能够为构造函数提供值,并且不必每次都放置默认构造函数,而且我不认为未使用的默认构造函数会使很多开销。

  • 实际上,我不明白无参数构造函数和默认构造函数的区别是什么。 在创建名为cFrame的Test对象时,是否调用此类的默认构造函数?

  • 问题内容: 我正在尝试为学生的作业构建一个自动测试框架(基于jUnit,但这并不重要)。他们将不得不为某些类创建构造函数,并为其添加一些方法。稍后,使用我提供的测试功能,他们将检查是否正常。 我想做的是 通过反思 创建一个我想测试的类的新实例。问题在于,有时 没有默认构造函数 。我不在乎, 我想创建一个实例并自己初始化实例变量 。有什么办法吗?很抱歉,如果以前已经有人问过这个问题,但我找不到任何答

  • 在C#、C和Java中,当你创建一个带参数的构造函数时,默认的无参数构造函数就消失了。我一直只是接受这个事实,但现在我开始想为什么。 这种行为的原因是什么?这仅仅是一个“安全度量/猜测”,说“如果你已经创建了自己的构造函数,你可能不希望这个隐含的函数四处游荡”?或者它有一个技术原因,使得编译器不可能在你自己创建构造函数后添加一个?