![]() |
|
Модераторы: LSD, AntonSaburov |
![]()
|
|
| koreyko |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 50 Регистрация: 20.4.2010 Репутация: нет Всего: нет |
Здравствуйте! Программа получает список объектов с сервера. Возможны ситуации, когда какой-либо объект на сервере некорректен (обязательные поля пустые), при этом вываливается исключение java.lang.NullPointerException и получение данных прекращается. Необходимо продолжить загрузку следующих корректных объектов, несмотря на ошибку.
Сам класс, реализующий получение данных, входит в библиотеку, которую редактировать нежелательно. Возможно ли как-то решить проблему "снаружи", не трогая библиотеку? Другими словами, заставить JVM игнорировать конкретные исключения в конкретном месте программы? |
|||
|
||||
| Ares4322 |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 339 Регистрация: 25.9.2007 Где: Россия, Москва Репутация: 1 Всего: 3 |
А как происходит прием данных?
|
|||
|
||||
| math64 |
|
||||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2505 Регистрация: 12.4.2007 Репутация: 8 Всего: 72 |
Если загрузка происходит примерно так:
то можно исправить так:
|
||||
|
|||||
| koreyko |
|
||||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 50 Регистрация: 20.4.2010 Репутация: нет Всего: нет |
Используется библиотечная функция, которой на вход подается тип объекта. На выходе - список объектов данного типа. Если в ответ на получение какого-либо объекта из списка функция получает ошибочный ответ сервера, то генерируется исключение, т.е. я ничего не получаю. А мне необходимо, чтобы некорректные объекты игнорировались и я получил бы список корректных объектов, несмотря на исключение. Возможно ли это сделать без вмешательства в библиотечную функцию? Спасибо. Добавлено @ 17:24
Спасибо. Но возможны ли решения проблемы без вмешательства в функцию GetObject(), так сказать, "снаружи"? Это сообщение отредактировал(а) koreyko - 24.10.2011, 17:26 |
||||
|
|||||
| math64 |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2505 Регистрация: 12.4.2007 Репутация: 8 Всего: 72 |
Чисто снаружи не получится - нужно заменить какой-то класс на производный, в методе которого можно перехватить исключение, какой - зависит от архитектуры библиотеки.
При этом ловить исключение нужно до того, как оно пройдёт функцию, хранящую список уже загруженных объектов, иначе он будет потерян. Иначе нужно переписывать библиотеку - добавить туда перехват исключения, причём для большей гибкости добавить интерфейс типа такого, возможно в библиотеке уже что-то подобное предусмотрено:
|
|||
|
||||
| koreyko |
|
||||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 50 Регистрация: 20.4.2010 Репутация: нет Всего: нет |
Спасибо вам за сэкономленное время. Теперь не буду отвлекаться на нереальные решения. |
||||
|
|||||
| ИванИванович |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 4 Регистрация: 25.10.2011 Репутация: нет Всего: нет |
Вообще это можно сделать "чисто снаружи", если использовать java.lang.instrument API, и написать javaagent с имплементацией ClassFileTransformer. Там можно использовать ASM или нечто подобное, чтобы завернуть "getObject" метод в try/catch манипулируя bytecode. нечто подобное описано тут если вдруг будет скушно и будет время - напишу |
|||
|
||||
![]()
|
| Правила форума "Java" | |
|
|
Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, tux, javastic. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Java: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |