Java 为Jaxb对象在基类上创建工厂方法?

Java 为Jaxb对象在基类上创建工厂方法?,java,jaxb,jaxb2,Java,Jaxb,Jaxb2,我使用XJC工具生成了一些Jaxb对象。这些类扩展了一个公共基类。例如: java-手写 @XmlTransient public class Base { public void beforeUnmarshal(Unmarshaller unmarshaller, Object parent) { //... } public void afterUnmarshal(Unmarshaller unmarshaller, Object parent) {

我使用XJC工具生成了一些Jaxb对象。这些类扩展了一个公共基类。例如:

java-手写

@XmlTransient
public class Base {
    public void beforeUnmarshal(Unmarshaller unmarshaller, Object parent) {
        //...
    }

    public void afterUnmarshal(Unmarshaller unmarshaller, Object parent) {
        //...
    }

    //...
}
H1.java-从XJC生成

@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(name = "", propOrder = {
    "content"
})
@XmlRootElement(name = "h1")
public class H1 extends Base {
    //...
}
我想通过工厂方法覆盖少数生成的类的行为,但我不想更改从XJC生成的代码,因为我想让这些类为其他用途而打开,而不仅仅是我当前的项目。例如,我想扩展H1类(我们称之为H1Extended)并添加几个属性,每次H1标记出现在XML中,Jaxb都会返回H1Extended的实例,而不是H1

我试着像这样在基类上放置factoryClass注释

@XmlTransient
@XmlType(factoryClass=MyFactoryClass.class, factoryMethod="create")
public class Base {
    //...
}
。。。但那没用。我想要的是一个工厂方法,它在默认情况下创建由XJC生成的类,并为我指定的类返回一个自定义类

我不介意用XJC重新生成Jaxb类,但我希望它们利用程序员将创建的基类,一旦生成,就不能手工编辑

这可能吗?谢谢

编辑:我没有注意到生成的ObjectFactory类。这能用来完成我想要的吗

编辑#2:我扩展了ObjectFactory类并重写了其中一个create方法以返回H1Extended,但是由于某种原因返回了基类H1


编辑#3:我将缩短我的问题:如果我有一个JaxB类
H1
,如何让解组器返回
H1Extended

我想知道,如果Base不是从XML模式派生的,xjc将如何生成包含
extendedsbase
的代码。这是如何实现的不要期望标记为H1的元素被解组到H1类的对象中。元素名称指父类中的属性(字段)。-我看不出你在试图做什么-只是你正在走向麻烦。你可以使用
让生成的类扩展基类。只要字段标记为
@xmltransive
,我就能够像这样解组XML。我想做的是让解组器返回H1扩展,而不是H1。正如我所写的:元素的类型由XML模式中与元素关联的类型或类中字段的注释决定。如果
与类H1关联,则仅此而已。如果要(对于元素
)从H1切换到H1Extended,则可以编辑XML架构并重新编译。不幸的是,我也无法编辑架构。他正试图做和我完全一样的事情,但迄今为止我尝试过的所有答案都不起作用。