3.1.5. Запросы в формате XML (SOAP)
3. Запросы из внешних систем 3.1. Запросы к данным 3.1.5. Запросы в формате XML (SOAP)
Рассмотрим обработку запросов в формате XML (SOAP) на основе базового примера. Для отправки запросов мы используем простые скрипты на языке Python. Для приёма и обработки запросов нам понадобится кластер TDG, настроенный ранее.
3.1.5.1. Адаптация конфигурации из базового примера
Для повторения примеров из данного раздела нам потребуется внести определенные исправления в конфигурацию системы, загруженную ранее.
Разархивируйте архив с конфигурацией системы в отдельную директорию.
Откройте файл config.yml
и измените его так, чтобы он содержал следующий текст:
types: __file: model.avsc functions: router: {__file: router.lua} classifier: {__file: classificator.lua} select_user_books: {__file: select_user_books.lua} process_user: {__file: process_user.lua} process_book: {__file: process_book.lua} process_sub: {__file: process_sub.lua} pipelines: router: - router classifier: - classifier select_user_books: - select_user_books process_user: - process_user process_book: - process_book process_sub: - process_sub connector: input: - name: soap type: soap wsdl: {__file: example.wsdl} handlers: - function: Connect pipeline: router routing: - key: input_key output: to_input_processor output: - name: to_input_processor type: input_processor input_processor: classifiers: - name: classifier pipeline: classifier routing: - key: process_user pipeline: process_user - key: process_book pipeline: process_book - key: process_sub pipeline: process_sub storage: - key: add_user type: User - key: add_book type: Book - key: add_subscription type: Subscription services: select_user_books: doc: "select_user_books" function: select_user_books return_type: string args: user_id: long
Обратите внимание на появившийся раздел input_processor
/routing
и связанные
с ним описания новых конвейеров обработки данных (pipeline) и функций.
connector
появилось описание входа с
типом SOAP, функцией Connect
(не являющейся функцией TDG, но описываемой
в XML/SOAP) и связанным с ней конвейером (уже известным нам по примеру с JSON — router
).Примечание
В секции wsdl:
обязательно указывается файл спецификации веб-сервиса с
расширением .wsdl
. В нашем примере это example.wsdl
. Данный файл должен
обязательно быть включен в состав архива с конфигурацией системы. В том случае,
если WSDL не используется, данный файл может быть пустым.
Теперь откройте файл classificator.lua
#!/usr/bin/env tarantool local param = ... if (param.obj[1].tag == "username" or param.obj[2].tag == "username") then param.routing_key = "process_user" return param end if (param.obj[1].tag == "book_name" or param.obj[2].tag == "book_name") then param.routing_key = "process_book" return param end if ((param.obj[1].tag == "user_id" and param.obj[2] == "book_id") or (param.obj[2].tag == "user_id" and param.obj[1].tag == "book_id")) then param.routing_key = "process_sub" return param end param.routing_key = "unknown_type" return param
Создайте файлы process_user.lua
, process_book.lua
и process_sub.lua
.
Содержимое этих файлов — скрипт обработки данных, который должен формировать из
получаемого TDG информационного объекта объект, соответствующий описанному
в модели данных.
Далее приведен пример содержимого файла process_user.lua
.
Остальные файлы выполняются по аналогии.
#!/usr/bin/env tarantool local param = ... local id = param.obj[1][1] local username = param.obj[2][1] local data = {id = tonumber(id), username = username} local ret = {obj = data, priority = 1, routing_key = 'add_user'} return ret
Сформированный вышеуказанным скриптом объект должен содержать поля id
и username
,
так как он получит routing_key
для добавления объекта типа User
в хранилище.
Важно
Для сохранения TDG ожидает объект в формате, представленном выше,
где obj
включает в себя весь информационный объект в виде перечисленных
через запятую пар key = value
, где для каждого обязательного поля объекта
в модели данных задан одноимённый ключ (key) с непустым значением.
Закончив с подготовкой файлов, упакуйте их в zip-архив и загрузите его согласно инструкции.
3.1.5.2. Описание процесса обработки запроса
Логика обработки поступающего запроса изложена в файле конфигурации config.yml
и состоит в следующем:
Согласно разделу
connector
/input
файла конфигурацииconfig.yml
, SOAP (XML) запросы передаются на обработку конвейеруrouter
, который состоит из функцииrouter
;Функция
router
ссылается на файлrouter.lua
, который упаковывает поступивший объект с ключомrouting_key
равным строкеinput_key
;Согласно разделу
connector
/routing
файла конфигурацииconfig.
, все объекты с ключомinput_key
передаютсяto_input_processor
;В секции
output
для разделаconnector
указана единственная записьto_input_processor
, которая переадресует запрос в разделinput_processor
для обработки на одноименной роли;В разделе
input_processor
все запросы попадают в секциюclassifiers
, где в нашем случае указан один единственный объект, вызывающий конвейер обработки объектов (pipeline)classifier
;Конвейер
classifier
classificator.lua
. Как можно понять из названия, данная функция занимается классификацией поступающей информации. Логика ее работы следующая:при наличии тэга
username
у поступившего объекта — ему присваиваетсяrouting_key
=process_user
, то есть объект направляется для формирования объекта типа пользователь;при наличии тэга
book_name
у поступившего объекта — ему присваиваетсяrouting_key
=process_book
, то есть объект направляется для формирования объекта типа книгапри наличии тэгов
user_id
иbook_id
у поступившего объекта — ему присваиваетсяrouting_key
=process_sub
, то есть объект направляется для формирования объекта типа подписка;во всех остальных случаях объекту присваивается
routing_key
=unknown_type
, то есть объект не распознан.Такой объект обычно попадает в ремонтную очередь, но можно настроить и иное поведение;
В разделе
input_processor
в секцииrouting
routing_key
:process_user
,process_book
иprocess_sub
при помощи одноименных функций. Каждая из этих функций формирует объект в нужном для сохранения формате и присваивает ему соответствующийrouting_key
;В секции
storage
описано сохранение данных в TDG.при значении
routing_key
равномadd_user
объект сохраняется какUser
;при значении
routing_key
равномadd_book
объект сохраняется какBook
;при значении
routing_key
равномadd_subscription
Subscription
.
Обратите внимание, что вся лишняя информация, не относящаяся к типу объекта, описанному в модели данных, не будет сохранена.
Из всего файла конфигурации системы остался не рассмотренным участок, отвечающий
за сервисы. В данном примере там описан простой сервис, вызывающий функцию select_user_books
с аргументом user_id
и возвращающий строковую переменную.
Логика работы этой функции такова — переданное значение user_id
используется
для поиска в объекте
всех книг, записанных за данным пользователем.
Затем выводятся все найденные book_id
.
3.1.5.3. Подготовка запроса в формате SOAP (XML)
Создайте файл request.py
со скриптом на языке Python для отправки простейшего
запроса с полями объекта типа User
(из нашей модели данных:
это поля id
и username
), который будет выглядеть следующим образом:
import requests data = """<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"> <soap:Body> <NS2:Connect xmlns:NS2="http://172.19.0.2:8080/soap"> <id>1</id> <username>John Smith</username> </NS2:Connect> </soap:Body> </soap:Envelope>""" header = {'Authorization' : 'Bearer c0b26a60-aebe-4899-9ab6-4458627ac61e'} r = requests.post(url = "http://172.19.0.2:8080/soap", data = data, headers = header)
Передаваемый запрос содержит заголовок для авторизации и тело в виде
SOAP объекта с обязательными полями для объекта модели данных типа User
.
Примечание
Используйте в качестве значения для параметра Authorization: Bearer
токен приложений,
сгенерированный ранее.
Для успешного добавления записи имеющегося в модели данных типа объекта в запросе должны содержаться все обязательные поля для данного типа объекта.
Процедура отправки запроса и ожидаемые результаты описаны ранее в пункте Отправка запросов.
Нашли ответ на свой вопрос?
Обратная связь
Радченко Глеб Игоревич
Кандидат физико-математических наук, доцент Silicon Austria Labs, Austria, Graz, Staff Scientist Южно-Уральский Государственный Университет, Старный научный сотрудник, доцент кафедры системного программирования |
||
E-mail: gleb. |
Научные интересы
- Грид-вычисления.
- Облачные вычисления.
- Распределенные вычислительные системы.
Публикации
- Пособие: Распределенные вычислительные системы [Текст в формате PDF].
- Пособие: Объектно-ориентированное программирование [Электронное издание + URL для загрузки].
- [Полный список публикаций]
Проекты
- Проект Erasmus+ PWs@PhD. Основная цель проекта PWs@PhD – поддержка развития, модернизации, интернационализации высшего образования, а именно исследовательской составляющей европейского образования уровня PhD, содействие созданию новых PhD-программ в странах-партнерах в области программной инженерии.
- Сервисно-ориентированный подход к использованию проблемно-ориентированных пакетов в распределенных и грид-средах (проект DiVTB).
- Параллельная реализация нейросетевого алгоритма распознавания раздельной речи (Часть 1, Часть 2, Часть 3).
Новости
- [2013-12-25] Обновления страниц курсов:
- Курс объектной распределенной обработки: лекция «Облачные платформы: VCloud, Cloudstack, Openstack, Yandex Cocaine», ссылки на материалы по частным облачным платформам.
- [2013-12-17] Обновления страниц курсов:
- Курс объектной распределенной обработки: лекция «Виртуализация, CAP-теорема», доклад Суворова И.Б. «Ботнеты», доклад Беседина К.Ю. «Облачная платформа Windows Azure».
- [2013-11-28] Обновления страниц курсов:
- Курс объектной распределенной обработки: лекция по P2P системам, доклад Кутыревой Е.М. «Облачные вычисления».
- Курс объектной распределенной обработки: в дополнительные материалы добавлена ссылка на проект университета Карлсруе по online-мониторингу активности P2P-сетей (BitTorrent DHT): Live Monitoring of the BitTorrent DHT.
- Курс ООП: доклад И. Сухинского, Е. Неповинных «Паттерны проектирования» (+ примеры реализации паттернов), лекция по алгоритмам стандартной библиотеки С++.
- Курс ООП: в дополнительные материалы добавлена ссылка на подборку материалов по реализации паттернов проектирования посредством языка C++: CPP-REFERENCE.RU
- [2013-11-07] Размещены слайды презентаций:
- Курс объектной распределенной обработки: доклад Радченко В.И. «Концепция REST».
- Курс ООП: презентация по лекци «Стандартная библиотека шаблонов С++».
- [2013-10-26] Размещены слайды презентаций:
- Курс объектной распределенной обработки: презентации по лекциям Сервис-ориентированная архитектура (продолжение), XML веб-сервисы: WSDL, SOAP, XML веб-сервисы: стандарты второго поколения.
- Курс ООП: презентации по лекциям «Наследование (продолжение).
Шаблоны функций», «Шаблоны классов. Исключительные ситуации».
- [2013-10-06] В дополнительные материалы курса «Программная инженерия» добавлена ссылка на интерактивный учебный курс по механизмам ветвления в рамках системы управления версиями Git Learn Git Branching.
- [2013-06-03] Размещены слайды презентаций:
- Курс распределенных объектных технологий: доклад Михайлова Прохора Андреевича Windows Communication Foundation: Архитектура WCF, типы контрактов, модели вызовов операций, привязки, WCF vs. ASP.NET Web API .
- Курс Программной инженерии: доклад Радченко Всеволода Игоревича Тестирование исходного кода. Методики тестирования. Разработка через тестирование (Test-driven development).
- Курс Программной инженерии: доклад Кожевиной Елены Игоревны Методология экстремального программирования. Scrum.
[Архив новостей]
Ссылки
- Mendeley — система для каталогизации и управления библиографией.
Встраивается в Microsoft Word, позволяя автоматизировать процесс управления списками литературы при подготовке статей. Поддерживает множество форматов оформления библиографических ссылок, включая ГОСТ-7.0.5-2008.
- Memsource — операционная среда для выполнения письменных переводов, включающая базы памяти переводов, встроенный машинный перевод, модуль управления терминологией, а также текстовый редактор MemSource Editor. Может импортировать и экспортировать документы всех стандартных форматов, включая Word и PowerPoint.
Мой профиль
- ResearcherID: G-3547-2013
- Scopus Author ID: 55695192800
- Google Sholar
- ResearchGate
- Academia.edu
javax.xml.soap (платформа Java SE 8)
javax.xml.soap (платформа Java SE 8)В вашем браузере отключен JavaScript.
Пропустить навигационные ссылки
- Обзор
- Пакет
- Класс
- Использовать
- Дерево
- Устарело
- Индекс
- Помощь
Платформа Java™
Standard Ed. 8
- Предыдущий пакет
- Следующий пакет
- Рамки
- Нет кадров
Сводка по интерфейсу Интерфейс Описание Деталь Контейнер для
объектов DetailEntry
.DetailEntry Содержимое объекта
Detail
, дающее подробные сведения о объектSOAPFault
.Имя Представление имени XML.
Узел Представление узла (элемента) в документе XML.
SOAPBody Объект, представляющий содержимое тела SOAP элемент в SOAP-сообщении.
SOAPBodyElement Объект
SOAPBodyElement
представляет содержимое в объектSOAPBody
.Константы SOAP Определение констант, относящихся к протоколу SOAP.
МЫЛЭлемент Объект, представляющий элемент сообщения SOAP, который разрешен, но не специально предписано спецификацией SOAP.
SOAPEnvelope Контейнер для частей SOAPHeader и SOAPBody
Объект SOAPPart
.SOAPFault Элемент объекта
SOAPBody
, содержащий информация об ошибках и/или статусе.SOAPFaultElement Представление содержимого в объект
SOAPFault
.SOAPHeader Представление заголовка SOAP элемент.
Элемент SOAPHeader Объект, представляющий содержимое части заголовка SOAP файла Мыльный конверт.
Текст Представление узла, значение которого является текстом.
Сводка по классу Класс Описание ПриспособлениеДеталь Одно вложение к объекту
SOAPMessage
.Фабрика сообщений Фабрика для создания
объектов SOAPMessage
.MimeHeader Объект, в котором хранится имя заголовка MIME и его значение.
MimeHeaders Контейнер для
объектов MimeHeader
, которые представляют заголовки MIME, присутствующие в MIME-части сообщения.SAAJMetaFactory Точка доступа для классов реализации фабрик, определенных в API СААЖ.
SAAJРезультат Действует как держатель результатов преобразования JAXP или JAXB. ранжирование в виде дерева SAAJ.
SOAPConnection Соединение точка-точка, которое клиент может использовать для отправки сообщений непосредственно удаленной стороне (представленной, например, URL-адресом).
SOAPConnectionFactory Фабрика для создания
объектов SOAPConnection
.SOAPElementFactory Устарело — Используйте
javax.xml.soap.SOAPFactory
для создания SOAPElements.SOAPFactory SOAPFactory
— фабрика по созданию различных объектов существующие в XML-дереве SOAP.SOAPMessage Корневой класс для всех сообщений SOAP.
МЫЛОЧасть Контейнер для специфичной для SOAP части сообщения
SOAPMessage
объект.Сводка исключений Исключение Описание Исключение SOAP Исключение, указывающее на возникновение исключения SOAP.
Предоставляет API для создания и построения сообщений SOAP. Этот пакет определяется в SOAP с API вложений для Java TM (SAAJ) 1.3 Спецификация .
API в пакете javax.xml.soap
позволяет выполнять
следующее:
- создать двухточечное соединение с указанной конечной точкой
- создать сообщение SOAP
- создать фрагмент XML
- добавить содержимое в заголовок сообщения SOAP
- добавить содержимое в тело сообщения SOAP
- создавать части вложения и добавлять к ним содержимое
- доступ/добавление/изменение частей сообщения SOAP
- создать/добавить/изменить информацию об ошибках SOAP
- извлечь содержимое из сообщения SOAP
- отправить сообщение SOAP запрос-ответ
Кроме того, API-интерфейсы в пакете javax.
расширяют
их аналоги в пакете org.w3c.dom . Это значит, что xml.soap
SOAPPart
из SOAPMessage
также является уровнем DOM
2 Документ
, и ими можно манипулировать приложениями,
инструменты и библиотеки, использующие DOM (см. http://www.w3.org/DOM/ для получения дополнительной информации).
Важно отметить, что хотя можно использовать DOM API для добавления
обычные узлы DOM в дерево SAAJ, API-интерфейсы SAAJ по-прежнему должны возвращать
Типы SAAJ при изучении или манипулировании деревом. Чтобы выполнить
это API-интерфейсы SAAJ (в частности, SOAPElement.getChildElements()
)
разрешено молча заменять объекты, которые неправильно типизированы относительно
требованиям ГААЖ с эквивалентными объектами требуемого типа. Эти
замены никогда не должны приводить к изменению логической структуры дерева,
поэтому с точки зрения DOM API дерево останется неизменным. Однако,
физический состав дерева изменится так, что ссылки
к узлам, которые были заменены, будут относиться к узлам, которые больше не являются
часть дерева. API-интерфейсам SAAJ не разрешено производить эти замены.
если они не требуются, поэтому замещающие объекты никогда не будут впоследствии
быть автоматически заменены будущими вызовами SAAJ API.
Что это значит в
с практической точки зрения, приложение, которое начинает использовать SAAJ API на
дерево после манипулирования им с помощью API DOM должно предполагать, что дерево было
переведены во все дерево SAAJ и что любые ссылки на объекты внутри
дерево, полученное с помощью DOM API, больше недействительно. Переключение
из API-интерфейсов SAAJ в API-интерфейсы DOM не могут вызывать недопустимые ссылки и
ни один из них не использует исключительно API SAAJ. Это только переход от использования DOM
API в конкретном дереве SAAJ к использованию API SAAJ, что вызывает риск
недействительные ссылки.
- Предыдущий пакет
- Следующий пакет
- Рамки
- Нет кадров
Сообщить об ошибке или функции
Дополнительную справку по API и документацию для разработчиков см.