<<

стр. 4
(всего 5)

СОДЕРЖАНИЕ

>>

- Ответственный исполнитель: document/execution_info/main_executor/text();

Комментарии: Исполнитель переводит в состояние "Исполнен" - только запрос гражданина, так как исполняются резолюции, наложенные именно на запрос, ответ является Исходящим документом и статуса "Исполнен" не имеет.

ПЭВ, должен анализировать изменения параметра Ответственный исполнитель, и изменять соответствующим образом свое состояние. В случае определения состояния документа = Исполнен, ПЭВ инициирует процедуру получения ответа.

Получение ответа

После изменения статуса документа на Обработан, необходимо прочитать из СЭДО ответ. Вызывается операция GetDocumentContent. Форма запроса на получение ответа аналогична предыдущим запросам и показана на Листинг 8.
Листинг 8
<status_request>
<process>525b15a6-c1fb-4818-9c9e-bf9c851e510f</process>
</status_request>

В ответ, операция СЭДО возвращает следующие данные (Листинг 9), в случае возникновения ошибки, СЭДО возвращает сообщение об ошибке (Листинг 3):
Листинг 9
<document_out_files>
<process>525b15a6-c1fb-4818-9c9e-bf9c851e510f</process>
<process_condition>1</process_condition>
<reg_card_info>
<condition>5</condition>
</reg_card_info>
<execution_info>
<main_executor>Ответственный исполнитель</main_executor>
<answer_text>Краткое содержание ответа</answer_text>
</execution_info>
<files>
<file name="Обращение.txt">
Я, Гражданин Российской Федерации, направляю в Правительство
Российской Федерации жалобу... Подпись: Иванов Иван
Иванович.
</file>
</files>
<linked_card>
<link_condition>string</link_condition>
<reg_card_info>
<reg_card_number>string</reg_card_number>
<condition>4</condition>
<note>string</note>
<reg_card_date>dateTime</reg_card_date>
</reg_card_info>
<files>
<file name="Ответ.txt">
МЭРТ отвечает на обращение гражданина.
</file>
</files>
</linked_card>
</document_out_files>


Основными информационными параметрами на данном этапе являются:
* Идентификатор процесса: document_out_files/process/text();
* Состояние процесса: document_out_files/process_condition/text(), возможные варианты (1:Процесс обработки запущен, 2:Процесс обработки документа завершен, 3:Процесс обработки документа временно приостановлен);
* Состояние: document_out_files/reg_cart_info/condition/text(), возможные варианты (1:Подготавливается, 2:Согласуется, 3:Регистрируется, 4:Исполняется,5:Исполнен);
* Ответственный исполнитель: document_out_files/execution_info/main_executor/text();
* Ссылка на связанный документ: document_out_files/linked_cart
* Содержание ответа: document_out_files/linked_cart/files/file/text(); Файл может быть как в текстовом формате, так и документом Word. Формат определяется по расширению имени файла.

ПЭВ получает ответ на обращение гражданина и пересылает его компоненту, предоставляющего интерфейс пользователя гражданину.
Статус исполнения связанного документа значения не имеет - это исходящий документ для СЭДО.

Пилотный проект "Планирование объема закупок"
Проект предназначен для автоматизации деятельности Минэкономразвития России в рамках подготовки информации по обращениям граждан и хозяйствующих субъектов.

Общее описание
На рисунке представлена обобщенная схема основных компонент пилотного проекта "Планирование объема закупок".

Обозначения:
* МЕРТ - Министерство экономического развития и торговли России.
* ГРБС - главный распорядитель бюджетных средств.
* РБС - распорядитель бюджетных средств.
* UI - пользовательский интерфейс, реализуется сторонней организацией.
* AS - авторизационный сервис СЭВ.
* pos service - веб-сервис, обрабатывающий сообщения от участников взаимодействия.
* DB - база данных.
Описание связей
Все взаимодействия между Пилотным проектом "Планирование объема закупок", Компонентами СЭВ и UI показаны стрелочками. Взаимодействие осуществляется с использованием различных протоколов, надпись на стрелочке указывает используемый протокол. Двунаправленная стрелка показывает, что взаимодействие является синхронным.
Используемые протоколы:
* soap - согласно спецификации SOAP [Ссылки 1];
* http - согласно спецификации HTTP [Ссылки 2];
* jdbc - согласно спецификации JDBC [Ссылки 3];


Основные компоненты сервиса "Планирование объема закупок"
* pos service - веб-сервис, обрабатывающий сообщения от участников взаимодействия;
* DB - база данных, в которой хранится содержимое запросов и ответов, информация об участниках и др.
pos service
Ядром сервиса "Планирование объема закупок" является pos service.

public class POSTransferService

Методы
public void doOperation(
SOAPEnvelope request,
SOAPEnvelope response);
Операция вызова WEB-сервиса.
Параметры:
request - документ, содержащий запрос
response - документ, содержащий ответ



Структура данных
В качестве RDBMS используется Oracle 9i Database 9.2.0.1.

Схема базы данных:


Описания таблиц:


Таблица: DEPENDPACKAGE
Таблица связей с зависимыми пакетами
Поле
Тип
Длина
Ненулевое
Описание
ID_DP_REC
NUMBER
255
NOT NULL
PK
ID_PACKAGE
NUMBER
255

DEPEND_PACKAGE
NUMBER
255
ID пакета, зависимого от текущего пакета (например, при запросе на уточнение отчета, помещается ID пакета с уточняемым отчетом)

Таблица: ENTITYACCESS
Талица с флагами направления движения пакетов по иерархии субъектов
Поле
Тип
Длина
Ненулевое
Описание
DIRECT
VARCHAR2
5
Направление движения по иерархии (UP; DOWN)
ID_ENTITY
NUMBER


