SOAP WSDL Associative Arrays

后端 未结 3 543
温柔的废话
温柔的废话 2021-01-18 02:36

How can I define an associative array in a SOAP wsdl file? This is how I define an array element type so far:


    

        
相关标签:
3条回答
  • 2021-01-18 03:01

    to transfer a php associative array over soap you will need to define following in your wsdl:

    <xsd:complexType name="KeyValueData">
          <xsd:sequence>
            <xsd:element minOccurs="1" maxOccurs="1" name="id" type="string"/>
            <xsd:element minOccurs="1" maxOccurs="1" name="name" type="string"/>
            <xsd:element minOccurs="1" maxOccurs="1" name="data" type="string"/>
          </xsd:sequence>
    </xsd:complexType>
    <xsd:complexType name="ArrayOfKeyValueData">
        <xsd:sequence>
          <xsd:element minOccurs="0" maxOccurs="unbounded"
                   name="keyval" type="tns:KeyValueData"/>
        </xsd:sequence>
    </xsd:complexType> 
    

    now specify your new defined ArrayOfKeyValueData type as the type of your result or as parameter

    <message name='getPostStatsResponse'>
      <part name='Result' type='ArrayOfKeyValueData'/>
    </message>
    

    and specify your operation with someting like

    <operation name='getPostStats'>
        <input message='tns:getPostStatsRequest'/>
        <output message='tns:getPostStatsResponse'/>
    </operation>
    

    this will work fine with some kind of web service written in php that returns something like

    return array("k1" => "v1", "k2" => "v2");
    

    if you are using php as client, you will get exactly the same array on the client side. other languges or soap libraries may produce other structure, as not every language has this kind of "associative array" concept.

    0 讨论(0)
  • 2021-01-18 03:07

    WSDL cannot describe the associative nature of an associative array. The best you could do would be to define an array of name/value.

    Can you define a PHP service with an operation that returns an associative array, then see what WSDL that produces? You could then follow the same pattern in your own, hand-written WSDLs.

    0 讨论(0)
  • 2021-01-18 03:18

    If you want to use an array of strings you may just declare in the type that needs the array:

    <xs:complexType name="SomeTypeThatUsesAnArrayOfStrings">
        <xs:sequence>
            <xs:element name="TheStringValue" type="xs:string" minOccurs="0" maxOccurs="unbounded"/>
        </xs:sequence>
    </xs:complexType>
    

    And by the way, what do you mean with "associative array"? something like a c++ map or a python dictionary?

    0 讨论(0)
提交回复
热议问题