Модераторы: LSD, AntonSaburov
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> JAXB @XmlTransient не работает, Игнорируется аннотация @XmlTransient 
:(
    Опции темы
Gladkiy
Дата 10.3.2011, 12:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 6
Регистрация: 10.3.2011

Репутация: нет
Всего: нет



Доброго времени суток.

Использую для создания репрезентации java классов в XML стандартный фрейморк JAXB. При аннотировании приватного поля с помощью @XmlTransient содержимое поля все равно мапится в выходной XML.
Например:
Абстрактный класс А
Код

public abstract class A {

    public abstract String getName();

    public abstract void setName(String name);

    public abstract int getAge();

    public abstract void setAge(int age);
}

его наследуют классы В
Код

public class B extends A {

    private String name = "name = B";
    private int age = 10;

    @Override
    public String getName() {
        return name;
    }

    @Override
    public int getAge() {
        return age;
    }

    @Override
    public void setName(String name) {
        this.name = name;
    }

    @Override
    public void setAge(int age) {
        this.age = age;
    }
}


и С, в котором есть отмеченное с помощью @XmlTransient поле.
Код

public class C extends A {

    private String name = "name = C";
    @XmlTransient
    private int age = 50;

    @Override
    public String getName() {
        return name;
    }

    @Override
    public int getAge() {
        return age;
    }

    @Override
    public void setAge(int age) {
        this.age = age;
    }

    @Override
    public void setName(String name) {
        this.name = name;
    }
}


В классе D создаются экземпляры:
Код

@XmlRootElement
public class D {

    public B propertyB;
    private C propertyC;

    public D() {
        propertyB = new B();
        propertyC = new C();
    }

    public C getPropertyC() {
        return propertyC;
    }

    public void setPropertyC(C propertyC) {
        this.propertyC = propertyC;
    }
}

Main class
Код

public class Main {
    public static void main(String[] args) throws JAXBException {
        D instOfD = new D();
        JAXBContext jc = JAXBContext.newInstance(D.class);
        Marshaller marshaller = jc.createMarshaller();
        marshaller.marshal(instOfD, new File("example.xml"));
    }

}


В итоговом XML все равно присутствуют данные отмеченные как @XmlTransient

<?xml version="1.0" encoding="UTF-8" standalone="true"?>
-<d>-<propertyB><age>10</age><name>name = B</name></propertyB>-<propertyC><age>50</age><name>name = C</name></propertyC></d>

 smile  smile  smile 
Что было попробовано:
1. В классе С и D изменялся тип доступа к данным с помощью @XmlAccessorType(XmlAccessType.FIELD). Были добавлены еще лишние поля.
2. Отмечались getter/setter  в нужном классе как @XmlTransient. Привело к ошибке аннотаций.
3. В классе D поле propertyC изменялось на private и создавались getter/setter.

Может кто знает как с этим бороться? Я буду премного благодарен. smile 

PM MAIL   Вверх
MisterCleric
Дата 10.3.2011, 12:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1043
Регистрация: 16.2.2006
Где: Харьков, Украина

Репутация: 33
Всего: 38



Привет.
Поставь такое на коренном классе:
Код

@XmlAccessorType(XmlAccessType.FIELD)


Добавлено через 50 секунд
в смысле в твоей иерархии, а не классе D, хотя там тоже не помешает


--------------------
ПРИШЕЛ, УВИДЕЛ - ПЕРЕПИСАЛ...
PM MAIL ICQ   Вверх
Gladkiy
Дата 10.3.2011, 16:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 6
Регистрация: 10.3.2011

Репутация: нет
Всего: нет



Помогло.  smile 
Добавил @XmlAccessorType(XmlAccessType.FIELD) в абстрактный класс А.
Раннее при добалении в класс D такого эффекта не было.

Спасибо тебе добрый человек. smile 
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Java"
LSD   AntonSaburov
powerOn   tux
  • Прежде, чем задать вопрос, прочтите это!
  • Книги по Java собираются здесь.
  • Документация и ресурсы по Java находятся здесь.
  • Используйте теги [code=java][/code] для подсветки кода. Используйтe чекбокс "транслит", если у Вас нет русских шрифтов.
  • Помечайте свой вопрос как решённый, если на него получен ответ. Ссылка "Пометить как решённый" находится над первым постом.
  • Действия модераторов можно обсудить здесь.
  • FAQ раздела лежит здесь.

Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, tux.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Java EE (J2EE) и Spring | Следующая тема »


 




[ Время генерации скрипта: 0.0847 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.