Главная » Spring » Обработка исключений в конечной точке Spring

0

Программный код не всегда действует, как хотелось бы. Что про- изойдет, если сообщение не сможет быть преобразовано в Java-объ- ект? Что, если сообщение вообще не будет являться допустимым

XML-документом? Что необходимо сделать, если конечная точка или одна из ее зависимостей возбудит исключение?

Если в процессе обработки будет возбуждено исключение, клиен- ту должно быть отправлено соответствующее сообщение об ошибке. К сожалению, протокол SOAP ничего не знает об исключениях, воз- никающих в программном коде Java. Веб-службы, действующие по протоколу SOAP, возвращают сообщения об ошибках в виде ошибок SOAP. Поэтому нам необходим некоторый механизм, преобразую- щий любые исключения Java, которые могут быть возбуждены веб- службой или фреймворком Spring-WS, в ошибки SOAP.

Для этого в Spring-WS имеется компонент SoapFaultMappingExcepti onResolver. Как показано на рис. 15.6, SoapFaultMappingExceptionResolver обрабатывает любые неперехваченные исключения, которые могут возникнуть в ходе обработки сообщения, и воспроизводит соответ- ствующую ошибку SOAP для передачи клиенту.

Рис. 15.6. Компонент SoapFaultMappingExceptionResolver отображает любые исключения Java в ошибки SOAP

для передачи клиенту

Настройки компонента SoapFaultMappingExceptionResolver для нашей службы приводятся ниже:

<bean  id="endpointExceptionResolver" class="org.springframework.ws.soap.server.endpoint.

➥  SoapFaultMappingExceptionResolver">

<property  name="exceptionMappings">

<props>

<prop key="org.springframework.oxm.UnmarshallingFailureException"> SENDER,Invalid  message  received</prop>

<prop   key="org.springframework.oxm.ValidationFailureException"> SENDER,Invalid  message  received</prop>

</props>

</property>

<property name="defaultFault" value="RECEIVER,Server error" />

</bean>

Свойство exceptionMappings определяет перечень исключений и соответствующих им ошибок SOAP. Атрибут key каждого элемента

<prop> определяет исключение Java, которое требуется преобразовать в ошибку SOAP. Содержимое элемента <prop> определяет два значе- ния – тип ошибки, которая должна быть создана, и строка с опи- санием.

Всего в протоколе SOAP имеются два типа ошибок: ошибка от- правителя и ошибка получателя. Ошибки отправителя обычно указывают на проблемы, возникшие на стороне клиента (то есть отправителя). Ошибки получателя указывают, что веб-служба (то есть получатель) благополучно приняла сообщение от клиента, но столкнулась с некоторыми проблемами при его обработке.

Например, если служба примет XML-сообщение, которое не мо- жет быть преобразовано в Java-объект, маршалер возбудит исклю- чение org.springframework.oxm.UnmarshallingFailureException. Поскольку XML-сообщения создаются на стороне отправителя, это ошибка отправителя. Что касается строки с описанием, это простая строка с текстом «Invalid message received» («Принято недопустимое сооб- щение»), описывающая характер проблемы. Исключение org.spring- framework.oxm.ValidationFailureException   обрабатывается  аналогично.

Любые исключения, которые явно не определены в свойстве exceptionMappings, будут обрабатываться в соответствии с настройка- ми свойства defaultFault. В данном случае предполагается, что если было возбуждено исключение, не соответствующее ни одному из указанных явно, следовательно, проблема возникла на принимаю- щей стороне. То есть это ошибка получателя, которой соответствует описание «Server error» («Ошибка на стороне сервера»).

Источник:   Уоллс К., Spring в действии. – М.: ДМК Пресс, 2013. – 752 с.: ил.

По теме:

  • Комментарии