在解组时,JAXB将多个属性转换为一种类型

时间:2011-10-29 00:16:28

标签: java xml jaxb w3c unmarshalling

图片我有一个像<someElement a="" b="" number="1" scale="meters"><child/></someElement>

这样的元素

比例和数字总是一起出现,但它们没有在一个独占元素中定义。

someElement元素解组为SomeElement java实例时,我希望SomeElement类中的单个成员代表numberscale

目前,数字和比例都是属性,然后afterUnmarshall()方法用于计算一个数字。

如果没有两个成员字段的大小和比例,有没有办法做到这一点?也许用XmlAdapter?在这种情况下我该如何使用它?

2 个答案:

答案 0 :(得分:1)

this question的答案似乎与您尝试做的事情相符。或者至少有些反过来。因此,您可以创建使用XmlAdapter取消/编组的自定义类型,也可以使用getter / setter逻辑进行调整。

答案 1 :(得分:1)

注意:我是EclipseLink JAXB (MOXy)主管,是JAXB 2 (JSR-222)专家组的成员。

MOXy提供@XmlTransformation扩展,允许您将Java字段/属性表示为多个XML节点。

了解更多信息

<强>更新

或者,您可以在此用例中使用XmlAdapter。适配器将负责将表示数字和比例的单一类型(在下面表示为FOO)转换为具有数字和比例的单独属性的类型。您仍然需要使用MOXy实现来利用@XmlPath扩展名:

@XmlRootElement
@XmlAccessorType(XmlAccessType.FIELD)
public class SomeElement {

    @XmlAttribute
    private String a;

    @XmlAttribute
    private String b;

    @XmlJavaTypeAdapter(NumberAndScaleAdapter.class)
    @XmlPath(".")
    private FOO numberAndScale;

    private Child child;

}

了解更多信息