以模块方式添加命名空间属性

时间:2012-04-02 11:31:07

标签: java jaxb

表示xml:

<foo xmlns="http://ns.com"
     xmlns:ext="http://ext.com"
     attr="xxx"
     ext:bar="yyy">
</foo>

如何创建Foo类?具体来说,我希望能够以某种方式分离'ext'属性,因此它不是直接在Foo中,而是在另一个类中,并且以类型安全的方式(因此不是XmlAnyAttribute)。

我最理想的是:

class Foo {
  Ext ext;
}

class Ext {
  String bar;
}

1 个答案:

答案 0 :(得分:0)

如果引用的对象只有一个带有@XmlAttribute的映射字段/属性,则可以使用@XmlValue映射POJO字段/属性。

<强>富

class Foo {
    @XmlAttribute(namespace="http://www.ext.com")
    Ext ext
}

<强 - >外部

class Ext {
    @XmlValue
    String bar;
}

了解更多信息


<强>更新

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

  

如果我想映射多个属性怎么办?

您可以在MOXy中使用@XmlPath扩展名来处理此用例:

<强>富

使用@XmlPath(".")表示您希望XML文档中表示为同一级别的目标对象作为源对象。

class Foo {
    @XmlPath(".")
    Ext ext
}

<强 - >外部

class Ext {
    @XmlAttribute
    String foo;

    @XmlAttribute
    String bar;
}

了解更多信息