在 JAXB 中,如何将节点值设置为字符串字段的属性值?

In JAXB, How can I set node value to attribute value for a string field?

我需要将这种特定类型的 xml 消息发送到网络服务;

<Personel>
    <name value="HelpMe"/>
    <surname value="Please"/>
</Personel>

我的代码是这样的;

@XmlRootElement(name = "Personel")
@XmlAccessorType(XmlAccessType.FIELD)
public class Personel{

    @XmlElement(name = "name")
    String name;

    @XmlElement(name = "surname")
    String surname;
}

但是这段代码产生了 xml 之类的;

<Personel>
    <name>HelpMe<name/>
    <surname>Please<surname/>
</Personel>

如果不使用名为 "value".

的属性字段创建名称和姓氏 类,我找不到合适的方法来执行此操作

如果您需要以下格式。

<Personel>
    <name value="HelpMe"/>
    <surname value="Please"/>
</Personel>

创建 PersonelName 和 PersonelSurname,然后将它们 类 用作 Personel 类中的 XmlElement。

@XmlAccessorType(XmlAccessType.FIELD)
public class PerosonelName {

   @XmlValue
    String value;

    @XmlElement(name = "name")
    String name;

}

@XmlAccessorType(XmlAccessType.FIELD)
public class PersonelSurname {

   @XmlValue
    String value;

    @XmlElement(name = "surname")
    String surname;

}


@XmlRootElement(name = "Personel")
@XmlAccessorType(XmlAccessType.FIELD)
public class Personel{

    @XmlElement(name = "name")
    String PerosonelName ;

    @XmlElement(name = "surname")
    String PersonelSurname ;
}

我找到了 jaxb 的 moxy 实现作为解决方案。它提供了提供默认属性键的能力。

关于使用 moxy 作为默认 jaxb 实现的回答:Use Moxy as default JAXB Implementation

@XmlRootElement(name = "Personel")
@XmlAccessorType(XmlAccessType.FIELD)
public class Personel{

    @XmlPath("name/@value")
    String name;

    @XmlPath("surname/@value")
    String surname;
}

所以上面的代码生成了下面的 xml 正如我所希望的,

<Personel>
    <name value="HelpMe"/>
    <surname value="Please"/>
</Personel>