JAXB中的工厂方法访问元素?

时间:2013-01-22 16:33:44

标签: java jaxb

我正在尝试使用工厂方法而不是JAXB的no-args构造函数。

我有多个从基类继承的类,并且唯一指示将实例化的是xml元素中的属性type

<tag-name type="boolean"/>

将实例化一个BooleanType,而

<tag-name type="integer"/>

将实例化IntegerType。

有什么方法可以从工厂方法中访问要解组的元素的元素名称/属性值?

(这可能是使用工厂方法而不是args构造函数的好处吗?还有其他吗?)

(我不使用MOXy)

1 个答案:

答案 0 :(得分:3)

  

我有多个继承自基类的类,而且是唯一的类   关于哪个将被实例化的指示是属性类型   xml元素。

使用任何JAXB (JSR-222)实现,您可以使用XmlAdapter映射继承关系,其中任意XML属性是继承指示符。

但是,我不使用任意XML属性,而是使用xsi:type属性,以便XML架构可以正确验证内容。

如果您仍想使用任意XML属性并且使用EclipseLink MOXy是您的JAXB提供程序,那么您可以利用@XmlDescriminatorNode / @XmlDescriminatorValue扩展名:


  

有什么方法可以访问元素名称/属性值   元素是从工厂方法中解组的吗?

JAXB实现允许您通过@XmlType注释指定工厂类和方法,但我不相信这是您在此用例中寻找的内容。

要利用XML内容来确定要实例化的相应子类,您需要使用XmlAdapter方法。