Компания IBM
Опубликован: 14.08.2008 | Доступ: свободный | Студентов: 1090 / 150 | Оценка: 4.75 / 3.75 | Длительность: 27:55:00
Лекция 9:

Реализация. Создание корпоративной сервисной шины

9.4.6 Настройка SOAP MDF (soap11.mxsd)

У нас есть несколько вариантов определения конверта SOAP, в который заключаются схемы сообщений.

  1. Добавить необходимые SOAP-теги для обработки входящих сообщений и создать исходящие сообщения, используя знание спецификации SOAP без воссоздания правил и ограничений для правильно сформированных SOAP-сообщений.
  2. Использовать импортированную нами SOAP-схему для определения SOAP-сообщений. Мы можем применять эту схему для проверки правильности входящих SOAP-сообщений и для обеспечения правильного формирования наших собственных SOAP-сообщений.

Для файла определения сообщений, созданного при помощи сданной схемы, будут выводиться предупреждения, поскольку модель сообщений MRM не полностью совпадает с XML-схемами. Мы можем решить эту проблему несколькими способами:

  • Игнорировать предупреждения. В представлении Tasks (Задачи) есть параметр фильтра, позволяющий удалять какие-то предупреждения из задач или все предупреждения.
  • Стереть исходный файл схемы, удалив причину предупреждений.
  • Отредактировать файл определения сообщения, используя редактор брокера, и усовершенствовать проверки с использованием модели сообщений MRM на основе редактирования SOAP-спецификации, дополнив правила, указанные в определении схемы.

Мы выбрали вариант "с" – с редактированием файла определения сообщения для улучшения проверки SOAP-сообщений. Нужно выполнить два следующих действия:

  1. Создать файл определения SOAP-сообщения из SOAP-схемы.
  2. Изменить определение схемы SOAP-сообщения, чтобы избавиться от предупреждений и "улучшить" проверку.
Создание файла определения SOAP-сообщения

Схема SOAP 1.1 будет вызывать ошибку при преобразовании в файл определения сообщений; поэтому, прежде чем продолжить, нам нужно изменить ее. Брокер не поддерживает атрибуты списков. Откройте импортированную схему SOAP 1.1 в редакторе схем брокера, переключитесь на представление Source (Исходный код) и внесите изменения в соответствии с примером 9.8. Строка (<xs:list ... >) блокируется символом комментария и добавляются строки, начинающиеся с (<xs:restr ... >).

<xs:simpleType name="encodingStyle">
   <xs:annotation>
      <xs:documentation>'encodingStyle' indicates any canonicalization
conventions followed in the contents of the containing element. For
example, the value 'http://schemas.xmlsoap.org/soap/encoding/' 
indicates the pattern described in SOAP specification
      </xs:documentation>
   </xs:annotation>
<!-- <xs:list itemType="xs:anyURI" /> -->
   <xs:restriction base='xs:string'>
      <xs:pattern value='http://schemas.xmlsoap.org/soap/encoding%' />
   </xs:restriction>
</xs:simpleType>
Пример 9.8. Изменение файла определения SOAP-сообщения

Создайте новый файл определения сообщения в проекте Assessor Messageset, преобразовав измененную схему SOAP 1.1. Назовите это определение сообщения SOAP11. Вы увидите 13 предупреждений.

Примечание. Из файла SOAP.xsd используйте только глобальный элемент Envelope, по которому создается сообщение. Делается это для того, чтобы потоки сообщений могли распознать это сообщение как обрабатываемое. Оставьте опции Header, Body и Fault неотмеченными, как показано на рис. 9.30.
Выбор из SOAP-схемы только конверта

