簡體   English   中英

使用Suds的Python SOAP遇到問題

[英]Having problems with Python SOAP using Suds

我在使用Suds時遇到問題,無法弄清楚是什么使它表現得如此。 我正在嘗試調用Web服務,並且該服務將一種復雜類型作為參數(ShippingGuideRequestType)。 我將發布我的pdb會話並嘗試解釋發生了什么。 您看到的'request'變量的類型為ShippingGuideRequestType,並使用client.factory.create(“ ShippingGuideRequestType”)創建。

(Pdb) request
(ShippingGuideRequestType){
   UserInformation = 
      (UserInformationType){
         Usercode = None
      }
   RequestProperties = 
      (RequestPropertiesType){
         SchemaVersion = None
         Language = None
         WithPrice = None
         WithExpectedDelivery = None
         WithGuiInformation = None
         NumberOfAlternativeDeliveryDates = None
         EDI = None
         PostingAtPostoffice = None
         Trace = None
      }
   ProductIds = 
      (ProductIdsType){
         ProductId[] = <empty>
      }
   Consignment = 
      (ConsignmentInputType){
         FromCountryCode = None
         FromPostalCode = None
         ToCountryCode = None
         ToPostalCode = None
         ShippingDate = 
            (DateAndTimeType){
               Year = None
               Month = None
               Day = None
               Hour = None
               Minute = None
            }
         EarlyCollectionAtTerminal = None
         AdditionalServices = 
            (AdditionalServicesInputType){
               AdditionalService[] = <empty>
            }
      }
   Packages = 
      (PackagesInputType){
         Package[] = <empty>
      }
 }

ShippingGuideRequestType看起來不錯,現在讓我們嘗試用數據填充必填字段。 首先讓我們處理UserInformation屬性。 這是使用client.factory.create(“ UserInformationType”)創建的:

(Pdb) userInformation
(UserInformationType){
   Usercode = "-CENCORED-"
 }

現在,讓我們處理使用client.factory.create(“ ProductIdsType”)創建的ProductIds:

(Pdb) productsInput
(ProductIdsType){
   ProductId[] = 
      "SERVICEPAKKE",
 }

最后一個必需的屬性是PackagesInputType,它是用更復雜的方式創建的。 首先,我創建PackagesInputType,然后創建一個PackageInputType數組(使用client.factory.create(“ PackageInputType”))。

(Pdb) packagesInput
(PackagesInputType){
   Package[] = 
      (PackageInputType){
         Height = 
            (UnitCodeLengthType){
               value = 10
               _unitCode = "CMT"
            }
         Width = 
            (UnitCodeLengthType){
               value = 10
               _unitCode = "CMT"
            }
         Length = 
            (UnitCodeLengthType){
               value = 10
               _unitCode = "CMT"
            }
         GrossWeight = 
            (UnitCodeWeightType){
               value = 1000
               _unitCode = "GRM"
            }
         Volume = 
            (UnitCodeCubicType){
               value = None
               _unitCode = "DMQ"
            }
         VolumeSpecial = None
         FromCountryCode = None
         FromPostalCode = "7800"
         ToCountryCode = None
         ToPostalCode = "7041"
         ShippingDate = 
            (DateAndTimeType){
               Year = None
               Month = None
               Day = None
               Hour = None
               Minute = None
            }
         AdditionalServices = 
            (AdditionalServicesInputType){
               AdditionalService[] = <empty>
            }
         EarlyCollectionAtTerminal = None
         _packageId = "myRef"
      },
 }
