Я использую 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>
Но теперь я потерял прирост производительности при использовании статического массива. Есть ли другой способ сохранить производительность при соблюдении нормативных требований?