2012-05-16 4 views
3
@XmlType 
@XmlAccessorType(XmlAccessType.FIELD) // here I need this access 
public class User implements Serializable 
{ 
    // ... 

    @XmlTransient 
    private Set<Values> values; 

    // ... 

    @XmlElement 
    private Set<History> getXmlHistory() 
    { 
     return new CustomSet<Values, History>(Values); 
    } 

    private void setXmlHistory(final Set<History> aHistory) 
    { 
     this.values = new HashSet<Values>(); 
    } 
} 

Когда я создаю объект User в Java-коде и после создания XML, тогда все нормально.
Но когда я пытаюсь получить User-объект из XML, тогда поле values всегда null. Так что сеттер не работает здесь. Может быть, сеттер тоже нуждается в аннотации?JAXB, аннотации для setter/getter

XML выглядит

<user> 
    ... 
     <xmlHistory> 
     // ... record 1 
     </xmlHistory> 
     <xmlHistory> 
     // ... record 2 
     </xmlHistory> 
</user> 
+0

и где находится сеттер для 'ролей'? Я вижу только «значения». –

+0

опечатка исправлена ​​ – Ilya

+1

Как выглядит ваш XML? –

ответ

5

Я не считаю, что это проблема JAXB, как следующая модель будет работать:

package forum10617267; 

import java.io.Serializable; 
import java.util.*; 
import javax.xml.bind.annotation.*; 

@XmlType 
@XmlAccessorType(XmlAccessType.FIELD) // here I need this access 
public class User implements Serializable { 

    @XmlTransient 
    private Set<History> history = new HashSet<History>(); 

    @XmlElement 
    private Set<History> getXmlHistory() { 
     return history; 
    } 

    private void setXmlHistory(final Set<History> aHistory) { 
     this.history = aHistory; 
    } 

} 

Проблема вы видите это результат логики у вас есть в ваших методах получения/установки. Поскольку ваше поле values не инициализировано, я не уверен, как CustomSet сможет его обновить.

package forum10617267; 

import java.io.Serializable; 
import java.util.*; 
import javax.xml.bind.annotation.*; 

@XmlType 
@XmlAccessorType(XmlAccessType.FIELD) // here I need this access 
public class User implements Serializable { 

    @XmlTransient 
    private Set<Values> values; 

    @XmlElement 
    private Set<History> getXmlHistory() { 
     return new CustomSet<Values, History>(values); 
    } 

    private void setXmlHistory(final Set<History> aHistory) { 
     this.values = new HashSet<Values>(); 
    } 

} 
+0

Да. Я пытаюсь получить не пустое значение для моего поля «values». Но это всегда пусто! – Ilya

+0

Если сеттер работает, то «значения» должны быть не-null – Ilya

+0

@ user1143825 - Я заметил, что ваши методы доступа являются частными. Вы видите такое же поведение, если оно открыто? –

-1

Я считаю, что @XmlAccessorType(XmlAccessType.FIELD) в сочетании с вашим @XmlTransient является источником проблемы. Вы пробовали без кратковременной аннотации?

+0

Не полезно – Ilya

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