Таблица: PACKAGEADDRESSEE
Субъекты-адресаты пакетов
Поле
Тип
Длина
Ненулевое
Описание
ID_ADDR_REC
NUMBER
NOT NULL
PK
ID_PACKAGE
NUMBER

ADDRESSEE
NUMBER


Таблица: PACKAGESTORE
Журнал полученных/отправленных файлов
Поле
Тип
Длина
Ненулевое
Описание
ID_PACKAGE
NUMBER
NOT NULL
PK
NAME_PACKAGE
VARCHAR2
300

ID_ENTITY
NUMBER

DESC_PACKAGE
VARCHAR2
300

URL_STORE
VARCHAR2
100


Таблица: PROCEDUREJOURNAL
Журнал выполнения процедур
Поле
Тип
Длина
Ненулевое
Описание
ID_JREC
NUMBER
NOT NULL
PK
ID_PROC
NUMBER

DATE_EXEC
DATE

ID_PACKAGE
NUMBER

SUBJECT_CALLER
NUMBER


Таблица: STORAGE
Хранилище содержимого пакетов
Поле
Тип
Длина
Ненулевое
Описание
ID_ITEM
NUMBER
NOT NULL
PK
ID_PACKAGE
NUMBER

NAME_ITEM
VARCHAR2
300

PACKAGE_ITEM
BLOB


Таблица: SUBJECTBF
Справочник субъектов (содержит иерархию главный-подчиненный)
Поле
Тип
Длина
Ненулевое
Описание
ID_SUBJECT
NUMBER
NUT NULL
PK
ID_PARENT
NUMBER

NAME_SUBJECT
VARCHAR2
50

DATE_SET
DATE

IS_ACTIV
NUMBER
1


Таблица: USERS
Информация о пользователях
Поле
Тип
Длина
Ненулевое
Описание
ID_USER
NUMBER
NUT NULL
PK
LOGIN
VARCHAR2
50

PSW
VARCHAR2
50

ID_SUBJECT
NUMBER

NAME_USER
VARCHAR2
100

DESC_USER
VARCHAR2
300


Таблица: TYPEENTITY
Справочник сущностей (отчет, элемент НСИ и т.д.)
Поле
Тип
Длина
Ненулевое
Описание
ID_ENTITY
NUMBER
NOT NULL
PK
NAME_ENTITY
VARCHAR2
50

TYPE_ENTITY
VARCHAR2
50

OWNER
NUMBER

DESCRIPTION
VARCHAR2
50


Таблица: TYPEOPERATION
Справочник операций
Поле
Тип
Длина
Ненулевое
Описание
ID_OPERATION
NUMBER
NOT NULL
PK
NAME_OPERATION
VARCHAR2
50

DESCRIPTION
VARCHAR2
50


Таблица: TYPEPROCEDURE
Справочник процедур
Поле
Тип
Длина
Ненулевое
Описание
ID_PROC
NUMBER
NOT NULL
PK
ID_ENTITY
NUMBER

ID_OPERATION
NUMBER

NOTIFY
NUMBER


Описание структуры сообщений
Все производимые с сервисом (pos service) операции определяются содержимым XML документа, передаваемым во входящем сообщении SOAP. Возвращаемая сервисом информация, так же представляет из себя XML документ аналогичного формата.
Каждое SOAP сообщение в элементе body должно содержать xml документ - конверт сообщения ПОЗ.
Конверт сообщения
[posEnvelope] - XML контейнер сообщений, пересылаемых между сервисом ПОЗ и клиентами сервиса. Состоит из заголовка и содержимого.
Заголовок конверта
[posEnvelopeHeader] определяет:
* Тип посылки (операции). [posEnvelopeType]
Определяет назначение посылки:
передать пакеты [SEND_PACKAGE]
запросить пакеты [ASK_PACKAGE]
передать запрос [DO_QUERY]
ответ сервиса [RESPONSE_POS_SERVICE]
Пакеты, находящиеся в посылке, несут уточняющую информацию по содержимому посылки или запросу и не должны противоречить типу посылки, указанному в заголовке, т.е. если в заголовке указан тип для передачи пакета, то содержимое ДОЛЖНО содержать только добавляемые пакеты, и НЕ МОЖЕТ нести в себе запросы и пр.

Типы посылок:
* SEND_PACKAGE - сервис получает пакет для сохранения в БД и должен вернуть заголовок этого пакета после сохранения с присвоенным идентификатором. При данной операции пакет сохраняется сервисом и производит изменение статуса.
* ASK_PACKAGE - сервис получает заголовок пакета и должен вернуть полный пакет с контентом. (в заголовке может быть заполнен только один идентификатор запрашиваемого пакета) При данной операции пакет извлекается сервисом для клиента и производит изменение статуса.
* DO_QUERY - сервис получает список заголовков пакетов, где тип пакета определяет характер запроса. Содержимое (контент) такого пакета несет в себе описание параметров запроса. Для каждого типа-запроса может определяться свой формат описания параметров и условий запроса и предоставляться соответствующий обработчик. Формат ответа на запрос, также определяется типом запроса и содержится в контенте возвращаемого клиенту пакета. При данной операции пакет не сохраняется сервисом и изменение статусов не происходит.
* RESPONSE_POS_SERVICE - ответ сервиса

