Reputation: 10764
I am using zeep to call a SOAP webservice. It is throwing an error even if the method exists in the WSDL
client = Client(self.const.soap_url)
client.service.getPlansDetails(id)
I get this error
AttributeError: Service has no operation 'getPlansDetails'
Here is the information from the python -m zeep <wsd_url>
Prefixes:
xsd: http://www.w3.org/2001/XMLSchema
ns0: http://tempuri.org/Imports
ns1: http://tempuri.org
ns2: http://schemas.datacontract.org/2004/07/Dynamics.Ax.Application
ns3: http://schemas.datacontract.org/2004/07/Microsoft.Dynamics.Ax.Xpp
ns4: http://schemas.microsoft.com/dynamics/2010/01/datacontracts
ns5: http://schemas.microsoft.com/2003/10/Serialization/Arrays
ns6: http://schemas.microsoft.com/dynamics/2008/01/documents/Fault
ns7: http://schemas.datacontract.org/2004/07/Microsoft.Dynamics.AX.Framework.Services
ns8: http://schemas.microsoft.com/2003/10/Serialization/
Global elements:
ns2:LFCPaymentPlanDetailsContract(ns2:LFCPaymentPlanDetailsContract)
ns7:ArrayOfInfologMessage(ns7:ArrayOfInfologMessage)
ns7:InfologMessage(ns7:InfologMessage)
ns7:InfologMessageType(ns7:InfologMessageType)
ns3:XppObjectBase(ns3:XppObjectBase)
ns5:ArrayOfKeyValueOfstringstring(ns5:ArrayOfKeyValueOfstringstring)
ns8:QName(xsd:QName)
ns8:anyType(None)
ns8:anyURI(xsd:anyURI)
ns8:base64Binary(xsd:base64Binary)
ns8:boolean(xsd:boolean)
ns8:byte(xsd:byte)
ns8:char(ns8:char)
ns8:dateTime(xsd:dateTime)
ns8:decimal(xsd:decimal)
ns8:double(xsd:double)
ns8:duration(ns8:duration)
ns8:float(xsd:float)
ns8:guid(ns8:guid)
ns8:int(xsd:int)
ns8:long(xsd:long)
ns8:short(xsd:short)
ns8:string(xsd:string)
ns8:unsignedByte(xsd:unsignedByte)
ns8:unsignedInt(xsd:unsignedInt)
ns8:unsignedLong(xsd:unsignedLong)
ns8:unsignedShort(xsd:unsignedShort)
ns6:AifFault(ns6:AifFault)
ns6:ArrayOfFaultMessage(ns6:ArrayOfFaultMessage)
ns6:ArrayOfFaultMessageList(ns6:ArrayOfFaultMessageList)
ns6:FaultMessage(ns6:FaultMessage)
ns6:FaultMessageList(ns6:FaultMessageList)
ns4:CallContext(ns4:CallContext)
ns1:LFCPaymentPlanDetailsServicesGetPlansDetailsRequest(_crmno: xsd:string)
ns1:LFCPaymentPlanDetailsServicesGetPlansDetailsResponse(response: ns2:LFCPaymentPlanDetailsContract)
Global types:
xsd:anyType
ns2:LFCPaymentPlanDetailsContract(Amount: xsd:decimal, CRMNumber: xsd:string, CustomerName: xsd:string, CustomerRequestedType: xsd:string, ErrorMessage: xsd:string, OrderId: xsd:long, PlanType: xsd:string)
ns7:ArrayOfInfologMessage(InfologMessage: ns7:InfologMessage[])
ns7:InfologMessage(InfologMessageType: ns7:InfologMessageType, Message: xsd:string)
ns7:InfologMessageType
ns3:XppObjectBase()
ns5:ArrayOfKeyValueOfstringstring(KeyValueOfstringstring: {Key: xsd:string, Value: xsd:string}[])
ns8:char
ns8:duration
ns8:guid
ns6:AifFault(CustomDetailXml: xsd:string, FaultMessageListArray: ns6:ArrayOfFaultMessageList, InfologMessageList: ns7:ArrayOfInfologMessage, StackTrace: xsd:string, XppExceptionType: xsd:int)
ns6:ArrayOfFaultMessage(FaultMessage: ns6:FaultMessage[])
ns6:ArrayOfFaultMessageList(FaultMessageList: ns6:FaultMessageList[])
ns6:FaultMessage(Code: xsd:string, Message: xsd:string)
ns6:FaultMessageList(Document: xsd:string, DocumentOperation: xsd:string, FaultMessageArray: ns6:ArrayOfFaultMessage, Field: xsd:string, Service: xsd:string, ServiceOperation: xsd:string, ServiceOperationParameter: xsd:string, XPath: xsd:string, XmlLine: xsd:string, XmlPosition: xsd:string)
ns4:CallContext(Company: xsd:string, Language: xsd:string, LogonAsUser: xsd:string, MessageId: xsd:string, PartitionKey: xsd:string, PropertyBag: ns5:ArrayOfKeyValueOfstringstring)
xsd:ENTITIES
xsd:ENTITY
xsd:ID
xsd:IDREF
xsd:IDREFS
xsd:NCName
xsd:NMTOKEN
xsd:NMTOKENS
xsd:NOTATION
xsd:Name
xsd:QName
xsd:anySimpleType
xsd:anyURI
xsd:base64Binary
xsd:boolean
xsd:byte
xsd:date
xsd:dateTime
xsd:decimal
xsd:double
xsd:duration
xsd:float
xsd:gDay
xsd:gMonth
xsd:gMonthDay
xsd:gYear
xsd:gYearMonth
xsd:hexBinary
xsd:int
xsd:integer
xsd:language
xsd:long
xsd:negativeInteger
xsd:nonNegativeInteger
xsd:nonPositiveInteger
xsd:normalizedString
xsd:positiveInteger
xsd:short
xsd:string
xsd:time
xsd:token
xsd:unsignedByte
xsd:unsignedInt
xsd:unsignedLong
xsd:unsignedShort
Bindings:
Soap11Binding: {http://tempuri.org/}BasicHttpBinding_LFCPaymentPlanDetailsServices
Soap11Binding: {http://tempuri.org/}serviceEndpoint
Service: RoutingService
Port: serviceEndpoint (Soap11Binding: {http://tempuri.org/}serviceEndpoint)
Operations:
Port: BasicHttpBinding_LFCPaymentPlanDetailsServices (Soap11Binding: {http://tempuri.org/}BasicHttpBinding_LFCPaymentPlanDetailsServices)
Operations:
getPlansDetails(_crmno: xsd:string, _soapheaders={context: ns4:CallContext}) -> response: ns2:LFCPaymentPlanDetailsContract
Upvotes: 6
Views: 2080
Reputation: 1461
The reason why it's giving that error is because by default, zeep
binds to 1st service and 1st port. But in your case you are trying to call method from 2nd port. So this should work:
client = Client(self.const.soap_url)
plan_client = client.bind('RoutingService', 'BasicHttpBinding_LFCPaymentPlanDetailsServices')
plan_client.service.getPlansDetails(id)
Let us know if it doesn't work.
Upvotes: 5