JAXB为简单数据类型向XmlElement添加属性

Ana*_*and 3 java annotations jaxb

我想在从JavaBeans编组时使用JAXB向Xml Elements添加一些属性.Xml元素是简单的数据类型,如String.所以我不想创建新的类.例如,期望的输出将是:

<notifications>
<date>04/20/2011</date>
<subject creditcard_num="22678" checknum="8904">Credit Card Charge Back</subject>
<body payment_amount="34.00" return_status="charged back">some text</body>
</notifications
Run Code Online (Sandbox Code Playgroud)

我不想将主题和主体定义为单独的类.

-Anand

eke*_*ren 6

我的解决方案需要为subject和body定义一个类,但是所需的输出将按照请求使用@XmlValue作为消息,@ xmlAttribute作为属性

@Test
public void testAll() throws JAXBException
{
    String msg = "<notifications><date>04/20/2011</date><subject creditcard_num='22678' checknum='8904'>Credit Card Charge Back</subject><body payment_amount='34.00' return_status='charged back'>some text</body></notifications>";
    Notifications tested = (Notifications) JAXBContext.newInstance(Notifications.class).createUnmarshaller().unmarshal(new StringReader(msg));
    assertEquals("Credit Card Charge Back",tested.subject.value);
    assertEquals("8904",tested.subject.checknum);
    assertEquals("22678",tested.subject.creditcard_num);
}
@XmlRootElement
public static class Notifications{
    public String date;
    public Subject subject;
}

public static class Subject
{
    @XmlValue
    public String value;

    @XmlAttribute(name="creditcard_num")
    public String  creditcard_num;

    @XmlAttribute(name="checknum")
    public String  checknum;
}
Run Code Online (Sandbox Code Playgroud)

注意:我只写了主题部分,我想知道是否可以使用@XmlPath来删除对不同类的需要