Ограничение перечисления WSDL с парами ключ / значение - PullRequest
6 голосов
/ 16 марта 2012

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

Эти перечисления очень похожи на настройку выбора / опции HTML;Я ожидаю, что определенное значение будет возвращено, но метка этого значения также должна быть раскрыта с использованием WSDL.

Пример: клиент желает добавить страховой полис в отношении своего дома и, следовательно, должен указатьтип здания.

<xsd:restriction base="xsd:string">
  <xsd:enumeration value="00001" />
  <xsd:enumeration value="00002" />
  <xsd:enumeration value="00003" />
</xsd:restriction>

Однако клиент еще не понимает, что это за значения 1, 2 и 3.Итак, что-то вроде этого:

<xsd:restriction base="xsd:string">
  <xsd:enumeration value="00001" label="Brick and mortar" />
  <xsd:enumeration value="00002" label="Straw" />
  <xsd:enumeration value="00003" label="Aircastle" />
</xsd:restriction>

было бы здорово, если бы клиент мог использовать их для отображения этих меток для потребителя.

Существует ли стандартная аннотация / синтаксис WSDL для этой конструкции?

1 Ответ

7 голосов
/ 17 марта 2012

Существует ли стандартная аннотация / синтаксис WSDL для этой конструкции?

Боюсь, что нет. Схема XML enumeration используется для ограничения значения в пределах указанного набора возможных значений. Когда ваш клиент отправляет вам запрос, элементу с типом ограничения будет разрешено иметь (в вашем случае) значение 00001, 00002 или 00003, иначе оно будет недействительным.

Ограничение указывает только значения, вы не можете добавлять метки. В лучшем случае вы можете добавить <annotation>, но это будет просто документация. В пользовательском интерфейсе клиента каждый клиент должен сказать, что 00001 на самом деле "кирпич и миномет", а 00002 - "солома" и т. Д.

Если вы не хотите этого делать и вместо этого хотите возвращать метки, тогда вам нужен немного более сложный объект, возможно, что-то вроде этого:

<option>
  <key>00001</key>
  <label>Brick and mortar</label>
</option>

Вы предоставляете метку и ограничиваете ключ такой схемой:

<xsd:simpleType name="ValuesType">
  <xsd:restriction base="xsd:string">
    <xsd:enumeration value="00001" />
    <xsd:enumeration value="00002" />
    <xsd:enumeration value="00003" />
  </xsd:restriction>
</xsd:simpleType>

<xsd:complexType name="OptionType">
    <xsd:sequence>
      <xsd:element name="key" type="ValuesType" />
      <xsd:element name="label" type="xsd:string" />
    </xsd:sequence>
</xsd:complexType>

Вы можете вернуть список опций клиентам, и они могут представить его в интерфейсе с key в качестве значения и label в качестве текста опций во <select> входах, а по запросу вы получите выбранное значение (т. е. выбранное key).

...