Обработка различных документов ответов XML с помощью одного обработчика SAX

Я разрабатываю приложение Java, которое отправляет HTTP-запрос к веб-службе, и возвращается XML. Если код ответа равен 200, то метод обратного вызова requestSucceeded () отправит XML в SAXParser с другим обработчиком SAX, в зависимости от того, какая веб-служба вызывается. Если код ответа не 200, то вызывается метод обратного вызова requestFailed ().

Веб-служба, которую я вызываю, вернет два типа XML-документов (с кодом ответа 200): XML-документ, содержащий информацию об успешном ответе, или XML-документ об ошибке, содержащий информацию об ошибке (например, если один из параметров запроса был отформатирован неправильно).

Мой вопрос таков: с учетом моих текущих настроек, как лучше всего искать / обрабатывать оба типа XML-документов (успешный XML-ответ или XML-документ с ошибкой)? Обработчик SAX ищет всю соответствующую информацию ответа и сохраняет эту информацию в объекте, который затем обрабатывается моим приложением. Есть ли лучшее решение, чем всегда сначала искать уникальные теги ошибок XML?

Спасибо!


person littleK    schedule 18.10.2010    source источник


Ответы (1)


Вариант №1 - Изменить код ответа

Почему вы возвращаете ошибку с кодом ответа 200? 400 (неверный запрос) или другой код ошибки может быть лучшим вариантом. Затем вы можете обработать XML на основе кода ответа.

Вариант №2 - Поменять местами обработчики содержимого

Ниже приведена ссылка на один из моих предыдущих ответов, в котором я объясняю, как менять местами обработчики содержимого при обработке документа. У вас может быть один обработчик содержимого, который определяет, является ли ответ содержимым или ошибкой, а затем заменяет соответствующий обработчик содержимого для обработки остального.

Вариант №3 - использовать JAXB

Если в результате XML будет преобразован в объект, рассматривали ли вы возможность использования JAXB? Он построит объект на основе XML на основе того, что возвращается.

person bdoughan    schedule 18.10.2010
comment
Вариант №2 мне идеально подходит, спасибо! К сожалению, я запрашиваю у веб-службы, которую я не разрабатывал, поэтому я не могу контролировать, что там ошибка имеет код ответа 200. Что касается варианта №3, я никогда раньше не слышал о JAXB, но он кажется действительно полезным. Однако я разрабатываю мобильную платформу, которая ее не поддерживает. Однако я обязательно буду использовать это для чего-то другого в будущем. Большое спасибо! - person littleK; 19.10.2010