0

我在使用 Suds 时遇到问题,我不知道是什么让它表现得像这样。我正在尝试调用 Web 服务,并且该服务将一种复杂类型作为参数(ShippingGuideRequestType)。我将发布我的 pdb 会话并尝试解释正在发生的事情。您看到的“请求”变量是 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 元素中编码?

4

1 回答 1

0

你试一试:

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)
于 2011-03-30T08:27:25.350 回答