Лучший способ сделать массивы в gsoap, учитывая соответствие WSDL и производительность - PullRequest
2 голосов
/ 08 апреля 2009

Я использую gsoap для генерации синтаксического анализатора XML SOAP и грамматики WSDL, и мне было интересно, каков рекомендуемый способ выражения статического массива, который быстро анализируется и генерирует соответствующий WSDL, который проходит все проверочные тесты (например, Eclipse WSDL Validator или NetBeans Validate XML).

Если я использую этот ввод в gsoap:

struct ns__ArrayOfSomeInts { xsd__int ints[10]; };

Я получаю этот результирующий WSDL (в пределах тегов определения / типов / схемы):

  <complexType name="ArrayOfSomeInts">
   <sequence>
     <element name="ints" type="ns:Array10Ofxsd__int" minOccurs="1" maxOccurs="1" nillable="true"/>
   </sequence>
  </complexType>
  <complexType name="Array10Ofxsd__int">
   <complexContent>
    <restriction base="SOAP-ENC:Array">
     <attribute ref="SOAP-ENC:arrayType" WSDL:arrayType="xsd:int[]"/>
    </restriction>
   </complexContent>
  </complexType>

Выполнение этого через NetBeans «Проверка XML» выдает эту ошибку:

  • ОШИБКА: src-resol: Не удается разрешить имя 'SOAP-ENC: Array' в (n) компонент "определение типа".

Валидатор Eclipse WSDL выдает следующие две ошибки:

  • WS-I: (BP2108) Объявление Array использует - ограничивает или расширяет - тип soapenc: Array или атрибут wsdl: arrayType используется в объявлении типа.
  • WS-I: (BP2122) Элемент wsdl: types содержит определение типа данных, которое не является определением схемы XML.

Я могу устранить эти ошибки, изменив код gsoap для определения динамического массива следующим образом:

struct ns__ArrayOfSomeInts { int __size; xsd__int *ints; };

(с соответствующим WSDL:)

  <complexType name="ArrayOfSomeInts">
   <sequence>
     <element name="ints" type="xsd:int" minOccurs="0" maxOccurs="unbounded"/>
   </sequence>
  </complexType>

Но теперь я потерял прирост производительности при использовании статического массива. Есть ли другой способ сохранить производительность при соблюдении нормативных требований?

...