Элемент 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 сообщений.