Форум программистов, компьютерный форум, киберфорум
Java EE (J2EE)
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.67/6: Рейтинг темы: голосов - 6, средняя оценка - 4.67
215 / 63 / 25
Регистрация: 30.04.2013
Сообщений: 865
Записей в блоге: 10

JAXB SAX

15.12.2017, 20:46. Показов 1199. Ответов 4
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Возможно ли парсить полиморфные JAXB bean классы ?


XML
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
<?xml version="1.0" encoding="UTF-8" ?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
 
  <xs:element name="root" type="Parent"/>
 
  <xs:element name="nameOne" type="xs:string"/>
 
  <xs:element name="nameTwo" type="xs:string"/>
 
  <xs:complexType name="Parent"/>
 
 
  <xs:complexType name="ChildOne">
    <xs:complexContent>
      <xs:extension base="Parent">
        <xs:sequence>
          <xs:element ref="nameOne"/>
        </xs:sequence>
      </xs:extension>
    </xs:complexContent>
  </xs:complexType>
 
  <xs:complexType name="ChildTwo">
    <xs:complexContent>
      <xs:extension base="Parent">
        <xs:sequence>
          <xs:element ref="nameTwo"/>
        </xs:sequence>
      </xs:extension>
    </xs:complexContent>
  </xs:complexType>
 
</xs:schema>

Как заставить парсер правильно делать unmarschalling
xml вида:

XML
1
2
3
<root>
  <nameOne>something</nameOne>
<root>
XML
1
2
3
<root>
  <nameTwo>something</nameTwo>
<root>
В обьекты классов ChildOne или ChildTwo ?

Java
1
2
3
4
5
6
7
8
9
10
class Parent {
}
 
class ChildOne extends Parent {
   
}
 
class ChildTwo extends Parent {
 
}
Добавлено через 4 минуты
Мой попытки приводят к тому, что unмаршаллер парсит все согласну Parent описанию, игноря Child-ы.

Реализация SAX из xerces.

DOM реализацию пока не усвоил.


Установка у
XML
1
compleType="Parent" abstract="true"
приводит к тому, что парсер ругается мол нельзя иметь элементов абстрактного типа. Т.е. тоже самое по сути, что и в случае выше.
0
Лучшие ответы (1)
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
15.12.2017, 20:46
Ответы с готовыми решениями:

JAXB атрибуты
Есть некий класс @XmlRootElement(name = &quot;Data&quot;) public class Test { private HashMap&lt;String, String&gt; test; public...

Jaxb порядок создания объектов
Всем привет. В таком примере: &lt;root&gt; &lt;a&gt;&lt;/a&gt; &lt;b&gt;&lt;/b&gt; &lt;a&gt;&lt;/a&gt; &lt;b&gt;&lt;/b&gt; ...

JAXB. Как быть с примитивынми типами
Пусть есть некий класс для JAXB: package jaxb; import javax.xml.bind.annotation.XmlElement; import...

4
215 / 63 / 25
Регистрация: 30.04.2013
Сообщений: 865
Записей в блоге: 10
22.01.2018, 21:08  [ТС]
Получилось сделать коллекцию разных обьектов.


С наследованием так и не получилось, пришлось анализировать поля на предмет not null / null
0
Эксперт Java
378 / 370 / 114
Регистрация: 30.06.2010
Сообщений: 1,445
24.01.2018, 08:22
Лучший ответ Сообщение было отмечено Qazan как решение

Решение

можно сделать xs:choice, тогда будет наследование
XML
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
<?xml version="1.0" encoding="UTF-8" ?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
 
 
    <xs:element name="root">
        <xs:complexType>
            <xs:choice maxOccurs="unbounded">
                <xs:element name="child1" type="ChildOne"/>
                <xs:element name="child2" type="ChildTwo"/>
            </xs:choice>
        </xs:complexType>
    </xs:element>
 
    <xs:element name="nameOne" type="xs:string"/>
 
    <xs:element name="nameTwo" type="xs:string"/>
 
    <xs:complexType name="Parent"/>
 
 
    <xs:complexType name="ChildOne">
        <xs:complexContent>
            <xs:extension base="Parent">
                <xs:sequence>
                    <xs:element ref="nameOne"/>
                </xs:sequence>
            </xs:extension>
        </xs:complexContent>
    </xs:complexType>
 
    <xs:complexType name="ChildTwo">
        <xs:complexContent>
            <xs:extension base="Parent">
                <xs:sequence>
                    <xs:element ref="nameTwo"/>
                </xs:sequence>
            </xs:extension>
        </xs:complexContent>
    </xs:complexType>
 
</xs:schema>
1
215 / 63 / 25
Регистрация: 30.04.2013
Сообщений: 865
Записей в блоге: 10
24.01.2018, 09:39  [ТС]
Цитата Сообщение от LeX Посмотреть сообщение
можно сделать xs:choice, тогда будет наследование
Все равно ведь придется проверять на null.
И выбирать child1 или child2.

А хотелось бы непосредственно получать одно поле - объект расширяющий parent.
Тогда у parent, можно было бы сделать метод getType().
Согласно, которому приводить к его наследникам.

Добавлено через 2 минуты
Цитата Сообщение от LeX Посмотреть сообщение
можно сделать xs:choice, тогда будет наследование
Хотя да, вы правы, это же почти то же, что сделал я.

При генераций, получится коллекция из-за unbounded.

Добавлено через 6 минут
Цитата Сообщение от LeX Посмотреть сообщение
можно сделать xs:choice, тогда будет наследование
Эх, но все же проблема остается в случае не коллекций.
0
Эксперт Java
378 / 370 / 114
Регистрация: 30.06.2010
Сообщений: 1,445
24.01.2018, 11:07
Qazan, да, к сожалению только как коллекция работает

Добавлено через 59 секунд
Хотя можно поискать на просторах тырнета, может как то биндигами решить можно
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
24.01.2018, 11:07
Помогаю со студенческими работами здесь

Срочно, не могу разобраться с JAXB XML в Eclipce
Создать консольное приложение для управления каталогом книг в нескольких библиотеках. Оно позволяет найти книгу в одной или нескольких...

JAXB. Можно ли кроме сериализуемого объекта добавить свои элементы?
У меня есть класс Task - задача с заданным временем оповещения. Пересылая её на сервер, я хочу чтобы в xml - документе так же перед...

JAXB
Привет коллеги! Ситуация такая. Я всегда работал с dom при парсировке xml, но вот не давно познакомился с JAXB. Сохраняет объекты в xml...

JAXB
Здравствуйте! Каким образом можно получить список объектов созданных на основе xml? Один объект я могу получить. Но когда нужна коллекция,...

Аннотации JAXB добавить аттрибут
Как разметить класс, чтобы из одного поля взять содержимое, а из другого - аттрибут при формировании тега? (Если сами поля менять нельзя,...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование . \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json> Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом. # Check if. . .
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так: https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347 Основана на STM32F303RBT6. На борту пять. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru