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

时间:2015-10-01 13:59:39

标签: java jaxb jaxb2

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

Base.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)并添加一些属性,每次在XML中出现H1标记时,Jaxb都会返回H1Extended实例而不是H1。

我尝试在这样的基类上放置一个factoryClass注释......

@XmlTransient
@XmlType(factoryClass=MyFactoryClass.class, factoryMethod="create")
public class Base {
    //...
}

......但那并没有奏效。我想要的是一个工厂方法,它默认创建由XJC生成的类,并返回我指定的类的自定义类。

我不介意用XJC重新生成Jaxb类,但我希望它们能够利用程序员将创建的基类,并且一旦生成它们,就不能手动编辑它们。 / p>

这可能吗?感谢。

编辑:我没有注意到生成的ObjectFactory类。这可以用来完成我正在寻找的东西吗?

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

编辑#3:我将缩短我的问题:如果我有一个JaxB课程H1,我如何让unmarshaller返回H1Extended

0 个答案:

没有答案