В сервисе SOA можно привязать процесс к сложному типу XSD, а не к элементу

Мы создаем структуру XSD на уровне предприятия для обработки общих элементов нашей системы. В качестве примера у нас есть следующий сложный тип:

<xs:complexType name="Person">
    <xs:attribute name="First" type="xs:string" />
    <xs:attribute name="Last" type="xs:string" />
</xs:complexType>

Из этого сложного типа мы получаем следующие два элемента:

<xs:element name="Employee">
    <xs:extension base="Person" />
    <xs:attribute name="SSN" type="xs:string" />
</xs:element>

<xs:element name="Customer">
    <xs:extension base="Person" />
    <xs:attribute name="CustomerID" type="xs:integer" />
</xs:element>

Мы хотели бы иметь сервис SOA, который будет привязан к сложному типу "Person", а не к конкретной реализации, такой как "Employee" или "Customer". По сути, мы хотели бы обрабатывать входные данные SOA как полиморфные объекты, а не как конкретные реализации.

Есть ли способ связать BPEL WSDL с абстрактным типом, а не с конкретным элементом?

1 ответ

XML-схема complexType Элемент

Аннотация
Необязательный. Указывает, можно ли использовать сложный тип в экземпляре документа. Значение True указывает, что элемент не может использовать этот сложный тип напрямую, но должен использовать сложный тип, производный от этого сложного типа. По умолчанию установлено значение false. Ссылка

Элемент расширения XML-схемы

Элемент расширения расширяет существующий элемент simpleType или complexType. Ссылка

<?xml version="1.0" encoding="UTF-8"?>
<xs:schema elementFormDefault="qualified" targetNamespace="yourNameSpace"
    xmlns="yourNameSpace" xmlns:xs="http://www.w3.org/2001/XMLSchema">

    <xs:complexType name="Person" abstract="true">
        <xs:attribute name="First" type="xs:string"/>
        <xs:attribute name="Last" type="xs:string"/>
    </xs:complexType>

    <xs:complexType name="Employee">
        <xs:complexContent>
            <xs:extension base="Person">
                <xs:attribute name="SSN" type="xs:string"/>
            </xs:extension>
        </xs:complexContent>
    </xs:complexType>

    <xs:complexType name="Customer">
        <xs:complexContent>
            <xs:extension base="Person">
                <xs:attribute name="CustomerID" type="xs:integer"/>
            </xs:extension>
        </xs:complexContent>
    </xs:complexType>

</xs:schema>

Веб-сервис Oracle SOA не распознает абстрактный тип как пригодный для использования тип.

Схема XML любой элемент

Элемент any позволяет автору расширять XML-документ элементами, не указанными в схеме. Ссылка

см. атрибут namespace для добавления ограничений.

<?xml version="1.0" encoding="UTF-8"?>
<xs:schema elementFormDefault="qualified" targetNamespace="yourNameSpace"
    xmlns="yourNameSpace" xmlns:xs="http://www.w3.org/2001/XMLSchema">

    <xs:element name="Person" type="Person"/> 
    <xs:complexType name="Person">
        <xs:sequence>
            <xs:any minOccurs="0" namespace="##targetNamespace"/>
        </xs:sequence>
        <xs:attribute name="First" type="xs:string"/>
        <xs:attribute name="Last" type="xs:string"/>
    </xs:complexType>

    <xs:complexType name="Employee">
        <xs:attribute name="SSN" type="xs:string"/>
    </xs:complexType>

    <xs:complexType name="Customer">
        <xs:attribute name="CustomerID" type="xs:integer"/>
    </xs:complexType>
</xs:schema>
Другие вопросы по тегам