Самый элегантный способ заставить атрибут XSD принимать два типа (xs: string и xs: long)? - PullRequest
0 голосов
/ 18 декабря 2018

Я получил спецификацию для службы SOAP, в которой отправляемый запрос будет содержать следующее:

<eventContexts>
    <eventContext name="eventType" value="Unwind"/>
    <eventContext name="referenceId" value="26214"/>
</eventContexts>

Я пытаюсь смоделировать этот объект в XSD, но заблокирован ввыбор type для атрибута value.Как вы можете видеть в приведенном выше примере, это может быть xs:string (регистр Unwind) или xs:long (регистр 26214).

Какой тип я должен выбрать, чтобы атрибут value принимал как xs:string, так и xs:long?Пока я могу думать о двух вещах:

1) Должен ли я создать два разных атрибута, например stringValue и longValue:

<xs:complexType name="XmlEventContext">
    <xs:attribute name="name" type="xs:string"/>Sh
    <xs:attribute name="stringValue" type="xs:string" minOccurs="0"/>
    <xs:attribute name="longValue" type="xs:long" minOccurs="0"/>   
</xs:complexType>

... и позволить клиенту отправитьмне хорошее значение в хорошем атрибуте?(Мне это некрасиво, но я не большой эксперт).

2) Стоит ли расширять автоматически сгенерированный класс XmlEventContext пользовательским классом, который принимает value как xs:string изатем пытается привести его к xs:long?

public class XmlEventContextComplete extends XmlEventContext {
    //code to manage a property referenceId which can either be long or string
}

3) Любое другое более элегантное предложение?

Заранее спасибо!

1 Ответ

0 голосов
/ 18 декабря 2018

Требуется тип, который может быть либо long, либо конкретным перечисляемым string.

Это должно охватывать этот случай:

<xs:complexType name="xmlEventContext">
    <xs:attribute name="name" type="xs:string" />
    <xs:attribute name="value" type="longOrUnwind" />
</xs:complexType>

<xs:simpleType name="longOrUnwind">
    <xs:union memberTypes="xs:long unwindConstant" />
</xs:simpleType>

<xs:simpleType name="unwindConstant">
    <xs:restriction base="xs:string">
        <xs:enumeration value="Unwind" />
    </xs:restriction>
</xs:simpleType>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...