2014-10-31 4 views
2

Я новичок в библиотеке JAXB и не могу получить решение для добавления @XmlAttribute в существующий код.Как добавить атрибут элемента в JAXB

У меня есть XML, которые имеют два элемента (имя и значение), как показано ниже:

<ns4:Envelope xmlns:ns2="xyz/123" xmlns:ns3="http://schemas.xmlsoap.org/soap/encoding/" xmlns:ns4="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ns6="http://www.w3.org/2001/XMLSchema-instance" xmlns:ns5="http://www.w3.org/2001/XMLSchema" xmlns:abc="abc"> 
    <ns4:Header> 
     <ns2:ID ns4:mustUnderstand="1">testId</ns2:ID> 
    </ns4:Header> 
    <ns4:Body> 
     <ns2:Set> 
      <List ns3:arrayType="abc:hash[1]"> 
       <Struct> 
        <Name>Interval</Name> 
        <Value xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xs="http://www.w3.org/2001/XMLSchema" xsi:type="xs:int">10</Value> 
       </Struct> 
      </List> 
     </ns2:Set> 
    </ns4:Body> 
</ns4:Envelope> 

В приведенном выше XML, то XSI: тип был получение генерируется автоматически JAXB. Класс Struct, имеющий следующий код

Как вы можете видеть, тип не установлен в указанном выше классе. Я хочу иметь некоторое положение для добавления типа в соответствии с определенным пользователем, а не сгенерировать его в соответствии с типом данных.

Я не знаю, как я могу добавить атрибут к этому Struct класса, который может добавить тип к «Value» Element (Как мы видим, значение элемента является простая строка Object)

ответ

0

Если вы просто хотите type атрибут, попробовать что-то вроде этого:

public class TypedValue { 

    @XmlAttribute 
    protected String type; 
    @XmlValue 
    protected String value; 
} 

вместо Object в Struct.value.

xsi:type - это особая вещь для наследования.

0

Если вы хотите настроить, как JAXB представляет что-то, вы всегда можете создать для него XmlAdapter.

Adaping на поле/свойство

@XmlJavaTypeAdatper аннотаций используется для ссылки на XmlAdapter.

@XmlElement(name = "Value", required = true) 
@XmlJavaTypeAdapter(ValueAdapter.class) 
protected Object value; 

XMLAdapter

отвечает за преобразование между реальным объектом в вашей модели предметной области, и тот, который вы хотите, чтобы мобилизовывать, чтобы получить желаемый XML.

public class ValueAdapter extends XmlAdapter<MyAdaptedObject, Object> { 
    ... 
} 

MyAdaptedObject

Является POJO, который мобилизует к нужному XML.

Смежные вопросы