(Pdb) request.UserInformation = userInformation
(Pdb) request.ProductIds = productsInput
(Pdb) request.Packages = packagesInput
(Pdb) request
(ShippingGuideRequestType){
   UserInformation = 
      (UserInformationType){
         Usercode = "-CENCORED"
      }
   RequestProperties = 
      (RequestPropertiesType){
         SchemaVersion = None
         Language = None
         WithPrice = None
         WithExpectedDelivery = None
         WithGuiInformation = None
         NumberOfAlternativeDeliveryDates = None
         EDI = None
         PostingAtPostoffice = None
         Trace = None
      }
   ProductIds = 
      (ProductIdsType){
         ProductId[] = 
            "SERVICEPAKKE",
      }
   Consignment = 
      (ConsignmentInputType){
         FromCountryCode = None
         FromPostalCode = None
         ToCountryCode = None
         ToPostalCode = None
         ShippingDate = 
            (DateAndTimeType){
               Year = None
               Month = None
               Day = None
               Hour = None
               Minute = None
            }
         EarlyCollectionAtTerminal = None
         AdditionalServices = 
            (AdditionalServicesInputType){
               AdditionalService[] = <empty>
            }
      }
   Packages = 
      (PackagesInputType){
         Package[] = 
            (PackageInputType){
               Height = 
                  (UnitCodeLengthType){
                     value = 10
                     _unitCode = "CMT"
                  }
               Width = 
                  (UnitCodeLengthType){
                     value = 10
                     _unitCode = "CMT"
                  }
               Length = 
                  (UnitCodeLengthType){
                     value = 10
                     _unitCode = "CMT"
                  }
               GrossWeight = 
                  (UnitCodeWeightType){
                     value = 1000
                     _unitCode = "GRM"
                  }
               Volume = 
                  (UnitCodeCubicType){
                     value = None
                     _unitCode = "DMQ"
                  }
               VolumeSpecial = None
               FromCountryCode = None
               FromPostalCode = "7800"
               ToCountryCode = None
               ToPostalCode = "7041"
               ShippingDate = 
                  (DateAndTimeType){
                     Year = None
                     Month = None
                     Day = None
                     Hour = None
                     Minute = None
                  }
               AdditionalServices = 
                  (AdditionalServicesInputType){
                     AdditionalService[] = <empty>
                  }
               EarlyCollectionAtTerminal = None
               _packageId = "myRef"
            },
      }
 }

在我看來,該結構看起來不錯,現在讓我們嘗試調用該服務。

(Pdb) self.client.service.ShippingGuide(request) 
2011-02-28 14:32:37 ERROR suds.client <?xml version="1.0" encoding="UTF-8"?>
<SOAP-ENV:Envelope xmlns:ns0="http://www.bring.no/logistics/shippingguide/1.0" xmlns:ns1="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/">
   <SOAP-ENV:Header/>
   <ns1:Body>
      <ns0:ShippingGuideRequest>
         <ns0:UserInformation>
            <ns0:UserInformation>
               <ns0:Usercode>-CENCORED-</ns0:Usercode>
            </ns0:UserInformation>
            <ns0:RequestProperties>
               <ns0:SchemaVersion/>
            </ns0:RequestProperties>
            <ns0:ProductIds>
               <ns0:ProductId>SERVICEPAKKE</ns0:ProductId>
            </ns0:ProductIds>
            <ns0:Packages>
               <ns0:Package packageId="myRef">
                  <ns0:Height unitCode="CMT">10</ns0:Height>
                  <ns0:Width unitCode="CMT">10</ns0:Width>
                  <ns0:Length unitCode="CMT">10</ns0:Length>
                  <ns0:GrossWeight unitCode="GRM">1000</ns0:GrossWeight>
                  <ns0:Volume unitCode="DMQ"/>
                  <ns0:FromCountryCode/>
                  <ns0:FromPostalCode>7800</ns0:FromPostalCode>
                  <ns0:ToCountryCode/>
                  <ns0:ToPostalCode>7041</ns0:ToPostalCode>
               </ns0:Package>
            </ns0:Packages>
         </ns0:UserInformation>
         <ns0:RequestProperties/>
         <ns0:ProductIds/>
         <ns0:Packages/>
      </ns0:ShippingGuideRequest>
   </ns1:Body>
</SOAP-ENV:Envelope>
*** WebFault: Server raised fault: 'FG_INPUT_003 User information missing from request. [errorId cf19f72b-0795-4f58-8a70-a8c1846ba186]'

這里發生了什么? 為什么所有內容都編碼在UserInformation元素內?

你有沒有嘗試一下:

shipping = client.factory.create("ShippingGuideRequestType")

shipping.UserInformation.UserCode = val1

shipping.RequestProperties.SchemaVersion = val2
shipping.RequestProperties.Language = val3

//Add the rest of the values.

client.service.shippingFunction(shipping)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM