wsdlでphp soapServer/soapClientクラスを使用してWebサービスを作成しています。アイテムのリストを返すサービスがいくつかあります。サービスは次のようなものを返します。
<SOAP-ENV:Envelope ...>
<SOAP-ENV:Body>
<ns1:getTransactionsResponse>
<return xsi:type="ns2:Map">
<item>
<key xsi:type="xsd:string">result</key>
<value SOAP-ENC:arrayType="ns2:Map[65]" xsi:type="SOAP-ENC:Array">
<item xsi:type="ns2:Map">
<item>
<key xsi:type="xsd:string">id</key>
<value xsi:type="xsd:int">283</value>
</item>
<item>
...
</item>
...
</item>
</item>
</return>
</ns1:getItemsResponse>
</SOAP-ENV:Body>
</SOAP-ENV:Envelope>
しかし、属性名ですべての要素に名前を付ける必要があります。だから、このようなもの:
<result>
<item>
<attr1>value1</attr1>
<attr2>value2</attr2>
....
</item>
<item>
...
</item>
</result>
返される配列の構造は次のとおりです。
'result' => array
0 => array
'attr1' => 'value1'
'attr2' => 'value2'
...
1 => array
...
...
私の WSDLを編集します。
<types>
<xsd:schema xmlns="http://www.w3.org/2001/XMLSchema" targetNamespace="urn:XYZ">
<xsd:complexType name="Properties">
<xsd:sequence>
<xsd:element name="attr1" type="xsd:int"/>
<xsd:element name="attr2" type="xsd:string"/>
...
</xsd:sequence>
</xsd:complexType>
<xsd:element name="transactionsResponse">
<xsd:complexType>
<xsd:sequence>
<xsd:element maxOccurs="unbounded" minOccurs="0" name="result" nillable="true" type="tns:Properties"/>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
</types>
<message name="getTransactionsResponse">
<part name="parameters" type="tns:transactionsResponse" />
</message>
ポートタイプ:
<operation name="getTransactions">
<input message="tns:getTransactionsRequest" />
<output message="tns:getransactionsResponse" />
</operation>
バインディング:
<operation name="getVirtualTransactions">
<soap:operation soapAction="urn:getTransactionsAction" />
<input>
<soap:body use="encoded" namespace="urn:XYZ" encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" />
</input>
<output>
<soap:body use="encoded" namespace="urn:XYZ" encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" />
</output>
</operation>
グーグルが悪いかどうかはわかりませんが、解決策が見つかりませんでした。したがって、簡単な例、チュートリアルまたはドキュメントへのリンク、wsdl がどのように見えるかを教えていただければ幸いです。または、アレイの穴構造を変更する必要がありますか? サーバー側でアイテムの配列として応答を準備する方法とその wsdl 定義のベスト プラクティスを探しています。