Идентификационные параметры отправителя.
* идентификатор сессии {если уже определен при регистрации}
* имя пользователя
* пароль
При первом обращении к сервису Среды необходимо указать имя пользователя и пароль. В случае успешной регистрации пользователя, формируется новая сессия и в ответе сервис возвращает идентификатор вновь созданной сессии. Дальнейшие обращения к сервису возможны без указания имени пользователя и пароля, но требуется указание выданного ранее идентификатора сессии. Принадлежность пользователя к субъекту ПОЗ определяется посредством соответствующего классификатора Среды.
Содержимое конверта
Содержит список пакетов
Пакет сообщения
posPackage - содержит передаваемую информацию и метаданные по ней.
Заголовок пакета
[posPackageHeader] - определяет метаданные пакета
Состоит:
1. Идентификатор пакета
Назначается сервисом при сохранении пакета и в дальнейшем однозначно его идентифицирует.
2. Наименование пакета
Наименование пакета, заданное отправителем
3. тип пакета
Определяет содержимое пакета и его назначение.
Типы пакетов бывают пользовательскими типами и типами сервиса. Последние не могут быть заданы клиентами сервиса, но могут быть ими получены(например, пакет типа "ошибка" или пакет типа "уведомление об отправке" и т.п.). Тип пакета определяет его обработку.
REPORT - отчет ПОЗ
NCI - справочник НСИ
PROGRAM - программа "Прогноз"
NOTIFICATION_SENT - извещение об отправке пакета сервисом
NOTIFICATION_RECEIVED - извещение о получении пакета сервисом
NOTIFICATION_CORRECTED - извещение о корректировке отчета ПОЗ
NOTIFICATION_APPROVED - извещение о подтверждении отчета ПОЗ
ASK_ENTITY - запрос на получение данных от сервиса
ANSWER_ENTITY - ответ на запрос на получение данных
WARN - предупреждение
ERROR - ошибка
CRASH - критическая ошибка
4. описание пакета
произвольный текстовый комментарий
5. адресат пакета
содержит список идентификаторов субъектов,(определенных сервисом), для которых предназначен пакет. Если список пуст, адресаты пакета определяются в соответствии с иерархией субъектов и правилами движения типов пакетов по иерархии субъектов.
6. зависимые пакеты
содержит список идентификаторов пакетов, которые имеют логическую зависимость от данного пакета. Например, пакет с типом "уведомление об отправке" имеет ссылку на отправленный пакет). Логика зависимости определяется типами пакетов.
Содержимое пакета

[posPackageContent]- Включает в себя полезную передаваемую информацию.
Определяется:
1. типом
bin - двоичные, не определяемые сервисом данные
text - текстовые данные
xml - документ XML
Если тип явно не задан, считается что bin
2. mime-типом
mime-тип содержимого
3.наименованием
произвольное наименование. Если содержимое - файл, здесь д.б. имя файла.

Содержимым пакета может быть так же описание ошибки.
[posPackageFault]
Определяется:
1. Кодом ошибки
Номер ошибки. Может быть пустым
2. Сообщение ошибки
Текстовое сообщение ошибки.
3. Детализация
Дополнительная информация об ошибке. (Стек вызовов, и т.п.). Может отсутствовать.
Ошибка передается на клиента следующим способом:
1. Ошибка произошла на уровне транспорта. В этом случае ошибка возвращается согласно спецификации SOAP, посредством элемента <SOAP-ENV:Fault>.
2. Ошибка произошла на уровне конверта ПОЗ (posEnvelope). В этом случае в ответе формируется один пакет с одним из типов (WARN,ERROR,CRASH), куда вкладывается описание ошибки.
3. Ошибка произошла на уровне пакета ПОЗ (posPackage). В этом случае в ответе формируются пакеты типов (WARN,ERROR,CRASH) для каждого из принятых пакетов, вызвавших ошибку. Если пакет вызвавший ошибку имеет идентификатор пакета, то пакет с ошибкой содержит ссылку на этот идентификатор в элементе зависимых пакетов (posDependPackage).

Шаблон пакета

<?xml version="1.0"?>
<posEnvelope xmlns="http://ifirst.ru/ER/pos/POSEnvelop/1.0">

<posEnvelopeHeader>
<posEnvelopeRequestID></posEnvelopeRequestID>
<!-- Идентификатор запроса -->
<posEnvelopeType>
<!-- Тип запроса [SEND_PACKAGE; ASK_PACKAGE; DO_QUERY] -->
</posEnvelopeType>

<posClientIdentification sessionId="">
<user></user>
<pwd></pwd>
</posClientIdentification>

</posEnvelopeHeader>

<posPackages>
<posPackage>
<posPackageHeader>
<posPackageId></posPackageId>
<posPackageName></posPackageName>
<posPackageType>
<!-- Type package
[
REPORT;NCI;PROGRAM;NOTIFICATION_SENT;NOTIFICATION_RECEIVED;
NOTIFICATION_CORRECTED;NOTIFICATION_APPROVED;
CONFIRMATION; ASK_ENTITY;ANSWER_ENTITY
] -->
</posPackageType>
<posDescription></posDescription>
<posAdressees><!-- получатели пакета -->
<posSubjectId></posSubjectId>
<posSubjectId></posSubjectId>
<posSubjectId></posSubjectId>
</posAdressees>

<posDependPackage><!-- зависимые пакеты -->
<posPackageId></posPackageId>
<posPackageId></posPackageId>
<posPackageId></posPackageId>
</posDependPackage>

</posPackageHeader>

<posPackageContent>
<posContentType>bin</posContentType>
<posContentMimetype />
<posContentName />
<posContent>
<![CDATA[ ]]>
</posContent>
</posPackageContent>
</posPackage>
</posPackages>

</posEnvelope>



XSD схема конверта

<?xml version="1.0" encoding="UTF-8"?>

<xs:schema targetNamespace="http://ifirst.ru/ER/pos/POSEnvelop/1.0"
xmlns:pos="http://ifirst.ru/ER/pos/POSEnvelop/1.0"
xmlns:xs="http://www.w3.org/2001/XMLSchema"
elementFormDefault="qualified">

<xs:import namespace="http://ifirst.ru/ER/pos/POSEnvelop/1.0"
schemaLocation="D:/prj/pos/xml/POSBase.xsd" />

