2011-02-28 2 views
0

Suds에 문제가있어이 기능을 어떻게 사용하는지 알 수 없습니다. webservice를 호출하려고하는데이 서비스는 하나의 복합 유형을 인수 (ShippingGuideRequestType)로 사용합니다. 내 pdb 세션을 게시하고 이 무슨 일이 일어나는지 설명하려고합니다. 표시되는 'request'변수는 ShippingGuideRequestType 유형이고 이며 client.factory.create ("ShippingGuideRequestType")를 사용하여 생성됩니다.Suds를 사용하여 Python SOAP에 문제가 발생했습니다.

(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 속성을 살펴 보겠습니다.

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

의이 client.factory.create ("ProductIdsType")를 사용하여 생성 된 ProductIds 처리하도록 :

(Pdb) productsInput 
(ProductIdsType){ 
    ProductId[] = 
     "SERVICEPAKKE", 
} 
을 이것은 client.factory.create에게 ("UserInformationType")를 사용하여 만들어집니다

마지막으로 필요한 속성은 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) 
:

답변

관련 문제