Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Java [игнор отключен] [закрыт для гостей] / Сохранение значений префиксов атрибутов в поле класса / 7 сообщений из 7, страница 1 из 1
08.07.2013, 13:15:53
    #38323984
Timoshenko Arthur
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сохранение значений префиксов атрибутов в поле класса
Добрый день!
Есть такая задача: есть некая XML, содержащая префиксы. Необходимо сохранить данную XML в класс, потом преобразовав значения полей класса обратно конвертнуть в XML.
Пытался найти решение - но безуспешно.
Для конвертации используется JAXB.
Пример XML, которую надо загнать в класс
Код: xml
1.
2.
<?xml version='1.0' encoding='UTF-8' standalone='yes'?>
<Test c='ccCCc' b='bbb' xsi:type='aaaa'/>


Вопрос - как сохранить значение тега
Код: xml
1.
xsi:type='aaaa'


в поле класса?
Может, какие-то аннотации специальные?
При обратной конвертации(из класса в XML) всё успешно. Просто добавил аннотацию к полю @XmlAttribute(name="xsi:type")
...
Рейтинг: 0 / 0
08.07.2013, 13:25:13
    #38324000
Blazkowicz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сохранение значений префиксов атрибутов в поле класса
xsi это префикс для namespace. А сам namespace у вас в XML почему-то не указан.
Посмотрите примеры
http://java.dzone.com/articles/jaxb-and-namespace-prefixes
http://stackoverflow.com/questions/3289644/define-spring-jaxb-namespaces-without-using-namespaceprefixmapper
Как JAXB работает с namespace.

Атрибут, полагаю, будет выглядеть так:
Код: java
1.
 @XmlAttribute(name="type", namespace="http://www.w3.org/2001/XMLSchema-instance") 


Но сам Namespace надо где-то объявнить как в XML, так и в XSD и маппинге.
...
Рейтинг: 0 / 0
08.07.2013, 14:57:14
    #38324179
Timoshenko Arthur
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сохранение значений префиксов атрибутов в поле класса
Да, я понял.
Маршализация проходит без проблем.
при указании в аннотации самого namespace(как вы сказали выше) всё вышло.
Но вот при демаршализации всё равно ничего не выходит.
Не хочет цеплятся к полю и всё тут.
Я, скорее всего, просто до конца не понимаю принцип работы....
...
Рейтинг: 0 / 0
08.07.2013, 15:01:18
    #38324191
Timoshenko Arthur
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сохранение значений префиксов атрибутов в поле класса
В принципе, как я понял, префикс цепляется к самому namespace.
И при демаршализации внимание уделяется самому имени атрибута(в моём случае это type).
...
Рейтинг: 0 / 0
09.07.2013, 16:23:49
    #38325759
Timoshenko Arthur
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сохранение значений префиксов атрибутов в поле класса
не вышло, к сожалению, у меня сделать нормальное сохранение значений.
Писать отдельный маппер-парсер(как указано в некоторых примерах) может быть выходом, конечно.
В общем пока что сделал метод-заглушку(который по содержимому добавляет значение в атрибут xsi:type)
Как найду решение - отпишусь
...
Рейтинг: 0 / 0
11.07.2013, 12:11:01
    #38327924
Timoshenko Arthur
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сохранение значений префиксов атрибутов в поле класса
В общем, как выяснилось, система, которая будет принимать от меня такие сообщение вообще формирует префиксы вручную(!)
И если им передавать ещё какие-либо namespace помимо - у них ошибка.
В общем был составлен HashMap со значениями префиксов, и при маршализации в поле, которое имеет у меня описание аннотацией как атрибут с именем xsi:type - заталкивается значение. Потом маршализация.
В итоге получаем стройную XML как и просит сторонний разработчик.
Конечно, не красивый выход, но пока что выбора нет.
...
Рейтинг: 0 / 0
10.09.2013, 10:30:39
    #38391811
Timoshenko Arthur
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сохранение значений префиксов атрибутов в поле класса
Ура!
Они доработали свою систему.
И теперь все как по маслу.
Пример XML для них
Код: xml
1.
2.
<?xml version='1.0' encoding='UTF-8' standalone='yes'?>
<Test  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" c='ccCCc' b='bbb' xsi:type='aaaa'/>


И(соответсвенно) описание класса для нормальной маршализации/демаршализации
Код: java
1.
2.
3.
4.
@XmlAttribute(name="type", namespace = "http://www.w3.org/2001/XMLSchema-instance")
    public String getXsi() {
        return xsi;
    }



Спасибо ещё раз за помощь
...
Рейтинг: 0 / 0
Форумы / Java [игнор отключен] [закрыт для гостей] / Сохранение значений префиксов атрибутов в поле класса / 7 сообщений из 7, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]