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)
: