Руководство по SOAP. Элемент Fault

Элемент SOAP сообщения fault обрабатывается в случае какой-либо ошибки. Ошибка возвращается отправителю сообщения.

Данный механизм SOAP возвращает определённую информацию об ошибке, в которую входят:

  • Код ошибки;
  • Описание;
  • Адресс обработчика SOAP, который сгенерировал ошибку.

Ключевые аспекты

При работе с ошибками в SOAP стоит иметь в виду следующее:

  • Сообщение SOAP может хранить только один блок fault.
  • Для связывания с HTTP, привязаны к статусам от 200 до 299.
  • Элемент fault не является обязательным для SOAP сообщения.
  • Коды ошибок SOAP сообщения привязаны к статусам от 500 до 599.

Под-элементы Fault

Элемент SOAP сообщения  Fault имеет следюущие под-элементы:

  • <faultCode>
    Текстовый код, который указывает на тип ошибки (примеры укзаны ниже).
  • <faultString>
    Текстовое сообщение с объяснением ошибки.
  • <faultActor>
    Текстовое сообщение, которое указывает, кто именно является причиной ошибки. Крайне полезно, когда SOAP сообщение проходит через несколько элементов (nodes) и клиенту необходимо узнать, в каком имеено из этих узлов произошла ошибка. Узел, который не является конечным получателем должен включать в себя элемент faultActor.
  • <detail>
    Этот элемент используется для хранения специального сообщения об ошибке, которое характерно для конкретного приложения. Этот элемент может включать под-элементы, которые называются detail entries.

Код ошибок SOAP

Значения, приведённые ниже должны использоваться в элементе faultCode для описаня ошибки.

  • SOAP-ENV:MustUnderstand
    Промежуточный под-элемент элемента Header с аттрибутом mustUnderstand, который установлен на 1 не был понят.
  • SOAP-ENV:VersionMismatch
    Находит неверное пространство имён в элементе Envelope.
  • SOAP-ENV:Server
    Проблема произошла на сервере, из-за чего сообщение не может быть передано.
  • SOAP-ENV:Client
    Сообщение было некорректно сформировано, либо содержало некорректную информацию.

Ниже приведён пример SOAP сообщения с элементом Fault. В этом примере клиент отправил запрос с помощью метода ValidateUser, но сервис не подерживает данный метод. В резултате было получено следующее SOAP сообщение:


<?xml version='1.0' encoding='UTF-8'?>

<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsi="http://www.w3.org/1999/XMLSchema-instance" xmlns:xsd="http://www.w3.org/1999/XMLSchema">
   <SOAP-ENV:Body>
      <SOAP-ENV:Fault>
         <faultcode xsi:type="xsd:string">SOAP-ENV:Client</faultcode>
		 
         <faultstring xsi:type="xsd:string">
            Failed to locate method (ValidateUser) in class (getUser) at /usr/local/ActivePerl-4.6/lib/site_perl/4.6.0/SOAP/Lite.pm line 355.
         </faultstring>		 
      </SOAP-ENV:Fault>
   </SOAP-ENV:Body>
   
</SOAP-ENV:Envelope>

На этом мы заканчиваем изучение элемента Fault.

В следующей статье мы рассмотрим кодировку SOAP сообщений.