Изучаем Java EE 7 - [224]

Шрифт
Интервал


Листинг 14.19. Конверт SOAP для запроса ValidateCreditCard после настройки

>

>···············xmlns: cc="http://chapter14.javaee7.book.agoncal.org/">

>··

>··

>····

>······

>···················control_number="544" type="Visa"/>

>····

>··

>

В листинге 14.20 показан ответ SOAP, который отправляется обратно потребителю. Он указывает, что кредитная карта, переданная в запросе, действительна (true).


Листинг 14.20. Конверт SOAP для ответа ValidateCreditCard после настройки

>

>···············xmlns: cc="http://chapter14.javaee7.book.agoncal.org/">

>··

>····

>······true

>····

>··

>

Обработка исключений

До этого момента все работало хорошо: обмен данными между потребителем и поставщиком был корректным, веб-служба не пропадала, а сеть работала надежно. Но так бывает не всегда. В Java, когда что-то идет не так, генерируется исключение и некоторые классы внутри JVM должны разобраться с ним. Для веб-служб SOAP этот механизм не работает, поскольку потребитель и служба могут быть написаны на разных языках и находиться в разных сетях. Таким образом, возникла идея использовать SOAP Fault в сообщении SOAP. Среда выполнения JAX-WS автоматически преобразует исключения Java в сообщения SOAP Fault, которые возвращаются клиенту. Эта функция позволяет сэкономить много времени и энергии, которые вы затратите на написание кода, преобразующего ваши исключения в сообщения SOAP Fault.

Если вы посмотрите на метод validate веб-службы CardValidator, определенный в листинге 14.5, то заметите, что, когда параметр CreditCard пуст, проверка прекращается и генерируется исключение NullPointerException. В этом случае среда выполнения JAX-WS ловит исключение NullPointerException на сервере, создает сообщение SOAP Fault (листинг 14.21) и отправляет его обратно потребителю.


Листинг 14.21. SOAP Fault отправляется в ответе SOAP

>

>··

>····

>······soap: Server

>······java.lang.NullPointerException

>····

>··

>

Как вы можете видеть в листинге 14.21, среда выполнения JAX-WS автоматически устанавливает значение параметра faultstring, соответствующее имени исключения в Java. Спецификация также предоставляет механизм различения типов неисправностей с использованием элемента faultCode. В этом случае он имеет значение soap: Server, указывая, что за неисправности отвечает сервер (другой вариант — soap: Client).

Еще один способ возвращения SOAP Fault — генерация исключения приложения (листинг 14.22). Здесь веб-служба генерирует проверенное исключение (но тот же самый механизм относится и к непроверенным исключениям), если кредитная карта имеет нечетный номер. Это исключение приложения будет автоматически преобразовано в соответствующее сообщение soap: Fault, обернуто в тело SOAP и возвращено клиенту.


Листинг 14.22. Проверка генерирует исключение

>@WebService

>public class CardValidator throws CardValidatorException {

>public boolean validate(CreditCard creditCard) {

>···Character lastDigit = creditCard.getNumber(). charAt(

>·························creditCard.getNumber(). length() — 1);


>····if (Integer.parseInt(lastDigit.toString()) % 2 == 0) {

>······return true;

>····}··else {

>······throw new CardValidatorException("Неверный номер кредитной карты");

>····}

>··}

>}

Исключение приложения может наследовать от типов Exception, RuntimeException или исключений веб-служб SOAP, таких как javax.xml.ws.WebServiceException или один из его подклассов (например, javax.xml.ws.soap.SOAPFaultException). Эти исключения также могут поддерживать аннотацию @WebFault, чтобы создать более подробный конверт SOAP (листинг 14.23).


Листинг 14.23. Исключение с аннотацией WebFault

>@WebFault(name = "CardValidationFault")

>public class CardValidatorException extends Exception {

>··public CardValidatorRTException() {

>····super();

>··}


>··public CardValidatorRTException(String message) {

>····super(message);

>··}

>}

Когда веб-служба SOAP генерирует исключение, определенное в листинге 14.23, среда выполнения JAX-WS генерирует сообщение об ошибке SOAP, определенное в листинге 14.24.


Листинг 14.24. SOAP Fault в конверте SOAP

>

>··

>····

>······soap: Server

>······org.agoncal.book.javaee7.chapter14.CardValidatorException

>······

>········

>·········xmlns: ns2="http://chapter14.javaee7.book.agoncal.org/">

>··········Неверный номер кредитной карты

>········

>······


Рекомендуем почитать
Pro Git

Разработчику часто требуется много сторонних инструментов, чтобы создавать и поддерживать проект. Система Git — один из таких инструментов и используется для контроля промежуточных версий вашего приложения, позволяя вам исправлять ошибки, откатывать к старой версии, разрабатывать проект в команде и сливать его потом. В книге вы узнаете об основах работы с Git: установка, ключевые команды, gitHub и многое другое.В книге рассматриваются следующие темы:основы Git;ветвление в Git;Git на сервере;распределённый Git;GitHub;инструменты Git;настройка Git;Git и другие системы контроля версий.


Java 7

Рассмотрено все необходимое для разработки, компиляции, отладки и запуска приложений Java. Изложены практические приемы использования как традиционных, так и новейших конструкций объектно-ориентированного языка Java, графической библиотеки классов Swing, расширенной библиотеки Java 2D, работа со звуком, печать, способы русификации программ. Приведено полное описание нововведений Java SE 7: двоичная запись чисел, строковые варианты разветвлений, "ромбовидный оператор", NIO2, новые средства многопоточности и др.


MFC и OpenGL

В книге рассказывается история главного героя, который сталкивается с различными проблемами и препятствиями на протяжении всего своего путешествия. По пути он встречает множество второстепенных персонажей, которые играют важные роли в истории. Благодаря опыту главного героя книга исследует такие темы, как любовь, потеря, надежда и стойкость. По мере того, как главный герой преодолевает свои трудности, он усваивает ценные уроки жизни и растет как личность.


Симуляция частичной специализации

В книге рассказывается история главного героя, который сталкивается с различными проблемами и препятствиями на протяжении всего своего путешествия. По пути он встречает множество второстепенных персонажей, которые играют важные роли в истории. Благодаря опыту главного героя книга исследует такие темы, как любовь, потеря, надежда и стойкость. По мере того, как главный герой преодолевает свои трудности, он усваивает ценные уроки жизни и растет как личность.


Обработка событий в С++

В книге рассказывается история главного героя, который сталкивается с различными проблемами и препятствиями на протяжении всего своего путешествия. По пути он встречает множество второстепенных персонажей, которые играют важные роли в истории. Благодаря опыту главного героя книга исследует такие темы, как любовь, потеря, надежда и стойкость. По мере того, как главный герой преодолевает свои трудности, он усваивает ценные уроки жизни и растет как личность.


Питон — модули, пакеты, классы, экземпляры

Python - объектно-ориентированный язык сверхвысокого уровня. Python, в отличии от Java, не требует исключительно объектной ориентированности, но классы в Python так просто изучить и так удобно использовать, что даже новые и неискушенные пользователи быстро переходят на ОО-подход.