Рис. 9.30. Выбор из SOAP-схемы только конверта
Создание SOAP-оболочки для сообщений

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

  1. Удалите элементы Wildcard из элементов Envelope, Header, Body и Detail (потомка элемента Fault) См. рис. 9.8.
  2. Удалите атрибут Wildcard из элемента Body.
  3. Удалите пространства имен из трех оставшихся атрибутов Wildcard, показанных на рис. 9.31. Для этого выделяйте каждый атрибут по очереди и открывайте закладку Properties (Свойства) вместо закладки Overview (Обзор) в редакторе определений сообщений ( рис. 9.32).
    Элементы, которые нужно отредактировать в схеме SOAP 1.1

    Рис. 9.31. Элементы, которые нужно отредактировать в схеме SOAP 1.1
    Удаление пространства имен из атрибутов Wildcard

    увеличить изображение
    Рис. 9.32. Удаление пространства имен из атрибутов Wildcard
    Совет. Быстрее всего будет использовать представление Outline для выбора атрибутов, а затем вам нужно один раз перейти на закладку Properties (Свойства).
  4. Установите в поле Content Validation (Проверка содержимого) для сложного типа Envelope значение OpenDefined (изначально там указано значение Closed ) ( рис. 9.33). Это означает, что потомками типа Envelope могут быть только атрибуты, определенные в данном наборе сообщений. Явными потомками его являются Header и Body.
    Параметр Content validation для сложного типа Envelope устанавливается в Open Defined

    Рис. 9.33. Параметр Content validation для сложного типа Envelope устанавливается в Open Defined
  5. Установите в поле Content Validation (Проверка содержимого) для сложных типов Header и Detail значение Open (вместо установленного там Closed). Это означает, что здесь допустимо использовать любые атрибуты. Заголовки SOAP не являются обязательными, поэтому значение Min Occurs (Минимальное число вхождений) можно установить равным нулю, но такое значение не поддерживается в MRM, поэтому мы оставим значение 1.
  6. Укажите в поле Complex type (Сложный тип) элемента Body вариант Composition, а в поле Content Validation (Проверка содержимого) – значение OpenDefined. Это позволит использовать в качестве потомка элемента Body любой из элементов импортированной схемы, но не элементы, отсутствующие в схеме.
  7. Удалите шаблон (pattern facet) глобального атрибута mustUnderstand, поскольку он не является необходимым, и его удаление устраняет предупреждение, выдаваемое инструментарием Broker Toolkit ( рис. 9.34).
    Удаление шаблона из атрибута mustUnderstand

    увеличить изображение
    Рис. 9.34. Удаление шаблона из атрибута mustUnderstand
    Примечание. Данный шаблон представляет собой определение того, какие значения может принимать переменная. Булев тип имеет шаблон 0|1, что делает его похожим на перечислимый тип.
  8. Добавьте в схему SOAP элемент Fault как потомок элемента Body. Для этого выделите элемент Body, щелкните правой кнопкой мыши и выберите пункт меню Add element reference (Добавить ссылку на элемент) ( рис. 9.35).
    Добавление ссылки на элемент в элемент Body

    Рис. 9.35. Добавление ссылки на элемент в элемент Body
  9. Прокрутите список до элемента soap11:Fault ( рис. 9.36).
    Выбор ссылки на элемент Fault

    Рис. 9.36. Выбор ссылки на элемент Fault
  10. В том же окне укажите для элемента Fault в поле Min Occurs (Минимальное число вхождений) значение 0 и сохраните изменения. Вы увидите, что все предупреждения исчезли.

Выполнив данные шаги, мы создали SOAP-оболочку для наших сообщений. Теперь нам нужно ввести сообщения в эту оболочку.

9.4.7 Создание SOAP-сообщений

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

  1. Сохранить SOAP-оболочку для последующего использования, чтобы не приходилось проходить процедуру редактирования заново.
  2. Ввести сообщения Assessor в поле Body оболочки SOAP.
Сохранение оболочки SOAP

Мы экспортируем оболочку SOAP в виде файла XML-схемы, и ее можно будет использовать в других проектах наборов сообщений в будущем.

Выберите файл определения сообщения SOAP11.mxsd в навигаторе ресурсов, выберите пункт меню New (Новая) \to XML Schema (XML-схема). Выберите wire-формат XML1 и убедитесь в том, что файл SOAP11.mxsd выделен. Выберите пункт Strict Generation (Точная генерация) \to Next (Далее), создайте новую папку для хранения XML-схемы (например, Generated) и нажмите Finish (Готово).

Внимание! Сложный тип Header, созданный при импорте исправленного файла SOAP11.xsd, имеет в поле Content Validation (Проверка содержимого) значение Closed. Укажите здесь значение Open. Также исправьте данный параметр в трех других типах. Предупреждения исчезнут, когда вы сохраните файл.
Преобразование сообщений Assessor в SOAP-сообщения

