Обработка ошибок
Во время исполнения обработчика на встроенном языке при возникновении ошибки может быть выброшено исключение. «1С:Шина» создает из выброшенного обработчиком запроса исключения SOAP ошибку и формирует HTTP-код ответа 500 (Internal server error). В элементе проекта можно описать ошибки (исключения встроенного языка), которые могут быть выброшены обработчиками сервиса. Для таких исключений «1С:Шина» создаст описание SOAP-ошибок в WSDL сервиса. Если обработчик выбрасывает не описанное в элементе проекта исключение, WSDL сервиса не будет содержать описания соответствующей ошибки, а в SOAP-сообщении будет только общая информация о возникшей ошибке, взятая из сообщения выброшенного исключения.
Пример не описанного в проекте исключения
В XBSL-обработчике SOAP-сервиса выбрасывается исключение:
метод ДобавитьВКорзину(): Cart
...
выбросить новый ИсключениеВыполнения("Произошла ошибка при обработке запроса веб-сервиса")
;
Ответ
SOAP-сервиса:<S:Envelope xmlns:S="http://schemas.xmlsoap.org/soap/envelope/" xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/"> <SOAP-ENV:Header/> <S:Body> <S:Fault xmlns:ns3="http://www.w3.org/2003/05/soap-envelope"> <faultcode>S:Server</faultcode> <faultstring>Произошла ошибка при обработке запроса веб-сервиса</faultstring> </S:Fault> </S:Body> </S:Envelope>
Вы также можете создать пользовательское исключение в модуле SOAP-сервиса. Название исключения необходимо указать в свойстве Ошибки. Данное свойство есть как у элемента проекта Soap Сервис, так и у обработчиков операций. Общие для всех обработчиков ошибки следует указать в свойстве элемента проекта, а специфические для конкретного обработчика — в свойстве обработчика.
Из исключения на встроенном языке «1С:Шина» сформирует WSDL описание
ошибки (definitions.message
, operation.fault
).
После того как вы создали пользовательское исключение, вы можете выбрасывать исключение данного типа в обработчиках операций сервиса.
Когда во время исполнения обработчика операции данное исключение будет выброшено, «1С:Шина» сериализует объект-исключение в SOAP Fault сообщение. Если выброшенное исключение не описано для операции (в свойстве Ошибки элемента проекта SoapСервис либо в свойстве Ошибки у вызванного обработчика), будет сформирована обычная ошибка SOAP Fault (см. пример выше).
Пример описанного в проекте исключения
ВидЭлемента: SoapСервис
Ид: 20658364-7777-4b14-9423-ec212de5be72
Имя: СервисМагазина
ПространствоИменСервиса: https://mycustomshop.ru
ИмяСервиса: ShopService
КорневойUrl: shopservice
Обработчики:
-
Имя: AddToCart
Метод: ДобавитьВКорзину
Ошибки:
- СервисМагазина.MyCustomException
Модуль
SOAP-сервиса:// Описание пользовательской ошибки
@ВПроекте
исключение MyCustomException
обз пер ReasonDescription: Строка
обз пер AppErrorCode: Число
;
// В обработчике выбрасывается пользовательское исключение
метод ДобавитьВКорзину(): Cart
...
выбросить новый MyCustomException("Пользовательское сообщение об исключении", "Описание ошибки", 224)
;
Ответ
SOAP-сервиса:<?xml version='1.0' encoding='UTF-8'?> <soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"> <soap:Header/> <soap:Body> <soap:Fault> <faultcode>soap:Server</faultcode> <faultstring>Пользовательское сообщение об исключении</faultstring> <detail> <n1:MyCustomException xmlns:n1="http://mycompany/myws"> <ReasonDescription>Описание ошибки</ReasonDescription> <AppErrorCode>224</AppErrorCode> </n1:MyCustomException> </detail> </soap:Fault> </soap:Body> </soap:Envelope>