<xs:element name="posEnvelope">
<xs:complexType>
<xs:sequence>
<xs:element name="posEnvelopeHeader"
type="pos:POSEnvelopeHeader_Type" />
<xs:element name="posPackages"
type="pos:POSPackages_Type" />
</xs:sequence>
</xs:complexType>
</xs:element>

<xs:complexType name="POSEnvelopeHeader_Type">
<xs:sequence>
<xs:element name="posEnvelopeRequestID" type="xs:string" />
<xs:element name="posEnvelopeType"
type="pos:POSEnvelopeType_Type" />
<xs:element name="posClientIdentification"
type="pos:ClientIdentification_Type" />
</xs:sequence>
</xs:complexType>

<xs:complexType name="ClientIdentification_Type">
<xs:sequence>
<xs:element name="user" type="xs:string" />
<xs:element name="pwd" type="xs:string" />
</xs:sequence>
<xs:attribute name="sessionId" type="xs:string" use="required" />
</xs:complexType>

<xs:simpleType name="POSEnvelopeType_Type">
<xs:restriction base="xs:string">
<xs:enumeration value="SEND_PACKAGE" />
<xs:enumeration value="ASK_PACKAGE" />
<xs:enumeration value="DO_QUERY" />
<xs:enumeration value="RESPONSE_POS_SERVICE" />
</xs:restriction>
</xs:simpleType>

<xs:complexType name="POSPackages_Type">
<xs:sequence>
<xs:element name="posPackage" type="pos:POSPackage_Type"
minOccurs="0" maxOccurs="unbounded" />
</xs:sequence>
</xs:complexType>

<xs:complexType name="POSPackage_Type">
<xs:sequence>
<xs:element name="posPackageHeader"
type="pos:POSPackageHeader_Type" />
<xs:choice>
<xs:element name="posPackageContent"
type="pos:POSPackageContent_Type" />
<xs:element name="posPackageFault"
type="pos:POSPackageFault_Type" />
</xs:choice>
</xs:sequence>
</xs:complexType>


<xs:complexType name="POSPackageContent_Type">
<xs:sequence>
<xs:element name="posContentType"
type="pos:POSContentType_Type" />
<xs:element name="posContentMimetype" type="xs:string" />
<xs:element name="posContentName" type="xs:string" />
<xs:element name="posContent" type="xs:string" />
<!-- Содержит раздел CDATA !!! -->
</xs:sequence>
</xs:complexType>


<xs:simpleType name="POSContentType_Type">
<xs:restriction base="xs:string">
<xs:enumeration value="bin" />
<xs:enumeration value="text" />
<xs:enumeration value="xml" />
</xs:restriction>
</xs:simpleType>


<xs:complexType name="POSPackageFault_Type">
<xs:sequence>
<xs:element name="posFaultCode" type="xs:string" />
<xs:element name="posFaultMessage" type="xs:string" />
<xs:element name="posFaultDetail" type="xs:string"
minOccurs="0" />
</xs:sequence>
</xs:complexType>


</xs:schema>



Формат запросов
В настоящее время сервисом поддерживаются следующие виды запросов:
1. Запрос заголовков пакетов
2. Запрос субъектов
3. Запрос типов пакетов
4. Запрос заголовка пакета, отправленного указанным субъектом последним
5. Запрос заголовков пакетов с указанными идентификаторами
6. Запрос "Статистика по отчетам"
7. Запрос "Статистика по НСИ"


Все запросы выполняются от имени и для пользователя, зарегистрированного в сервисе и отправившего запрос.
1. Запрос заголовков пакетов:
Параметризуется необязательным списком типов пакетов и типом запрашиваемого списка: "отправленные пакеты", "полученные пакеты", "пакеты доступные для получения". Возвращает список заголовков пакетов, найденных в соответствии с указанными параметрами запроса.
2. Запрос субъектов
Параметризуется типом запрашиваемого списка субъектов
"вышестоящая организация"
"подчиненные организации"
"указанные идентификатором субъекты"
При указании последнего типа списка задается список идентификаторов субъектов, определенных сервисом. Возвращается список субъектов, найденных по указанным параметрам.
3. Запрос типов пакетов
Параметризуется определением списка типов пакетов:
"все типы"
"типы, которые может устанавливать клиент сервиса"
"типы, которые устанавливает сервис"
Возвращается список типов пакетов, найденных по указанным параметрам.
4. Запрос заголовка пакета, отправленного указанным субъектом последним. Параметризуется типом пакета и идентификатором субъекта, отправившего пакет. Возвращается заголовок пакета.
5. Запрос заголовков пакетов с указанными идентификаторами
Параметризуется списком идентификаторов пакетов. Возвращает список заголовков указанных пакетов. При считывании пакетов их статусы не изменяются.
6. Запрос "Статистика по отчетам"
Параметризуется типом пакета с отчетом.
7. Запрос "Статистика по НСИ"
Параметризуется определением списка субъектов-получателей пакетов с НСИ.

XSD схема запросов
<?xml version="1.0" encoding="UTF-8"?>
<xs:schema targetNamespace="http://ifirst.ru/ER/pos/POSEnvelop/1.0"
xmlns:xs="http://www.w3.org/2001/XMLSchema"
xmlns:pos="http://ifirst.ru/ER/pos/POSEnvelop/1.0"
elementFormDefault="qualified" attributeFormDefault="unqualified">

<xs:import namespace="http://ifirst.ru/ER/pos/POSEnvelop/1.0"
schemaLocation="D:/prj/pos/xml/POSBase.xsd" />

