Тело SOAP-сообщения

Как мы уже знаем, именно в теле SOAP-сообщения передаются все основные данные, которые необходимо обработать получателю. Эти данные заключены между стартовым и конечным тегами элемента Body, которым, собственно, и объявляется тело SOAP-сообщения. Как и в заголовке, каждый элемент должен быть описан при помощи некоего пространства имен. Полное наименование элемента должно состоять из его имени и иденти­фикатора используемого пространства имен.

Элементы тела SOAP-сообщения соответствуют тем элементам заголовка сообщения, которые обладают атрибутом mustunderstand с единичным значением. Однако с практической точки зрения, элементы тела SOAP- сообщения можно рассматривать как удаленные вызовы некоторых методов обрабатывающего приложения. То есть приложение, отсылающее SOAP- сообщение. при помощи элементов его тела заставляет принимающее приложение выполнять те или иные действия. Если мы еще раз посмотрим на листинг 16.1, то увидим, что тело сообщения объявлялось при помощи следующего фрагмента кода:

<SOAP-ENV:Body>

<m:GetSomeValue xmlns:m=" www.servicesite.com/action">

< symbol>SYM</symbol>

</m: GetSomeVаlue >

</SQAP-ENV:Body>

Первая и последняя строки содержат открывающий и закрывающий, соответственно, теги тела сообщения. А между ними располагается информация, которая и предназначена для обрабатывающего приложения. Вторая строка, по сути дела, является вызовом некоего метода с внутренним наименованием GetSomeValue. При этом в качестве параметра данному методу передается значение SYM типа symbol. Естественно, имена типов и методов являются условными. Наименование метода может не совпадать с наименованием функции, этот метод реализующей. А тип значения, естественно, распознается самим обрабатывающим приложением.

Однако помимо элементов, специфичных для каждого приложения, в теле SOAP-сообщения может использоваться один стандартный элемент. Он носит наименование Fault. и предназначен, как нетрудно догадаться, для пе­редачи информации о возникших ошибках. Этот элемент обязан находиться именно в теле SОАР-сообщения и не может быть повторен два или более раз. То есть, проще говоря, он должен там быть в единственном экземпляре.

Данный элемент может содержать четыре встроенных элемента. Рассмотрим их подробно.

□ Элемент faultcode предназначен для передачи кода возникшей ошибки. Этот элемент обязательно должен входить в состав своего родительского элемента Fault. Его значением должно быть полное наименование ошибки.

□ Элемент faultstring содержит текстовое описание ошибки. Он также обязан входить в состав родительского элемента Fault. На значение этого элемента не накладывается каких-либо жестких условий, но все же реко­мендуется вносить в него дополнительную информацию о возникшей ошибке, так как стандартные коды ошибок могут указать лишь тип воз­никшей проблемы, но не локализовать ее.

□ Элемент faultactor указывает на приложение, в котором и возникла ошибка. Если у SOAP-сообщения есть всего лишь один адресат, тогда нет нужды использовать этот элемент, так как и без того понятно, что ошибка могла возникнуть лишь при работе единственного адресата. Но вот если для сообщения заготовлена цепочка обработчиков, и ошибка возникла не по вине последнего в этой цепочке приложения, то приложение, в котором возникла ошибка, обязано включить в состав элемента Fault данный элемент faultactor и указать в качестве его значения свой собственный идентификатор.

□ Элемент detail служит для передачи детальной информации о возникшей ошибке. Он обязан включаться в состав элемента Fault, если ошибка возникла в процессе обработки тела сообщения. Если же ошибка появилась при обработке иных компонентов SOAP-сообщения, наличие данного элемента не является обязательным. В состав данного элемента должны входить иные элементы, определяемые приложением, в которых оно будет указывать локализованную причину ошибки и возможные действия отправителя, которые необходимо произвести в ответ на получение сообщения об ошибке.

Здесь также следует рассмотреть стандартные классы ошибок, которые являются значениями элемента faultcode. Они определены в пространстве имен http://shemas. xmlsoap.org/soap/envelope.

□ Код versionMismatch указывает, что приложение-обработчик обнаружило ссылку на неверное пространство имен в элементе Envelope.

□ Код MustUnderstand сигнализирует, что в заголовке SOAP-сообщения обнаружен элемент с атрибутом mustUnderstand, которому приписано единичное значение, и этот элемент не распознан обрабатывающим приложением, и, соответственно, не был им обработан.

□ Код client свидетельствует о возникновении класса ошибок, которые не могут быть самостоятельно устранены обрабатывающим приложением. Чаше всего возникновение подобных ошибок свидетельствует о том, что в сообщение не была вложена некая важная информация.

□ Код server указывает, что ошибка возникла на стороне обрабатывающего приложения, но при этом она возникла не из-за содержимого SOAP-сообщения. Чаше всего это свидетельствует, что обрабатывающее приложение не смогло выполнить ряд своих функций, например, из-за того, что не удалось загрузить некоторые свои удаленные компоненты. Обычно при получении сообщения с ошибкой подобного класса отсылающее приложение может повторно послать SOAP-сообщение в надежде на то, что принимающее приложение все-таки сможет его правильно обработать.

Все данные, передаваемые в теле SOAP-сообщения. должны принадлежать к одному из заранее предопределенных типов. Как мы знаем, изначально в XML нет типов данных. Соответствие между значением и его типом самостоятельно устанавливалось приложением, обрабатывающим XML-документ. В спецификации SOAP заранее определены возможные типы значений. Их мы рассмотрим в следующем разделе.


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: