Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Java [игнор отключен] [закрыт для гостей] / JAXB / 13 сообщений из 13, страница 1 из 1
13.03.2018, 09:30
    #39613915
Garrick
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
JAXB
С помощью JAXB производится парсинг XML файлов, получаемых от разных источников. В некоторых случаях в заголовках файлов присутствует ссылка на схему
Код: xml
1.
2.
3.
<TYPES>
...
</TYPES>


А в некоторых она есть
Код: xml
1.
2.
3.
<TYPES xmlns="http://...." xsi:type="TYPE">
...
</TYPES>



Структура файлов одинаковая. Можно ли научить JAXB не обращать внимание на отсутствие указания схемы?
А ещё в файлах могут отсутствовать некоторые необязательные элементы. Если они отсутствуют совсем, т.е. нет даже пустых тегов, то JAXB вываливается с ошибкой NullPointerException. Можно ли что-то сделать с этим?

Заранее спасибо.
...
Рейтинг: 0 / 0
13.03.2018, 09:31
    #39613917
Garrick
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
JAXB
Garrick,

автор В некоторых случаях в заголовках файлов присутствует ссылка на схему
следует читать как отсутствует
...
Рейтинг: 0 / 0
13.03.2018, 09:37
    #39613921
Basil A. Sidorov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
JAXB
...
Рейтинг: 0 / 0
13.03.2018, 09:39
    #39613923
Blazkowicz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
JAXB
Garrick,

Не очень понятно про схему. Если там XML вообще без namepspace-ов приезжает, то в маппинг можно добавить namespace и тогда без него должно падать.
Я не уверен что именно JAXB вываливается с NPE, а не какой-то ваш код.
...
Рейтинг: 0 / 0
13.03.2018, 10:12
    #39613941
Garrick
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
JAXB
BlazkowiczGarrick,

Не очень понятно про схему. Если там XML вообще без namepspace-ов приезжает, то в маппинг можно добавить namespace и тогда без него должно падать.
Можно про это поподробнее, ссылки какие-нибудь?
BlazkowiczЯ не уверен что именно JAXB вываливается с NPE, а не какой-то ваш код.
Например (не смейтесь, это из 1С такие XML приходят) есть некий адрес, который является необязательным, но если он есть его надо прочесть.
Код: xml
1.
2.
3.
4.
5.
6.
<address>
    <zipcode>XXXXXX</zipcode>
    <country>XXXX</country>
    <area>XXXX</area>
    ....
<address>


При попытке чтения отсутствующего address.getZipcode() вываливается NPE, если адрес в XML файле представлен в полном объёме, хотя бы есть пустые теги, то парсинг происходит без ошибок.
...
Рейтинг: 0 / 0
13.03.2018, 10:14
    #39613945
Garrick
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
JAXB
GarrickНапример (не смейтесь, это из 1С такие XML приходят) есть некий адрес, который является необязательным, но
лишнее... Я тут поправил, а вообще-то там XML с тегами на русском языке, в кодировке cp1251.
Плохо, редактировать свои посты нельзя...
...
Рейтинг: 0 / 0
13.03.2018, 10:20
    #39613948
Blazkowicz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
JAXB
GarrickМожно про это поподробнее, ссылки какие-нибудь?
https://en.wikipedia.org/wiki/XML_namespace
https://docs.oracle.com/javaee/6/api/javax/xml/bind/annotation/XmlElement.html#namespace()

GarrickПри попытке чтения отсутствующего address.getZipcode() вываливается NPE, если адрес в XML файле представлен в полном объёме, хотя бы есть пустые теги, то парсинг происходит без ошибок.
Ну, покажите что ли stacktrace и сгенерированные классы. Это очень странно. Либо они сгенерились чем-то левым. Либо в схеме было написано что элементы обязательные.
...
Рейтинг: 0 / 0
13.03.2018, 12:13
    #39614041
Garrick
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
JAXB
BlazkowiczGarrick,

Не очень понятно про схему. Если там XML вообще без namepspace-ов приезжает, то в маппинг можно добавить namespace и тогда без него должно падать.
Всё как раз наоборот. Оно и так падает, а надо чтобы не падало ни с namespaces, ни без него.
...
Рейтинг: 0 / 0
13.03.2018, 12:25
    #39614048
Blazkowicz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
JAXB
GarrickВсё как раз наоборот. Оно и так падает, а надо чтобы не падало ни с namespaces, ни без него.
Тю блин - гугл - JAXB ignore namespace - единственный внятный совет это фильтровать входящий документ
http://cooljavablogs.blogspot.com/2008/08/how-to-instruct-jaxb-to-ignore.html
...
Рейтинг: 0 / 0
13.03.2018, 16:52
    #39614233
Garrick
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
JAXB
BlazkowiczGarrickВсё как раз наоборот. Оно и так падает, а надо чтобы не падало ни с namespaces, ни без него.
Тю блин - гугл - JAXB ignore namespace - единственный внятный совет это фильтровать входящий документ
http://cooljavablogs.blogspot.com/2008/08/how-to-instruct-jaxb-to-ignore.html
Это, конечно сильная идея. По таком же принципу можно и XLST применить. Видать других вариантов нет...
...
Рейтинг: 0 / 0
14.03.2018, 16:53
    #39614879
ruzja
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
JAXB
GarrickBlazkowiczGarrick,

Не очень понятно про схему. Если там XML вообще без namepspace-ов приезжает, то в маппинг можно добавить namespace и тогда без него должно падать.
Можно про это поподробнее, ссылки какие-нибудь?
BlazkowiczЯ не уверен что именно JAXB вываливается с NPE, а не какой-то ваш код.
Например (не смейтесь, это из 1С такие XML приходят) есть некий адрес, который является необязательным, но если он есть его надо прочесть.
Код: xml
1.
2.
3.
4.
5.
6.
<address>
    <zipcode>XXXXXX</zipcode>
    <country>XXXX</country>
    <area>XXXX</area>
    ....
<address>


При попытке чтения отсутствующего address.getZipcode() вываливается NPE, если адрес в XML файле представлен в полном объёме, хотя бы есть пустые теги, то парсинг происходит без ошибок.

А если проверить перед вызовом address != null ?
...
Рейтинг: 0 / 0
14.03.2018, 17:00
    #39614882
Blazkowicz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
JAXB
GarrickЭто, конечно сильная идея. По таком же принципу можно и XLST применить. Видать других вариантов нет...
Некоторые реализации JAXB позволяют задать внешний маппинг и можно один класс два раза замапить с неймспейсами и без.
Можно попробовать через наследование, сделать копию объектов и навесить другие аннотации. Общее вынести в родительский класс или в интерфейс.
...
Рейтинг: 0 / 0
15.03.2018, 09:11
    #39615172
Garrick
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
JAXB
ruzjaА если проверить перед вызовом address != null ?
Да, тут конечно мой косяк. В отсутствии инициализированного класса пытался обратиться к его методу.
...
Рейтинг: 0 / 0
Форумы / Java [игнор отключен] [закрыт для гостей] / JAXB / 13 сообщений из 13, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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