<xs:element name="posQuery">
<xs:complexType name="POSQuery_Type">
<xs:sequence>
<xs:element name="posQueryType"
type="pos:POSQueryType_Type" />
<xs:choice>
<xs:element name="posQueryParams"
type="pos:POSQueryParams_Type" />
<xs:element name="posQueryResult"
type="pos:POSQueryResult_Type" />
</xs:choice>
</xs:sequence>
</xs:complexType>
</xs:element>

<xs:simpleType name="POSQueryType_Type">
<xs:restriction base="xs:string">
<xs:enumeration value="ASK_PACKAGE_HEADER" />
<xs:enumeration value="ASK_SUBJECT" />
<xs:enumeration value="ASK_PACKAGE_TYPE" />
<xs:enumeration value="ASK_LAST_PACKAGE_HEADER" />
<xs:enumeration value="ASK_PACKAGE_TYPE" />
<xs:enumeration value="STAT_STATUS_NCI" />
<xs:enumeration value="STAT_STATUS_REPORT" />
<xs:enumeration value="ASK_INDICATE_PACKAGE_HEADER" />
</xs:restriction>
</xs:simpleType>

<xs:simpleType name="POSTypeStatePackage_Type">
<xs:restriction base="xs:string">
<xs:enumeration value="SENT_PACK" />
<xs:enumeration value="RECEIVED_PACK" />
<xs:enumeration value="UNDELIVERED_PACK" />
</xs:restriction>
</xs:simpleType>

<xs:simpleType name="POSTypeInterpretSubject_Type">
<xs:restriction base="xs:string">
<xs:enumeration value="PARENT_SUBJECT" />
<xs:enumeration value="CHILDREN_SUBJECT" />
<xs:enumeration value="INDICATE_SUBJECT" />
<xs:enumeration value="ALL_SUBJECT" />
</xs:restriction>
</xs:simpleType>

<xs:simpleType name="POSPartTypePackage">
<xs:restriction base="xs:string">
<xs:enumeration value="ALL_TYPE" />
<xs:enumeration value="USER_TYPE" />
<xs:enumeration value="SERVICE_TYPE" />
</xs:restriction>
</xs:simpleType>

<xs:complexType name="POSQueryParams_Type">
<xs:choice>
<!-- Параметры запроса заголовков пакетов -->
<xs:element name="askPackageHeaderParam">
<xs:complexType>
<xs:sequence>
<xs:element name="posPackageTypes">
<xs:complexType>
<xs:sequence>
<xs:element name="posPackageType"
type="pos:POSPackageType_Type" minOccurs="0"
maxOccurs="unbounded" />
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="posTypeStatePackage"
type="pos:POSTypeStatePackage_Type" />
</xs:sequence>
</xs:complexType>
</xs:element>
<!-- Параметры запроса субъектов -->
<xs:element name="askSubjectParam">
<xs:complexType>
<xs:sequence>
<xs:element name="posTypeInterpretSubject"
type="pos:POSTypeInterpretSubject_Type" />
<xs:element name="posSubjectsId">
<xs:complexType>
<xs:sequence>
<xs:element ref="pos:posSubjectId"
minOccurs="0" maxOccurs="unbounded" />
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
<!-- Запрос типов пакетов -->
<xs:element name="askPackageTypeParam">
<xs:complexType>
<xs:sequence>
<xs:element name="posPartTypePackage"
type="pos:POSPartTypePackage" />
</xs:sequence>
</xs:complexType>
</xs:element>
<!-- Запрос заголовка пакета, отправленного указанным субъектом последним -->
<xs:element name="askLastPackageHeaderParam">
<xs:complexType>
<xs:sequence>
<xs:element name="packageTypes">
<xs:complexType>
<xs:sequence>
<xs:element name="packageType"
type="pos:POSPackageType_Type" />
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="subjectSender"
type="pos:POSSubject_Type" />
</xs:sequence>
</xs:complexType>
</xs:element>
<!-- Запрос заголовков пакетов с указанными идентификаторами -->
<xs:element name="askIndicatePackageHeaderParam">
<xs:complexType>
<xs:sequence>
<xs:element ref="pos:posPackageId"
maxOccurs="unbounded" />
</xs:sequence>
</xs:complexType>
</xs:element>
<!-- Запрос статуса пакета с НСИ-->
<xs:element name="statStatusNciParam">
<xs:complexType>
<xs:sequence>
<xs:element name="addressees">
<xs:complexType>
<xs:sequence>
<xs:element ref="pos:posSubjectId"
minOccurs="0" maxOccurs="unbounded" />
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
<!-- Запрос статуса пакета с отчетом -->
<xs:element name="statStatusReportParam">
<xs:complexType>
<xs:sequence>
<xs:element name="posPackageType"
type="pos:POSPackageType_Type" />
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:choice>
</xs:complexType>


