1

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

我有多个从基类继承的类,关于将要实例化的唯一指示是typexml 元素中的属性。

<tag-name type="boolean"/>

将实例化一个 BooleanType,而

<tag-name type="integer"/>

将实例化一个 IntegerType。

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

(这也许是使用工厂方法而不是无参数构造函数的好处吗?还有其他的吗?)

(我没有使用 MOXy)

4

1 回答 1

3

我有多个从基类继承的类,关于将要实例化的唯一指示是 xml 元素中的属性类型。

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

但是,我不会使用任意 XML 属性,而是使用该xsi:type属性,以便可以通过 XML 模式正确验证内容。

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


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

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

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

于 2013-01-22T16:44:29.717 回答