Открыть сервис

Ошибка SOAP

Ошибка SOAP — это сбой, возникающий при обработке сообщения, передаваемого по протоколу SOAP (Simple Object Access Protocol), который используется для обмена структурированными данными между веб-сервисами. Ошибки SOAP представляют собой стандартизированный механизм информирования клиента о проблемах, возникших на стороне сервера или при обработке запроса, и оформляются в виде специального элемента <soap:Fault> в теле SOAP-ответа.

Структура ошибки SOAP

Спецификация SOAP версии 1.1 и 1.2 определяет обязательные и необязательные элементы, входящие в состав сообщения об ошибке. Основным элементом является <faultcode> (в SOAP 1.1) или <Code> (в SOAP 1.2), который содержит код ошибки, указывающий на её тип. Дополнительно используются:

В SOAP 1.2 структура стала более строгой: код ошибки состоит из двух частей — <Code> (обязательный, содержит значение из предопределённого набора) и <Subcode> (необязательный, уточняет причину).

Классификация кодов ошибок

Коды ошибок в SOAP 1.1

Спецификация SOAP 1.1 определяет четыре базовых кода ошибки:

Коды ошибок в SOAP 1.2

В SOAP 1.2 набор кодов расширен и систематизирован:

Кроме того, спецификация SOAP 1.2 допускает использование подкодов (Subcode), которые могут быть произвольными URI, определёнными разработчиком веб-сервиса.

Причины возникновения ошибок SOAP

Ошибки SOAP могут возникать по различным причинам, которые условно делятся на несколько категорий:

Диагностика и обработка ошибок

На стороне клиента

Клиент веб-сервиса, получив ответ с ошибкой SOAP, должен проанализировать код и текстовое описание, чтобы определить дальнейшие действия. Рекомендуемые подходы:

На стороне сервера

Разработчик веб-сервиса должен предусмотреть генерацию осмысленных ошибок SOAP, чтобы облегчить диагностику. Рекомендации:

Примеры ошибок SOAP

Пример 1: Ошибка MustUnderstand (SOAP 1.1)

``xml <soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">; <soap:Body> <soap:Fault> <faultcode>soap:MustUnderstand</faultcode> <faultstring>Header not understood</faultstring> <faultactor>http://example.com/webservice</faultactor>; <detail> <e:myerror xmlns:e="http://example.com/errors">; <e:errorCode>1001</e:errorCode> <e:errorMessage>Transaction ID header is required</e:errorMessage> </e:myerror> </detail> </soap:Fault> </soap:Body> </soap:Envelope> ``

Пример 2: Ошибка Sender (SOAP 1.2)

``xml <soap:Envelope xmlns:soap="http://www.w3.org/2003/05/soap-envelope">; <soap:Body> <soap:Fault> <soap:Code> <soap:Value>soap:Sender</soap:Value> <soap:Subcode> <soap:Value>rpc:BadArguments</soap:Value> </soap:Subcode> </soap:Code> <soap:Reason> <soap:Text xml:lang="ru">Неверный формат даты рождения</soap:Text> </soap:Reason> <soap:Detail> <e:myerror xmlns:e="http://example.com/errors">; <e:errorCode>400</e:errorCode> <e:field>birthDate</e:field> </e:myerror> </soap:Detail> </soap:Fault> </soap:Body> </soap:Envelope> ``

Отличие от HTTP-ошибок

Ошибки SOAP не следует путать с HTTP-кодами состояния (например, 404 Not Found или 500 Internal Server Error). HTTP-коды информируют о проблемах на транспортном уровне (неверный URL, недоступность сервера), тогда как ошибки SOAP относятся к прикладному уровню и передаются внутри тела HTTP-ответа с кодом 200 OK (в случае успешной доставки SOAP-сообщения) или 500 (при сбое на уровне HTTP). В современных реализациях часто используется HTTP-код 500 для всех ошибок SOAP, что упрощает обработку на уровне прокси-серверов.

Обработка ошибок в различных языках программирования

Java (JAX-WS)

В Java-реализациях веб-сервисов на основе JAX-WS ошибки SOAP преобразуются в исключения типа SOAPFaultException. Разработчик может перехватывать это исключение и извлекать из него код, строку и детали ошибки.

.NET (WCF)

В Windows Communication Foundation (WCF) ошибки SOAP представляются классом FaultException. Для строго типизированных ошибок используется FaultException<TDetail>, где TDetail — пользовательский класс, соответствующий элементу <detail>.

PHP (SoapClient)

В PHP расширение SoapClient генерирует исключение SoapFault при получении ошибки SOAP. Объект исключения содержит свойства faultcode, faultstring и detail.

Интересные факты

Источники

BFOmetr — база данных и аналитика по компаниям России.

На главную BFOmetr →