Последняя задача в создании набора сообщений – это объединение определения SOAP с каждым из 10 сообщений Assessor. Мы сделаем это путем импортирования файлов определений сообщений Assessor в файлы определений SOAP-сообщений, а затем сделаем сообщения Assessor потомками элементов Body SOAP-сообщения.

Начнем с определения сообщения AllocateAssessment(6).

  1. Импортируйте файлы определений сообщений (MDF), представляющие службы Assessor в SOAP MDF:
    • Выделите файл SOAP11.mxsd в навигаторе ресурсов и перейдите на закладку Properties (Свойства) редактора определений сообщений, как показано на рис. 9.37.
      Импорт сообщений Assessor в SOAP-сообщение

      увеличить изображение
      Рис. 9.37. Импорт сообщений Assessor в SOAP-сообщение
    • Щелкните правой кнопкой мыши по пункту Imports (Импорты) \to Add (Добавить), выделите файл определения сообщения AllocateAssessment(6) и нажмите Finish (Готово).
      Импортирование определения сообщения Assessor в определение сообщения SOAP

      Рис. 9.38. Импортирование определения сообщения Assessor в определение сообщения SOAP
    • Повторите эту операцию для всех файлов определений сообщений, как показано на рис. 9.39.
      Все импортированные файлы определений сообщений

      Рис. 9.39. Все импортированные файлы определений сообщений
  2. Теперь, когда мы можем ссылаться в SOAP MDF на сообщения Assessor данного проекта, добавим глобальные элементы сообщений Assessor в качестве потомков в элемент SOAP Body:
    • При выделенном файле определения SOAP11.mxsd откройте закладку Overview (Общий обзор) и раскройте структуру Messages (Сообщения) \to Envelope, как показано на рис. 9.40.
      Добавление элементов Assessor в качестве потомков в элемент Body и задание параметра Min Occurs

      Рис. 9.40. Добавление элементов Assessor в качестве потомков в элемент Body и задание параметра Min Occurs
    • Щелкните правой кнопкой мыши по элементу Body, выберите пункт меню Add Element Reference (Добавить ссылку на элемент) и добавьте все элементы.
    • Укажите для параметра minOccurs (Минимальное число вхождений) каждой из структур значение 0, поскольку ни одна из них не является обязательной.
  3. Повторите процедуру для остальных 16 элементов верхнего уровня, как показано на рис. 9.41 и 9.42.
Все 17 сообщений Assessor в оболочке

Рис. 9.41. Все 17 сообщений Assessor в оболочке
Проверка источника, на который ссылается элемент

Рис. 9.42. Проверка источника, на который ссылается элемент
Совет. Размещение всех этих ссылок в оболочке SOAP сложно выполнить правильно, поэтому нужно все тщательно проверять. Сложно связать имена в ссылках на элементы с именами элементов:
  • Префиксы, которые мы добавили для различения сообщений, были урезаны, префиксы дублирующихся пространств имен – потеряны.
  • Нет квалификаторов пространств имен, которые помогли бы выбрать правильный элемент. Лучше всего щелкнуть один раз правой кнопкой мыши по вставленной ссылке на элемент, выбрать пункт меню Go To Declaration (Перейти к объявлению) и убедиться в том, что ссылка указывает на нужный элемент (рис. 9.42).
  • Ведите работу систематически. Мы добавляли ссылки в том порядке, в котором идут потоки, придерживаясь вида, показанного на рис. 9.11 и 9.12.
  • В конце подсчитайте количество ссылок. Их 17. Это число должно совпадать с числом определений элементов. Три потока представляют собой односторонние SOAP-сообщения, поэтому число интерфейсов в них меньше в два-три раза.
  • Проверьте, чтобы не было дублирующихся ссылок.
  • Убедитесь в том, что все ссылки являются потомками элемента Body и ни один из них не был записан к другому предку.
  • Убедитесь в том, что все значения Min Occurs равны нулю. Все эти элементы необязательные.
Артур Гибадуллин
Артур Гибадуллин
Россия, г. Нижневартовск
Виталий Удалов
Виталий Удалов
Россия, Москва, РЭУ им. Плеханова