<xs:complexType name="POSQueryResult_Type">
<xs:choice>
<!-- Ответ на запрос заголовков пакетов -->
<xs:element name="askPackageHeaderResult">
<xs:complexType>
<xs:sequence>
<xs:element name="posPackageHeader"
type="pos:POSPackageHeader_Type" minOccurs="0"
maxOccurs="unbounded" />
</xs:sequence>
</xs:complexType>
</xs:element>
<!-- Ответ на запрос получения субъектов -->
<xs:element name="askSubjectResult">
<xs:complexType>
<xs:sequence>
<xs:element name="posSubject"
type="pos:POSSubject_Type" minOccurs="0" maxOccurs="unbounded" />
</xs:sequence>
</xs:complexType>
</xs:element>
<!-- Ответ на запрос о типах пакетов -->
<xs:element name="askPackageTypeResult">
<xs:complexType>
<xs:sequence>
<xs:element name="posTypePackageExt"
type="pos:POSTypePackageExt_Type" minOccurs="0"
maxOccurs="unbounded" />
</xs:sequence>
</xs:complexType>
</xs:element>
<!-- Ответ на запрос заголовка пакета,отправленного указанным субъектом последним -->
<xs:element name="askLastPackageHeaderResult">
<xs:complexType>
<xs:sequence>
<xs:element name="posPackageHeader"
type="pos:POSPackageHeader_Type" minOccurs="0" />
</xs:sequence>
</xs:complexType>
</xs:element>
<!-- Ответ на запрос заголовков пакетов с указанными идентификаторами -->
<xs:element name="askIndicatePackageHeaderResult">
<xs:complexType>
<xs:sequence>
<xs:element name="posPackageHeader"
type="pos:POSPackageHeader_Type" minOccurs="0"
maxOccurs="unbounded" />
</xs:sequence>
</xs:complexType>
</xs:element>
<!-- Запрос статуса пакета с НСИ-->
<xs:element name="statStatusNciResult">
<xs:complexType>
<xs:sequence>
<xs:element name="statusNCIItem" minOccurs="0"
maxOccurs="unbounded">
<xs:complexType>
<xs:sequence>
<xs:element ref="pos:posPackageId" />
<xs:element name="posPackageName"
type="xs:string" />
<xs:element name="posSubjectSender"
type="pos:POSSubject_Type" />
<xs:element
name="dateSendByHigherSubject" type="xs:dateTime" />
<xs:element
name="posSubjectReceiver" type="pos:POSSubject_Type" />
<xs:element
name="dateReceiveByLowerSubject" type="xs:dateTime" />
<!-- "CCYY-MM-DDThh:mm:ss" -->
<xs:element name="statusNCI">
<xs:simpleType>
<xs:restriction
base="xs:string">
<xs:enumeration
value="STATUS_RECEIVED" />
<xs:enumeration
value="STATUS_NOT_RECEIVED" />
</xs:restriction>
</xs:simpleType>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
<!-- Запрос статуса пакета с отчетом -->
<xs:element name="statStatusReportResult">
<xs:complexType>
<xs:sequence>
<xs:element name="statusReportItem"
minOccurs="0" maxOccurs="unbounded">
<xs:complexType>
<xs:sequence>
<xs:element ref="pos:posPackageId" />
<xs:element name="posPackageName"
type="xs:string" />
<xs:element name="posSubjectSender"
type="pos:POSSubject_Type" />
<xs:element
name="dateSendByLowerSubject" type="xs:dateTime" />
<xs:element
name="posSubjectReceiver" type="pos:POSSubject_Type" />
<xs:element
name="dateReceiveByHigherSubject" type="xs:dateTime" />
<xs:element
name="posStatusReport">
<xs:complexType>
<xs:sequence>
<xs:element
name="posStatusReportName">
<xs:simpleType>
<xs:restriction
base="xs:string">
<xs:enumeration
value="STATUS_NOT_RECEIVED_REPORT" />
<xs:enumeration
value="STATUS_RECEIVED_REPORT" />
<xs:enumeration
value="STATUS_CORRECTED_REPORT" />
<xs:enumeration
value="STATUS_APPROVED_REPORT" />
</xs:restriction>
</xs:simpleType>
</xs:element>
<xs:element
name="posStatusReportDateSet" type="xs:dateTime" />
<xs:element
ref="pos:posPackageId" /><!-- Пакет, который изменил статус -->
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:choice>
</xs:complexType>
</xs:schema>



XSD схема с общими базовыми типами
<?xml version="1.0" encoding="UTF-8"?>
<xs:schema targetNamespace="http://ifirst.ru/ER/pos/POSEnvelop/1.0"
xmlns:xs="http://www.w3.org/2001/XMLSchema"
xmlns:pos="http://ifirst.ru/ER/pos/POSEnvelop/1.0"
elementFormDefault="qualified" attributeFormDefault="unqualified">

<xs:simpleType name="POSPackageType_Type">
<xs:restriction base="xs:string">
<xs:enumeration value="REPORT_T1" />
<xs:enumeration value="REPORT_T2" />
<xs:enumeration value="NCI" />
<xs:enumeration value="PROGRAM" />
<xs:enumeration value="NOTIFICATION_SENT" />
<xs:enumeration value="NOTIFICATION_RECEIVED" />
<xs:enumeration value="NOTIFICATION_CORRECTED" />
<xs:enumeration value="NOTIFICATION_APPROVED" />
<xs:enumeration value="CONFIRMATION" />
<xs:enumeration value="ASK_ENTITY" />
</xs:restriction>
</xs:simpleType>

<xs:simpleType name="POSTypePackageBase_Type">
<xs:restriction base="xs:string">
<xs:enumeration value="REPORT" />
<xs:enumeration value="NCI" />
<xs:enumeration value="PROGRAM" />
<xs:enumeration value="NOTIFICATION" />
<xs:enumeration value="ASK" />
<xs:enumeration value="ANSWER" />
</xs:restriction>
</xs:simpleType>

<xs:simpleType name="POSTypePackageOwner_Type">
<xs:restriction base="xs:nonNegativeInteger">
<xs:enumeration value="0" />
<xs:enumeration value="1" />
</xs:restriction>
</xs:simpleType>

<xs:complexType name="POSSubject_Type">
<xs:sequence>
<xs:element ref="pos:posSubjectId" />
<xs:element name="posSubjectName" type="xs:string" />
</xs:sequence>
</xs:complexType>

<xs:element name="posPackageId" type="xs:string" />
<xs:element name="posSubjectId" type="xs:string" />

<xs:complexType name="POSPackageHeader_Type">
<xs:sequence>
<xs:element ref="pos:posPackageId" />
<xs:element name="posPackageName" type="xs:string" />
<xs:element name="posPackageType"
type="pos:POSPackageType_Type" />
<xs:element name="posDescription" type="xs:string" />
<xs:element name="posAdressees"
type="pos:POSAdressees_Type" />
<xs:element name="posDependPackage"
type="pos:POSDependPackage_Type" />
</xs:sequence>
</xs:complexType>

