How to create arrayType for WSDL in Python (using suds)?

后端 未结 3 759

Environment:

  • Python v2.6.2
  • suds v0.3.7

The WSDL (server) I work with, have the following schema sub-sections (I tried to w

相关标签:
3条回答
  • 2021-02-04 19:28

    I'm in the same case, with a RPC/encoded style WS and a method that contains a soap array. a print request (where request = client.factory.create('Request')) gives:

    (Request){
      requestid = None
      option = 
        (ArrayOfOption){
         _arrayType = ""
         _offset = ""
         _id = ""
         _href = ""
         _arrayType = ""
      }
     }
    

    The solution given by Jacques (1request.option.append(option1)1) does not work, as it ends with an error message ArrayOfOption instance has no attribute append.

    The solution given by mcauth looks like this:

    array = client.factory.create('ArrayOfOption')
    array.item = [option1,  option2,  option3,  option4,  option5,  option6]
    request.option=array
    

    It works so so, as the resulting SOAP message shows no arrayType attribute:

    <option xsi:type="ns3:ArrayOfOption">
    

    The best solution I found is also the simplest:

    request.option = [option1,  option2,  option3,  option4,  option5,  option6]
    

    It ends with a good SOAP message:

    <option xsi:type="ns0:ArrayOfOption" ns3:arrayType="ns0:Option[6]">
    

    as expected by the server side WS.

    0 讨论(0)
  • 2021-02-04 19:35

    For this type of structure I set an attribute called 'item' on the array object and then append the list member to it. Something like:

    itineraryArray = self.client.factory.create('itineraryArray')
    itineraryArray.item = [itinerary0]
    

    Which parses and passes in fine, even for complex calls with multiple levels.

    0 讨论(0)
  • 2021-02-04 19:36

    I believe what you are looking for is:

    itinerary0 = self.client.factory.create('itinerary')
    itineraryArray = self.client.factory.create('itineraryArray')
    print itineraryArray
    itineraryArray.itinerary.append(itinerary0)
    

    Just had to do this myself;) What helped me find it was printing to the console. That would have probably given you the following:

     (itineraryArray){
       itinerary[] = <empty>
     }
    

    Cheers,Jacques

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