@抽象类上的XmlJavaTypeAdapter?

@抽象类上的XmlJavaTypeAdapter?,java,jaxb,Java,Jaxb,JAXB抱怨类X“…没有无参数默认构造函数。” 在我的例子中,类X是几十个自动生成的,最终的类中的一个,这些类实际上没有无参数默认构造函数。它还扩展了一个抽象类,如果我愿意,我可以修改它。我曾想过在抽象类上添加一个@XmlJavaTypeAdapter注释,但这不起作用,我甚至不确定它是否有意义。这方面的最佳解决方案或解决方法是什么 编辑:我只是想澄清一下。我无法修改生成的类。在该类中放置一个无参数构造函数,如下所示: public ClassName(){ } 通常情况下(由于框架),您需要

JAXB抱怨类X“…没有无参数默认构造函数。”

在我的例子中,类X是几十个自动生成的最终的类中的一个,这些类实际上没有无参数默认构造函数。它还扩展了一个抽象类,如果我愿意,我可以修改它。我曾想过在抽象类上添加一个
@XmlJavaTypeAdapter
注释,但这不起作用,我甚至不确定它是否有意义。这方面的最佳解决方案或解决方法是什么


编辑:我只是想澄清一下。我无法修改生成的类。

在该类中放置一个无参数构造函数,如下所示:

public ClassName(){
}
通常情况下(由于框架),您需要一个无参数构造函数。例如,在使用JAXB时,它实例化的bean需要一个无参数构造函数。我经常做的是:

public MyClass(String something) {
    // do something
}

public MyClass() {
    // for frameworks!
}
这当然要求您不要将逻辑放入构造函数中,但这几乎总是可能的


PS:有些框架实际上具有允许@PostConstruct调用的注释。

您可以在抽象超类上添加
XmlAdapter
(请参阅)。需要注意的是,
XmlAdapter
将仅应用于引用该类的映射字段/属性,而不是将该类的实例编组为根对象时。您也将无法将该类包含在传递给引导
JAXBContext

的类数组中。我知道JAXB需要它,但我不能简单地将它添加到自动生成的类中。无论如何,这是不可取的,因为这意味着可以在不传入
内容的情况下构造类(以您的答案为例)。虽然我可能会考虑是否可以使用私有的无参数构造函数生成类-这是一个解决方法,但我希望JAXB能够提供一些自己的东西。如果您不能创建无参数构造函数,那么我不确定是否可以使用JAXB,您将如何确切地告诉它使用哪个构造函数以及为每个实例传递哪些参数?也许有必要对设计进行根本性的重新思考,因为这似乎是一种奇怪的情况?这确实是一种奇怪而不方便的情况。但有时不幸的是,人们不得不处理那些不易修改、不易访问或重构成本太高的遗留代码。。。实际上,这是一个JAXB专家的问题,他知道一两个窍门……我不确定我是否理解您答案中的“注意……这很重要”部分。事实上,我在发布问题之前阅读了您的博客,它要求适配器了解所有实现类。在我的例子中,大约有50个类扩展了抽象类,它们可以随时更改。也许我在问一个不可能的问题,如果我说我希望JAXB能够封送任何扩展抽象类的东西。。。