<xs:complexType name="POSTypePackageExt_Type">
<xs:sequence>
<xs:element name="posTypePackageId" type="xs:string" />
<xs:element name="posTypePackageName"
type="pos:POSPackageType_Type" />
<xs:element name="posTypePackageBase"
type="pos:POSTypePackageBase_Type" />
<xs:element name="posTypePackageOwner"
type="pos:POSTypePackageOwner_Type" />
<xs:element name="posTypePackageDescription"
type="xs:string" />
</xs:sequence>
</xs:complexType>

<xs:complexType name="POSAdressees_Type">
<xs:sequence>
<xs:element ref="pos:posSubjectId" minOccurs="0"
maxOccurs="unbounded" />
</xs:sequence>
</xs:complexType>

<xs:complexType name="POSDependPackage_Type">
<xs:sequence>
<xs:element ref="pos:posPackageId" minOccurs="0"
maxOccurs="unbounded" />
</xs:sequence>
</xs:complexType>

</xs:schema>



Шаблоны запросов
<?xml version="1.0"?>
<!--======== XML формат запросов данных ============-->
<!-- Запрос заголовков пакетов -->
<posQuery>
<posQueryType>ASK_PACKAGE_HEADER;</posQueryType>
<posQueryParams>
<askPackageHeaderParam>
<posPackageTypes>
<!-- если не указан ни один тип, считается, что запрашиваются все типы -->
<posPackageType>
</posPackageType>
</posPackageTypes>
<posTypeStatePackage>
<!--
SENT - отправленные
RECEIVED - полученные
UNDELIVERED - недоставленные
-->
</posTypeStatePackage>
</askPackageHeaderParam>
</posQueryParams>
</posQuery>


<?xml version="1.0"?>
<!-- Запрос субъектов -->
<posQuery>
<posQueryType>ASK_SUBJECT;</posQueryType>
<posQueryParams>
<askSubjectParam>
<posTypeInterpretSubject>
<!--
PARENT_SUBJECT - родительский субъект (subjectsId список игнорируется)
CHILDREN_SUBJECT - подчиненные субъекты (subjectsId список игнорируется)
INDICATE_SUBJECT - указанные субъекты из списка идентификаторов
-->
</posTypeInterpretSubject>
<posSubjectsId>
<posSubjectId><!-- идентификаторы запрашивамых субъектов -->
</posSubjectId>
</posSubjectsId>
</askSubjectParam>
</posQueryParams>
</posQuery>

<?xml version="1.0"?>
<!-- Запрос типов пакетов -->
<posQuery>
<posQueryType>ASK_PACKAGE_TYPE</posQueryType>
<posQueryParams>
<askPackageTypeParam>
<posPartTypePackage>
<!--
ALL_TYPE - все типы
USER_TYPE - клиентские типы
SERVICE_TYPE - внутренние типы сервиса
-->
</posPartTypePackage>
</askPackageTypeParam>
</posQueryParams>
</posQuery>


<?xml version="1.0"?>
<!-- Запрос заголовка пакета, отправленного указанным субъектом последним -->
<posQuery>
<posQueryType>ASK_LAST_PACKAGE_HEADER</posQueryType>
<posQueryParams>
<askLastPackageHeaderParam>
<packageTypes>
<packageType></packageType>
</packageTypes>
<subjectSender></subjectSender>
</askLastPackageHeaderParam>
</posQueryParams>
</posQuery>


<?xml version="1.0"?>
<!-- Запрос заголовков пакетов с указанными идентификаторами -->
<posQuery>
<posQueryType>ASK_INDICATE_PACKAGE_HEADER</posQueryType>
<posQueryParams>
<askIndicatePackageHeaderParam>
<posPackageId></posPackageId>
</askIndicatePackageHeaderParam>
</posQueryParams>
</posQuery>


<?xml version="1.0"?>
<!-- Запрос статуса пакета с НСИ-->
<posQuery>
<posQueryType>STAT_STATUS_NCI</posQueryType>
<posQueryParams>
<statStatusNciParam>
<addressees>
<posSubjectId></posSubjectId>
</addressees>
</statStatusNciParam>
</posQueryParams>
</posQuery>


<?xml version="1.0"?>
<!-- Запрос статуса пакета с отчетом -->
<posQuery>
<posQueryType>STAT_STATUS_REPORT</posQueryType>
<posQueryParams>
<statStatusReportParam>
<posPackageType></posPackageType>
</statStatusReportParam>
</posQueryParams>
</posQuery>

Порядок установки СЭВ
Необходимое программное обеспечение
1. Tomcat 5.0.28
2. J2SDK v 1.4.2 и выше.
3. Oracle Database 9i.
4. Oracle UDDI v. 9.0.2.3
5. Oracle BPEL v. 2.0.10
Создание и инициализация баз данных
Необходимо создать в Oracle схему БД для создания таблиц БД и инициализации начальных данных БД. Для этого последовательно выполните следующие скрипты:
1. db_script.sql
2. init_script.sql
Настройка сервера Tomcat
В папке конфигураций (TOMCAT_HOME\conf\ ) создайте файл jaas.conf:

IfirstAuth {
ru.ifirst.auth.jaas.IfirstLoginModule required;
};

В параметрах JVM, из-под которой запускается Tomcat (файл setenv.sh), укажите:

-Djavax.wsdl.factory.WSDLFactory=com.ibm.wsdl.factory.WSDLFactoryImpl
-Djava.security.auth.login.config=%CATALINA_HOME%/conf/jaas.conf

