我正在尝试使用工厂方法而不是JAXB的no-args构造函数。
我有多个从基类继承的类,并且唯一指示将实例化的是xml元素中的属性type
。
<tag-name type="boolean"/>
将实例化一个BooleanType,而
<tag-name type="integer"/>
将实例化IntegerType。
有什么方法可以从工厂方法中访问要解组的元素的元素名称/属性值?
(这可能是使用工厂方法而不是args构造函数的好处吗?还有其他吗?)
(我不使用MOXy)
答案 0 :(得分:3)
我有多个继承自基类的类,而且是唯一的类 关于哪个将被实例化的指示是属性类型 xml元素。
使用任何JAXB (JSR-222)实现,您可以使用XmlAdapter
映射继承关系,其中任意XML属性是继承指示符。
但是,我不使用任意XML属性,而是使用xsi:type
属性,以便XML架构可以正确验证内容。
如果您仍想使用任意XML属性并且使用EclipseLink MOXy是您的JAXB提供程序,那么您可以利用@XmlDescriminatorNode
/ @XmlDescriminatorValue
扩展名:
有什么方法可以访问元素名称/属性值 元素是从工厂方法中解组的吗?
JAXB实现允许您通过@XmlType
注释指定工厂类和方法,但我不相信这是您在此用例中寻找的内容。
要利用XML内容来确定要实例化的相应子类,您需要使用XmlAdapter
方法。