Атрибут элемента JAXB - PullRequest
       11

Атрибут элемента JAXB

0 голосов
/ 26 декабря 2018

Я использую JAXB для создания XML.Я хочу установить атрибут 'lang' для элементов PrimaryValue и AlternativeSpelling.

<AgencyOrUnit>
    <PrimaryValue lang="el">ΓΑΔΑ</PrimaryValue>
    <AlternativeSpelling lang="en">Athens General Police Directorate</AlternativeSpelling>
</AgencyOrUnit>

Вот мой код:

@XmlRootElement(name = "OwnerReference")
@XmlType(propOrder = { "primaryValue", "alternativeSpelling"})
public class AgencyOrUnit {

    private String PrimaryValue;
    private String AlternativeSpelling;

    public String getPrimaryValue() {
        return PrimaryValue;
    }

    public void setPrimaryValue(String PrimaryValue){
        this.PrimaryValue = PrimaryValue;
    }

    public String getAlternativeSpelling() {
        return AlternativeSpelling;
    }

    public void setAlternativeSpelling(String AlternativeSpelling){
        this.AlternativeSpelling = AlternativeSpelling;
    }
}

Вот процесс маршаллинга:

 AgencyOrUnit agencyOrUnit = new AgencyOrUnit();
 agencyOrUnit.setPrimaryValue("ΓΑΔΑ");
 agencyOrUnit.setAlternativeSpelling("General Police");

Проблема в том, что я не знаю, как установить свойство со значением для элементов primaryValue и alternativeSpelling?

1 Ответ

0 голосов
/ 26 декабря 2018

Вы можете использовать аннотации @XmlValue & @XmlAttribute, но вам нужно создать новый класс, содержащий как lang, так и строку исходного значения.Примерно так:

@Setter
@AllArgsConstructor
public class LocaleString {

    private String lang;
    private String value;

    @XmlAttribute
    public String getLang() {
        return lang;
    }

    @XmlValue
    public String getValue() {
        return value;
    }
}

Затем измените ваш AgencyOrUnit соответственно:

@XmlRootElement(name = "OwnerReference")
@XmlType(propOrder = { "primaryValue", "alternativeSpelling"})
@Getter @Setter
public class AgencyOrUnit {
    private LocaleString PrimaryValue;
    private LocaleString AlternativeSpelling;
}

Проверьте это:

@Test
void test() throws JAXBException {
    AgencyOrUnit agencyOrUnit = new AgencyOrUnit();
    agencyOrUnit.setPrimaryValue(new LocaleString("el", "ΓΑΔΑ"));
    agencyOrUnit.setAlternativeSpelling(new LocaleString("en", "General Police"));

    JAXBContext ctx = JAXBContext.newInstance(AgencyOrUnit.class);

    Marshaller marshaller = ctx.createMarshaller();
    marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, Boolean.TRUE);

    marshaller.marshal(agencyOrUnit, System.out);
}

и вы должны увидеть это:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<OwnerReference>
    <primaryValue lang="el">ΓΑΔΑ</primaryValue>
    <alternativeSpelling lang="en">General Police</alternativeSpelling>
</OwnerReference>
...