私は gsoap を使用して XML SOAP パーサーと WSDL 文法を生成していますが、解析が高速で、すべての検証テスト (Eclipse WSDL Validator など) に合格する対応する WSDL を生成する静的配列を表現するための推奨される方法を知りたいまたは NetBeans Validate XML)。
この入力を gsoap に使用すると、次のようになります。
struct ns__ArrayOfSomeInts { xsd__int ints[10]; };
この結果の WSDL を取得します (definitions/types/schema タグ内):
<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 の「Validate XML」で実行すると、次のエラーが発生します。
- エラー: src-resolve: 名前 'SOAP-ENC:Array' を (n) 'type definition' コンポーネントに解決できません。
Eclipse WSDL Validator は、次の 2 つのエラーを返します。
- 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>
しかし、静的配列を使用することによるパフォーマンスの向上を失ってしまいました。コンプライアンスを維持しながらパフォーマンスを維持する別の方法はありますか?