Настройка Jakarta Slide
В папке конфигураций (JakartaSlide\ conf\ ) в файле server.xml необходимо внести следующие изменения:
добавить URIEncoding="UTF-8"
присвоить значение <Connector port="28080"
Необходимо зайти в My Network Places, нажать Add network place и прописать там следующий URL: http://HOST_NAME:28080/slide/.
( На запрос пароля введите: логин - root, пароль - root.)
При входе в созданный Network Place должно появляться окно со списком папок.
Необходимо зайти в папку files и создать там новую папку - ER.
Инсталляция приложений
При запущенном сервере Tomcat в папку проектов (TOMCAT_HOME\webapps) выложите файл проекта ER.war. В папке проектов должна автоматически создаться папка ER. Если этого не произошло, необходимо перезапустить Tomcat.
После создания папки необходимо отредактировать файл hibernate.properties, находящийся в подкаталоге ER\WEB-INF\classes, для подключения к серверу БД.
Необходимо в этом файле найти строки, отвечающие за подключение к серверу, и изменить их в соответствии с настройками БД. Для просмотра синтаксиса настроек см. Приложение 2.

Необходимо в файле WEB-INF\classes\system.conf найти секцию вида (описание секции см. ниже):

<repository id='rdbms-rdfs-db'>
<title>MySQL RDFS Test DB</title>
<sailstack>
<sail
class='org.openrdf.sesame.sailimpl.sync.SyncRdfSchemaRepository'/>
<sail class='org.openrdf.sesame.sailimpl.rdbms.RdfSchemaRepository'>
<param name='user' value='user name'/>
<param name='password' value='password'/>
<param name='jdbcDriver'
value='oracle.jdbc.driver.OracleDriver'/>
<param name='jdbcUrl'
value='jdbc:oracle:thin: HOST_NAME:PORT_NUMBER:ORACLEDB'/>
</sail>
</sailstack>
...
</repository>


и подставить нужные значения jdbcUrl, username, password.

Задать нужные значения параметров в файле ER/WEB-INF/conf/es.properties в соответствие с описанием данным в Приложении 2.
Для получения доступа к Jakarta Slide необходимо в файле ER\WEB-INF\ classes\ slide.properties указать нужный URL вида:

URL: http://HOST_NAME:28080/slide/files/
После произведённых настроек необходимо перезапустить Tomcat для того, чтобы изменения вступили в силу.

Проверка работоспособности
Точкой входа в систему является URL следующего вида
http://HOST_NAME:PORT_NUMBER/ER/

Создание необходимых групп в AS портала
В AS портала должна быть заведена группа привилегий (по умолчанию - uddi. Выставляется в файле es.properties, параметр uddi.classname). В группе должны быть заведены 2 привилегии - для публикации (по умолчанию publish. Выставляется в файле es.properties, параметр uddi.publishrolename) и для администрирования (по умолчанию admin. Выставляется в файле es.properties, параметр uddi.publishrolename).
Настройка модуля авторизации Oracle UDDI
Поместить файл uddiUM.jar в директорию \orabpel\system\appserver\oc4j\j2ee\home\applib\
Если в директории отсутствует файл soap.jar - скопировать его из проекта
В файле \orabpel\system\appserver\oc4j\j2ee\home\application-deployments\orauddi\orion-application.xml необходимо:

закомметировать блок

<!-- <jazn provider="XML" location="jazn-data.xml" /> -->

закомментировать все имеющиеся блоки <user-manager> ... </user-manager>;
закомметировать блок
<!-- <principals .... /> -->
добавить блок

<user-manager class="ru.ifirst.uddi.auth.UddiUserManager">
<property name="aswsendpoint" value="http://localhost:8080/ER/services/ASService" />
<property name="asuddigroup" value="uddi" />
<property name="asuddipublishname" value="publish" />
<property name="asuddiadminname" value="admin" />
<property name="asudditimeout" value="600000" />
</user-manager>


где
aswsendpoint - URL к Веб сервису сервиса авторизации
asuddigroup - Название группы привилегий UDDI (создана в п.0)
asuddipublishname - Название привилегии для публикации в реестре
asuddiadminname - Название привилегии для администрирования реестра
asudditimeout - Таймаут бездействия в uddi (мс)

В разделах <security-role-mapping> привязка должна осуществляться к группам с названиями uddi_administrators и uddi_publishers.
В uddi версии 9.0.2.3 (или 9.0.3) ничего менять не надо.
В uddi версии 9.0.4:

Было:
<security-role-mapping name="uddiadmin">
<group name="uddiadmin" />
</security-role-mapping>
<security-role-mapping name="uddipublisher">
<group name="uddipublisher" />
<group name="uddiadmin" />
</security-role-mapping>


Должно быть:

<security-role-mapping name="uddiadmin">
<group name="uddi_administrators" />
</security-role-mapping>
<security-role-mapping name="uddipublisher">
<group name="uddi_publishers" />
<group name="uddi_administrators" />
</security-role-mapping>


Перезапустить OAS сервер, на котором установлен Oracle UDDI.
Файлы в поставке
ER.war - Архив проекта.
db_script.sql - Скрипт создания схемы БД.
init_script.sql - Скрипт инициализации БД.
uddiUM.jar - модуль авторизации для Oracle UDDI
Описание конфигурационных файлов.

1. Конфигурационный файл ER/WEB-INF/conf/es.properties.

Название параметра
Описание
bpel.ora.orabpel.platform = oc4j_10g
Платформа Oracle BPEL PM
bpel.ora.java.naming.factory.initial=com.evermind.server.rmi.RMIInitialContextFactory
Имя класса для InitialContextFactory
bpel.ora.java.naming.provider.url=ormi://localhost/orabpel
URL для ormi подключения к BPEL
bpel.ora.java.naming.security.principal = admin
Имя пользователя для подключения к BPEL PM

<<

стр. 4
(всего 5)

СОДЕРЖАНИЕ

>>