2012-04-28 3 views
1

В моем коде у меня есть этот компонент:XmlElementWrapper и странные значения добавляются

@XmlRootElement 
@XmlAccessorType(XmlAccessType.NONE) 
public class Data implements Serializable { 

@XmlAttribute 
private String _name; 

@XmlElementWrapper(name = "statuses") 
@XmlElement(name="status") 
    private List<Boolean> _statuses; 

public String getName() { 
    return _name; 
} 

public void setName(String name) { 
    _name = name; 
} 

    public List<Boolean> getStatuses() { 
     return _statuses; 
    } 

    public void setStatuses(List<Boolean> statuses) { 
     _statuses = statuses; 
    } 

.... 

} 

Это код маршалу боб:

Writer w = null; 
    try { 
     final JAXBContext context = JAXBContext.newInstance(Data.class); 
     final Marshaller m = context.createMarshaller(); 
     m.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, Boolean.TRUE); 
     w = new FileWriter("file.xml"); 
     m.marshal(obj, w); 
    } catch (Exception e) { 
     e.printStackTrace(); 
    } finally { 
     try { w.close();} 
     catch (Exception e) {} 
    } 

Что я ожидаю:

<data name="data-test"> 
<statuses> 
    <status>true</status> 
    <status>true</status> 
    <status>true</status> 
    <status>true</status> 
    <status>true</status> 
    <status>true</status> 
    <status>true</status> 
    <status>true</status> 
    <status>true</status> 
    <status>true</status> 
    <status>true</status> 
    <status>true</status> 
</statuses> 
... 
</data> 

, но я получил:

<data name="data-test"> 
<statuses> 
    <status>true</status> 
    <status>true</status> 
    <status>true</status> 
    <status>true</status> 
    <status>true</status> 
    <status>true</status> 
    <status>true</status> 
    <status>true</status> 
    <status>true</status> 
    <status>true</status> 
    <status>true</status> 
    <status>true</status> 
</statuses> 

// strange repetition 
<statuses>true</statuses> 
<statuses>true</statuses> 
<statuses>true</statuses> 
<statuses>true</statuses> 
<statuses>true</statuses> 
<statuses>true</statuses> 
<statuses>true</statuses> 
<statuses>true</statuses> 
<statuses>true</statuses> 
<statuses>true</statuses> 
<statuses>true</statuses> 
<statuses>true</statuses> 

// attribute as separated element 
<name>data-test</name> 
... 
</data> 

Как я могу избежать странных повторений?

ответ

0

Я предполагаю, что тип доступа не работает. вы попробовали XmlAccessType.FIELD? Кроме того, убедитесь, что вы правильно скомпилировали свой класс и что ваш путь к классам настроен правильно (возможно, у вас есть старый класс, лежащий от более раннего теста?).

UPDATE:

вы можете попробовать явно добавлять @XmlTransient к геттеры/сеттеры? .

+0

Да, но я получаю точно такой же результат :( – Randomize

+0

@Randomize - добавил другое предложение – jtahlborn

+0

добавление переходных на получить/установить я получаю: ком .sun.xml.internal.bind.v2.runtime.IllegalAnnotationsException: 4 подсчета IllegalAnnotationExceptions ... – Randomize

0

это выглядит как ошибка во встроенном в JAXB для JDK 1.6.24

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