generi c тип xsd как в java - PullRequest
       47

generi c тип xsd как в java

0 голосов
/ 18 марта 2020

Вопрос: в определении объектов xsd можно вести себя так же, как в Java generi c?

Так что в основном мне нужен метод Soap для возврата xml Тип объекта должен быть конкретным типом возвращаемого объекта (одного из дочерних элементов), а не родительским объектом, базовым типом. По сути, wsdl говорит, что возвращаемый объект является родительским объектом или одним из дочерних объектов.

Более конкретно:

Java:

  public <T extends BaseObject> T getData(){
    ....
    return oneOfTheChildObjectsOfBaseObject;
   }

xsd:

           <xs:complexType name="baseObject">
             <xs:complexContent>
               <xs:sequence>
                 <xs:element name="element1" type="xs:string"/>
                </xs:sequence>
              </xs:complexContent>
            </xs:complexType>


    <xs:complexType name="Child1">
        <xs:complexContent>
         <xs:extension base="tns:baseObject">
                      .... specific child props
          </xs:extension>
        </xs:complexContent>
      </xs:complexType>
      <xs:complexType name="Child2">
        <xs:complexContent>
         <xs:extension base="tns:baseObject">
                   .... specific child props
          </xs:extension>
        </xs:complexContent>
      </xs:complexType>

1 Ответ

1 голос
/ 19 марта 2020

Сообщение SOAP - это просто документ XML с конвертом, соответствующим схеме SOAP, и тегом <body>, соответствующим схеме для одного из типов операций.

Стандартный способ сделать то, что вам требуется в XML, - указать конкретный тип элемента с помощью атрибута xsi: type. Указанный вами тип должен быть получен из базового типа, в противном случае процессор XML должен сообщить об ошибке. В зависимости от того, как устроен XSD, могут быть и другие правила о том, какие типы разрешены.

Для полноты вы также можете прочитать о группах замещения - они предлагают эквивалентные механизмы для элементов, а не для типов.

...